Skip to content

Commit 29bb7f7

Browse files
committed
[RISCV] Add test coverage for profitable vsetvli a0, zero, <vtype> cases
Test coverage for an upcoming change, we can avoid generating an immediate in register if we know the immediate is equal to vlmax.
1 parent c5b3b5e commit 29bb7f7

File tree

3 files changed

+146
-0
lines changed

3 files changed

+146
-0
lines changed

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-load.ll

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,56 @@ define <6 x i1> @load_v6i1(ptr %p) {
135135
%x = load <6 x i1>, ptr %p
136136
ret <6 x i1> %x
137137
}
138+
139+
140+
define <4 x i32> @exact_vlen_i32_m1(ptr %p) vscale_range(2,2) {
141+
; CHECK-LABEL: exact_vlen_i32_m1:
142+
; CHECK: # %bb.0:
143+
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
144+
; CHECK-NEXT: vle32.v v8, (a0)
145+
; CHECK-NEXT: ret
146+
%v = load <4 x i32>, ptr %p
147+
ret <4 x i32> %v
148+
}
149+
150+
define <16 x i8> @exact_vlen_i8_m1(ptr %p) vscale_range(2,2) {
151+
; CHECK-LABEL: exact_vlen_i8_m1:
152+
; CHECK: # %bb.0:
153+
; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
154+
; CHECK-NEXT: vle8.v v8, (a0)
155+
; CHECK-NEXT: ret
156+
%v = load <16 x i8>, ptr %p
157+
ret <16 x i8> %v
158+
}
159+
160+
define <32 x i8> @exact_vlen_i8_m2(ptr %p) vscale_range(2,2) {
161+
; CHECK-LABEL: exact_vlen_i8_m2:
162+
; CHECK: # %bb.0:
163+
; CHECK-NEXT: li a1, 32
164+
; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
165+
; CHECK-NEXT: vle8.v v8, (a0)
166+
; CHECK-NEXT: ret
167+
%v = load <32 x i8>, ptr %p
168+
ret <32 x i8> %v
169+
}
170+
171+
define <128 x i8> @exact_vlen_i8_m8(ptr %p) vscale_range(2,2) {
172+
; CHECK-LABEL: exact_vlen_i8_m8:
173+
; CHECK: # %bb.0:
174+
; CHECK-NEXT: li a1, 128
175+
; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
176+
; CHECK-NEXT: vle8.v v8, (a0)
177+
; CHECK-NEXT: ret
178+
%v = load <128 x i8>, ptr %p
179+
ret <128 x i8> %v
180+
}
181+
182+
define <16 x i64> @exact_vlen_i64_m8(ptr %p) vscale_range(2,2) {
183+
; CHECK-LABEL: exact_vlen_i64_m8:
184+
; CHECK: # %bb.0:
185+
; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, ma
186+
; CHECK-NEXT: vle64.v v8, (a0)
187+
; CHECK-NEXT: ret
188+
%v = load <16 x i64>, ptr %p
189+
ret <16 x i64> %v
190+
}

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-store.ll

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,65 @@ define void @store_constant_v2i8_volatile(ptr %p) {
237237
store volatile <2 x i8> <i8 1, i8 1>, ptr %p
238238
ret void
239239
}
240+
241+
242+
define void @exact_vlen_i32_m1(ptr %p) vscale_range(2,2) {
243+
; CHECK-LABEL: exact_vlen_i32_m1:
244+
; CHECK: # %bb.0:
245+
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
246+
; CHECK-NEXT: vmv.v.i v8, 0
247+
; CHECK-NEXT: vse32.v v8, (a0)
248+
; CHECK-NEXT: ret
249+
store <4 x i32> zeroinitializer, ptr %p
250+
ret void
251+
}
252+
253+
define void @exact_vlen_i8_m1(ptr %p) vscale_range(2,2) {
254+
; CHECK-LABEL: exact_vlen_i8_m1:
255+
; CHECK: # %bb.0:
256+
; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
257+
; CHECK-NEXT: vmv.v.i v8, 0
258+
; CHECK-NEXT: vse8.v v8, (a0)
259+
; CHECK-NEXT: ret
260+
store <16 x i8> zeroinitializer, ptr %p
261+
ret void
262+
}
263+
264+
define void @exact_vlen_i8_m2(ptr %p) vscale_range(2,2) {
265+
; CHECK-LABEL: exact_vlen_i8_m2:
266+
; CHECK: # %bb.0:
267+
; CHECK-NEXT: li a1, 32
268+
; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
269+
; CHECK-NEXT: vmv.v.i v8, 0
270+
; CHECK-NEXT: vse8.v v8, (a0)
271+
; CHECK-NEXT: ret
272+
store <32 x i8> zeroinitializer, ptr %p
273+
ret void
274+
}
275+
276+
define void @exact_vlen_i8_m8(ptr %p) vscale_range(2,2) {
277+
; CHECK-LABEL: exact_vlen_i8_m8:
278+
; CHECK: # %bb.0:
279+
; CHECK-NEXT: li a1, 128
280+
; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
281+
; CHECK-NEXT: vmv.v.i v8, 0
282+
; CHECK-NEXT: vse8.v v8, (a0)
283+
; CHECK-NEXT: ret
284+
store <128 x i8> zeroinitializer, ptr %p
285+
ret void
286+
}
287+
288+
define void @exact_vlen_i64_m8(ptr %p) vscale_range(2,2) {
289+
; CHECK-LABEL: exact_vlen_i64_m8:
290+
; CHECK: # %bb.0:
291+
; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, ma
292+
; CHECK-NEXT: vmv.v.i v8, 0
293+
; CHECK-NEXT: vse64.v v8, (a0)
294+
; CHECK-NEXT: ret
295+
store <16 x i64> zeroinitializer, ptr %p
296+
ret void
297+
}
298+
240299
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
241300
; RV32: {{.*}}
242301
; RV64: {{.*}}

