[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / llvm / test / CodeGen / RISCV / GlobalISel / regbankselect / rvv / store.mir
blobceef1680fbf761b630b08abcca32ce17d7042f13
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=riscv32 -mattr=+m,+v -run-pass=regbankselect \
3 # RUN:   -simplify-mir -verify-machineinstrs %s \
4 # RUN:   -o - | FileCheck -check-prefix=RV32I %s
5 # RUN: llc -mtriple=riscv64 -mattr=+m,+v -run-pass=regbankselect \
6 # RUN:   -simplify-mir -verify-machineinstrs %s \
7 # RUN:   -o - | FileCheck -check-prefix=RV64I %s
8 --- |
10   define void @vstore_nx1i8(ptr %pa, <vscale x 1 x i8> %b) #0 {
11     store <vscale x 1 x i8> %b, ptr %pa, align 1
12     ret void
13   }
15   define void @vstore_nx2i8(ptr %pa, <vscale x 2 x i8> %b) #0 {
16     store <vscale x 2 x i8> %b, ptr %pa, align 2
17     ret void
18   }
20   define void @vstore_nx4i8(ptr %pa, <vscale x 4 x i8> %b) #0 {
21     store <vscale x 4 x i8> %b, ptr %pa, align 4
22     ret void
23   }
25   define void @vstore_nx8i8(ptr %pa, <vscale x 8 x i8> %b) #0 {
26     store <vscale x 8 x i8> %b, ptr %pa, align 8
27     ret void
28   }
30   define void @vstore_nx16i8(ptr %pa, <vscale x 16 x i8> %b) #0 {
31     store <vscale x 16 x i8> %b, ptr %pa, align 16
32     ret void
33   }
35   define void @vstore_nx32i8(ptr %pa, <vscale x 32 x i8> %b) #0 {
36     store <vscale x 32 x i8> %b, ptr %pa, align 32
37     ret void
38   }
40   define void @vstore_nx64i8(ptr %pa, <vscale x 64 x i8> %b) #0 {
41     store <vscale x 64 x i8> %b, ptr %pa, align 64
42     ret void
43   }
45   define void @vstore_nx1i16(ptr %pa, <vscale x 1 x i16> %b) #0 {
46     store <vscale x 1 x i16> %b, ptr %pa, align 2
47     ret void
48   }
50   define void @vstore_nx2i16(ptr %pa, <vscale x 2 x i16> %b) #0 {
51     store <vscale x 2 x i16> %b, ptr %pa, align 4
52     ret void
53   }
55   define void @vstore_nx4i16(ptr %pa, <vscale x 4 x i16> %b) #0 {
56     store <vscale x 4 x i16> %b, ptr %pa, align 8
57     ret void
58   }
60   define void @vstore_nx8i16(ptr %pa, <vscale x 8 x i16> %b) #0 {
61     store <vscale x 8 x i16> %b, ptr %pa, align 16
62     ret void
63   }
65   define void @vstore_nx16i16(ptr %pa, <vscale x 16 x i16> %b) #0 {
66     store <vscale x 16 x i16> %b, ptr %pa, align 32
67     ret void
68   }
70   define void @vstore_nx32i16(ptr %pa, <vscale x 32 x i16> %b) #0 {
71     store <vscale x 32 x i16> %b, ptr %pa, align 64
72     ret void
73   }
75   define void @vstore_nx1i32(ptr %pa, <vscale x 1 x i32> %b) #0 {
76     store <vscale x 1 x i32> %b, ptr %pa, align 4
77     ret void
78   }
80   define void @vstore_nx2i32(ptr %pa, <vscale x 2 x i32> %b) #0 {
81     store <vscale x 2 x i32> %b, ptr %pa, align 8
82     ret void
83   }
85   define void @vstore_nx4i32(ptr %pa, <vscale x 4 x i32> %b) #0 {
86     store <vscale x 4 x i32> %b, ptr %pa, align 16
87     ret void
88   }
90   define void @vstore_nx8i32(ptr %pa, <vscale x 8 x i32> %b) #0 {
91     store <vscale x 8 x i32> %b, ptr %pa, align 32
92     ret void
93   }
95   define void @vstore_nx16i32(ptr %pa, <vscale x 16 x i32> %b) #0 {
96     store <vscale x 16 x i32> %b, ptr %pa, align 64
97     ret void
98   }
100   define void @vstore_nx1i64(ptr %pa, <vscale x 1 x i64> %b) #0 {
101     store <vscale x 1 x i64> %b, ptr %pa, align 8
102     ret void
103   }
105   define void @vstore_nx2i64(ptr %pa, <vscale x 2 x i64> %b) #0 {
106     store <vscale x 2 x i64> %b, ptr %pa, align 16
107     ret void
108   }
110   define void @vstore_nx4i64(ptr %pa, <vscale x 4 x i64> %b) #0 {
111     store <vscale x 4 x i64> %b, ptr %pa, align 32
112     ret void
113   }
115   define void @vstore_nx8i64(ptr %pa, <vscale x 8 x i64> %b) #0 {
116     store <vscale x 8 x i64> %b, ptr %pa, align 64
117     ret void
118   }
120   define void @vstore_nx16i8_align1(ptr %pa, <vscale x 16 x i8> %b) #0 {
121     store <vscale x 16 x i8> %b, ptr %pa, align 1
122     ret void
123   }
125   define void @vstore_nx16i8_align2(ptr %pa, <vscale x 16 x i8> %b) #0 {
126     store <vscale x 16 x i8> %b, ptr %pa, align 2
127     ret void
128   }
130   define void @vstore_nx16i8_align16(ptr %pa, <vscale x 16 x i8> %b) #0 {
131     store <vscale x 16 x i8> %b, ptr %pa, align 16
132     ret void
133   }
135   define void @vstore_nx16i8_align64(ptr %pa, <vscale x 16 x i8> %b) #0 {
136     store <vscale x 16 x i8> %b, ptr %pa, align 64
137     ret void
138   }
140   define void @vstore_nx4i16_align1(ptr %pa, <vscale x 4 x i16> %b) #0 {
141     store <vscale x 4 x i16> %b, ptr %pa, align 1
142     ret void
143   }
145   define void @vstore_nx4i16_align2(ptr %pa, <vscale x 4 x i16> %b) #0 {
146     store <vscale x 4 x i16> %b, ptr %pa, align 2
147     ret void
148   }
150   define void @vstore_nx4i16_align4(ptr %pa, <vscale x 4 x i16> %b) #0 {
151     store <vscale x 4 x i16> %b, ptr %pa, align 4
152     ret void
153   }
155   define void @vstore_nx4i16_align8(ptr %pa, <vscale x 4 x i16> %b) #0 {
156     store <vscale x 4 x i16> %b, ptr %pa, align 8
157     ret void
158   }
160   define void @vstore_nx4i16_align16(ptr %pa, <vscale x 4 x i16> %b) #0 {
161     store <vscale x 4 x i16> %b, ptr %pa, align 16
162     ret void
163   }
165   define void @vstore_nx2i32_align2(ptr %pa, <vscale x 2 x i32> %b) #0 {
166     store <vscale x 2 x i32> %b, ptr %pa, align 2
167     ret void
168   }
170   define void @vstore_nx2i32_align4(ptr %pa, <vscale x 2 x i32> %b) #0 {
171     store <vscale x 2 x i32> %b, ptr %pa, align 4
172     ret void
173   }
175   define void @vstore_nx2i32_align8(ptr %pa, <vscale x 2 x i32> %b) #0 {
176     store <vscale x 2 x i32> %b, ptr %pa, align 8
177     ret void
178   }
180   define void @vstore_nx2i32_align16(ptr %pa, <vscale x 2 x i32> %b) #0 {
181     store <vscale x 2 x i32> %b, ptr %pa, align 16
182     ret void
183   }
185   define void @vstore_nx2i32_align256(ptr %pa, <vscale x 2 x i32> %b) #0 {
186     store <vscale x 2 x i32> %b, ptr %pa, align 256
187     ret void
188   }
190   define void @vstore_nx2i64_align4(ptr %pa, <vscale x 2 x i64> %b) #0 {
191     store <vscale x 2 x i64> %b, ptr %pa, align 4
192     ret void
193   }
195   define void @vstore_nx2i64_align8(ptr %pa, <vscale x 2 x i64> %b) #0 {
196     store <vscale x 2 x i64> %b, ptr %pa, align 8
197     ret void
198   }
200   define void @vstore_nx2i64_align16(ptr %pa, <vscale x 2 x i64> %b) #0 {
201     store <vscale x 2 x i64> %b, ptr %pa, align 16
202     ret void
203   }
205   define void @vstore_nx2i64_align32(ptr %pa, <vscale x 2 x i64> %b) #0 {
206     store <vscale x 2 x i64> %b, ptr %pa, align 32
207     ret void
208   }
210   define void @vstore_nx1ptr(ptr %pa, <vscale x 1 x ptr> %b) #0 {
211     store <vscale x 1 x ptr> %b, ptr %pa, align 4
212     ret void
213   }
215   define void @vstore_nx2ptr(ptr %pa, <vscale x 2 x ptr> %b) #0 {
216     store <vscale x 2 x ptr> %b, ptr %pa, align 8
217     ret void
218   }
220   define void @vstore_nx8ptr(ptr %pa, <vscale x 8 x ptr> %b) #0 {
221     store <vscale x 8 x ptr> %b, ptr %pa, align 32
222     ret void
223   }
227 name:            vstore_nx1i8
228 legalized:       true
229 tracksRegLiveness: true
230 body:             |
231   bb.1 (%ir-block.0):
232     liveins: $v8, $x10
234     ; RV32I-LABEL: name: vstore_nx1i8
235     ; RV32I: liveins: $v8, $x10
236     ; RV32I-NEXT: {{  $}}
237     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
238     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 1 x s8>) = COPY $v8
239     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 1 x s8>), [[COPY]](p0) :: (store (<vscale x 1 x s8>) into %ir.pa)
240     ; RV32I-NEXT: PseudoRET
241     ;
242     ; RV64I-LABEL: name: vstore_nx1i8
243     ; RV64I: liveins: $v8, $x10
244     ; RV64I-NEXT: {{  $}}
245     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
246     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 1 x s8>) = COPY $v8
247     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 1 x s8>), [[COPY]](p0) :: (store (<vscale x 1 x s8>) into %ir.pa)
248     ; RV64I-NEXT: PseudoRET
249     %0:_(p0) = COPY $x10
250     %1:_(<vscale x 1 x s8>) = COPY $v8
251     G_STORE %1(<vscale x 1 x s8>), %0(p0) :: (store (<vscale x 1 x s8>) into %ir.pa)
252     PseudoRET
256 name:            vstore_nx2i8
257 legalized:       true
258 tracksRegLiveness: true
259 body:             |
260   bb.1 (%ir-block.0):
261     liveins: $v8, $x10
263     ; RV32I-LABEL: name: vstore_nx2i8
264     ; RV32I: liveins: $v8, $x10
265     ; RV32I-NEXT: {{  $}}
266     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
267     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s8>) = COPY $v8
268     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s8>), [[COPY]](p0) :: (store (<vscale x 2 x s8>) into %ir.pa)
269     ; RV32I-NEXT: PseudoRET
270     ;
271     ; RV64I-LABEL: name: vstore_nx2i8
272     ; RV64I: liveins: $v8, $x10
273     ; RV64I-NEXT: {{  $}}
274     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
275     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s8>) = COPY $v8
276     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s8>), [[COPY]](p0) :: (store (<vscale x 2 x s8>) into %ir.pa)
277     ; RV64I-NEXT: PseudoRET
278     %0:_(p0) = COPY $x10
279     %1:_(<vscale x 2 x s8>) = COPY $v8
280     G_STORE %1(<vscale x 2 x s8>), %0(p0) :: (store (<vscale x 2 x s8>) into %ir.pa)
281     PseudoRET
285 name:            vstore_nx4i8
286 legalized:       true
287 tracksRegLiveness: true
288 body:             |
289   bb.1 (%ir-block.0):
290     liveins: $v8, $x10
292     ; RV32I-LABEL: name: vstore_nx4i8
293     ; RV32I: liveins: $v8, $x10
294     ; RV32I-NEXT: {{  $}}
295     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
296     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s8>) = COPY $v8
297     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 4 x s8>), [[COPY]](p0) :: (store (<vscale x 4 x s8>) into %ir.pa)
298     ; RV32I-NEXT: PseudoRET
299     ;
300     ; RV64I-LABEL: name: vstore_nx4i8
301     ; RV64I: liveins: $v8, $x10
302     ; RV64I-NEXT: {{  $}}
303     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
304     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s8>) = COPY $v8
305     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 4 x s8>), [[COPY]](p0) :: (store (<vscale x 4 x s8>) into %ir.pa)
306     ; RV64I-NEXT: PseudoRET
307     %0:_(p0) = COPY $x10
308     %1:_(<vscale x 4 x s8>) = COPY $v8
309     G_STORE %1(<vscale x 4 x s8>), %0(p0) :: (store (<vscale x 4 x s8>) into %ir.pa)
310     PseudoRET
314 name:            vstore_nx8i8
315 legalized:       true
316 tracksRegLiveness: true
317 body:             |
318   bb.1 (%ir-block.0):
319     liveins: $v8, $x10
321     ; RV32I-LABEL: name: vstore_nx8i8
322     ; RV32I: liveins: $v8, $x10
323     ; RV32I-NEXT: {{  $}}
324     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
325     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 8 x s8>) = COPY $v8
326     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 8 x s8>), [[COPY]](p0) :: (store (<vscale x 8 x s8>) into %ir.pa)
327     ; RV32I-NEXT: PseudoRET
328     ;
329     ; RV64I-LABEL: name: vstore_nx8i8
330     ; RV64I: liveins: $v8, $x10
331     ; RV64I-NEXT: {{  $}}
332     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
333     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 8 x s8>) = COPY $v8
334     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 8 x s8>), [[COPY]](p0) :: (store (<vscale x 8 x s8>) into %ir.pa)
335     ; RV64I-NEXT: PseudoRET
336     %0:_(p0) = COPY $x10
337     %1:_(<vscale x 8 x s8>) = COPY $v8
338     G_STORE %1(<vscale x 8 x s8>), %0(p0) :: (store (<vscale x 8 x s8>) into %ir.pa)
339     PseudoRET
343 name:            vstore_nx16i8
344 legalized:       true
345 tracksRegLiveness: true
346 body:             |
347   bb.1 (%ir-block.0):
348     liveins: $x10, $v8m2
350     ; RV32I-LABEL: name: vstore_nx16i8
351     ; RV32I: liveins: $x10, $v8m2
352     ; RV32I-NEXT: {{  $}}
353     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
354     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 16 x s8>) = COPY $v8m2
355     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 16 x s8>), [[COPY]](p0) :: (store (<vscale x 16 x s8>) into %ir.pa)
356     ; RV32I-NEXT: PseudoRET
357     ;
358     ; RV64I-LABEL: name: vstore_nx16i8
359     ; RV64I: liveins: $x10, $v8m2
360     ; RV64I-NEXT: {{  $}}
361     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
362     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 16 x s8>) = COPY $v8m2
363     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 16 x s8>), [[COPY]](p0) :: (store (<vscale x 16 x s8>) into %ir.pa)
364     ; RV64I-NEXT: PseudoRET
365     %0:_(p0) = COPY $x10
366     %1:_(<vscale x 16 x s8>) = COPY $v8m2
367     G_STORE %1(<vscale x 16 x s8>), %0(p0) :: (store (<vscale x 16 x s8>) into %ir.pa)
368     PseudoRET
372 name:            vstore_nx32i8
373 legalized:       true
374 tracksRegLiveness: true
375 body:             |
376   bb.1 (%ir-block.0):
377     liveins: $x10, $v8m4
379     ; RV32I-LABEL: name: vstore_nx32i8
380     ; RV32I: liveins: $x10, $v8m4
381     ; RV32I-NEXT: {{  $}}
382     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
383     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 32 x s8>) = COPY $v8m4
384     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 32 x s8>), [[COPY]](p0) :: (store (<vscale x 32 x s8>) into %ir.pa)
385     ; RV32I-NEXT: PseudoRET
386     ;
387     ; RV64I-LABEL: name: vstore_nx32i8
388     ; RV64I: liveins: $x10, $v8m4
389     ; RV64I-NEXT: {{  $}}
390     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
391     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 32 x s8>) = COPY $v8m4
392     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 32 x s8>), [[COPY]](p0) :: (store (<vscale x 32 x s8>) into %ir.pa)
393     ; RV64I-NEXT: PseudoRET
394     %0:_(p0) = COPY $x10
395     %1:_(<vscale x 32 x s8>) = COPY $v8m4
396     G_STORE %1(<vscale x 32 x s8>), %0(p0) :: (store (<vscale x 32 x s8>) into %ir.pa)
397     PseudoRET
401 name:            vstore_nx64i8
402 legalized:       true
403 tracksRegLiveness: true
404 body:             |
405   bb.1 (%ir-block.0):
406     liveins: $x10, $v8m8
408     ; RV32I-LABEL: name: vstore_nx64i8
409     ; RV32I: liveins: $x10, $v8m8
410     ; RV32I-NEXT: {{  $}}
411     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
412     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 64 x s8>) = COPY $v8m8
413     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 64 x s8>), [[COPY]](p0) :: (store (<vscale x 64 x s8>) into %ir.pa)
414     ; RV32I-NEXT: PseudoRET
415     ;
416     ; RV64I-LABEL: name: vstore_nx64i8
417     ; RV64I: liveins: $x10, $v8m8
418     ; RV64I-NEXT: {{  $}}
419     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
420     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 64 x s8>) = COPY $v8m8
421     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 64 x s8>), [[COPY]](p0) :: (store (<vscale x 64 x s8>) into %ir.pa)
422     ; RV64I-NEXT: PseudoRET
423     %0:_(p0) = COPY $x10
424     %1:_(<vscale x 64 x s8>) = COPY $v8m8
425     G_STORE %1(<vscale x 64 x s8>), %0(p0) :: (store (<vscale x 64 x s8>) into %ir.pa)
426     PseudoRET
430 name:            vstore_nx1i16
431 legalized:       true
432 tracksRegLiveness: true
433 body:             |
434   bb.1 (%ir-block.0):
435     liveins: $v8, $x10
437     ; RV32I-LABEL: name: vstore_nx1i16
438     ; RV32I: liveins: $v8, $x10
439     ; RV32I-NEXT: {{  $}}
440     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
441     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 1 x s16>) = COPY $v8
442     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 1 x s16>), [[COPY]](p0) :: (store (<vscale x 1 x s16>) into %ir.pa)
443     ; RV32I-NEXT: PseudoRET
444     ;
445     ; RV64I-LABEL: name: vstore_nx1i16
446     ; RV64I: liveins: $v8, $x10
447     ; RV64I-NEXT: {{  $}}
448     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
449     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 1 x s16>) = COPY $v8
450     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 1 x s16>), [[COPY]](p0) :: (store (<vscale x 1 x s16>) into %ir.pa)
451     ; RV64I-NEXT: PseudoRET
452     %0:_(p0) = COPY $x10
453     %1:_(<vscale x 1 x s16>) = COPY $v8
454     G_STORE %1(<vscale x 1 x s16>), %0(p0) :: (store (<vscale x 1 x s16>) into %ir.pa)
455     PseudoRET
459 name:            vstore_nx2i16
460 legalized:       true
461 tracksRegLiveness: true
462 body:             |
463   bb.1 (%ir-block.0):
464     liveins: $v8, $x10
466     ; RV32I-LABEL: name: vstore_nx2i16
467     ; RV32I: liveins: $v8, $x10
468     ; RV32I-NEXT: {{  $}}
469     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
470     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s16>) = COPY $v8
471     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s16>), [[COPY]](p0) :: (store (<vscale x 2 x s16>) into %ir.pa)
472     ; RV32I-NEXT: PseudoRET
473     ;
474     ; RV64I-LABEL: name: vstore_nx2i16
475     ; RV64I: liveins: $v8, $x10
476     ; RV64I-NEXT: {{  $}}
477     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
478     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s16>) = COPY $v8
479     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s16>), [[COPY]](p0) :: (store (<vscale x 2 x s16>) into %ir.pa)
480     ; RV64I-NEXT: PseudoRET
481     %0:_(p0) = COPY $x10
482     %1:_(<vscale x 2 x s16>) = COPY $v8
483     G_STORE %1(<vscale x 2 x s16>), %0(p0) :: (store (<vscale x 2 x s16>) into %ir.pa)
484     PseudoRET
488 name:            vstore_nx4i16
489 legalized:       true
490 tracksRegLiveness: true
491 body:             |
492   bb.1 (%ir-block.0):
493     liveins: $v8, $x10
495     ; RV32I-LABEL: name: vstore_nx4i16
496     ; RV32I: liveins: $v8, $x10
497     ; RV32I-NEXT: {{  $}}
498     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
499     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s16>) = COPY $v8
500     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 4 x s16>), [[COPY]](p0) :: (store (<vscale x 4 x s16>) into %ir.pa)
501     ; RV32I-NEXT: PseudoRET
502     ;
503     ; RV64I-LABEL: name: vstore_nx4i16
504     ; RV64I: liveins: $v8, $x10
505     ; RV64I-NEXT: {{  $}}
506     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
507     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s16>) = COPY $v8
508     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 4 x s16>), [[COPY]](p0) :: (store (<vscale x 4 x s16>) into %ir.pa)
509     ; RV64I-NEXT: PseudoRET
510     %0:_(p0) = COPY $x10
511     %1:_(<vscale x 4 x s16>) = COPY $v8
512     G_STORE %1(<vscale x 4 x s16>), %0(p0) :: (store (<vscale x 4 x s16>) into %ir.pa)
513     PseudoRET
517 name:            vstore_nx8i16
518 legalized:       true
519 tracksRegLiveness: true
520 body:             |
521   bb.1 (%ir-block.0):
522     liveins: $x10, $v8m2
524     ; RV32I-LABEL: name: vstore_nx8i16
525     ; RV32I: liveins: $x10, $v8m2
526     ; RV32I-NEXT: {{  $}}
527     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
528     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 8 x s16>) = COPY $v8m2
529     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 8 x s16>), [[COPY]](p0) :: (store (<vscale x 8 x s16>) into %ir.pa)
530     ; RV32I-NEXT: PseudoRET
531     ;
532     ; RV64I-LABEL: name: vstore_nx8i16
533     ; RV64I: liveins: $x10, $v8m2
534     ; RV64I-NEXT: {{  $}}
535     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
536     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 8 x s16>) = COPY $v8m2
537     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 8 x s16>), [[COPY]](p0) :: (store (<vscale x 8 x s16>) into %ir.pa)
538     ; RV64I-NEXT: PseudoRET
539     %0:_(p0) = COPY $x10
540     %1:_(<vscale x 8 x s16>) = COPY $v8m2
541     G_STORE %1(<vscale x 8 x s16>), %0(p0) :: (store (<vscale x 8 x s16>) into %ir.pa)
542     PseudoRET
546 name:            vstore_nx16i16
547 legalized:       true
548 tracksRegLiveness: true
549 body:             |
550   bb.1 (%ir-block.0):
551     liveins: $x10, $v8m4
553     ; RV32I-LABEL: name: vstore_nx16i16
554     ; RV32I: liveins: $x10, $v8m4
555     ; RV32I-NEXT: {{  $}}
556     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
557     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 16 x s16>) = COPY $v8m4
558     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 16 x s16>), [[COPY]](p0) :: (store (<vscale x 16 x s16>) into %ir.pa)
559     ; RV32I-NEXT: PseudoRET
560     ;
561     ; RV64I-LABEL: name: vstore_nx16i16
562     ; RV64I: liveins: $x10, $v8m4
563     ; RV64I-NEXT: {{  $}}
564     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
565     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 16 x s16>) = COPY $v8m4
566     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 16 x s16>), [[COPY]](p0) :: (store (<vscale x 16 x s16>) into %ir.pa)
567     ; RV64I-NEXT: PseudoRET
568     %0:_(p0) = COPY $x10
569     %1:_(<vscale x 16 x s16>) = COPY $v8m4
570     G_STORE %1(<vscale x 16 x s16>), %0(p0) :: (store (<vscale x 16 x s16>) into %ir.pa)
571     PseudoRET
575 name:            vstore_nx32i16
576 legalized:       true
577 tracksRegLiveness: true
578 body:             |
579   bb.1 (%ir-block.0):
580     liveins: $x10, $v8m8
582     ; RV32I-LABEL: name: vstore_nx32i16
583     ; RV32I: liveins: $x10, $v8m8
584     ; RV32I-NEXT: {{  $}}
585     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
586     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 32 x s16>) = COPY $v8m8
587     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 32 x s16>), [[COPY]](p0) :: (store (<vscale x 32 x s16>) into %ir.pa)
588     ; RV32I-NEXT: PseudoRET
589     ;
590     ; RV64I-LABEL: name: vstore_nx32i16
591     ; RV64I: liveins: $x10, $v8m8
592     ; RV64I-NEXT: {{  $}}
593     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
594     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 32 x s16>) = COPY $v8m8
595     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 32 x s16>), [[COPY]](p0) :: (store (<vscale x 32 x s16>) into %ir.pa)
596     ; RV64I-NEXT: PseudoRET
597     %0:_(p0) = COPY $x10
598     %1:_(<vscale x 32 x s16>) = COPY $v8m8
599     G_STORE %1(<vscale x 32 x s16>), %0(p0) :: (store (<vscale x 32 x s16>) into %ir.pa)
600     PseudoRET
604 name:            vstore_nx1i32
605 legalized:       true
606 tracksRegLiveness: true
607 body:             |
608   bb.1 (%ir-block.0):
609     liveins: $v8, $x10
611     ; RV32I-LABEL: name: vstore_nx1i32
612     ; RV32I: liveins: $v8, $x10
613     ; RV32I-NEXT: {{  $}}
614     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
615     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 1 x s32>) = COPY $v8
616     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 1 x s32>), [[COPY]](p0) :: (store (<vscale x 1 x s32>) into %ir.pa)
617     ; RV32I-NEXT: PseudoRET
618     ;
619     ; RV64I-LABEL: name: vstore_nx1i32
620     ; RV64I: liveins: $v8, $x10
621     ; RV64I-NEXT: {{  $}}
622     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
623     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 1 x s32>) = COPY $v8
624     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 1 x s32>), [[COPY]](p0) :: (store (<vscale x 1 x s32>) into %ir.pa)
625     ; RV64I-NEXT: PseudoRET
626     %0:_(p0) = COPY $x10
627     %1:_(<vscale x 1 x s32>) = COPY $v8
628     G_STORE %1(<vscale x 1 x s32>), %0(p0) :: (store (<vscale x 1 x s32>) into %ir.pa)
629     PseudoRET
633 name:            vstore_nx2i32
634 legalized:       true
635 tracksRegLiveness: true
636 body:             |
637   bb.1 (%ir-block.0):
638     liveins: $v8, $x10
640     ; RV32I-LABEL: name: vstore_nx2i32
641     ; RV32I: liveins: $v8, $x10
642     ; RV32I-NEXT: {{  $}}
643     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
644     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s32>) = COPY $v8
645     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s32>), [[COPY]](p0) :: (store (<vscale x 2 x s32>) into %ir.pa)
646     ; RV32I-NEXT: PseudoRET
647     ;
648     ; RV64I-LABEL: name: vstore_nx2i32
649     ; RV64I: liveins: $v8, $x10
650     ; RV64I-NEXT: {{  $}}
651     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
652     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s32>) = COPY $v8
653     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s32>), [[COPY]](p0) :: (store (<vscale x 2 x s32>) into %ir.pa)
654     ; RV64I-NEXT: PseudoRET
655     %0:_(p0) = COPY $x10
656     %1:_(<vscale x 2 x s32>) = COPY $v8
657     G_STORE %1(<vscale x 2 x s32>), %0(p0) :: (store (<vscale x 2 x s32>) into %ir.pa)
658     PseudoRET
662 name:            vstore_nx4i32
663 legalized:       true
664 tracksRegLiveness: true
665 body:             |
666   bb.1 (%ir-block.0):
667     liveins: $x10, $v8m2
669     ; RV32I-LABEL: name: vstore_nx4i32
670     ; RV32I: liveins: $x10, $v8m2
671     ; RV32I-NEXT: {{  $}}
672     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
673     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s32>) = COPY $v8m2
674     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 4 x s32>), [[COPY]](p0) :: (store (<vscale x 4 x s32>) into %ir.pa)
675     ; RV32I-NEXT: PseudoRET
676     ;
677     ; RV64I-LABEL: name: vstore_nx4i32
678     ; RV64I: liveins: $x10, $v8m2
679     ; RV64I-NEXT: {{  $}}
680     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
681     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s32>) = COPY $v8m2
682     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 4 x s32>), [[COPY]](p0) :: (store (<vscale x 4 x s32>) into %ir.pa)
683     ; RV64I-NEXT: PseudoRET
684     %0:_(p0) = COPY $x10
685     %1:_(<vscale x 4 x s32>) = COPY $v8m2
686     G_STORE %1(<vscale x 4 x s32>), %0(p0) :: (store (<vscale x 4 x s32>) into %ir.pa)
687     PseudoRET
691 name:            vstore_nx8i32
692 legalized:       true
693 tracksRegLiveness: true
694 body:             |
695   bb.1 (%ir-block.0):
696     liveins: $x10, $v8m4
698     ; RV32I-LABEL: name: vstore_nx8i32
699     ; RV32I: liveins: $x10, $v8m4
700     ; RV32I-NEXT: {{  $}}
701     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
702     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 8 x s32>) = COPY $v8m4
703     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 8 x s32>), [[COPY]](p0) :: (store (<vscale x 8 x s32>) into %ir.pa)
704     ; RV32I-NEXT: PseudoRET
705     ;
706     ; RV64I-LABEL: name: vstore_nx8i32
707     ; RV64I: liveins: $x10, $v8m4
708     ; RV64I-NEXT: {{  $}}
709     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
710     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 8 x s32>) = COPY $v8m4
711     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 8 x s32>), [[COPY]](p0) :: (store (<vscale x 8 x s32>) into %ir.pa)
712     ; RV64I-NEXT: PseudoRET
713     %0:_(p0) = COPY $x10
714     %1:_(<vscale x 8 x s32>) = COPY $v8m4
715     G_STORE %1(<vscale x 8 x s32>), %0(p0) :: (store (<vscale x 8 x s32>) into %ir.pa)
716     PseudoRET
720 name:            vstore_nx16i32
721 legalized:       true
722 tracksRegLiveness: true
723 body:             |
724   bb.1 (%ir-block.0):
725     liveins: $x10, $v8m8
727     ; RV32I-LABEL: name: vstore_nx16i32
728     ; RV32I: liveins: $x10, $v8m8
729     ; RV32I-NEXT: {{  $}}
730     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
731     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 16 x s32>) = COPY $v8m8
732     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 16 x s32>), [[COPY]](p0) :: (store (<vscale x 16 x s32>) into %ir.pa)
733     ; RV32I-NEXT: PseudoRET
734     ;
735     ; RV64I-LABEL: name: vstore_nx16i32
736     ; RV64I: liveins: $x10, $v8m8
737     ; RV64I-NEXT: {{  $}}
738     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
739     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 16 x s32>) = COPY $v8m8
740     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 16 x s32>), [[COPY]](p0) :: (store (<vscale x 16 x s32>) into %ir.pa)
741     ; RV64I-NEXT: PseudoRET
742     %0:_(p0) = COPY $x10
743     %1:_(<vscale x 16 x s32>) = COPY $v8m8
744     G_STORE %1(<vscale x 16 x s32>), %0(p0) :: (store (<vscale x 16 x s32>) into %ir.pa)
745     PseudoRET
749 name:            vstore_nx1i64
750 legalized:       true
751 tracksRegLiveness: true
752 body:             |
753   bb.1 (%ir-block.0):
754     liveins: $v8, $x10
756     ; RV32I-LABEL: name: vstore_nx1i64
757     ; RV32I: liveins: $v8, $x10
758     ; RV32I-NEXT: {{  $}}
759     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
760     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 1 x s64>) = COPY $v8
761     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 1 x s64>), [[COPY]](p0) :: (store (<vscale x 1 x s64>) into %ir.pa)
762     ; RV32I-NEXT: PseudoRET
763     ;
764     ; RV64I-LABEL: name: vstore_nx1i64
765     ; RV64I: liveins: $v8, $x10
766     ; RV64I-NEXT: {{  $}}
767     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
768     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 1 x s64>) = COPY $v8
769     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 1 x s64>), [[COPY]](p0) :: (store (<vscale x 1 x s64>) into %ir.pa)
770     ; RV64I-NEXT: PseudoRET
771     %0:_(p0) = COPY $x10
772     %1:_(<vscale x 1 x s64>) = COPY $v8
773     G_STORE %1(<vscale x 1 x s64>), %0(p0) :: (store (<vscale x 1 x s64>) into %ir.pa)
774     PseudoRET
778 name:            vstore_nx2i64
779 legalized:       true
780 tracksRegLiveness: true
781 body:             |
782   bb.1 (%ir-block.0):
783     liveins: $x10, $v8m2
785     ; RV32I-LABEL: name: vstore_nx2i64
786     ; RV32I: liveins: $x10, $v8m2
787     ; RV32I-NEXT: {{  $}}
788     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
789     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s64>) = COPY $v8m2
790     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s64>), [[COPY]](p0) :: (store (<vscale x 2 x s64>) into %ir.pa)
791     ; RV32I-NEXT: PseudoRET
792     ;
793     ; RV64I-LABEL: name: vstore_nx2i64
794     ; RV64I: liveins: $x10, $v8m2
795     ; RV64I-NEXT: {{  $}}
796     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
797     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s64>) = COPY $v8m2
798     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s64>), [[COPY]](p0) :: (store (<vscale x 2 x s64>) into %ir.pa)
799     ; RV64I-NEXT: PseudoRET
800     %0:_(p0) = COPY $x10
801     %1:_(<vscale x 2 x s64>) = COPY $v8m2
802     G_STORE %1(<vscale x 2 x s64>), %0(p0) :: (store (<vscale x 2 x s64>) into %ir.pa)
803     PseudoRET
807 name:            vstore_nx4i64
808 legalized:       true
809 tracksRegLiveness: true
810 body:             |
811   bb.1 (%ir-block.0):
812     liveins: $x10, $v8m4
814     ; RV32I-LABEL: name: vstore_nx4i64
815     ; RV32I: liveins: $x10, $v8m4
816     ; RV32I-NEXT: {{  $}}
817     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
818     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s64>) = COPY $v8m4
819     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 4 x s64>), [[COPY]](p0) :: (store (<vscale x 4 x s64>) into %ir.pa)
820     ; RV32I-NEXT: PseudoRET
821     ;
822     ; RV64I-LABEL: name: vstore_nx4i64
823     ; RV64I: liveins: $x10, $v8m4
824     ; RV64I-NEXT: {{  $}}
825     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
826     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s64>) = COPY $v8m4
827     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 4 x s64>), [[COPY]](p0) :: (store (<vscale x 4 x s64>) into %ir.pa)
828     ; RV64I-NEXT: PseudoRET
829     %0:_(p0) = COPY $x10
830     %1:_(<vscale x 4 x s64>) = COPY $v8m4
831     G_STORE %1(<vscale x 4 x s64>), %0(p0) :: (store (<vscale x 4 x s64>) into %ir.pa)
832     PseudoRET
836 name:            vstore_nx8i64
837 legalized:       true
838 tracksRegLiveness: true
839 body:             |
840   bb.1 (%ir-block.0):
841     liveins: $x10, $v8m8
843     ; RV32I-LABEL: name: vstore_nx8i64
844     ; RV32I: liveins: $x10, $v8m8
845     ; RV32I-NEXT: {{  $}}
846     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
847     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 8 x s64>) = COPY $v8m8
848     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 8 x s64>), [[COPY]](p0) :: (store (<vscale x 8 x s64>) into %ir.pa)
849     ; RV32I-NEXT: PseudoRET
850     ;
851     ; RV64I-LABEL: name: vstore_nx8i64
852     ; RV64I: liveins: $x10, $v8m8
853     ; RV64I-NEXT: {{  $}}
854     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
855     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 8 x s64>) = COPY $v8m8
856     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 8 x s64>), [[COPY]](p0) :: (store (<vscale x 8 x s64>) into %ir.pa)
857     ; RV64I-NEXT: PseudoRET
858     %0:_(p0) = COPY $x10
859     %1:_(<vscale x 8 x s64>) = COPY $v8m8
860     G_STORE %1(<vscale x 8 x s64>), %0(p0) :: (store (<vscale x 8 x s64>) into %ir.pa)
861     PseudoRET
865 name:            vstore_nx16i8_align1
866 legalized:       true
867 tracksRegLiveness: true
868 body:             |
869   bb.1 (%ir-block.0):
870     liveins: $x10, $v8m2
872     ; RV32I-LABEL: name: vstore_nx16i8_align1
873     ; RV32I: liveins: $x10, $v8m2
874     ; RV32I-NEXT: {{  $}}
875     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
876     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 16 x s8>) = COPY $v8m2
877     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 16 x s8>), [[COPY]](p0) :: (store (<vscale x 16 x s8>) into %ir.pa, align 1)
878     ; RV32I-NEXT: PseudoRET
879     ;
880     ; RV64I-LABEL: name: vstore_nx16i8_align1
881     ; RV64I: liveins: $x10, $v8m2
882     ; RV64I-NEXT: {{  $}}
883     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
884     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 16 x s8>) = COPY $v8m2
885     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 16 x s8>), [[COPY]](p0) :: (store (<vscale x 16 x s8>) into %ir.pa, align 1)
886     ; RV64I-NEXT: PseudoRET
887     %0:_(p0) = COPY $x10
888     %1:_(<vscale x 16 x s8>) = COPY $v8m2
889     G_STORE %1(<vscale x 16 x s8>), %0(p0) :: (store (<vscale x 16 x s8>) into %ir.pa, align 1)
890     PseudoRET
894 name:            vstore_nx16i8_align2
895 legalized:       true
896 tracksRegLiveness: true
897 body:             |
898   bb.1 (%ir-block.0):
899     liveins: $x10, $v8m2
901     ; RV32I-LABEL: name: vstore_nx16i8_align2
902     ; RV32I: liveins: $x10, $v8m2
903     ; RV32I-NEXT: {{  $}}
904     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
905     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 16 x s8>) = COPY $v8m2
906     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 16 x s8>), [[COPY]](p0) :: (store (<vscale x 16 x s8>) into %ir.pa, align 2)
907     ; RV32I-NEXT: PseudoRET
908     ;
909     ; RV64I-LABEL: name: vstore_nx16i8_align2
910     ; RV64I: liveins: $x10, $v8m2
911     ; RV64I-NEXT: {{  $}}
912     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
913     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 16 x s8>) = COPY $v8m2
914     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 16 x s8>), [[COPY]](p0) :: (store (<vscale x 16 x s8>) into %ir.pa, align 2)
915     ; RV64I-NEXT: PseudoRET
916     %0:_(p0) = COPY $x10
917     %1:_(<vscale x 16 x s8>) = COPY $v8m2
918     G_STORE %1(<vscale x 16 x s8>), %0(p0) :: (store (<vscale x 16 x s8>) into %ir.pa, align 2)
919     PseudoRET
923 name:            vstore_nx16i8_align16
924 legalized:       true
925 tracksRegLiveness: true
926 body:             |
927   bb.1 (%ir-block.0):
928     liveins: $x10, $v8m2
930     ; RV32I-LABEL: name: vstore_nx16i8_align16
931     ; RV32I: liveins: $x10, $v8m2
932     ; RV32I-NEXT: {{  $}}
933     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
934     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 16 x s8>) = COPY $v8m2
935     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 16 x s8>), [[COPY]](p0) :: (store (<vscale x 16 x s8>) into %ir.pa)
936     ; RV32I-NEXT: PseudoRET
937     ;
938     ; RV64I-LABEL: name: vstore_nx16i8_align16
939     ; RV64I: liveins: $x10, $v8m2
940     ; RV64I-NEXT: {{  $}}
941     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
942     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 16 x s8>) = COPY $v8m2
943     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 16 x s8>), [[COPY]](p0) :: (store (<vscale x 16 x s8>) into %ir.pa)
944     ; RV64I-NEXT: PseudoRET
945     %0:_(p0) = COPY $x10
946     %1:_(<vscale x 16 x s8>) = COPY $v8m2
947     G_STORE %1(<vscale x 16 x s8>), %0(p0) :: (store (<vscale x 16 x s8>) into %ir.pa)
948     PseudoRET
952 name:            vstore_nx16i8_align64
953 legalized:       true
954 tracksRegLiveness: true
955 body:             |
956   bb.1 (%ir-block.0):
957     liveins: $x10, $v8m2
959     ; RV32I-LABEL: name: vstore_nx16i8_align64
960     ; RV32I: liveins: $x10, $v8m2
961     ; RV32I-NEXT: {{  $}}
962     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
963     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 16 x s8>) = COPY $v8m2
964     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 16 x s8>), [[COPY]](p0) :: (store (<vscale x 16 x s8>) into %ir.pa, align 64)
965     ; RV32I-NEXT: PseudoRET
966     ;
967     ; RV64I-LABEL: name: vstore_nx16i8_align64
968     ; RV64I: liveins: $x10, $v8m2
969     ; RV64I-NEXT: {{  $}}
970     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
971     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 16 x s8>) = COPY $v8m2
972     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 16 x s8>), [[COPY]](p0) :: (store (<vscale x 16 x s8>) into %ir.pa, align 64)
973     ; RV64I-NEXT: PseudoRET
974     %0:_(p0) = COPY $x10
975     %1:_(<vscale x 16 x s8>) = COPY $v8m2
976     G_STORE %1(<vscale x 16 x s8>), %0(p0) :: (store (<vscale x 16 x s8>) into %ir.pa, align 64)
977     PseudoRET
981 name:            vstore_nx4i16_align1
982 legalized:       true
983 tracksRegLiveness: true
984 body:             |
985   bb.1 (%ir-block.0):
986     liveins: $v8, $x10
988     ; RV32I-LABEL: name: vstore_nx4i16_align1
989     ; RV32I: liveins: $v8, $x10
990     ; RV32I-NEXT: {{  $}}
991     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
992     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s16>) = COPY $v8
993     ; RV32I-NEXT: [[BITCAST:%[0-9]+]]:vrb(<vscale x 8 x s8>) = G_BITCAST [[COPY1]](<vscale x 4 x s16>)
994     ; RV32I-NEXT: G_STORE [[BITCAST]](<vscale x 8 x s8>), [[COPY]](p0) :: (store (<vscale x 8 x s8>) into %ir.pa, align 1)
995     ; RV32I-NEXT: PseudoRET
996     ;
997     ; RV64I-LABEL: name: vstore_nx4i16_align1
998     ; RV64I: liveins: $v8, $x10
999     ; RV64I-NEXT: {{  $}}
1000     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1001     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s16>) = COPY $v8
1002     ; RV64I-NEXT: [[BITCAST:%[0-9]+]]:vrb(<vscale x 8 x s8>) = G_BITCAST [[COPY1]](<vscale x 4 x s16>)
1003     ; RV64I-NEXT: G_STORE [[BITCAST]](<vscale x 8 x s8>), [[COPY]](p0) :: (store (<vscale x 8 x s8>) into %ir.pa, align 1)
1004     ; RV64I-NEXT: PseudoRET
1005     %0:_(p0) = COPY $x10
1006     %1:_(<vscale x 4 x s16>) = COPY $v8
1007     %2:_(<vscale x 8 x s8>) = G_BITCAST %1(<vscale x 4 x s16>)
1008     G_STORE %2(<vscale x 8 x s8>), %0(p0) :: (store (<vscale x 8 x s8>) into %ir.pa, align 1)
1009     PseudoRET
1013 name:            vstore_nx4i16_align2
1014 legalized:       true
1015 tracksRegLiveness: true
1016 body:             |
1017   bb.1 (%ir-block.0):
1018     liveins: $v8, $x10
1020     ; RV32I-LABEL: name: vstore_nx4i16_align2
1021     ; RV32I: liveins: $v8, $x10
1022     ; RV32I-NEXT: {{  $}}
1023     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1024     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s16>) = COPY $v8
1025     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 4 x s16>), [[COPY]](p0) :: (store (<vscale x 4 x s16>) into %ir.pa, align 2)
1026     ; RV32I-NEXT: PseudoRET
1027     ;
1028     ; RV64I-LABEL: name: vstore_nx4i16_align2
1029     ; RV64I: liveins: $v8, $x10
1030     ; RV64I-NEXT: {{  $}}
1031     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1032     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s16>) = COPY $v8
1033     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 4 x s16>), [[COPY]](p0) :: (store (<vscale x 4 x s16>) into %ir.pa, align 2)
1034     ; RV64I-NEXT: PseudoRET
1035     %0:_(p0) = COPY $x10
1036     %1:_(<vscale x 4 x s16>) = COPY $v8
1037     G_STORE %1(<vscale x 4 x s16>), %0(p0) :: (store (<vscale x 4 x s16>) into %ir.pa, align 2)
1038     PseudoRET
1042 name:            vstore_nx4i16_align4
1043 legalized:       true
1044 tracksRegLiveness: true
1045 body:             |
1046   bb.1 (%ir-block.0):
1047     liveins: $v8, $x10
1049     ; RV32I-LABEL: name: vstore_nx4i16_align4
1050     ; RV32I: liveins: $v8, $x10
1051     ; RV32I-NEXT: {{  $}}
1052     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1053     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s16>) = COPY $v8
1054     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 4 x s16>), [[COPY]](p0) :: (store (<vscale x 4 x s16>) into %ir.pa, align 4)
1055     ; RV32I-NEXT: PseudoRET
1056     ;
1057     ; RV64I-LABEL: name: vstore_nx4i16_align4
1058     ; RV64I: liveins: $v8, $x10
1059     ; RV64I-NEXT: {{  $}}
1060     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1061     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s16>) = COPY $v8
1062     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 4 x s16>), [[COPY]](p0) :: (store (<vscale x 4 x s16>) into %ir.pa, align 4)
1063     ; RV64I-NEXT: PseudoRET
1064     %0:_(p0) = COPY $x10
1065     %1:_(<vscale x 4 x s16>) = COPY $v8
1066     G_STORE %1(<vscale x 4 x s16>), %0(p0) :: (store (<vscale x 4 x s16>) into %ir.pa, align 4)
1067     PseudoRET
1071 name:            vstore_nx4i16_align8
1072 legalized:       true
1073 tracksRegLiveness: true
1074 body:             |
1075   bb.1 (%ir-block.0):
1076     liveins: $v8, $x10
1078     ; RV32I-LABEL: name: vstore_nx4i16_align8
1079     ; RV32I: liveins: $v8, $x10
1080     ; RV32I-NEXT: {{  $}}
1081     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1082     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s16>) = COPY $v8
1083     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 4 x s16>), [[COPY]](p0) :: (store (<vscale x 4 x s16>) into %ir.pa)
1084     ; RV32I-NEXT: PseudoRET
1085     ;
1086     ; RV64I-LABEL: name: vstore_nx4i16_align8
1087     ; RV64I: liveins: $v8, $x10
1088     ; RV64I-NEXT: {{  $}}
1089     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1090     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s16>) = COPY $v8
1091     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 4 x s16>), [[COPY]](p0) :: (store (<vscale x 4 x s16>) into %ir.pa)
1092     ; RV64I-NEXT: PseudoRET
1093     %0:_(p0) = COPY $x10
1094     %1:_(<vscale x 4 x s16>) = COPY $v8
1095     G_STORE %1(<vscale x 4 x s16>), %0(p0) :: (store (<vscale x 4 x s16>) into %ir.pa)
1096     PseudoRET
1100 name:            vstore_nx4i16_align16
1101 legalized:       true
1102 tracksRegLiveness: true
1103 body:             |
1104   bb.1 (%ir-block.0):
1105     liveins: $v8, $x10
1107     ; RV32I-LABEL: name: vstore_nx4i16_align16
1108     ; RV32I: liveins: $v8, $x10
1109     ; RV32I-NEXT: {{  $}}
1110     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1111     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s16>) = COPY $v8
1112     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 4 x s16>), [[COPY]](p0) :: (store (<vscale x 4 x s16>) into %ir.pa, align 16)
1113     ; RV32I-NEXT: PseudoRET
1114     ;
1115     ; RV64I-LABEL: name: vstore_nx4i16_align16
1116     ; RV64I: liveins: $v8, $x10
1117     ; RV64I-NEXT: {{  $}}
1118     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1119     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 4 x s16>) = COPY $v8
1120     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 4 x s16>), [[COPY]](p0) :: (store (<vscale x 4 x s16>) into %ir.pa, align 16)
1121     ; RV64I-NEXT: PseudoRET
1122     %0:_(p0) = COPY $x10
1123     %1:_(<vscale x 4 x s16>) = COPY $v8
1124     G_STORE %1(<vscale x 4 x s16>), %0(p0) :: (store (<vscale x 4 x s16>) into %ir.pa, align 16)
1125     PseudoRET
1129 name:            vstore_nx2i32_align2
1130 legalized:       true
1131 tracksRegLiveness: true
1132 body:             |
1133   bb.1 (%ir-block.0):
1134     liveins: $v8, $x10
1136     ; RV32I-LABEL: name: vstore_nx2i32_align2
1137     ; RV32I: liveins: $v8, $x10
1138     ; RV32I-NEXT: {{  $}}
1139     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1140     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s32>) = COPY $v8
1141     ; RV32I-NEXT: [[BITCAST:%[0-9]+]]:vrb(<vscale x 8 x s8>) = G_BITCAST [[COPY1]](<vscale x 2 x s32>)
1142     ; RV32I-NEXT: G_STORE [[BITCAST]](<vscale x 8 x s8>), [[COPY]](p0) :: (store (<vscale x 8 x s8>) into %ir.pa, align 2)
1143     ; RV32I-NEXT: PseudoRET
1144     ;
1145     ; RV64I-LABEL: name: vstore_nx2i32_align2
1146     ; RV64I: liveins: $v8, $x10
1147     ; RV64I-NEXT: {{  $}}
1148     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1149     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s32>) = COPY $v8
1150     ; RV64I-NEXT: [[BITCAST:%[0-9]+]]:vrb(<vscale x 8 x s8>) = G_BITCAST [[COPY1]](<vscale x 2 x s32>)
1151     ; RV64I-NEXT: G_STORE [[BITCAST]](<vscale x 8 x s8>), [[COPY]](p0) :: (store (<vscale x 8 x s8>) into %ir.pa, align 2)
1152     ; RV64I-NEXT: PseudoRET
1153     %0:_(p0) = COPY $x10
1154     %1:_(<vscale x 2 x s32>) = COPY $v8
1155     %2:_(<vscale x 8 x s8>) = G_BITCAST %1(<vscale x 2 x s32>)
1156     G_STORE %2(<vscale x 8 x s8>), %0(p0) :: (store (<vscale x 8 x s8>) into %ir.pa, align 2)
1157     PseudoRET
1161 name:            vstore_nx2i32_align4
1162 legalized:       true
1163 tracksRegLiveness: true
1164 body:             |
1165   bb.1 (%ir-block.0):
1166     liveins: $v8, $x10
1168     ; RV32I-LABEL: name: vstore_nx2i32_align4
1169     ; RV32I: liveins: $v8, $x10
1170     ; RV32I-NEXT: {{  $}}
1171     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1172     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s32>) = COPY $v8
1173     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s32>), [[COPY]](p0) :: (store (<vscale x 2 x s32>) into %ir.pa, align 4)
1174     ; RV32I-NEXT: PseudoRET
1175     ;
1176     ; RV64I-LABEL: name: vstore_nx2i32_align4
1177     ; RV64I: liveins: $v8, $x10
1178     ; RV64I-NEXT: {{  $}}
1179     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1180     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s32>) = COPY $v8
1181     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s32>), [[COPY]](p0) :: (store (<vscale x 2 x s32>) into %ir.pa, align 4)
1182     ; RV64I-NEXT: PseudoRET
1183     %0:_(p0) = COPY $x10
1184     %1:_(<vscale x 2 x s32>) = COPY $v8
1185     G_STORE %1(<vscale x 2 x s32>), %0(p0) :: (store (<vscale x 2 x s32>) into %ir.pa, align 4)
1186     PseudoRET
1190 name:            vstore_nx2i32_align8
1191 legalized:       true
1192 tracksRegLiveness: true
1193 body:             |
1194   bb.1 (%ir-block.0):
1195     liveins: $v8, $x10
1197     ; RV32I-LABEL: name: vstore_nx2i32_align8
1198     ; RV32I: liveins: $v8, $x10
1199     ; RV32I-NEXT: {{  $}}
1200     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1201     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s32>) = COPY $v8
1202     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s32>), [[COPY]](p0) :: (store (<vscale x 2 x s32>) into %ir.pa)
1203     ; RV32I-NEXT: PseudoRET
1204     ;
1205     ; RV64I-LABEL: name: vstore_nx2i32_align8
1206     ; RV64I: liveins: $v8, $x10
1207     ; RV64I-NEXT: {{  $}}
1208     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1209     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s32>) = COPY $v8
1210     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s32>), [[COPY]](p0) :: (store (<vscale x 2 x s32>) into %ir.pa)
1211     ; RV64I-NEXT: PseudoRET
1212     %0:_(p0) = COPY $x10
1213     %1:_(<vscale x 2 x s32>) = COPY $v8
1214     G_STORE %1(<vscale x 2 x s32>), %0(p0) :: (store (<vscale x 2 x s32>) into %ir.pa)
1215     PseudoRET
1219 name:            vstore_nx2i32_align16
1220 legalized:       true
1221 tracksRegLiveness: true
1222 body:             |
1223   bb.1 (%ir-block.0):
1224     liveins: $v8, $x10
1226     ; RV32I-LABEL: name: vstore_nx2i32_align16
1227     ; RV32I: liveins: $v8, $x10
1228     ; RV32I-NEXT: {{  $}}
1229     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1230     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s32>) = COPY $v8
1231     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s32>), [[COPY]](p0) :: (store (<vscale x 2 x s32>) into %ir.pa, align 16)
1232     ; RV32I-NEXT: PseudoRET
1233     ;
1234     ; RV64I-LABEL: name: vstore_nx2i32_align16
1235     ; RV64I: liveins: $v8, $x10
1236     ; RV64I-NEXT: {{  $}}
1237     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1238     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s32>) = COPY $v8
1239     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s32>), [[COPY]](p0) :: (store (<vscale x 2 x s32>) into %ir.pa, align 16)
1240     ; RV64I-NEXT: PseudoRET
1241     %0:_(p0) = COPY $x10
1242     %1:_(<vscale x 2 x s32>) = COPY $v8
1243     G_STORE %1(<vscale x 2 x s32>), %0(p0) :: (store (<vscale x 2 x s32>) into %ir.pa, align 16)
1244     PseudoRET
1248 name:            vstore_nx2i32_align256
1249 legalized:       true
1250 tracksRegLiveness: true
1251 body:             |
1252   bb.1 (%ir-block.0):
1253     liveins: $v8, $x10
1255     ; RV32I-LABEL: name: vstore_nx2i32_align256
1256     ; RV32I: liveins: $v8, $x10
1257     ; RV32I-NEXT: {{  $}}
1258     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1259     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s32>) = COPY $v8
1260     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s32>), [[COPY]](p0) :: (store (<vscale x 2 x s32>) into %ir.pa, align 256)
1261     ; RV32I-NEXT: PseudoRET
1262     ;
1263     ; RV64I-LABEL: name: vstore_nx2i32_align256
1264     ; RV64I: liveins: $v8, $x10
1265     ; RV64I-NEXT: {{  $}}
1266     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1267     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s32>) = COPY $v8
1268     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s32>), [[COPY]](p0) :: (store (<vscale x 2 x s32>) into %ir.pa, align 256)
1269     ; RV64I-NEXT: PseudoRET
1270     %0:_(p0) = COPY $x10
1271     %1:_(<vscale x 2 x s32>) = COPY $v8
1272     G_STORE %1(<vscale x 2 x s32>), %0(p0) :: (store (<vscale x 2 x s32>) into %ir.pa, align 256)
1273     PseudoRET
1277 name:            vstore_nx2i64_align4
1278 legalized:       true
1279 tracksRegLiveness: true
1280 body:             |
1281   bb.1 (%ir-block.0):
1282     liveins: $x10, $v8m2
1284     ; RV32I-LABEL: name: vstore_nx2i64_align4
1285     ; RV32I: liveins: $x10, $v8m2
1286     ; RV32I-NEXT: {{  $}}
1287     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1288     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s64>) = COPY $v8m2
1289     ; RV32I-NEXT: [[BITCAST:%[0-9]+]]:vrb(<vscale x 16 x s8>) = G_BITCAST [[COPY1]](<vscale x 2 x s64>)
1290     ; RV32I-NEXT: G_STORE [[BITCAST]](<vscale x 16 x s8>), [[COPY]](p0) :: (store (<vscale x 16 x s8>) into %ir.pa, align 4)
1291     ; RV32I-NEXT: PseudoRET
1292     ;
1293     ; RV64I-LABEL: name: vstore_nx2i64_align4
1294     ; RV64I: liveins: $x10, $v8m2
1295     ; RV64I-NEXT: {{  $}}
1296     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1297     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s64>) = COPY $v8m2
1298     ; RV64I-NEXT: [[BITCAST:%[0-9]+]]:vrb(<vscale x 16 x s8>) = G_BITCAST [[COPY1]](<vscale x 2 x s64>)
1299     ; RV64I-NEXT: G_STORE [[BITCAST]](<vscale x 16 x s8>), [[COPY]](p0) :: (store (<vscale x 16 x s8>) into %ir.pa, align 4)
1300     ; RV64I-NEXT: PseudoRET
1301     %0:_(p0) = COPY $x10
1302     %1:_(<vscale x 2 x s64>) = COPY $v8m2
1303     %2:_(<vscale x 16 x s8>) = G_BITCAST %1(<vscale x 2 x s64>)
1304     G_STORE %2(<vscale x 16 x s8>), %0(p0) :: (store (<vscale x 16 x s8>) into %ir.pa, align 4)
1305     PseudoRET
1309 name:            vstore_nx2i64_align8
1310 legalized:       true
1311 tracksRegLiveness: true
1312 body:             |
1313   bb.1 (%ir-block.0):
1314     liveins: $x10, $v8m2
1316     ; RV32I-LABEL: name: vstore_nx2i64_align8
1317     ; RV32I: liveins: $x10, $v8m2
1318     ; RV32I-NEXT: {{  $}}
1319     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1320     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s64>) = COPY $v8m2
1321     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s64>), [[COPY]](p0) :: (store (<vscale x 2 x s64>) into %ir.pa, align 8)
1322     ; RV32I-NEXT: PseudoRET
1323     ;
1324     ; RV64I-LABEL: name: vstore_nx2i64_align8
1325     ; RV64I: liveins: $x10, $v8m2
1326     ; RV64I-NEXT: {{  $}}
1327     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1328     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s64>) = COPY $v8m2
1329     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s64>), [[COPY]](p0) :: (store (<vscale x 2 x s64>) into %ir.pa, align 8)
1330     ; RV64I-NEXT: PseudoRET
1331     %0:_(p0) = COPY $x10
1332     %1:_(<vscale x 2 x s64>) = COPY $v8m2
1333     G_STORE %1(<vscale x 2 x s64>), %0(p0) :: (store (<vscale x 2 x s64>) into %ir.pa, align 8)
1334     PseudoRET
1338 name:            vstore_nx2i64_align16
1339 legalized:       true
1340 tracksRegLiveness: true
1341 body:             |
1342   bb.1 (%ir-block.0):
1343     liveins: $x10, $v8m2
1345     ; RV32I-LABEL: name: vstore_nx2i64_align16
1346     ; RV32I: liveins: $x10, $v8m2
1347     ; RV32I-NEXT: {{  $}}
1348     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1349     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s64>) = COPY $v8m2
1350     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s64>), [[COPY]](p0) :: (store (<vscale x 2 x s64>) into %ir.pa)
1351     ; RV32I-NEXT: PseudoRET
1352     ;
1353     ; RV64I-LABEL: name: vstore_nx2i64_align16
1354     ; RV64I: liveins: $x10, $v8m2
1355     ; RV64I-NEXT: {{  $}}
1356     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1357     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s64>) = COPY $v8m2
1358     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s64>), [[COPY]](p0) :: (store (<vscale x 2 x s64>) into %ir.pa)
1359     ; RV64I-NEXT: PseudoRET
1360     %0:_(p0) = COPY $x10
1361     %1:_(<vscale x 2 x s64>) = COPY $v8m2
1362     G_STORE %1(<vscale x 2 x s64>), %0(p0) :: (store (<vscale x 2 x s64>) into %ir.pa)
1363     PseudoRET
1367 name:            vstore_nx2i64_align32
1368 legalized:       true
1369 tracksRegLiveness: true
1370 body:             |
1371   bb.1 (%ir-block.0):
1372     liveins: $x10, $v8m2
1374     ; RV32I-LABEL: name: vstore_nx2i64_align32
1375     ; RV32I: liveins: $x10, $v8m2
1376     ; RV32I-NEXT: {{  $}}
1377     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1378     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s64>) = COPY $v8m2
1379     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s64>), [[COPY]](p0) :: (store (<vscale x 2 x s64>) into %ir.pa, align 32)
1380     ; RV32I-NEXT: PseudoRET
1381     ;
1382     ; RV64I-LABEL: name: vstore_nx2i64_align32
1383     ; RV64I: liveins: $x10, $v8m2
1384     ; RV64I-NEXT: {{  $}}
1385     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1386     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x s64>) = COPY $v8m2
1387     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 2 x s64>), [[COPY]](p0) :: (store (<vscale x 2 x s64>) into %ir.pa, align 32)
1388     ; RV64I-NEXT: PseudoRET
1389     %0:_(p0) = COPY $x10
1390     %1:_(<vscale x 2 x s64>) = COPY $v8m2
1391     G_STORE %1(<vscale x 2 x s64>), %0(p0) :: (store (<vscale x 2 x s64>) into %ir.pa, align 32)
1392     PseudoRET
1396 name:            vstore_nx1ptr
1397 legalized:       true
1398 tracksRegLiveness: true
1399 body:             |
1400   bb.1 (%ir-block.0):
1401     liveins: $v8, $x10
1403     ; RV32I-LABEL: name: vstore_nx1ptr
1404     ; RV32I: liveins: $v8, $x10
1405     ; RV32I-NEXT: {{  $}}
1406     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1407     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 1 x p0>) = COPY $v8
1408     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 1 x p0>), [[COPY]](p0) :: (store (<vscale x 1 x p0>) into %ir.pa)
1409     ; RV32I-NEXT: PseudoRET
1410     ;
1411     ; RV64I-LABEL: name: vstore_nx1ptr
1412     ; RV64I: liveins: $v8, $x10
1413     ; RV64I-NEXT: {{  $}}
1414     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1415     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 1 x p0>) = COPY $v8
1416     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 1 x p0>), [[COPY]](p0) :: (store (<vscale x 1 x p0>) into %ir.pa)
1417     ; RV64I-NEXT: PseudoRET
1418     %0:_(p0) = COPY $x10
1419     %1:_(<vscale x 1 x p0>) = COPY $v8
1420     G_STORE %1(<vscale x 1 x p0>), %0(p0) :: (store (<vscale x 1 x p0>) into %ir.pa)
1421     PseudoRET
1425 name:            vstore_nx2ptr
1426 legalized:       true
1427 tracksRegLiveness: true
1428 body:             |
1429   bb.1 (%ir-block.0):
1430     liveins: $v8, $x10
1432     ; RV32I-LABEL: name: vstore_nx2ptr
1433     ; RV32I: liveins: $v8, $x10
1434     ; RV32I-NEXT: {{  $}}
1435     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1436     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x p0>) = COPY $v8
1437     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 2 x p0>), [[COPY]](p0) :: (store (<vscale x 2 x p0>) into %ir.pa)
1438     ; RV32I-NEXT: PseudoRET
1439     ;
1440     ; RV64I-LABEL: name: vstore_nx2ptr
1441     ; RV64I: liveins: $v8, $x10
1442     ; RV64I-NEXT: {{  $}}
1443     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1444     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 2 x p0>) = COPY $v8
1445     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 2 x p0>), [[COPY]](p0) :: (store (<vscale x 2 x p0>) into %ir.pa)
1446     ; RV64I-NEXT: PseudoRET
1447     %0:_(p0) = COPY $x10
1448     %1:_(<vscale x 2 x p0>) = COPY $v8
1449     G_STORE %1(<vscale x 2 x p0>), %0(p0) :: (store (<vscale x 2 x p0>) into %ir.pa)
1450     PseudoRET
1454 name:            vstore_nx8ptr
1455 legalized:       true
1456 tracksRegLiveness: true
1457 body:             |
1458   bb.1 (%ir-block.0):
1459     liveins: $x10, $v8m4
1461     ; RV32I-LABEL: name: vstore_nx8ptr
1462     ; RV32I: liveins: $x10, $v8m4
1463     ; RV32I-NEXT: {{  $}}
1464     ; RV32I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1465     ; RV32I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 8 x p0>) = COPY $v8m4
1466     ; RV32I-NEXT: G_STORE [[COPY1]](<vscale x 8 x p0>), [[COPY]](p0) :: (store (<vscale x 8 x p0>) into %ir.pa)
1467     ; RV32I-NEXT: PseudoRET
1468     ;
1469     ; RV64I-LABEL: name: vstore_nx8ptr
1470     ; RV64I: liveins: $x10, $v8m4
1471     ; RV64I-NEXT: {{  $}}
1472     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
1473     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:vrb(<vscale x 8 x p0>) = COPY $v8m4
1474     ; RV64I-NEXT: G_STORE [[COPY1]](<vscale x 8 x p0>), [[COPY]](p0) :: (store (<vscale x 8 x p0>) into %ir.pa)
1475     ; RV64I-NEXT: PseudoRET
1476     %0:_(p0) = COPY $x10
1477     %1:_(<vscale x 8 x p0>) = COPY $v8m4
1478     G_STORE %1(<vscale x 8 x p0>), %0(p0) :: (store (<vscale x 8 x p0>) into %ir.pa)
1479     PseudoRET