Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-trunc-vp.ll
blob34b0789d801a3c23f0691f28360a05d624d42702
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v,+m -verify-machineinstrs < %s | FileCheck %s
3 ; RUN: llc -mtriple=riscv64 -mattr=+v,+m -verify-machineinstrs < %s | FileCheck %s
5 declare <2 x i7> @llvm.vp.trunc.v2i7.v2i16(<2 x i16>, <2 x i1>, i32)
7 define <2 x i7> @vtrunc_v2i7_v2i16(<2 x i16> %a, <2 x i1> %m, i32 zeroext %vl) {
8 ; CHECK-LABEL: vtrunc_v2i7_v2i16:
9 ; CHECK:       # %bb.0:
10 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
11 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0, v0.t
12 ; CHECK-NEXT:    ret
13   %v = call <2 x i7> @llvm.vp.trunc.v2i7.v2i16(<2 x i16> %a, <2 x i1> %m, i32 %vl)
14   ret <2 x i7> %v
17 declare <2 x i8> @llvm.vp.trunc.v2i8.v2i15(<2 x i15>, <2 x i1>, i32)
19 define <2 x i8> @vtrunc_v2i8_v2i15(<2 x i15> %a, <2 x i1> %m, i32 zeroext %vl) {
20 ; CHECK-LABEL: vtrunc_v2i8_v2i15:
21 ; CHECK:       # %bb.0:
22 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
23 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0, v0.t
24 ; CHECK-NEXT:    ret
25   %v = call <2 x i8> @llvm.vp.trunc.v2i8.v2i15(<2 x i15> %a, <2 x i1> %m, i32 %vl)
26   ret <2 x i8> %v
29 declare <2 x i8> @llvm.vp.trunc.v2i8.v2i16(<2 x i16>, <2 x i1>, i32)
31 define <2 x i8> @vtrunc_v2i8_v2i16(<2 x i16> %a, <2 x i1> %m, i32 zeroext %vl) {
32 ; CHECK-LABEL: vtrunc_v2i8_v2i16:
33 ; CHECK:       # %bb.0:
34 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
35 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0, v0.t
36 ; CHECK-NEXT:    ret
37   %v = call <2 x i8> @llvm.vp.trunc.v2i8.v2i16(<2 x i16> %a, <2 x i1> %m, i32 %vl)
38   ret <2 x i8> %v
41 define <2 x i8> @vtrunc_v2i8_v2i16_unmasked(<2 x i16> %a, i32 zeroext %vl) {
42 ; CHECK-LABEL: vtrunc_v2i8_v2i16_unmasked:
43 ; CHECK:       # %bb.0:
44 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
45 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
46 ; CHECK-NEXT:    ret
47   %v = call <2 x i8> @llvm.vp.trunc.v2i8.v2i16(<2 x i16> %a, <2 x i1> <i1 true, i1 true>, i32 %vl)
48   ret <2 x i8> %v
51 declare <128 x i7> @llvm.vp.trunc.v128i7.v128i16(<128 x i16>, <128 x i1>, i32)
53 define <128 x i7> @vtrunc_v128i7_v128i16(<128 x i16> %a, <128 x i1> %m, i32 zeroext %vl) {
54 ; CHECK-LABEL: vtrunc_v128i7_v128i16:
55 ; CHECK:       # %bb.0:
56 ; CHECK-NEXT:    vmv8r.v v24, v8
57 ; CHECK-NEXT:    vsetivli zero, 8, e8, m1, ta, ma
58 ; CHECK-NEXT:    li a1, 64
59 ; CHECK-NEXT:    vslidedown.vi v12, v0, 8
60 ; CHECK-NEXT:    mv a2, a0
61 ; CHECK-NEXT:    bltu a0, a1, .LBB4_2
62 ; CHECK-NEXT:  # %bb.1:
63 ; CHECK-NEXT:    li a2, 64
64 ; CHECK-NEXT:  .LBB4_2:
65 ; CHECK-NEXT:    vsetvli zero, a2, e8, m4, ta, ma
66 ; CHECK-NEXT:    vnsrl.wi v8, v24, 0, v0.t
67 ; CHECK-NEXT:    addi a2, a0, -64
68 ; CHECK-NEXT:    sltu a0, a0, a2
69 ; CHECK-NEXT:    addi a0, a0, -1
70 ; CHECK-NEXT:    and a0, a0, a2
71 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
72 ; CHECK-NEXT:    vmv1r.v v0, v12
73 ; CHECK-NEXT:    vnsrl.wi v24, v16, 0, v0.t
74 ; CHECK-NEXT:    li a0, 128
75 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
76 ; CHECK-NEXT:    vslideup.vx v8, v24, a1
77 ; CHECK-NEXT:    ret
78   %v = call <128 x i7> @llvm.vp.trunc.v128i7.v128i16(<128 x i16> %a, <128 x i1> %m, i32 %vl)
79   ret <128 x i7> %v
82 declare <2 x i8> @llvm.vp.trunc.v2i8.v2i32(<2 x i32>, <2 x i1>, i32)
84 define <2 x i8> @vtrunc_v2i8_v2i32(<2 x i32> %a, <2 x i1> %m, i32 zeroext %vl) {
85 ; CHECK-LABEL: vtrunc_v2i8_v2i32:
86 ; CHECK:       # %bb.0:
87 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
88 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0, v0.t
89 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
90 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0, v0.t
91 ; CHECK-NEXT:    ret
92   %v = call <2 x i8> @llvm.vp.trunc.v2i8.v2i32(<2 x i32> %a, <2 x i1> %m, i32 %vl)
93   ret <2 x i8> %v
96 define <2 x i8> @vtrunc_v2i8_v2i32_unmasked(<2 x i32> %a, i32 zeroext %vl) {
97 ; CHECK-LABEL: vtrunc_v2i8_v2i32_unmasked:
98 ; CHECK:       # %bb.0:
99 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
100 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
101 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
102 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
103 ; CHECK-NEXT:    ret
104   %v = call <2 x i8> @llvm.vp.trunc.v2i8.v2i32(<2 x i32> %a, <2 x i1> <i1 true, i1 true>, i32 %vl)
105   ret <2 x i8> %v
108 declare <2 x i8> @llvm.vp.trunc.v2i8.v2i64(<2 x i64>, <2 x i1>, i32)
110 define <2 x i8> @vtrunc_v2i8_v2i64(<2 x i64> %a, <2 x i1> %m, i32 zeroext %vl) {
111 ; CHECK-LABEL: vtrunc_v2i8_v2i64:
112 ; CHECK:       # %bb.0:
113 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
114 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0, v0.t
115 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
116 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0, v0.t
117 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
118 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0, v0.t
119 ; CHECK-NEXT:    ret
120   %v = call <2 x i8> @llvm.vp.trunc.v2i8.v2i64(<2 x i64> %a, <2 x i1> %m, i32 %vl)
121   ret <2 x i8> %v
124 define <2 x i8> @vtrunc_v2i8_v2i64_unmasked(<2 x i64> %a, i32 zeroext %vl) {
125 ; CHECK-LABEL: vtrunc_v2i8_v2i64_unmasked:
126 ; CHECK:       # %bb.0:
127 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
128 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
129 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
130 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
131 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
132 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
133 ; CHECK-NEXT:    ret
134   %v = call <2 x i8> @llvm.vp.trunc.v2i8.v2i64(<2 x i64> %a, <2 x i1> <i1 true, i1 true>, i32 %vl)
135   ret <2 x i8> %v
138 declare <2 x i16> @llvm.vp.trunc.v2i16.v2i32(<2 x i32>, <2 x i1>, i32)
140 define <2 x i16> @vtrunc_v2i16_v2i32(<2 x i32> %a, <2 x i1> %m, i32 zeroext %vl) {
141 ; CHECK-LABEL: vtrunc_v2i16_v2i32:
142 ; CHECK:       # %bb.0:
143 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
144 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0, v0.t
145 ; CHECK-NEXT:    ret
146   %v = call <2 x i16> @llvm.vp.trunc.v2i16.v2i32(<2 x i32> %a, <2 x i1> %m, i32 %vl)
147   ret <2 x i16> %v
150 define <2 x i16> @vtrunc_v2i16_v2i32_unmasked(<2 x i32> %a, i32 zeroext %vl) {
151 ; CHECK-LABEL: vtrunc_v2i16_v2i32_unmasked:
152 ; CHECK:       # %bb.0:
153 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
154 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
155 ; CHECK-NEXT:    ret
156   %v = call <2 x i16> @llvm.vp.trunc.v2i16.v2i32(<2 x i32> %a, <2 x i1> <i1 true, i1 true>, i32 %vl)
157   ret <2 x i16> %v
160 declare <2 x i16> @llvm.vp.trunc.v2i16.v2i64(<2 x i64>, <2 x i1>, i32)
162 define <2 x i16> @vtrunc_v2i16_v2i64(<2 x i64> %a, <2 x i1> %m, i32 zeroext %vl) {
163 ; CHECK-LABEL: vtrunc_v2i16_v2i64:
164 ; CHECK:       # %bb.0:
165 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
166 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0, v0.t
167 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
168 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0, v0.t
169 ; CHECK-NEXT:    ret
170   %v = call <2 x i16> @llvm.vp.trunc.v2i16.v2i64(<2 x i64> %a, <2 x i1> %m, i32 %vl)
171   ret <2 x i16> %v
174 define <2 x i16> @vtrunc_v2i16_v2i64_unmasked(<2 x i64> %a, i32 zeroext %vl) {
175 ; CHECK-LABEL: vtrunc_v2i16_v2i64_unmasked:
176 ; CHECK:       # %bb.0:
177 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
178 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
179 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
180 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
181 ; CHECK-NEXT:    ret
182   %v = call <2 x i16> @llvm.vp.trunc.v2i16.v2i64(<2 x i64> %a, <2 x i1> <i1 true, i1 true>, i32 %vl)
183   ret <2 x i16> %v
186 declare <15 x i16> @llvm.vp.trunc.v15i16.v15i64(<15 x i64>, <15 x i1>, i32)
188 define <15 x i16> @vtrunc_v15i16_v15i64(<15 x i64> %a, <15 x i1> %m, i32 zeroext %vl) {
189 ; CHECK-LABEL: vtrunc_v15i16_v15i64:
190 ; CHECK:       # %bb.0:
191 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
192 ; CHECK-NEXT:    vnsrl.wi v16, v8, 0, v0.t
193 ; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
194 ; CHECK-NEXT:    vnsrl.wi v8, v16, 0, v0.t
195 ; CHECK-NEXT:    ret
196   %v = call <15 x i16> @llvm.vp.trunc.v15i16.v15i64(<15 x i64> %a, <15 x i1> %m, i32 %vl)
197   ret <15 x i16> %v
200 declare <2 x i32> @llvm.vp.trunc.v2i32.v2i64(<2 x i64>, <2 x i1>, i32)
202 define <2 x i32> @vtrunc_v2i32_v2i64(<2 x i64> %a, <2 x i1> %m, i32 zeroext %vl) {
203 ; CHECK-LABEL: vtrunc_v2i32_v2i64:
204 ; CHECK:       # %bb.0:
205 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
206 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0, v0.t
207 ; CHECK-NEXT:    ret
208   %v = call <2 x i32> @llvm.vp.trunc.v2i32.v2i64(<2 x i64> %a, <2 x i1> %m, i32 %vl)
209   ret <2 x i32> %v
212 define <2 x i32> @vtrunc_v2i32_v2i64_unmasked(<2 x i64> %a, i32 zeroext %vl) {
213 ; CHECK-LABEL: vtrunc_v2i32_v2i64_unmasked:
214 ; CHECK:       # %bb.0:
215 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
216 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
217 ; CHECK-NEXT:    ret
218   %v = call <2 x i32> @llvm.vp.trunc.v2i32.v2i64(<2 x i64> %a, <2 x i1> <i1 true, i1 true>, i32 %vl)
219   ret <2 x i32> %v
222 declare <128 x i32> @llvm.vp.trunc.v128i32.v128i64(<128 x i64>, <128 x i1>, i32)
224 define <128 x i32> @vtrunc_v128i32_v128i64(<128 x i64> %a, <128 x i1> %m, i32 zeroext %vl) {
225 ; CHECK-LABEL: vtrunc_v128i32_v128i64:
226 ; CHECK:       # %bb.0:
227 ; CHECK-NEXT:    addi sp, sp, -16
228 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
229 ; CHECK-NEXT:    csrr a2, vlenb
230 ; CHECK-NEXT:    slli a2, a2, 6
231 ; CHECK-NEXT:    sub sp, sp, a2
232 ; CHECK-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0xc0, 0x00, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 64 * vlenb
233 ; CHECK-NEXT:    vmv1r.v v4, v0
234 ; CHECK-NEXT:    csrr a2, vlenb
235 ; CHECK-NEXT:    slli a2, a2, 5
236 ; CHECK-NEXT:    add a2, sp, a2
237 ; CHECK-NEXT:    addi a2, a2, 16
238 ; CHECK-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
239 ; CHECK-NEXT:    csrr a2, vlenb
240 ; CHECK-NEXT:    li a3, 40
241 ; CHECK-NEXT:    mul a2, a2, a3
242 ; CHECK-NEXT:    add a2, sp, a2
243 ; CHECK-NEXT:    addi a2, a2, 16
244 ; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
245 ; CHECK-NEXT:    vsetivli zero, 8, e8, m1, ta, ma
246 ; CHECK-NEXT:    vslidedown.vi v1, v0, 8
247 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
248 ; CHECK-NEXT:    vslidedown.vi v26, v0, 4
249 ; CHECK-NEXT:    addi a2, a1, 512
250 ; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
251 ; CHECK-NEXT:    vle64.v v8, (a2)
252 ; CHECK-NEXT:    csrr a2, vlenb
253 ; CHECK-NEXT:    li a3, 48
254 ; CHECK-NEXT:    mul a2, a2, a3
255 ; CHECK-NEXT:    add a2, sp, a2
256 ; CHECK-NEXT:    addi a2, a2, 16
257 ; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
258 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
259 ; CHECK-NEXT:    vslidedown.vi v27, v1, 4
260 ; CHECK-NEXT:    addi a2, a1, 640
261 ; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
262 ; CHECK-NEXT:    vle64.v v16, (a2)
263 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
264 ; CHECK-NEXT:    addi a2, a7, -64
265 ; CHECK-NEXT:    sltu a3, a7, a2
266 ; CHECK-NEXT:    addi a3, a3, -1
267 ; CHECK-NEXT:    and a4, a3, a2
268 ; CHECK-NEXT:    addi a2, a4, -32
269 ; CHECK-NEXT:    sltu a3, a4, a2
270 ; CHECK-NEXT:    addi a3, a3, -1
271 ; CHECK-NEXT:    and a3, a3, a2
272 ; CHECK-NEXT:    addi a2, a3, -16
273 ; CHECK-NEXT:    sltu a5, a3, a2
274 ; CHECK-NEXT:    addi a5, a5, -1
275 ; CHECK-NEXT:    and a2, a5, a2
276 ; CHECK-NEXT:    vslidedown.vi v0, v27, 2
277 ; CHECK-NEXT:    vsetvli zero, a2, e32, m4, ta, ma
278 ; CHECK-NEXT:    vnsrl.wi v8, v16, 0, v0.t
279 ; CHECK-NEXT:    csrr a2, vlenb
280 ; CHECK-NEXT:    li a5, 24
281 ; CHECK-NEXT:    mul a2, a2, a5
282 ; CHECK-NEXT:    add a2, sp, a2
283 ; CHECK-NEXT:    addi a2, a2, 16
284 ; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
285 ; CHECK-NEXT:    li a2, 16
286 ; CHECK-NEXT:    addi a5, a1, 128
287 ; CHECK-NEXT:    bltu a3, a2, .LBB16_2
288 ; CHECK-NEXT:  # %bb.1:
289 ; CHECK-NEXT:    li a3, 16
290 ; CHECK-NEXT:  .LBB16_2:
291 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
292 ; CHECK-NEXT:    vslidedown.vi v28, v26, 2
293 ; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
294 ; CHECK-NEXT:    vle64.v v8, (a5)
295 ; CHECK-NEXT:    addi a5, sp, 16
296 ; CHECK-NEXT:    vs8r.v v8, (a5) # Unknown-size Folded Spill
297 ; CHECK-NEXT:    vsetvli zero, a3, e32, m4, ta, ma
298 ; CHECK-NEXT:    li a3, 64
299 ; CHECK-NEXT:    vmv1r.v v0, v27
300 ; CHECK-NEXT:    csrr a5, vlenb
301 ; CHECK-NEXT:    li a6, 48
302 ; CHECK-NEXT:    mul a5, a5, a6
303 ; CHECK-NEXT:    add a5, sp, a5
304 ; CHECK-NEXT:    addi a5, a5, 16
305 ; CHECK-NEXT:    vl8r.v v8, (a5) # Unknown-size Folded Reload
306 ; CHECK-NEXT:    vnsrl.wi v16, v8, 0, v0.t
307 ; CHECK-NEXT:    csrr a5, vlenb
308 ; CHECK-NEXT:    li a6, 56
309 ; CHECK-NEXT:    mul a5, a5, a6
310 ; CHECK-NEXT:    add a5, sp, a5
311 ; CHECK-NEXT:    addi a5, a5, 16
312 ; CHECK-NEXT:    vs8r.v v16, (a5) # Unknown-size Folded Spill
313 ; CHECK-NEXT:    bltu a7, a3, .LBB16_4
314 ; CHECK-NEXT:  # %bb.3:
315 ; CHECK-NEXT:    li a7, 64
316 ; CHECK-NEXT:  .LBB16_4:
317 ; CHECK-NEXT:    addi a5, a1, 384
318 ; CHECK-NEXT:    li a3, 32
319 ; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
320 ; CHECK-NEXT:    vle64.v v8, (a1)
321 ; CHECK-NEXT:    csrr a6, vlenb
322 ; CHECK-NEXT:    slli a6, a6, 3
323 ; CHECK-NEXT:    add a6, sp, a6
324 ; CHECK-NEXT:    addi a6, a6, 16
325 ; CHECK-NEXT:    vs8r.v v8, (a6) # Unknown-size Folded Spill
326 ; CHECK-NEXT:    addi a6, a7, -32
327 ; CHECK-NEXT:    sltu t0, a7, a6
328 ; CHECK-NEXT:    addi t0, t0, -1
329 ; CHECK-NEXT:    and a6, t0, a6
330 ; CHECK-NEXT:    addi t0, a6, -16
331 ; CHECK-NEXT:    sltu t1, a6, t0
332 ; CHECK-NEXT:    addi t1, t1, -1
333 ; CHECK-NEXT:    and t0, t1, t0
334 ; CHECK-NEXT:    vsetvli zero, t0, e32, m4, ta, ma
335 ; CHECK-NEXT:    vmv1r.v v0, v28
336 ; CHECK-NEXT:    addi t0, sp, 16
337 ; CHECK-NEXT:    vl8r.v v16, (t0) # Unknown-size Folded Reload
338 ; CHECK-NEXT:    vnsrl.wi v8, v16, 0, v0.t
339 ; CHECK-NEXT:    csrr t0, vlenb
340 ; CHECK-NEXT:    slli t0, t0, 4
341 ; CHECK-NEXT:    add t0, sp, t0
342 ; CHECK-NEXT:    addi t0, t0, 16
343 ; CHECK-NEXT:    vs8r.v v8, (t0) # Unknown-size Folded Spill
344 ; CHECK-NEXT:    bltu a6, a2, .LBB16_6
345 ; CHECK-NEXT:  # %bb.5:
346 ; CHECK-NEXT:    li a6, 16
347 ; CHECK-NEXT:  .LBB16_6:
348 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
349 ; CHECK-NEXT:    vslidedown.vi v20, v1, 2
350 ; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
351 ; CHECK-NEXT:    vle64.v v8, (a5)
352 ; CHECK-NEXT:    addi a1, a1, 256
353 ; CHECK-NEXT:    vsetvli zero, a6, e32, m4, ta, ma
354 ; CHECK-NEXT:    vmv1r.v v0, v26
355 ; CHECK-NEXT:    csrr a5, vlenb
356 ; CHECK-NEXT:    slli a5, a5, 3
357 ; CHECK-NEXT:    add a5, sp, a5
358 ; CHECK-NEXT:    addi a5, a5, 16
359 ; CHECK-NEXT:    vl8r.v v24, (a5) # Unknown-size Folded Reload
360 ; CHECK-NEXT:    vnsrl.wi v16, v24, 0, v0.t
361 ; CHECK-NEXT:    csrr a5, vlenb
362 ; CHECK-NEXT:    li a6, 48
363 ; CHECK-NEXT:    mul a5, a5, a6
364 ; CHECK-NEXT:    add a5, sp, a5
365 ; CHECK-NEXT:    addi a5, a5, 16
366 ; CHECK-NEXT:    vs8r.v v16, (a5) # Unknown-size Folded Spill
367 ; CHECK-NEXT:    bltu a4, a3, .LBB16_8
368 ; CHECK-NEXT:  # %bb.7:
369 ; CHECK-NEXT:    li a4, 32
370 ; CHECK-NEXT:  .LBB16_8:
371 ; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
372 ; CHECK-NEXT:    vle64.v v24, (a1)
373 ; CHECK-NEXT:    addi a1, a4, -16
374 ; CHECK-NEXT:    sltu a5, a4, a1
375 ; CHECK-NEXT:    addi a5, a5, -1
376 ; CHECK-NEXT:    and a1, a5, a1
377 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
378 ; CHECK-NEXT:    vmv1r.v v0, v20
379 ; CHECK-NEXT:    vnsrl.wi v16, v8, 0, v0.t
380 ; CHECK-NEXT:    bltu a4, a2, .LBB16_10
381 ; CHECK-NEXT:  # %bb.9:
382 ; CHECK-NEXT:    li a4, 16
383 ; CHECK-NEXT:  .LBB16_10:
384 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
385 ; CHECK-NEXT:    vslidedown.vi v5, v4, 2
386 ; CHECK-NEXT:    vsetvli zero, a4, e32, m4, ta, ma
387 ; CHECK-NEXT:    vmv1r.v v0, v1
388 ; CHECK-NEXT:    vnsrl.wi v8, v24, 0, v0.t
389 ; CHECK-NEXT:    vmv.v.v v0, v8
390 ; CHECK-NEXT:    bltu a7, a3, .LBB16_12
391 ; CHECK-NEXT:  # %bb.11:
392 ; CHECK-NEXT:    li a7, 32
393 ; CHECK-NEXT:  .LBB16_12:
394 ; CHECK-NEXT:    vsetvli zero, a3, e32, m8, ta, ma
395 ; CHECK-NEXT:    csrr a1, vlenb
396 ; CHECK-NEXT:    li a4, 24
397 ; CHECK-NEXT:    mul a1, a1, a4
398 ; CHECK-NEXT:    add a1, sp, a1
399 ; CHECK-NEXT:    addi a1, a1, 16
400 ; CHECK-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
401 ; CHECK-NEXT:    vmv4r.v v24, v8
402 ; CHECK-NEXT:    csrr a1, vlenb
403 ; CHECK-NEXT:    li a4, 56
404 ; CHECK-NEXT:    mul a1, a1, a4
405 ; CHECK-NEXT:    add a1, sp, a1
406 ; CHECK-NEXT:    addi a1, a1, 16
407 ; CHECK-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
408 ; CHECK-NEXT:    vslideup.vi v8, v24, 16
409 ; CHECK-NEXT:    csrr a1, vlenb
410 ; CHECK-NEXT:    li a4, 56
411 ; CHECK-NEXT:    mul a1, a1, a4
412 ; CHECK-NEXT:    add a1, sp, a1
413 ; CHECK-NEXT:    addi a1, a1, 16
414 ; CHECK-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
415 ; CHECK-NEXT:    csrr a1, vlenb
416 ; CHECK-NEXT:    slli a1, a1, 4
417 ; CHECK-NEXT:    add a1, sp, a1
418 ; CHECK-NEXT:    addi a1, a1, 16
419 ; CHECK-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
420 ; CHECK-NEXT:    vmv4r.v v24, v8
421 ; CHECK-NEXT:    csrr a1, vlenb
422 ; CHECK-NEXT:    li a4, 48
423 ; CHECK-NEXT:    mul a1, a1, a4
424 ; CHECK-NEXT:    add a1, sp, a1
425 ; CHECK-NEXT:    addi a1, a1, 16
426 ; CHECK-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
427 ; CHECK-NEXT:    vslideup.vi v8, v24, 16
428 ; CHECK-NEXT:    csrr a1, vlenb
429 ; CHECK-NEXT:    li a4, 48
430 ; CHECK-NEXT:    mul a1, a1, a4
431 ; CHECK-NEXT:    add a1, sp, a1
432 ; CHECK-NEXT:    addi a1, a1, 16
433 ; CHECK-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
434 ; CHECK-NEXT:    vmv4r.v v8, v0
435 ; CHECK-NEXT:    vslideup.vi v8, v16, 16
436 ; CHECK-NEXT:    csrr a1, vlenb
437 ; CHECK-NEXT:    li a4, 24
438 ; CHECK-NEXT:    mul a1, a1, a4
439 ; CHECK-NEXT:    add a1, sp, a1
440 ; CHECK-NEXT:    addi a1, a1, 16
441 ; CHECK-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
442 ; CHECK-NEXT:    addi a1, a7, -16
443 ; CHECK-NEXT:    sltu a4, a7, a1
444 ; CHECK-NEXT:    addi a4, a4, -1
445 ; CHECK-NEXT:    and a1, a4, a1
446 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
447 ; CHECK-NEXT:    vmv1r.v v0, v5
448 ; CHECK-NEXT:    csrr a1, vlenb
449 ; CHECK-NEXT:    slli a1, a1, 5
450 ; CHECK-NEXT:    add a1, sp, a1
451 ; CHECK-NEXT:    addi a1, a1, 16
452 ; CHECK-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
453 ; CHECK-NEXT:    vnsrl.wi v8, v16, 0, v0.t
454 ; CHECK-NEXT:    bltu a7, a2, .LBB16_14
455 ; CHECK-NEXT:  # %bb.13:
456 ; CHECK-NEXT:    li a7, 16
457 ; CHECK-NEXT:  .LBB16_14:
458 ; CHECK-NEXT:    vsetvli zero, a7, e32, m4, ta, ma
459 ; CHECK-NEXT:    vmv1r.v v0, v4
460 ; CHECK-NEXT:    csrr a1, vlenb
461 ; CHECK-NEXT:    li a2, 40
462 ; CHECK-NEXT:    mul a1, a1, a2
463 ; CHECK-NEXT:    add a1, sp, a1
464 ; CHECK-NEXT:    addi a1, a1, 16
465 ; CHECK-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
466 ; CHECK-NEXT:    vnsrl.wi v16, v24, 0, v0.t
467 ; CHECK-NEXT:    vsetvli zero, a3, e32, m8, ta, ma
468 ; CHECK-NEXT:    vslideup.vi v16, v8, 16
469 ; CHECK-NEXT:    vse32.v v16, (a0)
470 ; CHECK-NEXT:    addi a1, a0, 256
471 ; CHECK-NEXT:    csrr a2, vlenb
472 ; CHECK-NEXT:    li a3, 24
473 ; CHECK-NEXT:    mul a2, a2, a3
474 ; CHECK-NEXT:    add a2, sp, a2
475 ; CHECK-NEXT:    addi a2, a2, 16
476 ; CHECK-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
477 ; CHECK-NEXT:    vse32.v v8, (a1)
478 ; CHECK-NEXT:    addi a1, a0, 128
479 ; CHECK-NEXT:    csrr a2, vlenb
480 ; CHECK-NEXT:    li a3, 48
481 ; CHECK-NEXT:    mul a2, a2, a3
482 ; CHECK-NEXT:    add a2, sp, a2
483 ; CHECK-NEXT:    addi a2, a2, 16
484 ; CHECK-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
485 ; CHECK-NEXT:    vse32.v v8, (a1)
486 ; CHECK-NEXT:    addi a0, a0, 384
487 ; CHECK-NEXT:    csrr a1, vlenb
488 ; CHECK-NEXT:    li a2, 56
489 ; CHECK-NEXT:    mul a1, a1, a2
490 ; CHECK-NEXT:    add a1, sp, a1
491 ; CHECK-NEXT:    addi a1, a1, 16
492 ; CHECK-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
493 ; CHECK-NEXT:    vse32.v v8, (a0)
494 ; CHECK-NEXT:    csrr a0, vlenb
495 ; CHECK-NEXT:    slli a0, a0, 6
496 ; CHECK-NEXT:    add sp, sp, a0
497 ; CHECK-NEXT:    addi sp, sp, 16
498 ; CHECK-NEXT:    ret
499   %v = call <128 x i32> @llvm.vp.trunc.v128i32.v128i64(<128 x i64> %a, <128 x i1> %m, i32 %vl)
500   ret <128 x i32> %v
503 declare <32 x i32> @llvm.vp.trunc.v32i32.v32i64(<32 x i64>, <32 x i1>, i32)
505 define <32 x i32> @vtrunc_v32i32_v32i64(<32 x i64> %a, <32 x i1> %m, i32 zeroext %vl) {
506 ; CHECK-LABEL: vtrunc_v32i32_v32i64:
507 ; CHECK:       # %bb.0:
508 ; CHECK-NEXT:    vmv8r.v v24, v8
509 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
510 ; CHECK-NEXT:    li a2, 16
511 ; CHECK-NEXT:    vslidedown.vi v12, v0, 2
512 ; CHECK-NEXT:    mv a1, a0
513 ; CHECK-NEXT:    bltu a0, a2, .LBB17_2
514 ; CHECK-NEXT:  # %bb.1:
515 ; CHECK-NEXT:    li a1, 16
516 ; CHECK-NEXT:  .LBB17_2:
517 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
518 ; CHECK-NEXT:    vnsrl.wi v8, v24, 0, v0.t
519 ; CHECK-NEXT:    addi a1, a0, -16
520 ; CHECK-NEXT:    sltu a0, a0, a1
521 ; CHECK-NEXT:    addi a0, a0, -1
522 ; CHECK-NEXT:    and a0, a0, a1
523 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
524 ; CHECK-NEXT:    vmv1r.v v0, v12
525 ; CHECK-NEXT:    vnsrl.wi v24, v16, 0, v0.t
526 ; CHECK-NEXT:    li a0, 32
527 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
528 ; CHECK-NEXT:    vslideup.vi v8, v24, 16
529 ; CHECK-NEXT:    ret
530   %v = call <32 x i32> @llvm.vp.trunc.v32i32.v32i64(<32 x i64> %a, <32 x i1> %m, i32 %vl)
531   ret <32 x i32> %v
534 declare <2 x i7> @llvm.vp.trunc.v2i7.v2i8(<2 x i8>, <2 x i1>, i32)
536 define <2 x i7> @vtrunc_v2i7_v2i8(<2 x i8> %a, <2 x i1> %m, i32 zeroext %vl) {
537 ; CHECK-LABEL: vtrunc_v2i7_v2i8:
538 ; CHECK:       # %bb.0:
539 ; CHECK-NEXT:    ret
540   %v = call <2 x i7> @llvm.vp.trunc.v2i7.v2i8(<2 x i8> %a, <2 x i1> %m, i32 %vl)
541   ret <2 x i7> %v