llvm/test/CodeGen/RISCV/rvv/vsetvli-insert.ll

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,40 @@ bb:
594594
ret i64 %tmp2
595595
}
596596

597+
598+
define void @add_v128i8(ptr %x, ptr %y) vscale_range(2,2) {
599+
; CHECK-LABEL: add_v128i8:
600+
; CHECK: # %bb.0:
601+
; CHECK-NEXT: li a2, 128
602+
; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma
603+
; CHECK-NEXT: vle8.v v8, (a0)
604+
; CHECK-NEXT: vle8.v v16, (a1)
605+
; CHECK-NEXT: vadd.vv v8, v8, v16
606+
; CHECK-NEXT: vse8.v v8, (a0)
607+
; CHECK-NEXT: ret
608+
%a = load <128 x i8>, ptr %x
609+
%b = load <128 x i8>, ptr %y
610+
%c = add <128 x i8> %a, %b
611+
store <128 x i8> %c, ptr %x
612+
ret void
613+
}
614+
615+
define void @add_v16i64(ptr %x, ptr %y) vscale_range(2,2) {
616+
; CHECK-LABEL: add_v16i64:
617+
; CHECK: # %bb.0:
618+
; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, ma
619+
; CHECK-NEXT: vle64.v v8, (a0)
620+
; CHECK-NEXT: vle64.v v16, (a1)
621+
; CHECK-NEXT: vadd.vv v8, v8, v16
622+
; CHECK-NEXT: vse64.v v8, (a0)
623+
; CHECK-NEXT: ret
624+
%a = load <16 x i64>, ptr %x
625+
%b = load <16 x i64>, ptr %y
626+
%c = add <16 x i64> %a, %b
627+
store <16 x i64> %c, ptr %x
628+
ret void
629+
}
630+
597631
declare <vscale x 1 x i64> @llvm.riscv.vadd.mask.nxv1i64.nxv1i64(
598632
<vscale x 1 x i64>,
599633
<vscale x 1 x i64>,

0 commit comments

Comments
 (0)