[X86] IsNOT - don't fold not(pcmpgt(C1, C2)) -> pcmpgt(C2, C1 - 1)
[llvm-project.git] / llvm / test / CodeGen / RISCV / GlobalISel / legalizer / rvv / legalize-zext.mir
blob34c795dc8c624d41ac1697f6518eb0a996a020de
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=riscv32 -mattr=+v -run-pass=legalizer %s -o - | FileCheck --check-prefix=RV32 %s
3 # RUN: llc -mtriple=riscv64 -mattr=+v -run-pass=legalizer %s -o - | FileCheck --check-prefix=RV64 %s
5 # Extend from s1 element vectors
6 ---
7 name:            zext_nxv1i8_nxv1i1
8 legalized:       false
9 tracksRegLiveness: true
10 body:             |
11   bb.0.entry:
12     liveins: $v8
13     ; RV32-LABEL: name: zext_nxv1i8_nxv1i1
14     ; RV32: liveins: $v8
15     ; RV32-NEXT: {{  $}}
16     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s1>) = COPY $v8
17     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
18     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s8>) = G_SPLAT_VECTOR [[C]](s32)
19     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
20     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 1 x s8>) = G_SPLAT_VECTOR [[C1]](s32)
21     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 1 x s8>) = G_SELECT [[COPY]](<vscale x 1 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
22     ; RV32-NEXT: $v8 = COPY [[SELECT]](<vscale x 1 x s8>)
23     ; RV32-NEXT: PseudoRET implicit $v8
24     ;
25     ; RV64-LABEL: name: zext_nxv1i8_nxv1i1
26     ; RV64: liveins: $v8
27     ; RV64-NEXT: {{  $}}
28     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s1>) = COPY $v8
29     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
30     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s8>) = G_SPLAT_VECTOR [[C]](s64)
31     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
32     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 1 x s8>) = G_SPLAT_VECTOR [[C1]](s64)
33     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 1 x s8>) = G_SELECT [[COPY]](<vscale x 1 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
34     ; RV64-NEXT: $v8 = COPY [[SELECT]](<vscale x 1 x s8>)
35     ; RV64-NEXT: PseudoRET implicit $v8
36     %1:_(<vscale x 1 x s1>) = COPY $v8
37     %0:_(<vscale x 1 x s8>) = G_ZEXT %1(<vscale x 1 x s1>)
38     $v8 = COPY %0(<vscale x 1 x s8>)
39     PseudoRET implicit $v8
40 ...
41 ---
42 name:            zext_nxv1i16_nxv1i1
43 legalized:       false
44 tracksRegLiveness: true
45 body:             |
46   bb.0.entry:
47     liveins: $v8
48     ; RV32-LABEL: name: zext_nxv1i16_nxv1i1
49     ; RV32: liveins: $v8
50     ; RV32-NEXT: {{  $}}
51     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s1>) = COPY $v8
52     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
53     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s16>) = G_SPLAT_VECTOR [[C]](s32)
54     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
55     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 1 x s16>) = G_SPLAT_VECTOR [[C1]](s32)
56     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 1 x s16>) = G_SELECT [[COPY]](<vscale x 1 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
57     ; RV32-NEXT: $v8 = COPY [[SELECT]](<vscale x 1 x s16>)
58     ; RV32-NEXT: PseudoRET implicit $v8
59     ;
60     ; RV64-LABEL: name: zext_nxv1i16_nxv1i1
61     ; RV64: liveins: $v8
62     ; RV64-NEXT: {{  $}}
63     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s1>) = COPY $v8
64     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
65     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s16>) = G_SPLAT_VECTOR [[C]](s64)
66     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
67     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 1 x s16>) = G_SPLAT_VECTOR [[C1]](s64)
68     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 1 x s16>) = G_SELECT [[COPY]](<vscale x 1 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
69     ; RV64-NEXT: $v8 = COPY [[SELECT]](<vscale x 1 x s16>)
70     ; RV64-NEXT: PseudoRET implicit $v8
71     %1:_(<vscale x 1 x s1>) = COPY $v8
72     %0:_(<vscale x 1 x s16>) = G_ZEXT %1(<vscale x 1 x s1>)
73     $v8 = COPY %0(<vscale x 1 x s16>)
74     PseudoRET implicit $v8
75 ...
76 ---
77 name:            zext_nxv1i32_nxv1i1
78 legalized:       false
79 tracksRegLiveness: true
80 body:             |
81   bb.0.entry:
82     liveins: $v8
83     ; RV32-LABEL: name: zext_nxv1i32_nxv1i1
84     ; RV32: liveins: $v8
85     ; RV32-NEXT: {{  $}}
86     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s1>) = COPY $v8
87     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
88     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s32>) = G_SPLAT_VECTOR [[C]](s32)
89     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
90     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 1 x s32>) = G_SPLAT_VECTOR [[C1]](s32)
91     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 1 x s32>) = G_SELECT [[COPY]](<vscale x 1 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
92     ; RV32-NEXT: $v8 = COPY [[SELECT]](<vscale x 1 x s32>)
93     ; RV32-NEXT: PseudoRET implicit $v8
94     ;
95     ; RV64-LABEL: name: zext_nxv1i32_nxv1i1
96     ; RV64: liveins: $v8
97     ; RV64-NEXT: {{  $}}
98     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s1>) = COPY $v8
99     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
100     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s32>) = G_SPLAT_VECTOR [[C]](s64)
101     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
102     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 1 x s32>) = G_SPLAT_VECTOR [[C1]](s64)
103     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 1 x s32>) = G_SELECT [[COPY]](<vscale x 1 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
104     ; RV64-NEXT: $v8 = COPY [[SELECT]](<vscale x 1 x s32>)
105     ; RV64-NEXT: PseudoRET implicit $v8
106     %1:_(<vscale x 1 x s1>) = COPY $v8
107     %0:_(<vscale x 1 x s32>) = G_ZEXT %1(<vscale x 1 x s1>)
108     $v8 = COPY %0(<vscale x 1 x s32>)
109     PseudoRET implicit $v8
112 name:            zext_nxv1i64_nxv1i1
113 legalized:       false
114 tracksRegLiveness: true
115 body:             |
116   bb.0.entry:
117     liveins: $v8
118     ; RV32-LABEL: name: zext_nxv1i64_nxv1i1
119     ; RV32: liveins: $v8
120     ; RV32-NEXT: {{  $}}
121     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s1>) = COPY $v8
122     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
123     ; RV32-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[C]](s32), [[C]](s32)
124     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s64>) = G_SPLAT_VECTOR [[MV]](s64)
125     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
126     ; RV32-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[C1]](s32), [[C]](s32)
127     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 1 x s64>) = G_SPLAT_VECTOR [[MV1]](s64)
128     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 1 x s64>) = G_SELECT [[COPY]](<vscale x 1 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
129     ; RV32-NEXT: $v8 = COPY [[SELECT]](<vscale x 1 x s64>)
130     ; RV32-NEXT: PseudoRET implicit $v8
131     ;
132     ; RV64-LABEL: name: zext_nxv1i64_nxv1i1
133     ; RV64: liveins: $v8
134     ; RV64-NEXT: {{  $}}
135     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s1>) = COPY $v8
136     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
137     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s64>) = G_SPLAT_VECTOR [[C]](s64)
138     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
139     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 1 x s64>) = G_SPLAT_VECTOR [[C1]](s64)
140     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 1 x s64>) = G_SELECT [[COPY]](<vscale x 1 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
141     ; RV64-NEXT: $v8 = COPY [[SELECT]](<vscale x 1 x s64>)
142     ; RV64-NEXT: PseudoRET implicit $v8
143     %1:_(<vscale x 1 x s1>) = COPY $v8
144     %0:_(<vscale x 1 x s64>) = G_ZEXT %1(<vscale x 1 x s1>)
145     $v8 = COPY %0(<vscale x 1 x s64>)
146     PseudoRET implicit $v8
149 name:            zext_nxv2i8_nxv2i1
150 legalized:       false
151 tracksRegLiveness: true
152 body:             |
153   bb.0.entry:
154     liveins: $v8
155     ; RV32-LABEL: name: zext_nxv2i8_nxv2i1
156     ; RV32: liveins: $v8
157     ; RV32-NEXT: {{  $}}
158     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s1>) = COPY $v8
159     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
160     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s8>) = G_SPLAT_VECTOR [[C]](s32)
161     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
162     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 2 x s8>) = G_SPLAT_VECTOR [[C1]](s32)
163     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 2 x s8>) = G_SELECT [[COPY]](<vscale x 2 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
164     ; RV32-NEXT: $v8 = COPY [[SELECT]](<vscale x 2 x s8>)
165     ; RV32-NEXT: PseudoRET implicit $v8
166     ;
167     ; RV64-LABEL: name: zext_nxv2i8_nxv2i1
168     ; RV64: liveins: $v8
169     ; RV64-NEXT: {{  $}}
170     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s1>) = COPY $v8
171     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
172     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s8>) = G_SPLAT_VECTOR [[C]](s64)
173     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
174     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 2 x s8>) = G_SPLAT_VECTOR [[C1]](s64)
175     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 2 x s8>) = G_SELECT [[COPY]](<vscale x 2 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
176     ; RV64-NEXT: $v8 = COPY [[SELECT]](<vscale x 2 x s8>)
177     ; RV64-NEXT: PseudoRET implicit $v8
178     %1:_(<vscale x 2 x s1>) = COPY $v8
179     %0:_(<vscale x 2 x s8>) = G_ZEXT %1(<vscale x 2 x s1>)
180     $v8 = COPY %0(<vscale x 2 x s8>)
181     PseudoRET implicit $v8
184 name:            zext_nxv2i16_nxv2i1
185 legalized:       false
186 tracksRegLiveness: true
187 body:             |
188   bb.0.entry:
189     liveins: $v8
190     ; RV32-LABEL: name: zext_nxv2i16_nxv2i1
191     ; RV32: liveins: $v8
192     ; RV32-NEXT: {{  $}}
193     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s1>) = COPY $v8
194     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
195     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s16>) = G_SPLAT_VECTOR [[C]](s32)
196     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
197     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 2 x s16>) = G_SPLAT_VECTOR [[C1]](s32)
198     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 2 x s16>) = G_SELECT [[COPY]](<vscale x 2 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
199     ; RV32-NEXT: $v8 = COPY [[SELECT]](<vscale x 2 x s16>)
200     ; RV32-NEXT: PseudoRET implicit $v8
201     ;
202     ; RV64-LABEL: name: zext_nxv2i16_nxv2i1
203     ; RV64: liveins: $v8
204     ; RV64-NEXT: {{  $}}
205     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s1>) = COPY $v8
206     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
207     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s16>) = G_SPLAT_VECTOR [[C]](s64)
208     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
209     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 2 x s16>) = G_SPLAT_VECTOR [[C1]](s64)
210     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 2 x s16>) = G_SELECT [[COPY]](<vscale x 2 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
211     ; RV64-NEXT: $v8 = COPY [[SELECT]](<vscale x 2 x s16>)
212     ; RV64-NEXT: PseudoRET implicit $v8
213     %1:_(<vscale x 2 x s1>) = COPY $v8
214     %0:_(<vscale x 2 x s16>) = G_ZEXT %1(<vscale x 2 x s1>)
215     $v8 = COPY %0(<vscale x 2 x s16>)
216     PseudoRET implicit $v8
219 name:            zext_nxv2i32_nxv2i1
220 legalized:       false
221 tracksRegLiveness: true
222 body:             |
223   bb.0.entry:
224     liveins: $v8
225     ; RV32-LABEL: name: zext_nxv2i32_nxv2i1
226     ; RV32: liveins: $v8
227     ; RV32-NEXT: {{  $}}
228     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s1>) = COPY $v8
229     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
230     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s32>) = G_SPLAT_VECTOR [[C]](s32)
231     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
232     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 2 x s32>) = G_SPLAT_VECTOR [[C1]](s32)
233     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 2 x s32>) = G_SELECT [[COPY]](<vscale x 2 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
234     ; RV32-NEXT: $v8 = COPY [[SELECT]](<vscale x 2 x s32>)
235     ; RV32-NEXT: PseudoRET implicit $v8
236     ;
237     ; RV64-LABEL: name: zext_nxv2i32_nxv2i1
238     ; RV64: liveins: $v8
239     ; RV64-NEXT: {{  $}}
240     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s1>) = COPY $v8
241     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
242     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s32>) = G_SPLAT_VECTOR [[C]](s64)
243     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
244     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 2 x s32>) = G_SPLAT_VECTOR [[C1]](s64)
245     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 2 x s32>) = G_SELECT [[COPY]](<vscale x 2 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
246     ; RV64-NEXT: $v8 = COPY [[SELECT]](<vscale x 2 x s32>)
247     ; RV64-NEXT: PseudoRET implicit $v8
248     %1:_(<vscale x 2 x s1>) = COPY $v8
249     %0:_(<vscale x 2 x s32>) = G_ZEXT %1(<vscale x 2 x s1>)
250     $v8 = COPY %0(<vscale x 2 x s32>)
251     PseudoRET implicit $v8
254 name:            zext_nxv2i64_nxv2i1
255 legalized:       false
256 tracksRegLiveness: true
257 body:             |
258   bb.0.entry:
259     liveins: $v8
260     ; RV32-LABEL: name: zext_nxv2i64_nxv2i1
261     ; RV32: liveins: $v8
262     ; RV32-NEXT: {{  $}}
263     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s1>) = COPY $v8
264     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
265     ; RV32-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[C]](s32), [[C]](s32)
266     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s64>) = G_SPLAT_VECTOR [[MV]](s64)
267     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
268     ; RV32-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[C1]](s32), [[C]](s32)
269     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 2 x s64>) = G_SPLAT_VECTOR [[MV1]](s64)
270     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 2 x s64>) = G_SELECT [[COPY]](<vscale x 2 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
271     ; RV32-NEXT: $v8m2 = COPY [[SELECT]](<vscale x 2 x s64>)
272     ; RV32-NEXT: PseudoRET implicit $v8m2
273     ;
274     ; RV64-LABEL: name: zext_nxv2i64_nxv2i1
275     ; RV64: liveins: $v8
276     ; RV64-NEXT: {{  $}}
277     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s1>) = COPY $v8
278     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
279     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s64>) = G_SPLAT_VECTOR [[C]](s64)
280     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
281     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 2 x s64>) = G_SPLAT_VECTOR [[C1]](s64)
282     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 2 x s64>) = G_SELECT [[COPY]](<vscale x 2 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
283     ; RV64-NEXT: $v8m2 = COPY [[SELECT]](<vscale x 2 x s64>)
284     ; RV64-NEXT: PseudoRET implicit $v8m2
285     %1:_(<vscale x 2 x s1>) = COPY $v8
286     %0:_(<vscale x 2 x s64>) = G_ZEXT %1(<vscale x 2 x s1>)
287     $v8m2 = COPY %0(<vscale x 2 x s64>)
288     PseudoRET implicit $v8m2
291 name:            zext_nxv4i8_nxv4i1
292 legalized:       false
293 tracksRegLiveness: true
294 body:             |
295   bb.0.entry:
296     liveins: $v8
297     ; RV32-LABEL: name: zext_nxv4i8_nxv4i1
298     ; RV32: liveins: $v8
299     ; RV32-NEXT: {{  $}}
300     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s1>) = COPY $v8
301     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
302     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s8>) = G_SPLAT_VECTOR [[C]](s32)
303     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
304     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 4 x s8>) = G_SPLAT_VECTOR [[C1]](s32)
305     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 4 x s8>) = G_SELECT [[COPY]](<vscale x 4 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
306     ; RV32-NEXT: $v8 = COPY [[SELECT]](<vscale x 4 x s8>)
307     ; RV32-NEXT: PseudoRET implicit $v8
308     ;
309     ; RV64-LABEL: name: zext_nxv4i8_nxv4i1
310     ; RV64: liveins: $v8
311     ; RV64-NEXT: {{  $}}
312     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s1>) = COPY $v8
313     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
314     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s8>) = G_SPLAT_VECTOR [[C]](s64)
315     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
316     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 4 x s8>) = G_SPLAT_VECTOR [[C1]](s64)
317     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 4 x s8>) = G_SELECT [[COPY]](<vscale x 4 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
318     ; RV64-NEXT: $v8 = COPY [[SELECT]](<vscale x 4 x s8>)
319     ; RV64-NEXT: PseudoRET implicit $v8
320     %1:_(<vscale x 4 x s1>) = COPY $v8
321     %0:_(<vscale x 4 x s8>) = G_ZEXT %1(<vscale x 4 x s1>)
322     $v8 = COPY %0(<vscale x 4 x s8>)
323     PseudoRET implicit $v8
326 name:            zext_nxv4i16_nxv4i1
327 legalized:       false
328 tracksRegLiveness: true
329 body:             |
330   bb.0.entry:
331     liveins: $v8
332     ; RV32-LABEL: name: zext_nxv4i16_nxv4i1
333     ; RV32: liveins: $v8
334     ; RV32-NEXT: {{  $}}
335     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s1>) = COPY $v8
336     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
337     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s16>) = G_SPLAT_VECTOR [[C]](s32)
338     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
339     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 4 x s16>) = G_SPLAT_VECTOR [[C1]](s32)
340     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 4 x s16>) = G_SELECT [[COPY]](<vscale x 4 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
341     ; RV32-NEXT: $v8 = COPY [[SELECT]](<vscale x 4 x s16>)
342     ; RV32-NEXT: PseudoRET implicit $v8
343     ;
344     ; RV64-LABEL: name: zext_nxv4i16_nxv4i1
345     ; RV64: liveins: $v8
346     ; RV64-NEXT: {{  $}}
347     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s1>) = COPY $v8
348     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
349     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s16>) = G_SPLAT_VECTOR [[C]](s64)
350     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
351     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 4 x s16>) = G_SPLAT_VECTOR [[C1]](s64)
352     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 4 x s16>) = G_SELECT [[COPY]](<vscale x 4 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
353     ; RV64-NEXT: $v8 = COPY [[SELECT]](<vscale x 4 x s16>)
354     ; RV64-NEXT: PseudoRET implicit $v8
355     %1:_(<vscale x 4 x s1>) = COPY $v8
356     %0:_(<vscale x 4 x s16>) = G_ZEXT %1(<vscale x 4 x s1>)
357     $v8 = COPY %0(<vscale x 4 x s16>)
358     PseudoRET implicit $v8
361 name:            zext_nxv4i32_nxv4i1
362 legalized:       false
363 tracksRegLiveness: true
364 body:             |
365   bb.0.entry:
366     liveins: $v8
367     ; RV32-LABEL: name: zext_nxv4i32_nxv4i1
368     ; RV32: liveins: $v8
369     ; RV32-NEXT: {{  $}}
370     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s1>) = COPY $v8
371     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
372     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s32>) = G_SPLAT_VECTOR [[C]](s32)
373     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
374     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 4 x s32>) = G_SPLAT_VECTOR [[C1]](s32)
375     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 4 x s32>) = G_SELECT [[COPY]](<vscale x 4 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
376     ; RV32-NEXT: $v8m2 = COPY [[SELECT]](<vscale x 4 x s32>)
377     ; RV32-NEXT: PseudoRET implicit $v8m2
378     ;
379     ; RV64-LABEL: name: zext_nxv4i32_nxv4i1
380     ; RV64: liveins: $v8
381     ; RV64-NEXT: {{  $}}
382     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s1>) = COPY $v8
383     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
384     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s32>) = G_SPLAT_VECTOR [[C]](s64)
385     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
386     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 4 x s32>) = G_SPLAT_VECTOR [[C1]](s64)
387     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 4 x s32>) = G_SELECT [[COPY]](<vscale x 4 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
388     ; RV64-NEXT: $v8m2 = COPY [[SELECT]](<vscale x 4 x s32>)
389     ; RV64-NEXT: PseudoRET implicit $v8m2
390     %1:_(<vscale x 4 x s1>) = COPY $v8
391     %0:_(<vscale x 4 x s32>) = G_ZEXT %1(<vscale x 4 x s1>)
392     $v8m2 = COPY %0(<vscale x 4 x s32>)
393     PseudoRET implicit $v8m2
396 name:            zext_nxv4i64_nxv4i1
397 legalized:       false
398 tracksRegLiveness: true
399 body:             |
400   bb.0.entry:
401     liveins: $v8
402     ; RV32-LABEL: name: zext_nxv4i64_nxv4i1
403     ; RV32: liveins: $v8
404     ; RV32-NEXT: {{  $}}
405     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s1>) = COPY $v8
406     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
407     ; RV32-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[C]](s32), [[C]](s32)
408     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s64>) = G_SPLAT_VECTOR [[MV]](s64)
409     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
410     ; RV32-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[C1]](s32), [[C]](s32)
411     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 4 x s64>) = G_SPLAT_VECTOR [[MV1]](s64)
412     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 4 x s64>) = G_SELECT [[COPY]](<vscale x 4 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
413     ; RV32-NEXT: $v8m4 = COPY [[SELECT]](<vscale x 4 x s64>)
414     ; RV32-NEXT: PseudoRET implicit $v8m4
415     ;
416     ; RV64-LABEL: name: zext_nxv4i64_nxv4i1
417     ; RV64: liveins: $v8
418     ; RV64-NEXT: {{  $}}
419     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s1>) = COPY $v8
420     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
421     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s64>) = G_SPLAT_VECTOR [[C]](s64)
422     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
423     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 4 x s64>) = G_SPLAT_VECTOR [[C1]](s64)
424     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 4 x s64>) = G_SELECT [[COPY]](<vscale x 4 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
425     ; RV64-NEXT: $v8m4 = COPY [[SELECT]](<vscale x 4 x s64>)
426     ; RV64-NEXT: PseudoRET implicit $v8m4
427     %1:_(<vscale x 4 x s1>) = COPY $v8
428     %0:_(<vscale x 4 x s64>) = G_ZEXT %1(<vscale x 4 x s1>)
429     $v8m4 = COPY %0(<vscale x 4 x s64>)
430     PseudoRET implicit $v8m4
433 name:            zext_nxv8i8_nxv8i1
434 legalized:       false
435 tracksRegLiveness: true
436 body:             |
437   bb.0.entry:
438     liveins: $v8
439     ; RV32-LABEL: name: zext_nxv8i8_nxv8i1
440     ; RV32: liveins: $v8
441     ; RV32-NEXT: {{  $}}
442     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s1>) = COPY $v8
443     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
444     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s8>) = G_SPLAT_VECTOR [[C]](s32)
445     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
446     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 8 x s8>) = G_SPLAT_VECTOR [[C1]](s32)
447     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 8 x s8>) = G_SELECT [[COPY]](<vscale x 8 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
448     ; RV32-NEXT: $v8 = COPY [[SELECT]](<vscale x 8 x s8>)
449     ; RV32-NEXT: PseudoRET implicit $v8
450     ;
451     ; RV64-LABEL: name: zext_nxv8i8_nxv8i1
452     ; RV64: liveins: $v8
453     ; RV64-NEXT: {{  $}}
454     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s1>) = COPY $v8
455     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
456     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s8>) = G_SPLAT_VECTOR [[C]](s64)
457     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
458     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 8 x s8>) = G_SPLAT_VECTOR [[C1]](s64)
459     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 8 x s8>) = G_SELECT [[COPY]](<vscale x 8 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
460     ; RV64-NEXT: $v8 = COPY [[SELECT]](<vscale x 8 x s8>)
461     ; RV64-NEXT: PseudoRET implicit $v8
462     %1:_(<vscale x 8 x s1>) = COPY $v8
463     %0:_(<vscale x 8 x s8>) = G_ZEXT %1(<vscale x 8 x s1>)
464     $v8 = COPY %0(<vscale x 8 x s8>)
465     PseudoRET implicit $v8
468 name:            zext_nxv8i16_nxv8i1
469 legalized:       false
470 tracksRegLiveness: true
471 body:             |
472   bb.0.entry:
473     liveins: $v8
474     ; RV32-LABEL: name: zext_nxv8i16_nxv8i1
475     ; RV32: liveins: $v8
476     ; RV32-NEXT: {{  $}}
477     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s1>) = COPY $v8
478     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
479     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s16>) = G_SPLAT_VECTOR [[C]](s32)
480     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
481     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 8 x s16>) = G_SPLAT_VECTOR [[C1]](s32)
482     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 8 x s16>) = G_SELECT [[COPY]](<vscale x 8 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
483     ; RV32-NEXT: $v8m2 = COPY [[SELECT]](<vscale x 8 x s16>)
484     ; RV32-NEXT: PseudoRET implicit $v8m2
485     ;
486     ; RV64-LABEL: name: zext_nxv8i16_nxv8i1
487     ; RV64: liveins: $v8
488     ; RV64-NEXT: {{  $}}
489     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s1>) = COPY $v8
490     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
491     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s16>) = G_SPLAT_VECTOR [[C]](s64)
492     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
493     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 8 x s16>) = G_SPLAT_VECTOR [[C1]](s64)
494     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 8 x s16>) = G_SELECT [[COPY]](<vscale x 8 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
495     ; RV64-NEXT: $v8m2 = COPY [[SELECT]](<vscale x 8 x s16>)
496     ; RV64-NEXT: PseudoRET implicit $v8m2
497     %1:_(<vscale x 8 x s1>) = COPY $v8
498     %0:_(<vscale x 8 x s16>) = G_ZEXT %1(<vscale x 8 x s1>)
499     $v8m2 = COPY %0(<vscale x 8 x s16>)
500     PseudoRET implicit $v8m2
503 name:            zext_nxv8i32_nxv8i1
504 legalized:       false
505 tracksRegLiveness: true
506 body:             |
507   bb.0.entry:
508     liveins: $v8
509     ; RV32-LABEL: name: zext_nxv8i32_nxv8i1
510     ; RV32: liveins: $v8
511     ; RV32-NEXT: {{  $}}
512     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s1>) = COPY $v8
513     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
514     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s32>) = G_SPLAT_VECTOR [[C]](s32)
515     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
516     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 8 x s32>) = G_SPLAT_VECTOR [[C1]](s32)
517     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 8 x s32>) = G_SELECT [[COPY]](<vscale x 8 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
518     ; RV32-NEXT: $v8m4 = COPY [[SELECT]](<vscale x 8 x s32>)
519     ; RV32-NEXT: PseudoRET implicit $v8m4
520     ;
521     ; RV64-LABEL: name: zext_nxv8i32_nxv8i1
522     ; RV64: liveins: $v8
523     ; RV64-NEXT: {{  $}}
524     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s1>) = COPY $v8
525     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
526     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s32>) = G_SPLAT_VECTOR [[C]](s64)
527     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
528     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 8 x s32>) = G_SPLAT_VECTOR [[C1]](s64)
529     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 8 x s32>) = G_SELECT [[COPY]](<vscale x 8 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
530     ; RV64-NEXT: $v8m4 = COPY [[SELECT]](<vscale x 8 x s32>)
531     ; RV64-NEXT: PseudoRET implicit $v8m4
532     %1:_(<vscale x 8 x s1>) = COPY $v8
533     %0:_(<vscale x 8 x s32>) = G_ZEXT %1(<vscale x 8 x s1>)
534     $v8m4 = COPY %0(<vscale x 8 x s32>)
535     PseudoRET implicit $v8m4
538 name:            zext_nxv8i64_nxv8i1
539 legalized:       false
540 tracksRegLiveness: true
541 body:             |
542   bb.0.entry:
543     liveins: $v8
544     ; RV32-LABEL: name: zext_nxv8i64_nxv8i1
545     ; RV32: liveins: $v8
546     ; RV32-NEXT: {{  $}}
547     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s1>) = COPY $v8
548     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
549     ; RV32-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[C]](s32), [[C]](s32)
550     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s64>) = G_SPLAT_VECTOR [[MV]](s64)
551     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
552     ; RV32-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[C1]](s32), [[C]](s32)
553     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 8 x s64>) = G_SPLAT_VECTOR [[MV1]](s64)
554     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 8 x s64>) = G_SELECT [[COPY]](<vscale x 8 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
555     ; RV32-NEXT: $v8m8 = COPY [[SELECT]](<vscale x 8 x s64>)
556     ; RV32-NEXT: PseudoRET implicit $v8m8
557     ;
558     ; RV64-LABEL: name: zext_nxv8i64_nxv8i1
559     ; RV64: liveins: $v8
560     ; RV64-NEXT: {{  $}}
561     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s1>) = COPY $v8
562     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
563     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s64>) = G_SPLAT_VECTOR [[C]](s64)
564     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
565     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 8 x s64>) = G_SPLAT_VECTOR [[C1]](s64)
566     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 8 x s64>) = G_SELECT [[COPY]](<vscale x 8 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
567     ; RV64-NEXT: $v8m8 = COPY [[SELECT]](<vscale x 8 x s64>)
568     ; RV64-NEXT: PseudoRET implicit $v8m8
569     %1:_(<vscale x 8 x s1>) = COPY $v8
570     %0:_(<vscale x 8 x s64>) = G_ZEXT %1(<vscale x 8 x s1>)
571     $v8m8 = COPY %0(<vscale x 8 x s64>)
572     PseudoRET implicit $v8m8
575 name:            zext_nxv16i8_nxv16i1
576 legalized:       false
577 tracksRegLiveness: true
578 body:             |
579   bb.0.entry:
580     liveins: $v8
581     ; RV32-LABEL: name: zext_nxv16i8_nxv16i1
582     ; RV32: liveins: $v8
583     ; RV32-NEXT: {{  $}}
584     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s1>) = COPY $v8
585     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
586     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 16 x s8>) = G_SPLAT_VECTOR [[C]](s32)
587     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
588     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 16 x s8>) = G_SPLAT_VECTOR [[C1]](s32)
589     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 16 x s8>) = G_SELECT [[COPY]](<vscale x 16 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
590     ; RV32-NEXT: $v8m2 = COPY [[SELECT]](<vscale x 16 x s8>)
591     ; RV32-NEXT: PseudoRET implicit $v8m2
592     ;
593     ; RV64-LABEL: name: zext_nxv16i8_nxv16i1
594     ; RV64: liveins: $v8
595     ; RV64-NEXT: {{  $}}
596     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s1>) = COPY $v8
597     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
598     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 16 x s8>) = G_SPLAT_VECTOR [[C]](s64)
599     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
600     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 16 x s8>) = G_SPLAT_VECTOR [[C1]](s64)
601     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 16 x s8>) = G_SELECT [[COPY]](<vscale x 16 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
602     ; RV64-NEXT: $v8m2 = COPY [[SELECT]](<vscale x 16 x s8>)
603     ; RV64-NEXT: PseudoRET implicit $v8m2
604     %1:_(<vscale x 16 x s1>) = COPY $v8
605     %0:_(<vscale x 16 x s8>) = G_ZEXT %1(<vscale x 16 x s1>)
606     $v8m2 = COPY %0(<vscale x 16 x s8>)
607     PseudoRET implicit $v8m2
610 name:            zext_nxv16i16_nxv16i1
611 legalized:       false
612 tracksRegLiveness: true
613 body:             |
614   bb.0.entry:
615     liveins: $v8
616     ; RV32-LABEL: name: zext_nxv16i16_nxv16i1
617     ; RV32: liveins: $v8
618     ; RV32-NEXT: {{  $}}
619     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s1>) = COPY $v8
620     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
621     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 16 x s16>) = G_SPLAT_VECTOR [[C]](s32)
622     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
623     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 16 x s16>) = G_SPLAT_VECTOR [[C1]](s32)
624     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 16 x s16>) = G_SELECT [[COPY]](<vscale x 16 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
625     ; RV32-NEXT: $v8m4 = COPY [[SELECT]](<vscale x 16 x s16>)
626     ; RV32-NEXT: PseudoRET implicit $v8m4
627     ;
628     ; RV64-LABEL: name: zext_nxv16i16_nxv16i1
629     ; RV64: liveins: $v8
630     ; RV64-NEXT: {{  $}}
631     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s1>) = COPY $v8
632     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
633     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 16 x s16>) = G_SPLAT_VECTOR [[C]](s64)
634     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
635     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 16 x s16>) = G_SPLAT_VECTOR [[C1]](s64)
636     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 16 x s16>) = G_SELECT [[COPY]](<vscale x 16 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
637     ; RV64-NEXT: $v8m4 = COPY [[SELECT]](<vscale x 16 x s16>)
638     ; RV64-NEXT: PseudoRET implicit $v8m4
639     %1:_(<vscale x 16 x s1>) = COPY $v8
640     %0:_(<vscale x 16 x s16>) = G_ZEXT %1(<vscale x 16 x s1>)
641     $v8m4 = COPY %0(<vscale x 16 x s16>)
642     PseudoRET implicit $v8m4
645 name:            zext_nxv16i32_nxv16i1
646 legalized:       false
647 tracksRegLiveness: true
648 body:             |
649   bb.0.entry:
650     liveins: $v8
651     ; RV32-LABEL: name: zext_nxv16i32_nxv16i1
652     ; RV32: liveins: $v8
653     ; RV32-NEXT: {{  $}}
654     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s1>) = COPY $v8
655     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
656     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 16 x s32>) = G_SPLAT_VECTOR [[C]](s32)
657     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
658     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 16 x s32>) = G_SPLAT_VECTOR [[C1]](s32)
659     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 16 x s32>) = G_SELECT [[COPY]](<vscale x 16 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
660     ; RV32-NEXT: $v8m8 = COPY [[SELECT]](<vscale x 16 x s32>)
661     ; RV32-NEXT: PseudoRET implicit $v8m8
662     ;
663     ; RV64-LABEL: name: zext_nxv16i32_nxv16i1
664     ; RV64: liveins: $v8
665     ; RV64-NEXT: {{  $}}
666     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s1>) = COPY $v8
667     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
668     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 16 x s32>) = G_SPLAT_VECTOR [[C]](s64)
669     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
670     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 16 x s32>) = G_SPLAT_VECTOR [[C1]](s64)
671     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 16 x s32>) = G_SELECT [[COPY]](<vscale x 16 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
672     ; RV64-NEXT: $v8m8 = COPY [[SELECT]](<vscale x 16 x s32>)
673     ; RV64-NEXT: PseudoRET implicit $v8m8
674     %1:_(<vscale x 16 x s1>) = COPY $v8
675     %0:_(<vscale x 16 x s32>) = G_ZEXT %1(<vscale x 16 x s1>)
676     $v8m8 = COPY %0(<vscale x 16 x s32>)
677     PseudoRET implicit $v8m8
680 name:            zext_nxv32i8_nxv32i1
681 legalized:       false
682 tracksRegLiveness: true
683 body:             |
684   bb.0.entry:
685     liveins: $v8
686     ; RV32-LABEL: name: zext_nxv32i8_nxv32i1
687     ; RV32: liveins: $v8
688     ; RV32-NEXT: {{  $}}
689     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 32 x s1>) = COPY $v8
690     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
691     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 32 x s8>) = G_SPLAT_VECTOR [[C]](s32)
692     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
693     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 32 x s8>) = G_SPLAT_VECTOR [[C1]](s32)
694     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 32 x s8>) = G_SELECT [[COPY]](<vscale x 32 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
695     ; RV32-NEXT: $v8m4 = COPY [[SELECT]](<vscale x 32 x s8>)
696     ; RV32-NEXT: PseudoRET implicit $v8m4
697     ;
698     ; RV64-LABEL: name: zext_nxv32i8_nxv32i1
699     ; RV64: liveins: $v8
700     ; RV64-NEXT: {{  $}}
701     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 32 x s1>) = COPY $v8
702     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
703     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 32 x s8>) = G_SPLAT_VECTOR [[C]](s64)
704     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
705     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 32 x s8>) = G_SPLAT_VECTOR [[C1]](s64)
706     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 32 x s8>) = G_SELECT [[COPY]](<vscale x 32 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
707     ; RV64-NEXT: $v8m4 = COPY [[SELECT]](<vscale x 32 x s8>)
708     ; RV64-NEXT: PseudoRET implicit $v8m4
709     %1:_(<vscale x 32 x s1>) = COPY $v8
710     %0:_(<vscale x 32 x s8>) = G_ZEXT %1(<vscale x 32 x s1>)
711     $v8m4 = COPY %0(<vscale x 32 x s8>)
712     PseudoRET implicit $v8m4
715 name:            zext_nxv32i16_nxv32i1
716 legalized:       false
717 tracksRegLiveness: true
718 body:             |
719   bb.0.entry:
720     liveins: $v8
721     ; RV32-LABEL: name: zext_nxv32i16_nxv32i1
722     ; RV32: liveins: $v8
723     ; RV32-NEXT: {{  $}}
724     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 32 x s1>) = COPY $v8
725     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
726     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 32 x s16>) = G_SPLAT_VECTOR [[C]](s32)
727     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
728     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 32 x s16>) = G_SPLAT_VECTOR [[C1]](s32)
729     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 32 x s16>) = G_SELECT [[COPY]](<vscale x 32 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
730     ; RV32-NEXT: $v8m8 = COPY [[SELECT]](<vscale x 32 x s16>)
731     ; RV32-NEXT: PseudoRET implicit $v8m8
732     ;
733     ; RV64-LABEL: name: zext_nxv32i16_nxv32i1
734     ; RV64: liveins: $v8
735     ; RV64-NEXT: {{  $}}
736     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 32 x s1>) = COPY $v8
737     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
738     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 32 x s16>) = G_SPLAT_VECTOR [[C]](s64)
739     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
740     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 32 x s16>) = G_SPLAT_VECTOR [[C1]](s64)
741     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 32 x s16>) = G_SELECT [[COPY]](<vscale x 32 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
742     ; RV64-NEXT: $v8m8 = COPY [[SELECT]](<vscale x 32 x s16>)
743     ; RV64-NEXT: PseudoRET implicit $v8m8
744     %1:_(<vscale x 32 x s1>) = COPY $v8
745     %0:_(<vscale x 32 x s16>) = G_ZEXT %1(<vscale x 32 x s1>)
746     $v8m8 = COPY %0(<vscale x 32 x s16>)
747     PseudoRET implicit $v8m8
750 name:            zext_nxv64i8_nxv64i1
751 legalized:       false
752 tracksRegLiveness: true
753 body:             |
754   bb.0.entry:
755     liveins: $v8
756     ; RV32-LABEL: name: zext_nxv64i8_nxv64i1
757     ; RV32: liveins: $v8
758     ; RV32-NEXT: {{  $}}
759     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 64 x s1>) = COPY $v8
760     ; RV32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
761     ; RV32-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 64 x s8>) = G_SPLAT_VECTOR [[C]](s32)
762     ; RV32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
763     ; RV32-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 64 x s8>) = G_SPLAT_VECTOR [[C1]](s32)
764     ; RV32-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 64 x s8>) = G_SELECT [[COPY]](<vscale x 64 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
765     ; RV32-NEXT: $v8m8 = COPY [[SELECT]](<vscale x 64 x s8>)
766     ; RV32-NEXT: PseudoRET implicit $v8m8
767     ;
768     ; RV64-LABEL: name: zext_nxv64i8_nxv64i1
769     ; RV64: liveins: $v8
770     ; RV64-NEXT: {{  $}}
771     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 64 x s1>) = COPY $v8
772     ; RV64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
773     ; RV64-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 64 x s8>) = G_SPLAT_VECTOR [[C]](s64)
774     ; RV64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
775     ; RV64-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 64 x s8>) = G_SPLAT_VECTOR [[C1]](s64)
776     ; RV64-NEXT: [[SELECT:%[0-9]+]]:_(<vscale x 64 x s8>) = G_SELECT [[COPY]](<vscale x 64 x s1>), [[SPLAT_VECTOR1]], [[SPLAT_VECTOR]]
777     ; RV64-NEXT: $v8m8 = COPY [[SELECT]](<vscale x 64 x s8>)
778     ; RV64-NEXT: PseudoRET implicit $v8m8
779     %1:_(<vscale x 64 x s1>) = COPY $v8
780     %0:_(<vscale x 64 x s8>) = G_ZEXT %1(<vscale x 64 x s1>)
781     $v8m8 = COPY %0(<vscale x 64 x s8>)
782     PseudoRET implicit $v8m8
785 # Extend from s8 element vectors
787 name:            zext_nxv1i16_nxv1i8
788 legalized:       false
789 tracksRegLiveness: true
790 body:             |
791   bb.0.entry:
792     liveins: $v8
793     ; RV32-LABEL: name: zext_nxv1i16_nxv1i8
794     ; RV32: liveins: $v8
795     ; RV32-NEXT: {{  $}}
796     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s8>) = COPY $v8
797     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 1 x s16>) = G_ZEXT [[COPY]](<vscale x 1 x s8>)
798     ; RV32-NEXT: $v8 = COPY [[ZEXT]](<vscale x 1 x s16>)
799     ; RV32-NEXT: PseudoRET implicit $v8
800     ;
801     ; RV64-LABEL: name: zext_nxv1i16_nxv1i8
802     ; RV64: liveins: $v8
803     ; RV64-NEXT: {{  $}}
804     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s8>) = COPY $v8
805     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 1 x s16>) = G_ZEXT [[COPY]](<vscale x 1 x s8>)
806     ; RV64-NEXT: $v8 = COPY [[ZEXT]](<vscale x 1 x s16>)
807     ; RV64-NEXT: PseudoRET implicit $v8
808     %1:_(<vscale x 1 x s8>) = COPY $v8
809     %0:_(<vscale x 1 x s16>) = G_ZEXT %1(<vscale x 1 x s8>)
810     $v8 = COPY %0(<vscale x 1 x s16>)
811     PseudoRET implicit $v8
814 name:            zext_nxv1i32_nxv1i8
815 legalized:       false
816 tracksRegLiveness: true
817 body:             |
818   bb.0.entry:
819     liveins: $v8
820     ; RV32-LABEL: name: zext_nxv1i32_nxv1i8
821     ; RV32: liveins: $v8
822     ; RV32-NEXT: {{  $}}
823     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s8>) = COPY $v8
824     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 1 x s32>) = G_ZEXT [[COPY]](<vscale x 1 x s8>)
825     ; RV32-NEXT: $v8 = COPY [[ZEXT]](<vscale x 1 x s32>)
826     ; RV32-NEXT: PseudoRET implicit $v8
827     ;
828     ; RV64-LABEL: name: zext_nxv1i32_nxv1i8
829     ; RV64: liveins: $v8
830     ; RV64-NEXT: {{  $}}
831     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s8>) = COPY $v8
832     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 1 x s32>) = G_ZEXT [[COPY]](<vscale x 1 x s8>)
833     ; RV64-NEXT: $v8 = COPY [[ZEXT]](<vscale x 1 x s32>)
834     ; RV64-NEXT: PseudoRET implicit $v8
835     %1:_(<vscale x 1 x s8>) = COPY $v8
836     %0:_(<vscale x 1 x s32>) = G_ZEXT %1(<vscale x 1 x s8>)
837     $v8 = COPY %0(<vscale x 1 x s32>)
838     PseudoRET implicit $v8
841 name:            zext_nxv1i64_nxv1i8
842 legalized:       false
843 tracksRegLiveness: true
844 body:             |
845   bb.0.entry:
846     liveins: $v8
847     ; RV32-LABEL: name: zext_nxv1i64_nxv1i8
848     ; RV32: liveins: $v8
849     ; RV32-NEXT: {{  $}}
850     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s8>) = COPY $v8
851     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 1 x s64>) = G_ZEXT [[COPY]](<vscale x 1 x s8>)
852     ; RV32-NEXT: $v8 = COPY [[ZEXT]](<vscale x 1 x s64>)
853     ; RV32-NEXT: PseudoRET implicit $v8
854     ;
855     ; RV64-LABEL: name: zext_nxv1i64_nxv1i8
856     ; RV64: liveins: $v8
857     ; RV64-NEXT: {{  $}}
858     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s8>) = COPY $v8
859     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 1 x s64>) = G_ZEXT [[COPY]](<vscale x 1 x s8>)
860     ; RV64-NEXT: $v8 = COPY [[ZEXT]](<vscale x 1 x s64>)
861     ; RV64-NEXT: PseudoRET implicit $v8
862     %1:_(<vscale x 1 x s8>) = COPY $v8
863     %0:_(<vscale x 1 x s64>) = G_ZEXT %1(<vscale x 1 x s8>)
864     $v8 = COPY %0(<vscale x 1 x s64>)
865     PseudoRET implicit $v8
868 name:            zext_nxv2i16_nxv2i8
869 legalized:       false
870 tracksRegLiveness: true
871 body:             |
872   bb.0.entry:
873     liveins: $v8
874     ; RV32-LABEL: name: zext_nxv2i16_nxv2i8
875     ; RV32: liveins: $v8
876     ; RV32-NEXT: {{  $}}
877     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s8>) = COPY $v8
878     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 2 x s16>) = G_ZEXT [[COPY]](<vscale x 2 x s8>)
879     ; RV32-NEXT: $v8 = COPY [[ZEXT]](<vscale x 2 x s16>)
880     ; RV32-NEXT: PseudoRET implicit $v8
881     ;
882     ; RV64-LABEL: name: zext_nxv2i16_nxv2i8
883     ; RV64: liveins: $v8
884     ; RV64-NEXT: {{  $}}
885     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s8>) = COPY $v8
886     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 2 x s16>) = G_ZEXT [[COPY]](<vscale x 2 x s8>)
887     ; RV64-NEXT: $v8 = COPY [[ZEXT]](<vscale x 2 x s16>)
888     ; RV64-NEXT: PseudoRET implicit $v8
889     %1:_(<vscale x 2 x s8>) = COPY $v8
890     %0:_(<vscale x 2 x s16>) = G_ZEXT %1(<vscale x 2 x s8>)
891     $v8 = COPY %0(<vscale x 2 x s16>)
892     PseudoRET implicit $v8
895 name:            zext_nxv2i32_nxv2i8
896 legalized:       false
897 tracksRegLiveness: true
898 body:             |
899   bb.0.entry:
900     liveins: $v8
901     ; RV32-LABEL: name: zext_nxv2i32_nxv2i8
902     ; RV32: liveins: $v8
903     ; RV32-NEXT: {{  $}}
904     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s8>) = COPY $v8
905     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 2 x s32>) = G_ZEXT [[COPY]](<vscale x 2 x s8>)
906     ; RV32-NEXT: $v8 = COPY [[ZEXT]](<vscale x 2 x s32>)
907     ; RV32-NEXT: PseudoRET implicit $v8
908     ;
909     ; RV64-LABEL: name: zext_nxv2i32_nxv2i8
910     ; RV64: liveins: $v8
911     ; RV64-NEXT: {{  $}}
912     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s8>) = COPY $v8
913     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 2 x s32>) = G_ZEXT [[COPY]](<vscale x 2 x s8>)
914     ; RV64-NEXT: $v8 = COPY [[ZEXT]](<vscale x 2 x s32>)
915     ; RV64-NEXT: PseudoRET implicit $v8
916     %1:_(<vscale x 2 x s8>) = COPY $v8
917     %0:_(<vscale x 2 x s32>) = G_ZEXT %1(<vscale x 2 x s8>)
918     $v8 = COPY %0(<vscale x 2 x s32>)
919     PseudoRET implicit $v8
922 name:            zext_nxv2i64_nxv2i8
923 legalized:       false
924 tracksRegLiveness: true
925 body:             |
926   bb.0.entry:
927     liveins: $v8
928     ; RV32-LABEL: name: zext_nxv2i64_nxv2i8
929     ; RV32: liveins: $v8
930     ; RV32-NEXT: {{  $}}
931     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s8>) = COPY $v8
932     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 2 x s64>) = G_ZEXT [[COPY]](<vscale x 2 x s8>)
933     ; RV32-NEXT: $v8m2 = COPY [[ZEXT]](<vscale x 2 x s64>)
934     ; RV32-NEXT: PseudoRET implicit $v8m2
935     ;
936     ; RV64-LABEL: name: zext_nxv2i64_nxv2i8
937     ; RV64: liveins: $v8
938     ; RV64-NEXT: {{  $}}
939     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s8>) = COPY $v8
940     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 2 x s64>) = G_ZEXT [[COPY]](<vscale x 2 x s8>)
941     ; RV64-NEXT: $v8m2 = COPY [[ZEXT]](<vscale x 2 x s64>)
942     ; RV64-NEXT: PseudoRET implicit $v8m2
943     %1:_(<vscale x 2 x s8>) = COPY $v8
944     %0:_(<vscale x 2 x s64>) = G_ZEXT %1(<vscale x 2 x s8>)
945     $v8m2 = COPY %0(<vscale x 2 x s64>)
946     PseudoRET implicit $v8m2
949 name:            zext_nxv4i16_nxv4i8
950 legalized:       false
951 tracksRegLiveness: true
952 body:             |
953   bb.0.entry:
954     liveins: $v8
955     ; RV32-LABEL: name: zext_nxv4i16_nxv4i8
956     ; RV32: liveins: $v8
957     ; RV32-NEXT: {{  $}}
958     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s8>) = COPY $v8
959     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 4 x s16>) = G_ZEXT [[COPY]](<vscale x 4 x s8>)
960     ; RV32-NEXT: $v8 = COPY [[ZEXT]](<vscale x 4 x s16>)
961     ; RV32-NEXT: PseudoRET implicit $v8
962     ;
963     ; RV64-LABEL: name: zext_nxv4i16_nxv4i8
964     ; RV64: liveins: $v8
965     ; RV64-NEXT: {{  $}}
966     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s8>) = COPY $v8
967     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 4 x s16>) = G_ZEXT [[COPY]](<vscale x 4 x s8>)
968     ; RV64-NEXT: $v8 = COPY [[ZEXT]](<vscale x 4 x s16>)
969     ; RV64-NEXT: PseudoRET implicit $v8
970     %1:_(<vscale x 4 x s8>) = COPY $v8
971     %0:_(<vscale x 4 x s16>) = G_ZEXT %1(<vscale x 4 x s8>)
972     $v8 = COPY %0(<vscale x 4 x s16>)
973     PseudoRET implicit $v8
976 name:            zext_nxv4i32_nxv4i8
977 legalized:       false
978 tracksRegLiveness: true
979 body:             |
980   bb.0.entry:
981     liveins: $v8
982     ; RV32-LABEL: name: zext_nxv4i32_nxv4i8
983     ; RV32: liveins: $v8
984     ; RV32-NEXT: {{  $}}
985     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s8>) = COPY $v8
986     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 4 x s32>) = G_ZEXT [[COPY]](<vscale x 4 x s8>)
987     ; RV32-NEXT: $v8m2 = COPY [[ZEXT]](<vscale x 4 x s32>)
988     ; RV32-NEXT: PseudoRET implicit $v8m2
989     ;
990     ; RV64-LABEL: name: zext_nxv4i32_nxv4i8
991     ; RV64: liveins: $v8
992     ; RV64-NEXT: {{  $}}
993     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s8>) = COPY $v8
994     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 4 x s32>) = G_ZEXT [[COPY]](<vscale x 4 x s8>)
995     ; RV64-NEXT: $v8m2 = COPY [[ZEXT]](<vscale x 4 x s32>)
996     ; RV64-NEXT: PseudoRET implicit $v8m2
997     %1:_(<vscale x 4 x s8>) = COPY $v8
998     %0:_(<vscale x 4 x s32>) = G_ZEXT %1(<vscale x 4 x s8>)
999     $v8m2 = COPY %0(<vscale x 4 x s32>)
1000     PseudoRET implicit $v8m2
1003 name:            zext_nxv4i64_nxv4i8
1004 legalized:       false
1005 tracksRegLiveness: true
1006 body:             |
1007   bb.0.entry:
1008     liveins: $v8
1009     ; RV32-LABEL: name: zext_nxv4i64_nxv4i8
1010     ; RV32: liveins: $v8
1011     ; RV32-NEXT: {{  $}}
1012     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s8>) = COPY $v8
1013     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 4 x s64>) = G_ZEXT [[COPY]](<vscale x 4 x s8>)
1014     ; RV32-NEXT: $v8m4 = COPY [[ZEXT]](<vscale x 4 x s64>)
1015     ; RV32-NEXT: PseudoRET implicit $v8m4
1016     ;
1017     ; RV64-LABEL: name: zext_nxv4i64_nxv4i8
1018     ; RV64: liveins: $v8
1019     ; RV64-NEXT: {{  $}}
1020     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s8>) = COPY $v8
1021     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 4 x s64>) = G_ZEXT [[COPY]](<vscale x 4 x s8>)
1022     ; RV64-NEXT: $v8m4 = COPY [[ZEXT]](<vscale x 4 x s64>)
1023     ; RV64-NEXT: PseudoRET implicit $v8m4
1024     %1:_(<vscale x 4 x s8>) = COPY $v8
1025     %0:_(<vscale x 4 x s64>) = G_ZEXT %1(<vscale x 4 x s8>)
1026     $v8m4 = COPY %0(<vscale x 4 x s64>)
1027     PseudoRET implicit $v8m4
1030 name:            zext_nxv8i16_nxv8i8
1031 legalized:       false
1032 tracksRegLiveness: true
1033 body:             |
1034   bb.0.entry:
1035     liveins: $v8
1036     ; RV32-LABEL: name: zext_nxv8i16_nxv8i8
1037     ; RV32: liveins: $v8
1038     ; RV32-NEXT: {{  $}}
1039     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s8>) = COPY $v8
1040     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 8 x s16>) = G_ZEXT [[COPY]](<vscale x 8 x s8>)
1041     ; RV32-NEXT: $v8m2 = COPY [[ZEXT]](<vscale x 8 x s16>)
1042     ; RV32-NEXT: PseudoRET implicit $v8m2
1043     ;
1044     ; RV64-LABEL: name: zext_nxv8i16_nxv8i8
1045     ; RV64: liveins: $v8
1046     ; RV64-NEXT: {{  $}}
1047     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s8>) = COPY $v8
1048     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 8 x s16>) = G_ZEXT [[COPY]](<vscale x 8 x s8>)
1049     ; RV64-NEXT: $v8m2 = COPY [[ZEXT]](<vscale x 8 x s16>)
1050     ; RV64-NEXT: PseudoRET implicit $v8m2
1051     %1:_(<vscale x 8 x s8>) = COPY $v8
1052     %0:_(<vscale x 8 x s16>) = G_ZEXT %1(<vscale x 8 x s8>)
1053     $v8m2 = COPY %0(<vscale x 8 x s16>)
1054     PseudoRET implicit $v8m2
1057 name:            zext_nxv8i32_nxv8i8
1058 legalized:       false
1059 tracksRegLiveness: true
1060 body:             |
1061   bb.0.entry:
1062     liveins: $v8
1063     ; RV32-LABEL: name: zext_nxv8i32_nxv8i8
1064     ; RV32: liveins: $v8
1065     ; RV32-NEXT: {{  $}}
1066     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s8>) = COPY $v8
1067     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 8 x s32>) = G_ZEXT [[COPY]](<vscale x 8 x s8>)
1068     ; RV32-NEXT: $v8m4 = COPY [[ZEXT]](<vscale x 8 x s32>)
1069     ; RV32-NEXT: PseudoRET implicit $v8m4
1070     ;
1071     ; RV64-LABEL: name: zext_nxv8i32_nxv8i8
1072     ; RV64: liveins: $v8
1073     ; RV64-NEXT: {{  $}}
1074     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s8>) = COPY $v8
1075     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 8 x s32>) = G_ZEXT [[COPY]](<vscale x 8 x s8>)
1076     ; RV64-NEXT: $v8m4 = COPY [[ZEXT]](<vscale x 8 x s32>)
1077     ; RV64-NEXT: PseudoRET implicit $v8m4
1078     %1:_(<vscale x 8 x s8>) = COPY $v8
1079     %0:_(<vscale x 8 x s32>) = G_ZEXT %1(<vscale x 8 x s8>)
1080     $v8m4 = COPY %0(<vscale x 8 x s32>)
1081     PseudoRET implicit $v8m4
1084 name:            zext_nxv8i64_nxv8i8
1085 legalized:       false
1086 tracksRegLiveness: true
1087 body:             |
1088   bb.0.entry:
1089     liveins: $v8
1090     ; RV32-LABEL: name: zext_nxv8i64_nxv8i8
1091     ; RV32: liveins: $v8
1092     ; RV32-NEXT: {{  $}}
1093     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s8>) = COPY $v8
1094     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 8 x s64>) = G_ZEXT [[COPY]](<vscale x 8 x s8>)
1095     ; RV32-NEXT: $v8m8 = COPY [[ZEXT]](<vscale x 8 x s64>)
1096     ; RV32-NEXT: PseudoRET implicit $v8m8
1097     ;
1098     ; RV64-LABEL: name: zext_nxv8i64_nxv8i8
1099     ; RV64: liveins: $v8
1100     ; RV64-NEXT: {{  $}}
1101     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s8>) = COPY $v8
1102     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 8 x s64>) = G_ZEXT [[COPY]](<vscale x 8 x s8>)
1103     ; RV64-NEXT: $v8m8 = COPY [[ZEXT]](<vscale x 8 x s64>)
1104     ; RV64-NEXT: PseudoRET implicit $v8m8
1105     %1:_(<vscale x 8 x s8>) = COPY $v8
1106     %0:_(<vscale x 8 x s64>) = G_ZEXT %1(<vscale x 8 x s8>)
1107     $v8m8 = COPY %0(<vscale x 8 x s64>)
1108     PseudoRET implicit $v8m8
1111 name:            zext_nxv16i16_nxv16i8
1112 legalized:       false
1113 tracksRegLiveness: true
1114 body:             |
1115   bb.0.entry:
1116     liveins: $v8
1117     ; RV32-LABEL: name: zext_nxv16i16_nxv16i8
1118     ; RV32: liveins: $v8
1119     ; RV32-NEXT: {{  $}}
1120     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s8>) = COPY $v8m2
1121     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 16 x s16>) = G_ZEXT [[COPY]](<vscale x 16 x s8>)
1122     ; RV32-NEXT: $v8m4 = COPY [[ZEXT]](<vscale x 16 x s16>)
1123     ; RV32-NEXT: PseudoRET implicit $v8m4
1124     ;
1125     ; RV64-LABEL: name: zext_nxv16i16_nxv16i8
1126     ; RV64: liveins: $v8
1127     ; RV64-NEXT: {{  $}}
1128     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s8>) = COPY $v8m2
1129     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 16 x s16>) = G_ZEXT [[COPY]](<vscale x 16 x s8>)
1130     ; RV64-NEXT: $v8m4 = COPY [[ZEXT]](<vscale x 16 x s16>)
1131     ; RV64-NEXT: PseudoRET implicit $v8m4
1132     %1:_(<vscale x 16 x s8>) = COPY $v8m2
1133     %0:_(<vscale x 16 x s16>) = G_ZEXT %1(<vscale x 16 x s8>)
1134     $v8m4 = COPY %0(<vscale x 16 x s16>)
1135     PseudoRET implicit $v8m4
1138 name:            zext_nxv16i32_nxv16i8
1139 legalized:       false
1140 tracksRegLiveness: true
1141 body:             |
1142   bb.0.entry:
1143     liveins: $v8
1144     ; RV32-LABEL: name: zext_nxv16i32_nxv16i8
1145     ; RV32: liveins: $v8
1146     ; RV32-NEXT: {{  $}}
1147     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s8>) = COPY $v8m2
1148     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 16 x s32>) = G_ZEXT [[COPY]](<vscale x 16 x s8>)
1149     ; RV32-NEXT: $v8m8 = COPY [[ZEXT]](<vscale x 16 x s32>)
1150     ; RV32-NEXT: PseudoRET implicit $v8m8
1151     ;
1152     ; RV64-LABEL: name: zext_nxv16i32_nxv16i8
1153     ; RV64: liveins: $v8
1154     ; RV64-NEXT: {{  $}}
1155     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s8>) = COPY $v8m2
1156     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 16 x s32>) = G_ZEXT [[COPY]](<vscale x 16 x s8>)
1157     ; RV64-NEXT: $v8m8 = COPY [[ZEXT]](<vscale x 16 x s32>)
1158     ; RV64-NEXT: PseudoRET implicit $v8m8
1159     %1:_(<vscale x 16 x s8>) = COPY $v8m2
1160     %0:_(<vscale x 16 x s32>) = G_ZEXT %1(<vscale x 16 x s8>)
1161     $v8m8 = COPY %0(<vscale x 16 x s32>)
1162     PseudoRET implicit $v8m8
1165 name:            zext_nxv32i16_nxv32i8
1166 legalized:       false
1167 tracksRegLiveness: true
1168 body:             |
1169   bb.0.entry:
1170     liveins: $v8
1171     ; RV32-LABEL: name: zext_nxv32i16_nxv32i8
1172     ; RV32: liveins: $v8
1173     ; RV32-NEXT: {{  $}}
1174     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 32 x s8>) = COPY $v8m4
1175     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 32 x s16>) = G_ZEXT [[COPY]](<vscale x 32 x s8>)
1176     ; RV32-NEXT: $v8m8 = COPY [[ZEXT]](<vscale x 32 x s16>)
1177     ; RV32-NEXT: PseudoRET implicit $v8m8
1178     ;
1179     ; RV64-LABEL: name: zext_nxv32i16_nxv32i8
1180     ; RV64: liveins: $v8
1181     ; RV64-NEXT: {{  $}}
1182     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 32 x s8>) = COPY $v8m4
1183     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 32 x s16>) = G_ZEXT [[COPY]](<vscale x 32 x s8>)
1184     ; RV64-NEXT: $v8m8 = COPY [[ZEXT]](<vscale x 32 x s16>)
1185     ; RV64-NEXT: PseudoRET implicit $v8m8
1186     %1:_(<vscale x 32 x s8>) = COPY $v8m4
1187     %0:_(<vscale x 32 x s16>) = G_ZEXT %1(<vscale x 32 x s8>)
1188     $v8m8 = COPY %0(<vscale x 32 x s16>)
1189     PseudoRET implicit $v8m8
1192 # Extend from s16 element vectors
1194 name:            zext_nxv1i32_nxv1i16
1195 legalized:       false
1196 tracksRegLiveness: true
1197 body:             |
1198   bb.0.entry:
1199     liveins: $v8
1200     ; RV32-LABEL: name: zext_nxv1i32_nxv1i16
1201     ; RV32: liveins: $v8
1202     ; RV32-NEXT: {{  $}}
1203     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s16>) = COPY $v8
1204     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 1 x s32>) = G_ZEXT [[COPY]](<vscale x 1 x s16>)
1205     ; RV32-NEXT: $v8 = COPY [[ZEXT]](<vscale x 1 x s32>)
1206     ; RV32-NEXT: PseudoRET implicit $v8
1207     ;
1208     ; RV64-LABEL: name: zext_nxv1i32_nxv1i16
1209     ; RV64: liveins: $v8
1210     ; RV64-NEXT: {{  $}}
1211     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s16>) = COPY $v8
1212     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 1 x s32>) = G_ZEXT [[COPY]](<vscale x 1 x s16>)
1213     ; RV64-NEXT: $v8 = COPY [[ZEXT]](<vscale x 1 x s32>)
1214     ; RV64-NEXT: PseudoRET implicit $v8
1215     %1:_(<vscale x 1 x s16>) = COPY $v8
1216     %0:_(<vscale x 1 x s32>) = G_ZEXT %1(<vscale x 1 x s16>)
1217     $v8 = COPY %0(<vscale x 1 x s32>)
1218     PseudoRET implicit $v8
1221 name:            zext_nxv1i64_nxv1i16
1222 legalized:       false
1223 tracksRegLiveness: true
1224 body:             |
1225   bb.0.entry:
1226     liveins: $v8
1227     ; RV32-LABEL: name: zext_nxv1i64_nxv1i16
1228     ; RV32: liveins: $v8
1229     ; RV32-NEXT: {{  $}}
1230     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s16>) = COPY $v8
1231     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 1 x s64>) = G_ZEXT [[COPY]](<vscale x 1 x s16>)
1232     ; RV32-NEXT: $v8 = COPY [[ZEXT]](<vscale x 1 x s64>)
1233     ; RV32-NEXT: PseudoRET implicit $v8
1234     ;
1235     ; RV64-LABEL: name: zext_nxv1i64_nxv1i16
1236     ; RV64: liveins: $v8
1237     ; RV64-NEXT: {{  $}}
1238     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s16>) = COPY $v8
1239     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 1 x s64>) = G_ZEXT [[COPY]](<vscale x 1 x s16>)
1240     ; RV64-NEXT: $v8 = COPY [[ZEXT]](<vscale x 1 x s64>)
1241     ; RV64-NEXT: PseudoRET implicit $v8
1242     %1:_(<vscale x 1 x s16>) = COPY $v8
1243     %0:_(<vscale x 1 x s64>) = G_ZEXT %1(<vscale x 1 x s16>)
1244     $v8 = COPY %0(<vscale x 1 x s64>)
1245     PseudoRET implicit $v8
1248 name:            zext_nxv2i32_nxv2i16
1249 legalized:       false
1250 tracksRegLiveness: true
1251 body:             |
1252   bb.0.entry:
1253     liveins: $v8
1254     ; RV32-LABEL: name: zext_nxv2i32_nxv2i16
1255     ; RV32: liveins: $v8
1256     ; RV32-NEXT: {{  $}}
1257     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s16>) = COPY $v8
1258     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 2 x s32>) = G_ZEXT [[COPY]](<vscale x 2 x s16>)
1259     ; RV32-NEXT: $v8 = COPY [[ZEXT]](<vscale x 2 x s32>)
1260     ; RV32-NEXT: PseudoRET implicit $v8
1261     ;
1262     ; RV64-LABEL: name: zext_nxv2i32_nxv2i16
1263     ; RV64: liveins: $v8
1264     ; RV64-NEXT: {{  $}}
1265     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s16>) = COPY $v8
1266     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 2 x s32>) = G_ZEXT [[COPY]](<vscale x 2 x s16>)
1267     ; RV64-NEXT: $v8 = COPY [[ZEXT]](<vscale x 2 x s32>)
1268     ; RV64-NEXT: PseudoRET implicit $v8
1269     %1:_(<vscale x 2 x s16>) = COPY $v8
1270     %0:_(<vscale x 2 x s32>) = G_ZEXT %1(<vscale x 2 x s16>)
1271     $v8 = COPY %0(<vscale x 2 x s32>)
1272     PseudoRET implicit $v8
1275 name:            zext_nxv2i64_nxv2i16
1276 legalized:       false
1277 tracksRegLiveness: true
1278 body:             |
1279   bb.0.entry:
1280     liveins: $v8
1281     ; RV32-LABEL: name: zext_nxv2i64_nxv2i16
1282     ; RV32: liveins: $v8
1283     ; RV32-NEXT: {{  $}}
1284     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s16>) = COPY $v8
1285     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 2 x s64>) = G_ZEXT [[COPY]](<vscale x 2 x s16>)
1286     ; RV32-NEXT: $v8m2 = COPY [[ZEXT]](<vscale x 2 x s64>)
1287     ; RV32-NEXT: PseudoRET implicit $v8m2
1288     ;
1289     ; RV64-LABEL: name: zext_nxv2i64_nxv2i16
1290     ; RV64: liveins: $v8
1291     ; RV64-NEXT: {{  $}}
1292     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s16>) = COPY $v8
1293     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 2 x s64>) = G_ZEXT [[COPY]](<vscale x 2 x s16>)
1294     ; RV64-NEXT: $v8m2 = COPY [[ZEXT]](<vscale x 2 x s64>)
1295     ; RV64-NEXT: PseudoRET implicit $v8m2
1296     %1:_(<vscale x 2 x s16>) = COPY $v8
1297     %0:_(<vscale x 2 x s64>) = G_ZEXT %1(<vscale x 2 x s16>)
1298     $v8m2 = COPY %0(<vscale x 2 x s64>)
1299     PseudoRET implicit $v8m2
1302 name:            zext_nxv4i32_nxv4i16
1303 legalized:       false
1304 tracksRegLiveness: true
1305 body:             |
1306   bb.0.entry:
1307     liveins: $v8
1308     ; RV32-LABEL: name: zext_nxv4i32_nxv4i16
1309     ; RV32: liveins: $v8
1310     ; RV32-NEXT: {{  $}}
1311     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s16>) = COPY $v8
1312     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 4 x s32>) = G_ZEXT [[COPY]](<vscale x 4 x s16>)
1313     ; RV32-NEXT: $v8m2 = COPY [[ZEXT]](<vscale x 4 x s32>)
1314     ; RV32-NEXT: PseudoRET implicit $v8m2
1315     ;
1316     ; RV64-LABEL: name: zext_nxv4i32_nxv4i16
1317     ; RV64: liveins: $v8
1318     ; RV64-NEXT: {{  $}}
1319     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s16>) = COPY $v8
1320     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 4 x s32>) = G_ZEXT [[COPY]](<vscale x 4 x s16>)
1321     ; RV64-NEXT: $v8m2 = COPY [[ZEXT]](<vscale x 4 x s32>)
1322     ; RV64-NEXT: PseudoRET implicit $v8m2
1323     %1:_(<vscale x 4 x s16>) = COPY $v8
1324     %0:_(<vscale x 4 x s32>) = G_ZEXT %1(<vscale x 4 x s16>)
1325     $v8m2 = COPY %0(<vscale x 4 x s32>)
1326     PseudoRET implicit $v8m2
1329 name:            zext_nxv4i64_nxv4i16
1330 legalized:       false
1331 tracksRegLiveness: true
1332 body:             |
1333   bb.0.entry:
1334     liveins: $v8
1335     ; RV32-LABEL: name: zext_nxv4i64_nxv4i16
1336     ; RV32: liveins: $v8
1337     ; RV32-NEXT: {{  $}}
1338     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s16>) = COPY $v8
1339     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 4 x s64>) = G_ZEXT [[COPY]](<vscale x 4 x s16>)
1340     ; RV32-NEXT: $v8m4 = COPY [[ZEXT]](<vscale x 4 x s64>)
1341     ; RV32-NEXT: PseudoRET implicit $v8m4
1342     ;
1343     ; RV64-LABEL: name: zext_nxv4i64_nxv4i16
1344     ; RV64: liveins: $v8
1345     ; RV64-NEXT: {{  $}}
1346     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s16>) = COPY $v8
1347     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 4 x s64>) = G_ZEXT [[COPY]](<vscale x 4 x s16>)
1348     ; RV64-NEXT: $v8m4 = COPY [[ZEXT]](<vscale x 4 x s64>)
1349     ; RV64-NEXT: PseudoRET implicit $v8m4
1350     %1:_(<vscale x 4 x s16>) = COPY $v8
1351     %0:_(<vscale x 4 x s64>) = G_ZEXT %1(<vscale x 4 x s16>)
1352     $v8m4 = COPY %0(<vscale x 4 x s64>)
1353     PseudoRET implicit $v8m4
1356 name:            zext_nxv8i32_nxv8i16
1357 legalized:       false
1358 tracksRegLiveness: true
1359 body:             |
1360   bb.0.entry:
1361     liveins: $v8
1362     ; RV32-LABEL: name: zext_nxv8i32_nxv8i16
1363     ; RV32: liveins: $v8
1364     ; RV32-NEXT: {{  $}}
1365     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s16>) = COPY $v8m2
1366     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 8 x s32>) = G_ZEXT [[COPY]](<vscale x 8 x s16>)
1367     ; RV32-NEXT: $v8m4 = COPY [[ZEXT]](<vscale x 8 x s32>)
1368     ; RV32-NEXT: PseudoRET implicit $v8m4
1369     ;
1370     ; RV64-LABEL: name: zext_nxv8i32_nxv8i16
1371     ; RV64: liveins: $v8
1372     ; RV64-NEXT: {{  $}}
1373     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s16>) = COPY $v8m2
1374     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 8 x s32>) = G_ZEXT [[COPY]](<vscale x 8 x s16>)
1375     ; RV64-NEXT: $v8m4 = COPY [[ZEXT]](<vscale x 8 x s32>)
1376     ; RV64-NEXT: PseudoRET implicit $v8m4
1377     %1:_(<vscale x 8 x s16>) = COPY $v8m2
1378     %0:_(<vscale x 8 x s32>) = G_ZEXT %1(<vscale x 8 x s16>)
1379     $v8m4 = COPY %0(<vscale x 8 x s32>)
1380     PseudoRET implicit $v8m4
1383 name:            zext_nxv8i64_nxv8i16
1384 legalized:       false
1385 tracksRegLiveness: true
1386 body:             |
1387   bb.0.entry:
1388     liveins: $v8
1389     ; RV32-LABEL: name: zext_nxv8i64_nxv8i16
1390     ; RV32: liveins: $v8
1391     ; RV32-NEXT: {{  $}}
1392     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s16>) = COPY $v8m4
1393     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 8 x s64>) = G_ZEXT [[COPY]](<vscale x 8 x s16>)
1394     ; RV32-NEXT: $v8m8 = COPY [[ZEXT]](<vscale x 8 x s64>)
1395     ; RV32-NEXT: PseudoRET implicit $v8m8
1396     ;
1397     ; RV64-LABEL: name: zext_nxv8i64_nxv8i16
1398     ; RV64: liveins: $v8
1399     ; RV64-NEXT: {{  $}}
1400     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s16>) = COPY $v8m4
1401     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 8 x s64>) = G_ZEXT [[COPY]](<vscale x 8 x s16>)
1402     ; RV64-NEXT: $v8m8 = COPY [[ZEXT]](<vscale x 8 x s64>)
1403     ; RV64-NEXT: PseudoRET implicit $v8m8
1404     %1:_(<vscale x 8 x s16>) = COPY $v8m4
1405     %0:_(<vscale x 8 x s64>) = G_ZEXT %1(<vscale x 8 x s16>)
1406     $v8m8 = COPY %0(<vscale x 8 x s64>)
1407     PseudoRET implicit $v8m8
1410 name:            zext_nxv16i32_nxv16i16
1411 legalized:       false
1412 tracksRegLiveness: true
1413 body:             |
1414   bb.0.entry:
1415     liveins: $v8
1416     ; RV32-LABEL: name: zext_nxv16i32_nxv16i16
1417     ; RV32: liveins: $v8
1418     ; RV32-NEXT: {{  $}}
1419     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s16>) = COPY $v8m4
1420     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 16 x s32>) = G_ZEXT [[COPY]](<vscale x 16 x s16>)
1421     ; RV32-NEXT: $v8m8 = COPY [[ZEXT]](<vscale x 16 x s32>)
1422     ; RV32-NEXT: PseudoRET implicit $v8m8
1423     ;
1424     ; RV64-LABEL: name: zext_nxv16i32_nxv16i16
1425     ; RV64: liveins: $v8
1426     ; RV64-NEXT: {{  $}}
1427     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s16>) = COPY $v8m4
1428     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 16 x s32>) = G_ZEXT [[COPY]](<vscale x 16 x s16>)
1429     ; RV64-NEXT: $v8m8 = COPY [[ZEXT]](<vscale x 16 x s32>)
1430     ; RV64-NEXT: PseudoRET implicit $v8m8
1431     %1:_(<vscale x 16 x s16>) = COPY $v8m4
1432     %0:_(<vscale x 16 x s32>) = G_ZEXT %1(<vscale x 16 x s16>)
1433     $v8m8 = COPY %0(<vscale x 16 x s32>)
1434     PseudoRET implicit $v8m8
1437 # Extend from s32 element vectors
1439 name:            zext_nxv1i64_nxv1i32
1440 legalized:       false
1441 tracksRegLiveness: true
1442 body:             |
1443   bb.0.entry:
1444     liveins: $v8
1445     ; RV32-LABEL: name: zext_nxv1i64_nxv1i32
1446     ; RV32: liveins: $v8
1447     ; RV32-NEXT: {{  $}}
1448     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s32>) = COPY $v8
1449     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 1 x s64>) = G_ZEXT [[COPY]](<vscale x 1 x s32>)
1450     ; RV32-NEXT: $v8 = COPY [[ZEXT]](<vscale x 1 x s64>)
1451     ; RV32-NEXT: PseudoRET implicit $v8
1452     ;
1453     ; RV64-LABEL: name: zext_nxv1i64_nxv1i32
1454     ; RV64: liveins: $v8
1455     ; RV64-NEXT: {{  $}}
1456     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s32>) = COPY $v8
1457     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 1 x s64>) = G_ZEXT [[COPY]](<vscale x 1 x s32>)
1458     ; RV64-NEXT: $v8 = COPY [[ZEXT]](<vscale x 1 x s64>)
1459     ; RV64-NEXT: PseudoRET implicit $v8
1460     %1:_(<vscale x 1 x s32>) = COPY $v8
1461     %0:_(<vscale x 1 x s64>) = G_ZEXT %1(<vscale x 1 x s32>)
1462     $v8 = COPY %0(<vscale x 1 x s64>)
1463     PseudoRET implicit $v8
1466 name:            zext_nxv2i64_nxv2i32
1467 legalized:       false
1468 tracksRegLiveness: true
1469 body:             |
1470   bb.0.entry:
1471     liveins: $v8
1472     ; RV32-LABEL: name: zext_nxv2i64_nxv2i32
1473     ; RV32: liveins: $v8
1474     ; RV32-NEXT: {{  $}}
1475     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s32>) = COPY $v8
1476     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 2 x s64>) = G_ZEXT [[COPY]](<vscale x 2 x s32>)
1477     ; RV32-NEXT: $v8m2 = COPY [[ZEXT]](<vscale x 2 x s64>)
1478     ; RV32-NEXT: PseudoRET implicit $v8m2
1479     ;
1480     ; RV64-LABEL: name: zext_nxv2i64_nxv2i32
1481     ; RV64: liveins: $v8
1482     ; RV64-NEXT: {{  $}}
1483     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s32>) = COPY $v8
1484     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 2 x s64>) = G_ZEXT [[COPY]](<vscale x 2 x s32>)
1485     ; RV64-NEXT: $v8m2 = COPY [[ZEXT]](<vscale x 2 x s64>)
1486     ; RV64-NEXT: PseudoRET implicit $v8m2
1487     %1:_(<vscale x 2 x s32>) = COPY $v8
1488     %0:_(<vscale x 2 x s64>) = G_ZEXT %1(<vscale x 2 x s32>)
1489     $v8m2 = COPY %0(<vscale x 2 x s64>)
1490     PseudoRET implicit $v8m2
1493 name:            zext_nxv4i64_nxv4i32
1494 legalized:       false
1495 tracksRegLiveness: true
1496 body:             |
1497   bb.0.entry:
1498     liveins: $v8
1499     ; RV32-LABEL: name: zext_nxv4i64_nxv4i32
1500     ; RV32: liveins: $v8
1501     ; RV32-NEXT: {{  $}}
1502     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s32>) = COPY $v8m2
1503     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 4 x s64>) = G_ZEXT [[COPY]](<vscale x 4 x s32>)
1504     ; RV32-NEXT: $v8m4 = COPY [[ZEXT]](<vscale x 4 x s64>)
1505     ; RV32-NEXT: PseudoRET implicit $v8m4
1506     ;
1507     ; RV64-LABEL: name: zext_nxv4i64_nxv4i32
1508     ; RV64: liveins: $v8
1509     ; RV64-NEXT: {{  $}}
1510     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s32>) = COPY $v8m2
1511     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 4 x s64>) = G_ZEXT [[COPY]](<vscale x 4 x s32>)
1512     ; RV64-NEXT: $v8m4 = COPY [[ZEXT]](<vscale x 4 x s64>)
1513     ; RV64-NEXT: PseudoRET implicit $v8m4
1514     %1:_(<vscale x 4 x s32>) = COPY $v8m2
1515     %0:_(<vscale x 4 x s64>) = G_ZEXT %1(<vscale x 4 x s32>)
1516     $v8m4 = COPY %0(<vscale x 4 x s64>)
1517     PseudoRET implicit $v8m4
1520 name:            zext_nxv8i64_nxv8i32
1521 legalized:       false
1522 tracksRegLiveness: true
1523 body:             |
1524   bb.0.entry:
1525     liveins: $v8
1526     ; RV32-LABEL: name: zext_nxv8i64_nxv8i32
1527     ; RV32: liveins: $v8
1528     ; RV32-NEXT: {{  $}}
1529     ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s32>) = COPY $v8m4
1530     ; RV32-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 8 x s64>) = G_ZEXT [[COPY]](<vscale x 8 x s32>)
1531     ; RV32-NEXT: $v8m8 = COPY [[ZEXT]](<vscale x 8 x s64>)
1532     ; RV32-NEXT: PseudoRET implicit $v8m8
1533     ;
1534     ; RV64-LABEL: name: zext_nxv8i64_nxv8i32
1535     ; RV64: liveins: $v8
1536     ; RV64-NEXT: {{  $}}
1537     ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s32>) = COPY $v8m4
1538     ; RV64-NEXT: [[ZEXT:%[0-9]+]]:_(<vscale x 8 x s64>) = G_ZEXT [[COPY]](<vscale x 8 x s32>)
1539     ; RV64-NEXT: $v8m8 = COPY [[ZEXT]](<vscale x 8 x s64>)
1540     ; RV64-NEXT: PseudoRET implicit $v8m8
1541     %1:_(<vscale x 8 x s32>) = COPY $v8m4
1542     %0:_(<vscale x 8 x s64>) = G_ZEXT %1(<vscale x 8 x s32>)
1543     $v8m8 = COPY %0(<vscale x 8 x s64>)
1544     PseudoRET implicit $v8m8