[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-extload-truncstore.ll
blob4aaefb24d5aa2790b316bbe22fce331103e41e17
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -riscv-v-fixed-length-vector-lmul-max=1 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,LMULMAX1
3 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -riscv-v-fixed-length-vector-lmul-max=4 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,LMULMAX4
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -riscv-v-fixed-length-vector-lmul-max=1 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,LMULMAX1
5 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -riscv-v-fixed-length-vector-lmul-max=4 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,LMULMAX4
7 define <2 x i16> @sextload_v2i1_v2i16(ptr %x) {
8 ; CHECK-LABEL: sextload_v2i1_v2i16:
9 ; CHECK:       # %bb.0:
10 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
11 ; CHECK-NEXT:    vlm.v v0, (a0)
12 ; CHECK-NEXT:    vmv.v.i v8, 0
13 ; CHECK-NEXT:    vmerge.vim v8, v8, -1, v0
14 ; CHECK-NEXT:    ret
15   %y = load <2 x i1>, ptr %x
16   %z = sext <2 x i1> %y to <2 x i16>
17   ret <2 x i16> %z
20 define <2 x i16> @sextload_v2i8_v2i16(ptr %x) {
21 ; CHECK-LABEL: sextload_v2i8_v2i16:
22 ; CHECK:       # %bb.0:
23 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
24 ; CHECK-NEXT:    vle8.v v9, (a0)
25 ; CHECK-NEXT:    vsext.vf2 v8, v9
26 ; CHECK-NEXT:    ret
27   %y = load <2 x i8>, ptr %x
28   %z = sext <2 x i8> %y to <2 x i16>
29   ret <2 x i16> %z
32 define <2 x i16> @zextload_v2i8_v2i16(ptr %x) {
33 ; CHECK-LABEL: zextload_v2i8_v2i16:
34 ; CHECK:       # %bb.0:
35 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
36 ; CHECK-NEXT:    vle8.v v9, (a0)
37 ; CHECK-NEXT:    vzext.vf2 v8, v9
38 ; CHECK-NEXT:    ret
39   %y = load <2 x i8>, ptr %x
40   %z = zext <2 x i8> %y to <2 x i16>
41   ret <2 x i16> %z
44 define <2 x i32> @sextload_v2i8_v2i32(ptr %x) {
45 ; CHECK-LABEL: sextload_v2i8_v2i32:
46 ; CHECK:       # %bb.0:
47 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
48 ; CHECK-NEXT:    vle8.v v9, (a0)
49 ; CHECK-NEXT:    vsext.vf4 v8, v9
50 ; CHECK-NEXT:    ret
51   %y = load <2 x i8>, ptr %x
52   %z = sext <2 x i8> %y to <2 x i32>
53   ret <2 x i32> %z
56 define <2 x i32> @zextload_v2i8_v2i32(ptr %x) {
57 ; CHECK-LABEL: zextload_v2i8_v2i32:
58 ; CHECK:       # %bb.0:
59 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
60 ; CHECK-NEXT:    vle8.v v9, (a0)
61 ; CHECK-NEXT:    vzext.vf4 v8, v9
62 ; CHECK-NEXT:    ret
63   %y = load <2 x i8>, ptr %x
64   %z = zext <2 x i8> %y to <2 x i32>
65   ret <2 x i32> %z
68 define <2 x i64> @sextload_v2i8_v2i64(ptr %x) {
69 ; CHECK-LABEL: sextload_v2i8_v2i64:
70 ; CHECK:       # %bb.0:
71 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
72 ; CHECK-NEXT:    vle8.v v9, (a0)
73 ; CHECK-NEXT:    vsext.vf8 v8, v9
74 ; CHECK-NEXT:    ret
75   %y = load <2 x i8>, ptr %x
76   %z = sext <2 x i8> %y to <2 x i64>
77   ret <2 x i64> %z
80 define <2 x i64> @zextload_v2i8_v2i64(ptr %x) {
81 ; CHECK-LABEL: zextload_v2i8_v2i64:
82 ; CHECK:       # %bb.0:
83 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
84 ; CHECK-NEXT:    vle8.v v9, (a0)
85 ; CHECK-NEXT:    vzext.vf8 v8, v9
86 ; CHECK-NEXT:    ret
87   %y = load <2 x i8>, ptr %x
88   %z = zext <2 x i8> %y to <2 x i64>
89   ret <2 x i64> %z
92 define <4 x i16> @sextload_v4i8_v4i16(ptr %x) {
93 ; CHECK-LABEL: sextload_v4i8_v4i16:
94 ; CHECK:       # %bb.0:
95 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
96 ; CHECK-NEXT:    vle8.v v9, (a0)
97 ; CHECK-NEXT:    vsext.vf2 v8, v9
98 ; CHECK-NEXT:    ret
99   %y = load <4 x i8>, ptr %x
100   %z = sext <4 x i8> %y to <4 x i16>
101   ret <4 x i16> %z
104 define <4 x i16> @zextload_v4i8_v4i16(ptr %x) {
105 ; CHECK-LABEL: zextload_v4i8_v4i16:
106 ; CHECK:       # %bb.0:
107 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
108 ; CHECK-NEXT:    vle8.v v9, (a0)
109 ; CHECK-NEXT:    vzext.vf2 v8, v9
110 ; CHECK-NEXT:    ret
111   %y = load <4 x i8>, ptr %x
112   %z = zext <4 x i8> %y to <4 x i16>
113   ret <4 x i16> %z
116 define <4 x i32> @sextload_v4i8_v4i32(ptr %x) {
117 ; CHECK-LABEL: sextload_v4i8_v4i32:
118 ; CHECK:       # %bb.0:
119 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
120 ; CHECK-NEXT:    vle8.v v9, (a0)
121 ; CHECK-NEXT:    vsext.vf4 v8, v9
122 ; CHECK-NEXT:    ret
123   %y = load <4 x i8>, ptr %x
124   %z = sext <4 x i8> %y to <4 x i32>
125   ret <4 x i32> %z
128 define <4 x i32> @zextload_v4i8_v4i32(ptr %x) {
129 ; CHECK-LABEL: zextload_v4i8_v4i32:
130 ; CHECK:       # %bb.0:
131 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
132 ; CHECK-NEXT:    vle8.v v9, (a0)
133 ; CHECK-NEXT:    vzext.vf4 v8, v9
134 ; CHECK-NEXT:    ret
135   %y = load <4 x i8>, ptr %x
136   %z = zext <4 x i8> %y to <4 x i32>
137   ret <4 x i32> %z
140 define <4 x i64> @sextload_v4i8_v4i64(ptr %x) {
141 ; LMULMAX1-LABEL: sextload_v4i8_v4i64:
142 ; LMULMAX1:       # %bb.0:
143 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
144 ; LMULMAX1-NEXT:    vle8.v v10, (a0)
145 ; LMULMAX1-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
146 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 2
147 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
148 ; LMULMAX1-NEXT:    vsext.vf8 v9, v8
149 ; LMULMAX1-NEXT:    vsext.vf8 v8, v10
150 ; LMULMAX1-NEXT:    ret
152 ; LMULMAX4-LABEL: sextload_v4i8_v4i64:
153 ; LMULMAX4:       # %bb.0:
154 ; LMULMAX4-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
155 ; LMULMAX4-NEXT:    vle8.v v10, (a0)
156 ; LMULMAX4-NEXT:    vsext.vf8 v8, v10
157 ; LMULMAX4-NEXT:    ret
158   %y = load <4 x i8>, ptr %x
159   %z = sext <4 x i8> %y to <4 x i64>
160   ret <4 x i64> %z
163 define <4 x i64> @zextload_v4i8_v4i64(ptr %x) {
164 ; LMULMAX1-LABEL: zextload_v4i8_v4i64:
165 ; LMULMAX1:       # %bb.0:
166 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
167 ; LMULMAX1-NEXT:    vle8.v v10, (a0)
168 ; LMULMAX1-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
169 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 2
170 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
171 ; LMULMAX1-NEXT:    vzext.vf8 v9, v8
172 ; LMULMAX1-NEXT:    vzext.vf8 v8, v10
173 ; LMULMAX1-NEXT:    ret
175 ; LMULMAX4-LABEL: zextload_v4i8_v4i64:
176 ; LMULMAX4:       # %bb.0:
177 ; LMULMAX4-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
178 ; LMULMAX4-NEXT:    vle8.v v10, (a0)
179 ; LMULMAX4-NEXT:    vzext.vf8 v8, v10
180 ; LMULMAX4-NEXT:    ret
181   %y = load <4 x i8>, ptr %x
182   %z = zext <4 x i8> %y to <4 x i64>
183   ret <4 x i64> %z
186 define <8 x i16> @sextload_v8i8_v8i16(ptr %x) {
187 ; CHECK-LABEL: sextload_v8i8_v8i16:
188 ; CHECK:       # %bb.0:
189 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
190 ; CHECK-NEXT:    vle8.v v9, (a0)
191 ; CHECK-NEXT:    vsext.vf2 v8, v9
192 ; CHECK-NEXT:    ret
193   %y = load <8 x i8>, ptr %x
194   %z = sext <8 x i8> %y to <8 x i16>
195   ret <8 x i16> %z
198 define <8 x i16> @zextload_v8i8_v8i16(ptr %x) {
199 ; CHECK-LABEL: zextload_v8i8_v8i16:
200 ; CHECK:       # %bb.0:
201 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
202 ; CHECK-NEXT:    vle8.v v9, (a0)
203 ; CHECK-NEXT:    vzext.vf2 v8, v9
204 ; CHECK-NEXT:    ret
205   %y = load <8 x i8>, ptr %x
206   %z = zext <8 x i8> %y to <8 x i16>
207   ret <8 x i16> %z
210 define <8 x i32> @sextload_v8i8_v8i32(ptr %x) {
211 ; LMULMAX1-LABEL: sextload_v8i8_v8i32:
212 ; LMULMAX1:       # %bb.0:
213 ; LMULMAX1-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
214 ; LMULMAX1-NEXT:    vle8.v v10, (a0)
215 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
216 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 4
217 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
218 ; LMULMAX1-NEXT:    vsext.vf4 v9, v8
219 ; LMULMAX1-NEXT:    vsext.vf4 v8, v10
220 ; LMULMAX1-NEXT:    ret
222 ; LMULMAX4-LABEL: sextload_v8i8_v8i32:
223 ; LMULMAX4:       # %bb.0:
224 ; LMULMAX4-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
225 ; LMULMAX4-NEXT:    vle8.v v10, (a0)
226 ; LMULMAX4-NEXT:    vsext.vf4 v8, v10
227 ; LMULMAX4-NEXT:    ret
228   %y = load <8 x i8>, ptr %x
229   %z = sext <8 x i8> %y to <8 x i32>
230   ret <8 x i32> %z
233 define <8 x i32> @zextload_v8i8_v8i32(ptr %x) {
234 ; LMULMAX1-LABEL: zextload_v8i8_v8i32:
235 ; LMULMAX1:       # %bb.0:
236 ; LMULMAX1-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
237 ; LMULMAX1-NEXT:    vle8.v v10, (a0)
238 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
239 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 4
240 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
241 ; LMULMAX1-NEXT:    vzext.vf4 v9, v8
242 ; LMULMAX1-NEXT:    vzext.vf4 v8, v10
243 ; LMULMAX1-NEXT:    ret
245 ; LMULMAX4-LABEL: zextload_v8i8_v8i32:
246 ; LMULMAX4:       # %bb.0:
247 ; LMULMAX4-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
248 ; LMULMAX4-NEXT:    vle8.v v10, (a0)
249 ; LMULMAX4-NEXT:    vzext.vf4 v8, v10
250 ; LMULMAX4-NEXT:    ret
251   %y = load <8 x i8>, ptr %x
252   %z = zext <8 x i8> %y to <8 x i32>
253   ret <8 x i32> %z
256 define <8 x i64> @sextload_v8i8_v8i64(ptr %x) {
257 ; LMULMAX1-LABEL: sextload_v8i8_v8i64:
258 ; LMULMAX1:       # %bb.0:
259 ; LMULMAX1-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
260 ; LMULMAX1-NEXT:    vle8.v v9, (a0)
261 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
262 ; LMULMAX1-NEXT:    vsext.vf8 v8, v9
263 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
264 ; LMULMAX1-NEXT:    vslidedown.vi v11, v9, 4
265 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
266 ; LMULMAX1-NEXT:    vsext.vf8 v10, v11
267 ; LMULMAX1-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
268 ; LMULMAX1-NEXT:    vslidedown.vi v12, v11, 2
269 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
270 ; LMULMAX1-NEXT:    vsext.vf8 v11, v12
271 ; LMULMAX1-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
272 ; LMULMAX1-NEXT:    vslidedown.vi v12, v9, 2
273 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
274 ; LMULMAX1-NEXT:    vsext.vf8 v9, v12
275 ; LMULMAX1-NEXT:    ret
277 ; LMULMAX4-LABEL: sextload_v8i8_v8i64:
278 ; LMULMAX4:       # %bb.0:
279 ; LMULMAX4-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
280 ; LMULMAX4-NEXT:    vle8.v v12, (a0)
281 ; LMULMAX4-NEXT:    vsext.vf8 v8, v12
282 ; LMULMAX4-NEXT:    ret
283   %y = load <8 x i8>, ptr %x
284   %z = sext <8 x i8> %y to <8 x i64>
285   ret <8 x i64> %z
288 define <8 x i64> @zextload_v8i8_v8i64(ptr %x) {
289 ; LMULMAX1-LABEL: zextload_v8i8_v8i64:
290 ; LMULMAX1:       # %bb.0:
291 ; LMULMAX1-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
292 ; LMULMAX1-NEXT:    vle8.v v9, (a0)
293 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
294 ; LMULMAX1-NEXT:    vzext.vf8 v8, v9
295 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
296 ; LMULMAX1-NEXT:    vslidedown.vi v11, v9, 4
297 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
298 ; LMULMAX1-NEXT:    vzext.vf8 v10, v11
299 ; LMULMAX1-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
300 ; LMULMAX1-NEXT:    vslidedown.vi v12, v11, 2
301 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
302 ; LMULMAX1-NEXT:    vzext.vf8 v11, v12
303 ; LMULMAX1-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
304 ; LMULMAX1-NEXT:    vslidedown.vi v12, v9, 2
305 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
306 ; LMULMAX1-NEXT:    vzext.vf8 v9, v12
307 ; LMULMAX1-NEXT:    ret
309 ; LMULMAX4-LABEL: zextload_v8i8_v8i64:
310 ; LMULMAX4:       # %bb.0:
311 ; LMULMAX4-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
312 ; LMULMAX4-NEXT:    vle8.v v12, (a0)
313 ; LMULMAX4-NEXT:    vzext.vf8 v8, v12
314 ; LMULMAX4-NEXT:    ret
315   %y = load <8 x i8>, ptr %x
316   %z = zext <8 x i8> %y to <8 x i64>
317   ret <8 x i64> %z
320 define <16 x i16> @sextload_v16i8_v16i16(ptr %x) {
321 ; LMULMAX1-LABEL: sextload_v16i8_v16i16:
322 ; LMULMAX1:       # %bb.0:
323 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
324 ; LMULMAX1-NEXT:    vle8.v v10, (a0)
325 ; LMULMAX1-NEXT:    vsetivli zero, 8, e8, m1, ta, ma
326 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 8
327 ; LMULMAX1-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
328 ; LMULMAX1-NEXT:    vsext.vf2 v9, v8
329 ; LMULMAX1-NEXT:    vsext.vf2 v8, v10
330 ; LMULMAX1-NEXT:    ret
332 ; LMULMAX4-LABEL: sextload_v16i8_v16i16:
333 ; LMULMAX4:       # %bb.0:
334 ; LMULMAX4-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
335 ; LMULMAX4-NEXT:    vle8.v v10, (a0)
336 ; LMULMAX4-NEXT:    vsext.vf2 v8, v10
337 ; LMULMAX4-NEXT:    ret
338   %y = load <16 x i8>, ptr %x
339   %z = sext <16 x i8> %y to <16 x i16>
340   ret <16 x i16> %z
343 define <16 x i16> @zextload_v16i8_v16i16(ptr %x) {
344 ; LMULMAX1-LABEL: zextload_v16i8_v16i16:
345 ; LMULMAX1:       # %bb.0:
346 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
347 ; LMULMAX1-NEXT:    vle8.v v10, (a0)
348 ; LMULMAX1-NEXT:    vsetivli zero, 8, e8, m1, ta, ma
349 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 8
350 ; LMULMAX1-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
351 ; LMULMAX1-NEXT:    vzext.vf2 v9, v8
352 ; LMULMAX1-NEXT:    vzext.vf2 v8, v10
353 ; LMULMAX1-NEXT:    ret
355 ; LMULMAX4-LABEL: zextload_v16i8_v16i16:
356 ; LMULMAX4:       # %bb.0:
357 ; LMULMAX4-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
358 ; LMULMAX4-NEXT:    vle8.v v10, (a0)
359 ; LMULMAX4-NEXT:    vzext.vf2 v8, v10
360 ; LMULMAX4-NEXT:    ret
361   %y = load <16 x i8>, ptr %x
362   %z = zext <16 x i8> %y to <16 x i16>
363   ret <16 x i16> %z
366 define <16 x i32> @sextload_v16i8_v16i32(ptr %x) {
367 ; LMULMAX1-LABEL: sextload_v16i8_v16i32:
368 ; LMULMAX1:       # %bb.0:
369 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
370 ; LMULMAX1-NEXT:    vle8.v v9, (a0)
371 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
372 ; LMULMAX1-NEXT:    vsext.vf4 v8, v9
373 ; LMULMAX1-NEXT:    vsetivli zero, 8, e8, m1, ta, ma
374 ; LMULMAX1-NEXT:    vslidedown.vi v11, v9, 8
375 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
376 ; LMULMAX1-NEXT:    vsext.vf4 v10, v11
377 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
378 ; LMULMAX1-NEXT:    vslidedown.vi v12, v11, 4
379 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
380 ; LMULMAX1-NEXT:    vsext.vf4 v11, v12
381 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
382 ; LMULMAX1-NEXT:    vslidedown.vi v12, v9, 4
383 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
384 ; LMULMAX1-NEXT:    vsext.vf4 v9, v12
385 ; LMULMAX1-NEXT:    ret
387 ; LMULMAX4-LABEL: sextload_v16i8_v16i32:
388 ; LMULMAX4:       # %bb.0:
389 ; LMULMAX4-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
390 ; LMULMAX4-NEXT:    vle8.v v12, (a0)
391 ; LMULMAX4-NEXT:    vsext.vf4 v8, v12
392 ; LMULMAX4-NEXT:    ret
393   %y = load <16 x i8>, ptr %x
394   %z = sext <16 x i8> %y to <16 x i32>
395   ret <16 x i32> %z
398 define <16 x i32> @zextload_v16i8_v16i32(ptr %x) {
399 ; LMULMAX1-LABEL: zextload_v16i8_v16i32:
400 ; LMULMAX1:       # %bb.0:
401 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
402 ; LMULMAX1-NEXT:    vle8.v v9, (a0)
403 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
404 ; LMULMAX1-NEXT:    vzext.vf4 v8, v9
405 ; LMULMAX1-NEXT:    vsetivli zero, 8, e8, m1, ta, ma
406 ; LMULMAX1-NEXT:    vslidedown.vi v11, v9, 8
407 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
408 ; LMULMAX1-NEXT:    vzext.vf4 v10, v11
409 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
410 ; LMULMAX1-NEXT:    vslidedown.vi v12, v11, 4
411 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
412 ; LMULMAX1-NEXT:    vzext.vf4 v11, v12
413 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
414 ; LMULMAX1-NEXT:    vslidedown.vi v12, v9, 4
415 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
416 ; LMULMAX1-NEXT:    vzext.vf4 v9, v12
417 ; LMULMAX1-NEXT:    ret
419 ; LMULMAX4-LABEL: zextload_v16i8_v16i32:
420 ; LMULMAX4:       # %bb.0:
421 ; LMULMAX4-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
422 ; LMULMAX4-NEXT:    vle8.v v12, (a0)
423 ; LMULMAX4-NEXT:    vzext.vf4 v8, v12
424 ; LMULMAX4-NEXT:    ret
425   %y = load <16 x i8>, ptr %x
426   %z = zext <16 x i8> %y to <16 x i32>
427   ret <16 x i32> %z
430 define <16 x i64> @sextload_v16i8_v16i64(ptr %x) {
431 ; LMULMAX1-LABEL: sextload_v16i8_v16i64:
432 ; LMULMAX1:       # %bb.0:
433 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
434 ; LMULMAX1-NEXT:    vle8.v v10, (a0)
435 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
436 ; LMULMAX1-NEXT:    vsext.vf8 v8, v10
437 ; LMULMAX1-NEXT:    vsetivli zero, 8, e8, m1, ta, ma
438 ; LMULMAX1-NEXT:    vslidedown.vi v11, v10, 8
439 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
440 ; LMULMAX1-NEXT:    vsext.vf8 v12, v11
441 ; LMULMAX1-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
442 ; LMULMAX1-NEXT:    vslidedown.vi v13, v10, 2
443 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
444 ; LMULMAX1-NEXT:    vsext.vf8 v9, v13
445 ; LMULMAX1-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
446 ; LMULMAX1-NEXT:    vslidedown.vi v14, v11, 2
447 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
448 ; LMULMAX1-NEXT:    vsext.vf8 v13, v14
449 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
450 ; LMULMAX1-NEXT:    vslidedown.vi v11, v11, 4
451 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
452 ; LMULMAX1-NEXT:    vsext.vf8 v14, v11
453 ; LMULMAX1-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
454 ; LMULMAX1-NEXT:    vslidedown.vi v11, v11, 2
455 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
456 ; LMULMAX1-NEXT:    vsext.vf8 v15, v11
457 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
458 ; LMULMAX1-NEXT:    vslidedown.vi v11, v10, 4
459 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
460 ; LMULMAX1-NEXT:    vsext.vf8 v10, v11
461 ; LMULMAX1-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
462 ; LMULMAX1-NEXT:    vslidedown.vi v16, v11, 2
463 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
464 ; LMULMAX1-NEXT:    vsext.vf8 v11, v16
465 ; LMULMAX1-NEXT:    ret
467 ; LMULMAX4-LABEL: sextload_v16i8_v16i64:
468 ; LMULMAX4:       # %bb.0:
469 ; LMULMAX4-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
470 ; LMULMAX4-NEXT:    vle8.v v16, (a0)
471 ; LMULMAX4-NEXT:    vsetivli zero, 8, e8, m1, ta, ma
472 ; LMULMAX4-NEXT:    vslidedown.vi v8, v16, 8
473 ; LMULMAX4-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
474 ; LMULMAX4-NEXT:    vsext.vf8 v12, v8
475 ; LMULMAX4-NEXT:    vsext.vf8 v8, v16
476 ; LMULMAX4-NEXT:    ret
477   %y = load <16 x i8>, ptr %x
478   %z = sext <16 x i8> %y to <16 x i64>
479   ret <16 x i64> %z
482 define <16 x i64> @zextload_v16i8_v16i64(ptr %x) {
483 ; LMULMAX1-LABEL: zextload_v16i8_v16i64:
484 ; LMULMAX1:       # %bb.0:
485 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
486 ; LMULMAX1-NEXT:    vle8.v v10, (a0)
487 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
488 ; LMULMAX1-NEXT:    vzext.vf8 v8, v10
489 ; LMULMAX1-NEXT:    vsetivli zero, 8, e8, m1, ta, ma
490 ; LMULMAX1-NEXT:    vslidedown.vi v11, v10, 8
491 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
492 ; LMULMAX1-NEXT:    vzext.vf8 v12, v11
493 ; LMULMAX1-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
494 ; LMULMAX1-NEXT:    vslidedown.vi v13, v10, 2
495 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
496 ; LMULMAX1-NEXT:    vzext.vf8 v9, v13
497 ; LMULMAX1-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
498 ; LMULMAX1-NEXT:    vslidedown.vi v14, v11, 2
499 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
500 ; LMULMAX1-NEXT:    vzext.vf8 v13, v14
501 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
502 ; LMULMAX1-NEXT:    vslidedown.vi v11, v11, 4
503 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
504 ; LMULMAX1-NEXT:    vzext.vf8 v14, v11
505 ; LMULMAX1-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
506 ; LMULMAX1-NEXT:    vslidedown.vi v11, v11, 2
507 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
508 ; LMULMAX1-NEXT:    vzext.vf8 v15, v11
509 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
510 ; LMULMAX1-NEXT:    vslidedown.vi v11, v10, 4
511 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
512 ; LMULMAX1-NEXT:    vzext.vf8 v10, v11
513 ; LMULMAX1-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
514 ; LMULMAX1-NEXT:    vslidedown.vi v16, v11, 2
515 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
516 ; LMULMAX1-NEXT:    vzext.vf8 v11, v16
517 ; LMULMAX1-NEXT:    ret
519 ; LMULMAX4-LABEL: zextload_v16i8_v16i64:
520 ; LMULMAX4:       # %bb.0:
521 ; LMULMAX4-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
522 ; LMULMAX4-NEXT:    vle8.v v16, (a0)
523 ; LMULMAX4-NEXT:    vsetivli zero, 8, e8, m1, ta, ma
524 ; LMULMAX4-NEXT:    vslidedown.vi v8, v16, 8
525 ; LMULMAX4-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
526 ; LMULMAX4-NEXT:    vzext.vf8 v12, v8
527 ; LMULMAX4-NEXT:    vzext.vf8 v8, v16
528 ; LMULMAX4-NEXT:    ret
529   %y = load <16 x i8>, ptr %x
530   %z = zext <16 x i8> %y to <16 x i64>
531   ret <16 x i64> %z
534 define void @truncstore_v2i8_v2i1(<2 x i8> %x, ptr %z) {
535 ; CHECK-LABEL: truncstore_v2i8_v2i1:
536 ; CHECK:       # %bb.0:
537 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma
538 ; CHECK-NEXT:    vand.vi v8, v8, 1
539 ; CHECK-NEXT:    vmsne.vi v0, v8, 0
540 ; CHECK-NEXT:    vmv.v.i v8, 0
541 ; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
542 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
543 ; CHECK-NEXT:    vmv.v.i v9, 0
544 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf2, tu, ma
545 ; CHECK-NEXT:    vmv.v.v v9, v8
546 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
547 ; CHECK-NEXT:    vmsne.vi v8, v9, 0
548 ; CHECK-NEXT:    vsm.v v8, (a0)
549 ; CHECK-NEXT:    ret
550   %y = trunc <2 x i8> %x to <2 x i1>
551   store <2 x i1> %y, ptr %z
552   ret void
555 define void @truncstore_v2i16_v2i8(<2 x i16> %x, ptr %z) {
556 ; CHECK-LABEL: truncstore_v2i16_v2i8:
557 ; CHECK:       # %bb.0:
558 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma
559 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
560 ; CHECK-NEXT:    vse8.v v8, (a0)
561 ; CHECK-NEXT:    ret
562   %y = trunc <2 x i16> %x to <2 x i8>
563   store <2 x i8> %y, ptr %z
564   ret void
567 define <2 x i32> @sextload_v2i16_v2i32(ptr %x) {
568 ; CHECK-LABEL: sextload_v2i16_v2i32:
569 ; CHECK:       # %bb.0:
570 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
571 ; CHECK-NEXT:    vle16.v v9, (a0)
572 ; CHECK-NEXT:    vsext.vf2 v8, v9
573 ; CHECK-NEXT:    ret
574   %y = load <2 x i16>, ptr %x
575   %z = sext <2 x i16> %y to <2 x i32>
576   ret <2 x i32> %z
579 define <2 x i32> @zextload_v2i16_v2i32(ptr %x) {
580 ; CHECK-LABEL: zextload_v2i16_v2i32:
581 ; CHECK:       # %bb.0:
582 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
583 ; CHECK-NEXT:    vle16.v v9, (a0)
584 ; CHECK-NEXT:    vzext.vf2 v8, v9
585 ; CHECK-NEXT:    ret
586   %y = load <2 x i16>, ptr %x
587   %z = zext <2 x i16> %y to <2 x i32>
588   ret <2 x i32> %z
591 define <2 x i64> @sextload_v2i16_v2i64(ptr %x) {
592 ; CHECK-LABEL: sextload_v2i16_v2i64:
593 ; CHECK:       # %bb.0:
594 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
595 ; CHECK-NEXT:    vle16.v v9, (a0)
596 ; CHECK-NEXT:    vsext.vf4 v8, v9
597 ; CHECK-NEXT:    ret
598   %y = load <2 x i16>, ptr %x
599   %z = sext <2 x i16> %y to <2 x i64>
600   ret <2 x i64> %z
603 define <2 x i64> @zextload_v2i16_v2i64(ptr %x) {
604 ; CHECK-LABEL: zextload_v2i16_v2i64:
605 ; CHECK:       # %bb.0:
606 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
607 ; CHECK-NEXT:    vle16.v v9, (a0)
608 ; CHECK-NEXT:    vzext.vf4 v8, v9
609 ; CHECK-NEXT:    ret
610   %y = load <2 x i16>, ptr %x
611   %z = zext <2 x i16> %y to <2 x i64>
612   ret <2 x i64> %z
615 define void @truncstore_v4i16_v4i8(<4 x i16> %x, ptr %z) {
616 ; CHECK-LABEL: truncstore_v4i16_v4i8:
617 ; CHECK:       # %bb.0:
618 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
619 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
620 ; CHECK-NEXT:    vse8.v v8, (a0)
621 ; CHECK-NEXT:    ret
622   %y = trunc <4 x i16> %x to <4 x i8>
623   store <4 x i8> %y, ptr %z
624   ret void
627 define <4 x i32> @sextload_v4i16_v4i32(ptr %x) {
628 ; CHECK-LABEL: sextload_v4i16_v4i32:
629 ; CHECK:       # %bb.0:
630 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
631 ; CHECK-NEXT:    vle16.v v9, (a0)
632 ; CHECK-NEXT:    vsext.vf2 v8, v9
633 ; CHECK-NEXT:    ret
634   %y = load <4 x i16>, ptr %x
635   %z = sext <4 x i16> %y to <4 x i32>
636   ret <4 x i32> %z
639 define <4 x i32> @zextload_v4i16_v4i32(ptr %x) {
640 ; CHECK-LABEL: zextload_v4i16_v4i32:
641 ; CHECK:       # %bb.0:
642 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
643 ; CHECK-NEXT:    vle16.v v9, (a0)
644 ; CHECK-NEXT:    vzext.vf2 v8, v9
645 ; CHECK-NEXT:    ret
646   %y = load <4 x i16>, ptr %x
647   %z = zext <4 x i16> %y to <4 x i32>
648   ret <4 x i32> %z
651 define <4 x i64> @sextload_v4i16_v4i64(ptr %x) {
652 ; LMULMAX1-LABEL: sextload_v4i16_v4i64:
653 ; LMULMAX1:       # %bb.0:
654 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
655 ; LMULMAX1-NEXT:    vle16.v v10, (a0)
656 ; LMULMAX1-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
657 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 2
658 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
659 ; LMULMAX1-NEXT:    vsext.vf4 v9, v8
660 ; LMULMAX1-NEXT:    vsext.vf4 v8, v10
661 ; LMULMAX1-NEXT:    ret
663 ; LMULMAX4-LABEL: sextload_v4i16_v4i64:
664 ; LMULMAX4:       # %bb.0:
665 ; LMULMAX4-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
666 ; LMULMAX4-NEXT:    vle16.v v10, (a0)
667 ; LMULMAX4-NEXT:    vsext.vf4 v8, v10
668 ; LMULMAX4-NEXT:    ret
669   %y = load <4 x i16>, ptr %x
670   %z = sext <4 x i16> %y to <4 x i64>
671   ret <4 x i64> %z
674 define <4 x i64> @zextload_v4i16_v4i64(ptr %x) {
675 ; LMULMAX1-LABEL: zextload_v4i16_v4i64:
676 ; LMULMAX1:       # %bb.0:
677 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
678 ; LMULMAX1-NEXT:    vle16.v v10, (a0)
679 ; LMULMAX1-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
680 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 2
681 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
682 ; LMULMAX1-NEXT:    vzext.vf4 v9, v8
683 ; LMULMAX1-NEXT:    vzext.vf4 v8, v10
684 ; LMULMAX1-NEXT:    ret
686 ; LMULMAX4-LABEL: zextload_v4i16_v4i64:
687 ; LMULMAX4:       # %bb.0:
688 ; LMULMAX4-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
689 ; LMULMAX4-NEXT:    vle16.v v10, (a0)
690 ; LMULMAX4-NEXT:    vzext.vf4 v8, v10
691 ; LMULMAX4-NEXT:    ret
692   %y = load <4 x i16>, ptr %x
693   %z = zext <4 x i16> %y to <4 x i64>
694   ret <4 x i64> %z
697 define void @truncstore_v8i16_v8i8(<8 x i16> %x, ptr %z) {
698 ; CHECK-LABEL: truncstore_v8i16_v8i8:
699 ; CHECK:       # %bb.0:
700 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
701 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
702 ; CHECK-NEXT:    vse8.v v8, (a0)
703 ; CHECK-NEXT:    ret
704   %y = trunc <8 x i16> %x to <8 x i8>
705   store <8 x i8> %y, ptr %z
706   ret void
709 define <8 x i32> @sextload_v8i16_v8i32(ptr %x) {
710 ; LMULMAX1-LABEL: sextload_v8i16_v8i32:
711 ; LMULMAX1:       # %bb.0:
712 ; LMULMAX1-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
713 ; LMULMAX1-NEXT:    vle16.v v10, (a0)
714 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
715 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 4
716 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
717 ; LMULMAX1-NEXT:    vsext.vf2 v9, v8
718 ; LMULMAX1-NEXT:    vsext.vf2 v8, v10
719 ; LMULMAX1-NEXT:    ret
721 ; LMULMAX4-LABEL: sextload_v8i16_v8i32:
722 ; LMULMAX4:       # %bb.0:
723 ; LMULMAX4-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
724 ; LMULMAX4-NEXT:    vle16.v v10, (a0)
725 ; LMULMAX4-NEXT:    vsext.vf2 v8, v10
726 ; LMULMAX4-NEXT:    ret
727   %y = load <8 x i16>, ptr %x
728   %z = sext <8 x i16> %y to <8 x i32>
729   ret <8 x i32> %z
732 define <8 x i32> @zextload_v8i16_v8i32(ptr %x) {
733 ; LMULMAX1-LABEL: zextload_v8i16_v8i32:
734 ; LMULMAX1:       # %bb.0:
735 ; LMULMAX1-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
736 ; LMULMAX1-NEXT:    vle16.v v10, (a0)
737 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
738 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 4
739 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
740 ; LMULMAX1-NEXT:    vzext.vf2 v9, v8
741 ; LMULMAX1-NEXT:    vzext.vf2 v8, v10
742 ; LMULMAX1-NEXT:    ret
744 ; LMULMAX4-LABEL: zextload_v8i16_v8i32:
745 ; LMULMAX4:       # %bb.0:
746 ; LMULMAX4-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
747 ; LMULMAX4-NEXT:    vle16.v v10, (a0)
748 ; LMULMAX4-NEXT:    vzext.vf2 v8, v10
749 ; LMULMAX4-NEXT:    ret
750   %y = load <8 x i16>, ptr %x
751   %z = zext <8 x i16> %y to <8 x i32>
752   ret <8 x i32> %z
755 define <8 x i64> @sextload_v8i16_v8i64(ptr %x) {
756 ; LMULMAX1-LABEL: sextload_v8i16_v8i64:
757 ; LMULMAX1:       # %bb.0:
758 ; LMULMAX1-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
759 ; LMULMAX1-NEXT:    vle16.v v9, (a0)
760 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
761 ; LMULMAX1-NEXT:    vsext.vf4 v8, v9
762 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
763 ; LMULMAX1-NEXT:    vslidedown.vi v11, v9, 4
764 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
765 ; LMULMAX1-NEXT:    vsext.vf4 v10, v11
766 ; LMULMAX1-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
767 ; LMULMAX1-NEXT:    vslidedown.vi v12, v11, 2
768 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
769 ; LMULMAX1-NEXT:    vsext.vf4 v11, v12
770 ; LMULMAX1-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
771 ; LMULMAX1-NEXT:    vslidedown.vi v12, v9, 2
772 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
773 ; LMULMAX1-NEXT:    vsext.vf4 v9, v12
774 ; LMULMAX1-NEXT:    ret
776 ; LMULMAX4-LABEL: sextload_v8i16_v8i64:
777 ; LMULMAX4:       # %bb.0:
778 ; LMULMAX4-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
779 ; LMULMAX4-NEXT:    vle16.v v12, (a0)
780 ; LMULMAX4-NEXT:    vsext.vf4 v8, v12
781 ; LMULMAX4-NEXT:    ret
782   %y = load <8 x i16>, ptr %x
783   %z = sext <8 x i16> %y to <8 x i64>
784   ret <8 x i64> %z
787 define <8 x i64> @zextload_v8i16_v8i64(ptr %x) {
788 ; LMULMAX1-LABEL: zextload_v8i16_v8i64:
789 ; LMULMAX1:       # %bb.0:
790 ; LMULMAX1-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
791 ; LMULMAX1-NEXT:    vle16.v v9, (a0)
792 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
793 ; LMULMAX1-NEXT:    vzext.vf4 v8, v9
794 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
795 ; LMULMAX1-NEXT:    vslidedown.vi v11, v9, 4
796 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
797 ; LMULMAX1-NEXT:    vzext.vf4 v10, v11
798 ; LMULMAX1-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
799 ; LMULMAX1-NEXT:    vslidedown.vi v12, v11, 2
800 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
801 ; LMULMAX1-NEXT:    vzext.vf4 v11, v12
802 ; LMULMAX1-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
803 ; LMULMAX1-NEXT:    vslidedown.vi v12, v9, 2
804 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
805 ; LMULMAX1-NEXT:    vzext.vf4 v9, v12
806 ; LMULMAX1-NEXT:    ret
808 ; LMULMAX4-LABEL: zextload_v8i16_v8i64:
809 ; LMULMAX4:       # %bb.0:
810 ; LMULMAX4-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
811 ; LMULMAX4-NEXT:    vle16.v v12, (a0)
812 ; LMULMAX4-NEXT:    vzext.vf4 v8, v12
813 ; LMULMAX4-NEXT:    ret
814   %y = load <8 x i16>, ptr %x
815   %z = zext <8 x i16> %y to <8 x i64>
816   ret <8 x i64> %z
819 define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %z) {
820 ; LMULMAX1-LABEL: truncstore_v16i16_v16i8:
821 ; LMULMAX1:       # %bb.0:
822 ; LMULMAX1-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
823 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
824 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
825 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
826 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 8
827 ; LMULMAX1-NEXT:    vse8.v v8, (a0)
828 ; LMULMAX1-NEXT:    ret
830 ; LMULMAX4-LABEL: truncstore_v16i16_v16i8:
831 ; LMULMAX4:       # %bb.0:
832 ; LMULMAX4-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
833 ; LMULMAX4-NEXT:    vnsrl.wi v10, v8, 0
834 ; LMULMAX4-NEXT:    vse8.v v10, (a0)
835 ; LMULMAX4-NEXT:    ret
836   %y = trunc <16 x i16> %x to <16 x i8>
837   store <16 x i8> %y, ptr %z
838   ret void
841 define <16 x i32> @sextload_v16i16_v16i32(ptr %x) {
842 ; LMULMAX1-LABEL: sextload_v16i16_v16i32:
843 ; LMULMAX1:       # %bb.0:
844 ; LMULMAX1-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
845 ; LMULMAX1-NEXT:    vle16.v v10, (a0)
846 ; LMULMAX1-NEXT:    addi a0, a0, 16
847 ; LMULMAX1-NEXT:    vle16.v v12, (a0)
848 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
849 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 4
850 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
851 ; LMULMAX1-NEXT:    vsext.vf2 v9, v8
852 ; LMULMAX1-NEXT:    vsext.vf2 v8, v10
853 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
854 ; LMULMAX1-NEXT:    vslidedown.vi v10, v12, 4
855 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
856 ; LMULMAX1-NEXT:    vsext.vf2 v11, v10
857 ; LMULMAX1-NEXT:    vsext.vf2 v10, v12
858 ; LMULMAX1-NEXT:    ret
860 ; LMULMAX4-LABEL: sextload_v16i16_v16i32:
861 ; LMULMAX4:       # %bb.0:
862 ; LMULMAX4-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
863 ; LMULMAX4-NEXT:    vle16.v v12, (a0)
864 ; LMULMAX4-NEXT:    vsext.vf2 v8, v12
865 ; LMULMAX4-NEXT:    ret
866   %y = load <16 x i16>, ptr %x
867   %z = sext <16 x i16> %y to <16 x i32>
868   ret <16 x i32> %z
871 define <16 x i32> @zextload_v16i16_v16i32(ptr %x) {
872 ; LMULMAX1-LABEL: zextload_v16i16_v16i32:
873 ; LMULMAX1:       # %bb.0:
874 ; LMULMAX1-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
875 ; LMULMAX1-NEXT:    vle16.v v10, (a0)
876 ; LMULMAX1-NEXT:    addi a0, a0, 16
877 ; LMULMAX1-NEXT:    vle16.v v12, (a0)
878 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
879 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 4
880 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
881 ; LMULMAX1-NEXT:    vzext.vf2 v9, v8
882 ; LMULMAX1-NEXT:    vzext.vf2 v8, v10
883 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
884 ; LMULMAX1-NEXT:    vslidedown.vi v10, v12, 4
885 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
886 ; LMULMAX1-NEXT:    vzext.vf2 v11, v10
887 ; LMULMAX1-NEXT:    vzext.vf2 v10, v12
888 ; LMULMAX1-NEXT:    ret
890 ; LMULMAX4-LABEL: zextload_v16i16_v16i32:
891 ; LMULMAX4:       # %bb.0:
892 ; LMULMAX4-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
893 ; LMULMAX4-NEXT:    vle16.v v12, (a0)
894 ; LMULMAX4-NEXT:    vzext.vf2 v8, v12
895 ; LMULMAX4-NEXT:    ret
896   %y = load <16 x i16>, ptr %x
897   %z = zext <16 x i16> %y to <16 x i32>
898   ret <16 x i32> %z
901 define <16 x i64> @sextload_v16i16_v16i64(ptr %x) {
902 ; LMULMAX1-LABEL: sextload_v16i16_v16i64:
903 ; LMULMAX1:       # %bb.0:
904 ; LMULMAX1-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
905 ; LMULMAX1-NEXT:    vle16.v v9, (a0)
906 ; LMULMAX1-NEXT:    addi a0, a0, 16
907 ; LMULMAX1-NEXT:    vle16.v v13, (a0)
908 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
909 ; LMULMAX1-NEXT:    vsext.vf4 v8, v9
910 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
911 ; LMULMAX1-NEXT:    vslidedown.vi v11, v9, 4
912 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
913 ; LMULMAX1-NEXT:    vsext.vf4 v10, v11
914 ; LMULMAX1-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
915 ; LMULMAX1-NEXT:    vslidedown.vi v12, v11, 2
916 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
917 ; LMULMAX1-NEXT:    vsext.vf4 v11, v12
918 ; LMULMAX1-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
919 ; LMULMAX1-NEXT:    vslidedown.vi v12, v9, 2
920 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
921 ; LMULMAX1-NEXT:    vsext.vf4 v9, v12
922 ; LMULMAX1-NEXT:    vsext.vf4 v12, v13
923 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
924 ; LMULMAX1-NEXT:    vslidedown.vi v15, v13, 4
925 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
926 ; LMULMAX1-NEXT:    vsext.vf4 v14, v15
927 ; LMULMAX1-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
928 ; LMULMAX1-NEXT:    vslidedown.vi v16, v15, 2
929 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
930 ; LMULMAX1-NEXT:    vsext.vf4 v15, v16
931 ; LMULMAX1-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
932 ; LMULMAX1-NEXT:    vslidedown.vi v16, v13, 2
933 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
934 ; LMULMAX1-NEXT:    vsext.vf4 v13, v16
935 ; LMULMAX1-NEXT:    ret
937 ; LMULMAX4-LABEL: sextload_v16i16_v16i64:
938 ; LMULMAX4:       # %bb.0:
939 ; LMULMAX4-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
940 ; LMULMAX4-NEXT:    vle16.v v16, (a0)
941 ; LMULMAX4-NEXT:    vsetivli zero, 8, e16, m2, ta, ma
942 ; LMULMAX4-NEXT:    vslidedown.vi v8, v16, 8
943 ; LMULMAX4-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
944 ; LMULMAX4-NEXT:    vsext.vf4 v12, v8
945 ; LMULMAX4-NEXT:    vsext.vf4 v8, v16
946 ; LMULMAX4-NEXT:    ret
947   %y = load <16 x i16>, ptr %x
948   %z = sext <16 x i16> %y to <16 x i64>
949   ret <16 x i64> %z
952 define <16 x i64> @zextload_v16i16_v16i64(ptr %x) {
953 ; LMULMAX1-LABEL: zextload_v16i16_v16i64:
954 ; LMULMAX1:       # %bb.0:
955 ; LMULMAX1-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
956 ; LMULMAX1-NEXT:    vle16.v v9, (a0)
957 ; LMULMAX1-NEXT:    addi a0, a0, 16
958 ; LMULMAX1-NEXT:    vle16.v v13, (a0)
959 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
960 ; LMULMAX1-NEXT:    vzext.vf4 v8, v9
961 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
962 ; LMULMAX1-NEXT:    vslidedown.vi v11, v9, 4
963 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
964 ; LMULMAX1-NEXT:    vzext.vf4 v10, v11
965 ; LMULMAX1-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
966 ; LMULMAX1-NEXT:    vslidedown.vi v12, v11, 2
967 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
968 ; LMULMAX1-NEXT:    vzext.vf4 v11, v12
969 ; LMULMAX1-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
970 ; LMULMAX1-NEXT:    vslidedown.vi v12, v9, 2
971 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
972 ; LMULMAX1-NEXT:    vzext.vf4 v9, v12
973 ; LMULMAX1-NEXT:    vzext.vf4 v12, v13
974 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
975 ; LMULMAX1-NEXT:    vslidedown.vi v15, v13, 4
976 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
977 ; LMULMAX1-NEXT:    vzext.vf4 v14, v15
978 ; LMULMAX1-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
979 ; LMULMAX1-NEXT:    vslidedown.vi v16, v15, 2
980 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
981 ; LMULMAX1-NEXT:    vzext.vf4 v15, v16
982 ; LMULMAX1-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
983 ; LMULMAX1-NEXT:    vslidedown.vi v16, v13, 2
984 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
985 ; LMULMAX1-NEXT:    vzext.vf4 v13, v16
986 ; LMULMAX1-NEXT:    ret
988 ; LMULMAX4-LABEL: zextload_v16i16_v16i64:
989 ; LMULMAX4:       # %bb.0:
990 ; LMULMAX4-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
991 ; LMULMAX4-NEXT:    vle16.v v16, (a0)
992 ; LMULMAX4-NEXT:    vsetivli zero, 8, e16, m2, ta, ma
993 ; LMULMAX4-NEXT:    vslidedown.vi v8, v16, 8
994 ; LMULMAX4-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
995 ; LMULMAX4-NEXT:    vzext.vf4 v12, v8
996 ; LMULMAX4-NEXT:    vzext.vf4 v8, v16
997 ; LMULMAX4-NEXT:    ret
998   %y = load <16 x i16>, ptr %x
999   %z = zext <16 x i16> %y to <16 x i64>
1000   ret <16 x i64> %z
1003 define void @truncstore_v2i32_v2i8(<2 x i32> %x, ptr %z) {
1004 ; CHECK-LABEL: truncstore_v2i32_v2i8:
1005 ; CHECK:       # %bb.0:
1006 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
1007 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
1008 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
1009 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
1010 ; CHECK-NEXT:    vse8.v v8, (a0)
1011 ; CHECK-NEXT:    ret
1012   %y = trunc <2 x i32> %x to <2 x i8>
1013   store <2 x i8> %y, ptr %z
1014   ret void
1017 define void @truncstore_v2i32_v2i16(<2 x i32> %x, ptr %z) {
1018 ; CHECK-LABEL: truncstore_v2i32_v2i16:
1019 ; CHECK:       # %bb.0:
1020 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
1021 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
1022 ; CHECK-NEXT:    vse16.v v8, (a0)
1023 ; CHECK-NEXT:    ret
1024   %y = trunc <2 x i32> %x to <2 x i16>
1025   store <2 x i16> %y, ptr %z
1026   ret void
1029 define <2 x i64> @sextload_v2i32_v2i64(ptr %x) {
1030 ; CHECK-LABEL: sextload_v2i32_v2i64:
1031 ; CHECK:       # %bb.0:
1032 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1033 ; CHECK-NEXT:    vle32.v v9, (a0)
1034 ; CHECK-NEXT:    vsext.vf2 v8, v9
1035 ; CHECK-NEXT:    ret
1036   %y = load <2 x i32>, ptr %x
1037   %z = sext <2 x i32> %y to <2 x i64>
1038   ret <2 x i64> %z
1041 define <2 x i64> @zextload_v2i32_v2i64(ptr %x) {
1042 ; CHECK-LABEL: zextload_v2i32_v2i64:
1043 ; CHECK:       # %bb.0:
1044 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1045 ; CHECK-NEXT:    vle32.v v9, (a0)
1046 ; CHECK-NEXT:    vzext.vf2 v8, v9
1047 ; CHECK-NEXT:    ret
1048   %y = load <2 x i32>, ptr %x
1049   %z = zext <2 x i32> %y to <2 x i64>
1050   ret <2 x i64> %z
1053 define void @truncstore_v4i32_v4i8(<4 x i32> %x, ptr %z) {
1054 ; CHECK-LABEL: truncstore_v4i32_v4i8:
1055 ; CHECK:       # %bb.0:
1056 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1057 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
1058 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
1059 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
1060 ; CHECK-NEXT:    vse8.v v8, (a0)
1061 ; CHECK-NEXT:    ret
1062   %y = trunc <4 x i32> %x to <4 x i8>
1063   store <4 x i8> %y, ptr %z
1064   ret void
1067 define void @truncstore_v4i32_v4i16(<4 x i32> %x, ptr %z) {
1068 ; CHECK-LABEL: truncstore_v4i32_v4i16:
1069 ; CHECK:       # %bb.0:
1070 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1071 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
1072 ; CHECK-NEXT:    vse16.v v8, (a0)
1073 ; CHECK-NEXT:    ret
1074   %y = trunc <4 x i32> %x to <4 x i16>
1075   store <4 x i16> %y, ptr %z
1076   ret void
1079 define <4 x i64> @sextload_v4i32_v4i64(ptr %x) {
1080 ; LMULMAX1-LABEL: sextload_v4i32_v4i64:
1081 ; LMULMAX1:       # %bb.0:
1082 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1083 ; LMULMAX1-NEXT:    vle32.v v10, (a0)
1084 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
1085 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 2
1086 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1087 ; LMULMAX1-NEXT:    vsext.vf2 v9, v8
1088 ; LMULMAX1-NEXT:    vsext.vf2 v8, v10
1089 ; LMULMAX1-NEXT:    ret
1091 ; LMULMAX4-LABEL: sextload_v4i32_v4i64:
1092 ; LMULMAX4:       # %bb.0:
1093 ; LMULMAX4-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
1094 ; LMULMAX4-NEXT:    vle32.v v10, (a0)
1095 ; LMULMAX4-NEXT:    vsext.vf2 v8, v10
1096 ; LMULMAX4-NEXT:    ret
1097   %y = load <4 x i32>, ptr %x
1098   %z = sext <4 x i32> %y to <4 x i64>
1099   ret <4 x i64> %z
1102 define <4 x i64> @zextload_v4i32_v4i64(ptr %x) {
1103 ; LMULMAX1-LABEL: zextload_v4i32_v4i64:
1104 ; LMULMAX1:       # %bb.0:
1105 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1106 ; LMULMAX1-NEXT:    vle32.v v10, (a0)
1107 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
1108 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 2
1109 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1110 ; LMULMAX1-NEXT:    vzext.vf2 v9, v8
1111 ; LMULMAX1-NEXT:    vzext.vf2 v8, v10
1112 ; LMULMAX1-NEXT:    ret
1114 ; LMULMAX4-LABEL: zextload_v4i32_v4i64:
1115 ; LMULMAX4:       # %bb.0:
1116 ; LMULMAX4-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
1117 ; LMULMAX4-NEXT:    vle32.v v10, (a0)
1118 ; LMULMAX4-NEXT:    vzext.vf2 v8, v10
1119 ; LMULMAX4-NEXT:    ret
1120   %y = load <4 x i32>, ptr %x
1121   %z = zext <4 x i32> %y to <4 x i64>
1122   ret <4 x i64> %z
1125 define void @truncstore_v8i32_v8i8(<8 x i32> %x, ptr %z) {
1126 ; LMULMAX1-LABEL: truncstore_v8i32_v8i8:
1127 ; LMULMAX1:       # %bb.0:
1128 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1129 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1130 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
1131 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1132 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1133 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1134 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
1135 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1136 ; LMULMAX1-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
1137 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 4
1138 ; LMULMAX1-NEXT:    vse8.v v8, (a0)
1139 ; LMULMAX1-NEXT:    ret
1141 ; LMULMAX4-LABEL: truncstore_v8i32_v8i8:
1142 ; LMULMAX4:       # %bb.0:
1143 ; LMULMAX4-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1144 ; LMULMAX4-NEXT:    vnsrl.wi v10, v8, 0
1145 ; LMULMAX4-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
1146 ; LMULMAX4-NEXT:    vnsrl.wi v8, v10, 0
1147 ; LMULMAX4-NEXT:    vse8.v v8, (a0)
1148 ; LMULMAX4-NEXT:    ret
1149   %y = trunc <8 x i32> %x to <8 x i8>
1150   store <8 x i8> %y, ptr %z
1151   ret void
1154 define void @truncstore_v8i32_v8i16(<8 x i32> %x, ptr %z) {
1155 ; LMULMAX1-LABEL: truncstore_v8i32_v8i16:
1156 ; LMULMAX1:       # %bb.0:
1157 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1158 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1159 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1160 ; LMULMAX1-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1161 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 4
1162 ; LMULMAX1-NEXT:    vse16.v v8, (a0)
1163 ; LMULMAX1-NEXT:    ret
1165 ; LMULMAX4-LABEL: truncstore_v8i32_v8i16:
1166 ; LMULMAX4:       # %bb.0:
1167 ; LMULMAX4-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1168 ; LMULMAX4-NEXT:    vnsrl.wi v10, v8, 0
1169 ; LMULMAX4-NEXT:    vse16.v v10, (a0)
1170 ; LMULMAX4-NEXT:    ret
1171   %y = trunc <8 x i32> %x to <8 x i16>
1172   store <8 x i16> %y, ptr %z
1173   ret void
1176 define <8 x i64> @sextload_v8i32_v8i64(ptr %x) {
1177 ; LMULMAX1-LABEL: sextload_v8i32_v8i64:
1178 ; LMULMAX1:       # %bb.0:
1179 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1180 ; LMULMAX1-NEXT:    vle32.v v10, (a0)
1181 ; LMULMAX1-NEXT:    addi a0, a0, 16
1182 ; LMULMAX1-NEXT:    vle32.v v12, (a0)
1183 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
1184 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 2
1185 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1186 ; LMULMAX1-NEXT:    vsext.vf2 v9, v8
1187 ; LMULMAX1-NEXT:    vsext.vf2 v8, v10
1188 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
1189 ; LMULMAX1-NEXT:    vslidedown.vi v10, v12, 2
1190 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1191 ; LMULMAX1-NEXT:    vsext.vf2 v11, v10
1192 ; LMULMAX1-NEXT:    vsext.vf2 v10, v12
1193 ; LMULMAX1-NEXT:    ret
1195 ; LMULMAX4-LABEL: sextload_v8i32_v8i64:
1196 ; LMULMAX4:       # %bb.0:
1197 ; LMULMAX4-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1198 ; LMULMAX4-NEXT:    vle32.v v12, (a0)
1199 ; LMULMAX4-NEXT:    vsext.vf2 v8, v12
1200 ; LMULMAX4-NEXT:    ret
1201   %y = load <8 x i32>, ptr %x
1202   %z = sext <8 x i32> %y to <8 x i64>
1203   ret <8 x i64> %z
1206 define <8 x i64> @zextload_v8i32_v8i64(ptr %x) {
1207 ; LMULMAX1-LABEL: zextload_v8i32_v8i64:
1208 ; LMULMAX1:       # %bb.0:
1209 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1210 ; LMULMAX1-NEXT:    vle32.v v10, (a0)
1211 ; LMULMAX1-NEXT:    addi a0, a0, 16
1212 ; LMULMAX1-NEXT:    vle32.v v12, (a0)
1213 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
1214 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 2
1215 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1216 ; LMULMAX1-NEXT:    vzext.vf2 v9, v8
1217 ; LMULMAX1-NEXT:    vzext.vf2 v8, v10
1218 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
1219 ; LMULMAX1-NEXT:    vslidedown.vi v10, v12, 2
1220 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1221 ; LMULMAX1-NEXT:    vzext.vf2 v11, v10
1222 ; LMULMAX1-NEXT:    vzext.vf2 v10, v12
1223 ; LMULMAX1-NEXT:    ret
1225 ; LMULMAX4-LABEL: zextload_v8i32_v8i64:
1226 ; LMULMAX4:       # %bb.0:
1227 ; LMULMAX4-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1228 ; LMULMAX4-NEXT:    vle32.v v12, (a0)
1229 ; LMULMAX4-NEXT:    vzext.vf2 v8, v12
1230 ; LMULMAX4-NEXT:    ret
1231   %y = load <8 x i32>, ptr %x
1232   %z = zext <8 x i32> %y to <8 x i64>
1233   ret <8 x i64> %z
1236 define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %z) {
1237 ; LMULMAX1-LABEL: truncstore_v16i32_v16i8:
1238 ; LMULMAX1:       # %bb.0:
1239 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1240 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1241 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
1242 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1243 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1244 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1245 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
1246 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1247 ; LMULMAX1-NEXT:    vsetivli zero, 8, e8, m1, tu, ma
1248 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 4
1249 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1250 ; LMULMAX1-NEXT:    vnsrl.wi v9, v10, 0
1251 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
1252 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1253 ; LMULMAX1-NEXT:    vsetivli zero, 12, e8, m1, tu, ma
1254 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 8
1255 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1256 ; LMULMAX1-NEXT:    vnsrl.wi v9, v11, 0
1257 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
1258 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1259 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
1260 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 12
1261 ; LMULMAX1-NEXT:    vse8.v v8, (a0)
1262 ; LMULMAX1-NEXT:    ret
1264 ; LMULMAX4-LABEL: truncstore_v16i32_v16i8:
1265 ; LMULMAX4:       # %bb.0:
1266 ; LMULMAX4-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
1267 ; LMULMAX4-NEXT:    vnsrl.wi v12, v8, 0
1268 ; LMULMAX4-NEXT:    vsetvli zero, zero, e8, m1, ta, ma
1269 ; LMULMAX4-NEXT:    vnsrl.wi v8, v12, 0
1270 ; LMULMAX4-NEXT:    vse8.v v8, (a0)
1271 ; LMULMAX4-NEXT:    ret
1272   %y = trunc <16 x i32> %x to <16 x i8>
1273   store <16 x i8> %y, ptr %z
1274   ret void
1277 define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %z) {
1278 ; LMULMAX1-LABEL: truncstore_v16i32_v16i16:
1279 ; LMULMAX1:       # %bb.0:
1280 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1281 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1282 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1283 ; LMULMAX1-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1284 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 4
1285 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1286 ; LMULMAX1-NEXT:    vnsrl.wi v9, v11, 0
1287 ; LMULMAX1-NEXT:    vnsrl.wi v10, v10, 0
1288 ; LMULMAX1-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1289 ; LMULMAX1-NEXT:    vslideup.vi v10, v9, 4
1290 ; LMULMAX1-NEXT:    addi a1, a0, 16
1291 ; LMULMAX1-NEXT:    vse16.v v10, (a1)
1292 ; LMULMAX1-NEXT:    vse16.v v8, (a0)
1293 ; LMULMAX1-NEXT:    ret
1295 ; LMULMAX4-LABEL: truncstore_v16i32_v16i16:
1296 ; LMULMAX4:       # %bb.0:
1297 ; LMULMAX4-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
1298 ; LMULMAX4-NEXT:    vnsrl.wi v12, v8, 0
1299 ; LMULMAX4-NEXT:    vse16.v v12, (a0)
1300 ; LMULMAX4-NEXT:    ret
1301   %y = trunc <16 x i32> %x to <16 x i16>
1302   store <16 x i16> %y, ptr %z
1303   ret void
1306 define <16 x i64> @sextload_v16i32_v16i64(ptr %x) {
1307 ; LMULMAX1-LABEL: sextload_v16i32_v16i64:
1308 ; LMULMAX1:       # %bb.0:
1309 ; LMULMAX1-NEXT:    addi a1, a0, 48
1310 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1311 ; LMULMAX1-NEXT:    vle32.v v16, (a1)
1312 ; LMULMAX1-NEXT:    addi a1, a0, 32
1313 ; LMULMAX1-NEXT:    vle32.v v14, (a1)
1314 ; LMULMAX1-NEXT:    vle32.v v10, (a0)
1315 ; LMULMAX1-NEXT:    addi a0, a0, 16
1316 ; LMULMAX1-NEXT:    vle32.v v12, (a0)
1317 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
1318 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 2
1319 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1320 ; LMULMAX1-NEXT:    vsext.vf2 v9, v8
1321 ; LMULMAX1-NEXT:    vsext.vf2 v8, v10
1322 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
1323 ; LMULMAX1-NEXT:    vslidedown.vi v10, v12, 2
1324 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1325 ; LMULMAX1-NEXT:    vsext.vf2 v11, v10
1326 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
1327 ; LMULMAX1-NEXT:    vslidedown.vi v10, v14, 2
1328 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1329 ; LMULMAX1-NEXT:    vsext.vf2 v13, v10
1330 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
1331 ; LMULMAX1-NEXT:    vslidedown.vi v10, v16, 2
1332 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1333 ; LMULMAX1-NEXT:    vsext.vf2 v15, v10
1334 ; LMULMAX1-NEXT:    vsext.vf2 v10, v12
1335 ; LMULMAX1-NEXT:    vsext.vf2 v12, v14
1336 ; LMULMAX1-NEXT:    vsext.vf2 v14, v16
1337 ; LMULMAX1-NEXT:    ret
1339 ; LMULMAX4-LABEL: sextload_v16i32_v16i64:
1340 ; LMULMAX4:       # %bb.0:
1341 ; LMULMAX4-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
1342 ; LMULMAX4-NEXT:    vle32.v v16, (a0)
1343 ; LMULMAX4-NEXT:    vsetivli zero, 8, e32, m4, ta, ma
1344 ; LMULMAX4-NEXT:    vslidedown.vi v8, v16, 8
1345 ; LMULMAX4-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1346 ; LMULMAX4-NEXT:    vsext.vf2 v12, v8
1347 ; LMULMAX4-NEXT:    vsext.vf2 v8, v16
1348 ; LMULMAX4-NEXT:    ret
1349   %y = load <16 x i32>, ptr %x
1350   %z = sext <16 x i32> %y to <16 x i64>
1351   ret <16 x i64> %z
1354 define <16 x i64> @zextload_v16i32_v16i64(ptr %x) {
1355 ; LMULMAX1-LABEL: zextload_v16i32_v16i64:
1356 ; LMULMAX1:       # %bb.0:
1357 ; LMULMAX1-NEXT:    addi a1, a0, 48
1358 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1359 ; LMULMAX1-NEXT:    vle32.v v16, (a1)
1360 ; LMULMAX1-NEXT:    addi a1, a0, 32
1361 ; LMULMAX1-NEXT:    vle32.v v14, (a1)
1362 ; LMULMAX1-NEXT:    vle32.v v10, (a0)
1363 ; LMULMAX1-NEXT:    addi a0, a0, 16
1364 ; LMULMAX1-NEXT:    vle32.v v12, (a0)
1365 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
1366 ; LMULMAX1-NEXT:    vslidedown.vi v8, v10, 2
1367 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1368 ; LMULMAX1-NEXT:    vzext.vf2 v9, v8
1369 ; LMULMAX1-NEXT:    vzext.vf2 v8, v10
1370 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
1371 ; LMULMAX1-NEXT:    vslidedown.vi v10, v12, 2
1372 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1373 ; LMULMAX1-NEXT:    vzext.vf2 v11, v10
1374 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
1375 ; LMULMAX1-NEXT:    vslidedown.vi v10, v14, 2
1376 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1377 ; LMULMAX1-NEXT:    vzext.vf2 v13, v10
1378 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
1379 ; LMULMAX1-NEXT:    vslidedown.vi v10, v16, 2
1380 ; LMULMAX1-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1381 ; LMULMAX1-NEXT:    vzext.vf2 v15, v10
1382 ; LMULMAX1-NEXT:    vzext.vf2 v10, v12
1383 ; LMULMAX1-NEXT:    vzext.vf2 v12, v14
1384 ; LMULMAX1-NEXT:    vzext.vf2 v14, v16
1385 ; LMULMAX1-NEXT:    ret
1387 ; LMULMAX4-LABEL: zextload_v16i32_v16i64:
1388 ; LMULMAX4:       # %bb.0:
1389 ; LMULMAX4-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
1390 ; LMULMAX4-NEXT:    vle32.v v16, (a0)
1391 ; LMULMAX4-NEXT:    vsetivli zero, 8, e32, m4, ta, ma
1392 ; LMULMAX4-NEXT:    vslidedown.vi v8, v16, 8
1393 ; LMULMAX4-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1394 ; LMULMAX4-NEXT:    vzext.vf2 v12, v8
1395 ; LMULMAX4-NEXT:    vzext.vf2 v8, v16
1396 ; LMULMAX4-NEXT:    ret
1397   %y = load <16 x i32>, ptr %x
1398   %z = zext <16 x i32> %y to <16 x i64>
1399   ret <16 x i64> %z
1402 define void @truncstore_v2i64_v2i8(<2 x i64> %x, ptr %z) {
1403 ; CHECK-LABEL: truncstore_v2i64_v2i8:
1404 ; CHECK:       # %bb.0:
1405 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1406 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
1407 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1408 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
1409 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
1410 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
1411 ; CHECK-NEXT:    vse8.v v8, (a0)
1412 ; CHECK-NEXT:    ret
1413   %y = trunc <2 x i64> %x to <2 x i8>
1414   store <2 x i8> %y, ptr %z
1415   ret void
1418 define void @truncstore_v2i64_v2i16(<2 x i64> %x, ptr %z) {
1419 ; CHECK-LABEL: truncstore_v2i64_v2i16:
1420 ; CHECK:       # %bb.0:
1421 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1422 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
1423 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1424 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
1425 ; CHECK-NEXT:    vse16.v v8, (a0)
1426 ; CHECK-NEXT:    ret
1427   %y = trunc <2 x i64> %x to <2 x i16>
1428   store <2 x i16> %y, ptr %z
1429   ret void
1432 define void @truncstore_v2i64_v2i32(<2 x i64> %x, ptr %z) {
1433 ; CHECK-LABEL: truncstore_v2i64_v2i32:
1434 ; CHECK:       # %bb.0:
1435 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1436 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
1437 ; CHECK-NEXT:    vse32.v v8, (a0)
1438 ; CHECK-NEXT:    ret
1439   %y = trunc <2 x i64> %x to <2 x i32>
1440   store <2 x i32> %y, ptr %z
1441   ret void
1444 define void @truncstore_v4i64_v4i8(<4 x i64> %x, ptr %z) {
1445 ; LMULMAX1-LABEL: truncstore_v4i64_v4i8:
1446 ; LMULMAX1:       # %bb.0:
1447 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1448 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1449 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1450 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1451 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
1452 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1453 ; LMULMAX1-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
1454 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1455 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1456 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1457 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
1458 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1459 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
1460 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 2
1461 ; LMULMAX1-NEXT:    vse8.v v8, (a0)
1462 ; LMULMAX1-NEXT:    ret
1464 ; LMULMAX4-LABEL: truncstore_v4i64_v4i8:
1465 ; LMULMAX4:       # %bb.0:
1466 ; LMULMAX4-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1467 ; LMULMAX4-NEXT:    vnsrl.wi v10, v8, 0
1468 ; LMULMAX4-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1469 ; LMULMAX4-NEXT:    vnsrl.wi v8, v10, 0
1470 ; LMULMAX4-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
1471 ; LMULMAX4-NEXT:    vnsrl.wi v8, v8, 0
1472 ; LMULMAX4-NEXT:    vse8.v v8, (a0)
1473 ; LMULMAX4-NEXT:    ret
1474   %y = trunc <4 x i64> %x to <4 x i8>
1475   store <4 x i8> %y, ptr %z
1476   ret void
1479 define void @truncstore_v4i64_v4i16(<4 x i64> %x, ptr %z) {
1480 ; LMULMAX1-LABEL: truncstore_v4i64_v4i16:
1481 ; LMULMAX1:       # %bb.0:
1482 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1483 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1484 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1485 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1486 ; LMULMAX1-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
1487 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1488 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1489 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1490 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1491 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 2
1492 ; LMULMAX1-NEXT:    vse16.v v8, (a0)
1493 ; LMULMAX1-NEXT:    ret
1495 ; LMULMAX4-LABEL: truncstore_v4i64_v4i16:
1496 ; LMULMAX4:       # %bb.0:
1497 ; LMULMAX4-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1498 ; LMULMAX4-NEXT:    vnsrl.wi v10, v8, 0
1499 ; LMULMAX4-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1500 ; LMULMAX4-NEXT:    vnsrl.wi v8, v10, 0
1501 ; LMULMAX4-NEXT:    vse16.v v8, (a0)
1502 ; LMULMAX4-NEXT:    ret
1503   %y = trunc <4 x i64> %x to <4 x i16>
1504   store <4 x i16> %y, ptr %z
1505   ret void
1508 define void @truncstore_v4i64_v4i32(<4 x i64> %x, ptr %z) {
1509 ; LMULMAX1-LABEL: truncstore_v4i64_v4i32:
1510 ; LMULMAX1:       # %bb.0:
1511 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1512 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1513 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1514 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1515 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 2
1516 ; LMULMAX1-NEXT:    vse32.v v8, (a0)
1517 ; LMULMAX1-NEXT:    ret
1519 ; LMULMAX4-LABEL: truncstore_v4i64_v4i32:
1520 ; LMULMAX4:       # %bb.0:
1521 ; LMULMAX4-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1522 ; LMULMAX4-NEXT:    vnsrl.wi v10, v8, 0
1523 ; LMULMAX4-NEXT:    vse32.v v10, (a0)
1524 ; LMULMAX4-NEXT:    ret
1525   %y = trunc <4 x i64> %x to <4 x i32>
1526   store <4 x i32> %y, ptr %z
1527   ret void
1530 define void @truncstore_v8i64_v8i8(<8 x i64> %x, ptr %z) {
1531 ; LMULMAX1-LABEL: truncstore_v8i64_v8i8:
1532 ; LMULMAX1:       # %bb.0:
1533 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1534 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1535 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1536 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1537 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
1538 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1539 ; LMULMAX1-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
1540 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1541 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1542 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1543 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
1544 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1545 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
1546 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 2
1547 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1548 ; LMULMAX1-NEXT:    vnsrl.wi v9, v10, 0
1549 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1550 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1551 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
1552 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1553 ; LMULMAX1-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
1554 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 4
1555 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1556 ; LMULMAX1-NEXT:    vnsrl.wi v9, v11, 0
1557 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1558 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1559 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
1560 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1561 ; LMULMAX1-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
1562 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 6
1563 ; LMULMAX1-NEXT:    vse8.v v8, (a0)
1564 ; LMULMAX1-NEXT:    ret
1566 ; LMULMAX4-LABEL: truncstore_v8i64_v8i8:
1567 ; LMULMAX4:       # %bb.0:
1568 ; LMULMAX4-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
1569 ; LMULMAX4-NEXT:    vnsrl.wi v12, v8, 0
1570 ; LMULMAX4-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1571 ; LMULMAX4-NEXT:    vnsrl.wi v8, v12, 0
1572 ; LMULMAX4-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
1573 ; LMULMAX4-NEXT:    vnsrl.wi v8, v8, 0
1574 ; LMULMAX4-NEXT:    vse8.v v8, (a0)
1575 ; LMULMAX4-NEXT:    ret
1576   %y = trunc <8 x i64> %x to <8 x i8>
1577   store <8 x i8> %y, ptr %z
1578   ret void
1581 define void @truncstore_v8i64_v8i16(<8 x i64> %x, ptr %z) {
1582 ; LMULMAX1-LABEL: truncstore_v8i64_v8i16:
1583 ; LMULMAX1:       # %bb.0:
1584 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1585 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1586 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1587 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1588 ; LMULMAX1-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
1589 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1590 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1591 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1592 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
1593 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 2
1594 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1595 ; LMULMAX1-NEXT:    vnsrl.wi v9, v10, 0
1596 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1597 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1598 ; LMULMAX1-NEXT:    vsetivli zero, 6, e16, m1, tu, ma
1599 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 4
1600 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1601 ; LMULMAX1-NEXT:    vnsrl.wi v9, v11, 0
1602 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1603 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1604 ; LMULMAX1-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1605 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 6
1606 ; LMULMAX1-NEXT:    vse16.v v8, (a0)
1607 ; LMULMAX1-NEXT:    ret
1609 ; LMULMAX4-LABEL: truncstore_v8i64_v8i16:
1610 ; LMULMAX4:       # %bb.0:
1611 ; LMULMAX4-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
1612 ; LMULMAX4-NEXT:    vnsrl.wi v12, v8, 0
1613 ; LMULMAX4-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1614 ; LMULMAX4-NEXT:    vnsrl.wi v8, v12, 0
1615 ; LMULMAX4-NEXT:    vse16.v v8, (a0)
1616 ; LMULMAX4-NEXT:    ret
1617   %y = trunc <8 x i64> %x to <8 x i16>
1618   store <8 x i16> %y, ptr %z
1619   ret void
1622 define void @truncstore_v8i64_v8i32(<8 x i64> %x, ptr %z) {
1623 ; LMULMAX1-LABEL: truncstore_v8i64_v8i32:
1624 ; LMULMAX1:       # %bb.0:
1625 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1626 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1627 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1628 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1629 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 2
1630 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1631 ; LMULMAX1-NEXT:    vnsrl.wi v9, v11, 0
1632 ; LMULMAX1-NEXT:    vnsrl.wi v10, v10, 0
1633 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1634 ; LMULMAX1-NEXT:    vslideup.vi v10, v9, 2
1635 ; LMULMAX1-NEXT:    addi a1, a0, 16
1636 ; LMULMAX1-NEXT:    vse32.v v10, (a1)
1637 ; LMULMAX1-NEXT:    vse32.v v8, (a0)
1638 ; LMULMAX1-NEXT:    ret
1640 ; LMULMAX4-LABEL: truncstore_v8i64_v8i32:
1641 ; LMULMAX4:       # %bb.0:
1642 ; LMULMAX4-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
1643 ; LMULMAX4-NEXT:    vnsrl.wi v12, v8, 0
1644 ; LMULMAX4-NEXT:    vse32.v v12, (a0)
1645 ; LMULMAX4-NEXT:    ret
1646   %y = trunc <8 x i64> %x to <8 x i32>
1647   store <8 x i32> %y, ptr %z
1648   ret void
1651 define void @truncstore_v16i64_v16i8(<16 x i64> %x, ptr %z) {
1652 ; LMULMAX1-LABEL: truncstore_v16i64_v16i8:
1653 ; LMULMAX1:       # %bb.0:
1654 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1655 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1656 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1657 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1658 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
1659 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1660 ; LMULMAX1-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
1661 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1662 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1663 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1664 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
1665 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1666 ; LMULMAX1-NEXT:    vsetivli zero, 4, e8, m1, tu, ma
1667 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 2
1668 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1669 ; LMULMAX1-NEXT:    vnsrl.wi v9, v10, 0
1670 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1671 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1672 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
1673 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1674 ; LMULMAX1-NEXT:    vsetivli zero, 6, e8, m1, tu, ma
1675 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 4
1676 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1677 ; LMULMAX1-NEXT:    vnsrl.wi v9, v11, 0
1678 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1679 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1680 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
1681 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1682 ; LMULMAX1-NEXT:    vsetivli zero, 8, e8, m1, tu, ma
1683 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 6
1684 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1685 ; LMULMAX1-NEXT:    vnsrl.wi v9, v12, 0
1686 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1687 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1688 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
1689 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1690 ; LMULMAX1-NEXT:    vsetivli zero, 10, e8, m1, tu, ma
1691 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 8
1692 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1693 ; LMULMAX1-NEXT:    vnsrl.wi v9, v13, 0
1694 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1695 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1696 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
1697 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1698 ; LMULMAX1-NEXT:    vsetivli zero, 12, e8, m1, tu, ma
1699 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 10
1700 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1701 ; LMULMAX1-NEXT:    vnsrl.wi v9, v14, 0
1702 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1703 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1704 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
1705 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1706 ; LMULMAX1-NEXT:    vsetivli zero, 14, e8, m1, tu, ma
1707 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 12
1708 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1709 ; LMULMAX1-NEXT:    vnsrl.wi v9, v15, 0
1710 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1711 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1712 ; LMULMAX1-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma
1713 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1714 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
1715 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 14
1716 ; LMULMAX1-NEXT:    vse8.v v8, (a0)
1717 ; LMULMAX1-NEXT:    ret
1719 ; LMULMAX4-LABEL: truncstore_v16i64_v16i8:
1720 ; LMULMAX4:       # %bb.0:
1721 ; LMULMAX4-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
1722 ; LMULMAX4-NEXT:    vnsrl.wi v16, v12, 0
1723 ; LMULMAX4-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1724 ; LMULMAX4-NEXT:    vnsrl.wi v12, v16, 0
1725 ; LMULMAX4-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
1726 ; LMULMAX4-NEXT:    vnsrl.wi v12, v12, 0
1727 ; LMULMAX4-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
1728 ; LMULMAX4-NEXT:    vnsrl.wi v14, v8, 0
1729 ; LMULMAX4-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1730 ; LMULMAX4-NEXT:    vnsrl.wi v8, v14, 0
1731 ; LMULMAX4-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
1732 ; LMULMAX4-NEXT:    vnsrl.wi v8, v8, 0
1733 ; LMULMAX4-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
1734 ; LMULMAX4-NEXT:    vslideup.vi v8, v12, 8
1735 ; LMULMAX4-NEXT:    vse8.v v8, (a0)
1736 ; LMULMAX4-NEXT:    ret
1737   %y = trunc <16 x i64> %x to <16 x i8>
1738   store <16 x i8> %y, ptr %z
1739   ret void
1742 define void @truncstore_v16i64_v16i16(<16 x i64> %x, ptr %z) {
1743 ; LMULMAX1-LABEL: truncstore_v16i64_v16i16:
1744 ; LMULMAX1:       # %bb.0:
1745 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1746 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1747 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1748 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1749 ; LMULMAX1-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
1750 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1751 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1752 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1753 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
1754 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 2
1755 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1756 ; LMULMAX1-NEXT:    vnsrl.wi v9, v10, 0
1757 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1758 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1759 ; LMULMAX1-NEXT:    vsetivli zero, 6, e16, m1, tu, ma
1760 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 4
1761 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1762 ; LMULMAX1-NEXT:    vnsrl.wi v9, v11, 0
1763 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1764 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1765 ; LMULMAX1-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1766 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 6
1767 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1768 ; LMULMAX1-NEXT:    vnsrl.wi v9, v13, 0
1769 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1770 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1771 ; LMULMAX1-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
1772 ; LMULMAX1-NEXT:    vnsrl.wi v10, v12, 0
1773 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1774 ; LMULMAX1-NEXT:    vnsrl.wi v10, v10, 0
1775 ; LMULMAX1-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
1776 ; LMULMAX1-NEXT:    vslideup.vi v10, v9, 2
1777 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1778 ; LMULMAX1-NEXT:    vnsrl.wi v9, v14, 0
1779 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1780 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1781 ; LMULMAX1-NEXT:    vsetivli zero, 6, e16, m1, tu, ma
1782 ; LMULMAX1-NEXT:    vslideup.vi v10, v9, 4
1783 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1784 ; LMULMAX1-NEXT:    vnsrl.wi v9, v15, 0
1785 ; LMULMAX1-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1786 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1787 ; LMULMAX1-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1788 ; LMULMAX1-NEXT:    vslideup.vi v10, v9, 6
1789 ; LMULMAX1-NEXT:    addi a1, a0, 16
1790 ; LMULMAX1-NEXT:    vse16.v v10, (a1)
1791 ; LMULMAX1-NEXT:    vse16.v v8, (a0)
1792 ; LMULMAX1-NEXT:    ret
1794 ; LMULMAX4-LABEL: truncstore_v16i64_v16i16:
1795 ; LMULMAX4:       # %bb.0:
1796 ; LMULMAX4-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
1797 ; LMULMAX4-NEXT:    vnsrl.wi v16, v12, 0
1798 ; LMULMAX4-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1799 ; LMULMAX4-NEXT:    vnsrl.wi v12, v16, 0
1800 ; LMULMAX4-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
1801 ; LMULMAX4-NEXT:    vnsrl.wi v14, v8, 0
1802 ; LMULMAX4-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1803 ; LMULMAX4-NEXT:    vnsrl.wi v8, v14, 0
1804 ; LMULMAX4-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
1805 ; LMULMAX4-NEXT:    vslideup.vi v8, v12, 8
1806 ; LMULMAX4-NEXT:    vse16.v v8, (a0)
1807 ; LMULMAX4-NEXT:    ret
1808   %y = trunc <16 x i64> %x to <16 x i16>
1809   store <16 x i16> %y, ptr %z
1810   ret void
1813 define void @truncstore_v16i64_v16i32(<16 x i64> %x, ptr %z) {
1814 ; LMULMAX1-LABEL: truncstore_v16i64_v16i32:
1815 ; LMULMAX1:       # %bb.0:
1816 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1817 ; LMULMAX1-NEXT:    vnsrl.wi v9, v9, 0
1818 ; LMULMAX1-NEXT:    vnsrl.wi v8, v8, 0
1819 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1820 ; LMULMAX1-NEXT:    vslideup.vi v8, v9, 2
1821 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1822 ; LMULMAX1-NEXT:    vnsrl.wi v9, v11, 0
1823 ; LMULMAX1-NEXT:    vnsrl.wi v10, v10, 0
1824 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1825 ; LMULMAX1-NEXT:    vslideup.vi v10, v9, 2
1826 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1827 ; LMULMAX1-NEXT:    vnsrl.wi v9, v13, 0
1828 ; LMULMAX1-NEXT:    vnsrl.wi v11, v12, 0
1829 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1830 ; LMULMAX1-NEXT:    vslideup.vi v11, v9, 2
1831 ; LMULMAX1-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
1832 ; LMULMAX1-NEXT:    vnsrl.wi v9, v15, 0
1833 ; LMULMAX1-NEXT:    vnsrl.wi v12, v14, 0
1834 ; LMULMAX1-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1835 ; LMULMAX1-NEXT:    vslideup.vi v12, v9, 2
1836 ; LMULMAX1-NEXT:    addi a1, a0, 48
1837 ; LMULMAX1-NEXT:    vse32.v v12, (a1)
1838 ; LMULMAX1-NEXT:    addi a1, a0, 32
1839 ; LMULMAX1-NEXT:    vse32.v v11, (a1)
1840 ; LMULMAX1-NEXT:    addi a1, a0, 16
1841 ; LMULMAX1-NEXT:    vse32.v v10, (a1)
1842 ; LMULMAX1-NEXT:    vse32.v v8, (a0)
1843 ; LMULMAX1-NEXT:    ret
1845 ; LMULMAX4-LABEL: truncstore_v16i64_v16i32:
1846 ; LMULMAX4:       # %bb.0:
1847 ; LMULMAX4-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
1848 ; LMULMAX4-NEXT:    vnsrl.wi v16, v12, 0
1849 ; LMULMAX4-NEXT:    vnsrl.wi v12, v8, 0
1850 ; LMULMAX4-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
1851 ; LMULMAX4-NEXT:    vslideup.vi v12, v16, 8
1852 ; LMULMAX4-NEXT:    vse32.v v12, (a0)
1853 ; LMULMAX4-NEXT:    ret
1854   %y = trunc <16 x i64> %x to <16 x i32>
1855   store <16 x i32> %y, ptr %z
1856   ret void