[SimplifyCFG] Always allow hoisting if all instructions match. (#97158)
[llvm-project.git] / llvm / test / CodeGen / RISCV / GlobalISel / regbankselect / rvv / icmp.mir
blob925d6aee47490ca90a3d0eb3a1ae9fb68a28330b
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:   -disable-gisel-legality-check -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:   -disable-gisel-legality-check -simplify-mir -verify-machineinstrs %s \
7 # RUN:   -o - | FileCheck -check-prefix=RV64I %s
9 ---
10 name:            icmp_nxv1i1
11 legalized:       true
12 tracksRegLiveness: true
13 body:             |
14   bb.0.entry:
15     ; RV32I-LABEL: name: icmp_nxv1i1
16     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 1 x s1>) = G_IMPLICIT_DEF
17     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 1 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 1 x s1>), [[DEF]]
18     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 1 x s1>)
19     ; RV32I-NEXT: PseudoRET implicit $v8
20     ;
21     ; RV64I-LABEL: name: icmp_nxv1i1
22     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 1 x s1>) = G_IMPLICIT_DEF
23     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 1 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 1 x s1>), [[DEF]]
24     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 1 x s1>)
25     ; RV64I-NEXT: PseudoRET implicit $v8
26     %0:_(<vscale x 1 x s1>) = G_IMPLICIT_DEF
27     %1:_(<vscale x 1 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 1 x s1>), %0
28     $v8 = COPY %1(<vscale x 1 x s1>)
29     PseudoRET implicit $v8
31 ...
32 ---
33 name:            icmp_nxv2i1
34 legalized:       true
35 tracksRegLiveness: true
36 body:             |
37   bb.0.entry:
38     ; RV32I-LABEL: name: icmp_nxv2i1
39     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 2 x s1>) = G_IMPLICIT_DEF
40     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 2 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 2 x s1>), [[DEF]]
41     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 2 x s1>)
42     ; RV32I-NEXT: PseudoRET implicit $v8
43     ;
44     ; RV64I-LABEL: name: icmp_nxv2i1
45     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 2 x s1>) = G_IMPLICIT_DEF
46     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 2 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 2 x s1>), [[DEF]]
47     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 2 x s1>)
48     ; RV64I-NEXT: PseudoRET implicit $v8
49     %0:_(<vscale x 2 x s1>) = G_IMPLICIT_DEF
50     %1:_(<vscale x 2 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 2 x s1>), %0
51     $v8 = COPY %1(<vscale x 2 x s1>)
52     PseudoRET implicit $v8
54 ...
55 ---
56 name:            icmp_nxv4i1
57 legalized:       true
58 tracksRegLiveness: true
59 body:             |
60   bb.0.entry:
61     ; RV32I-LABEL: name: icmp_nxv4i1
62     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 4 x s1>) = G_IMPLICIT_DEF
63     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 4 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 4 x s1>), [[DEF]]
64     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 4 x s1>)
65     ; RV32I-NEXT: PseudoRET implicit $v8
66     ;
67     ; RV64I-LABEL: name: icmp_nxv4i1
68     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 4 x s1>) = G_IMPLICIT_DEF
69     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 4 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 4 x s1>), [[DEF]]
70     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 4 x s1>)
71     ; RV64I-NEXT: PseudoRET implicit $v8
72     %0:_(<vscale x 4 x s1>) = G_IMPLICIT_DEF
73     %1:_(<vscale x 4 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 4 x s1>), %0
74     $v8 = COPY %1(<vscale x 4 x s1>)
75     PseudoRET implicit $v8
77 ...
78 ---
79 name:            icmp_nxv8i1
80 legalized:       true
81 tracksRegLiveness: true
82 body:             |
83   bb.0.entry:
84     ; RV32I-LABEL: name: icmp_nxv8i1
85     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 8 x s1>) = G_IMPLICIT_DEF
86     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 8 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 8 x s1>), [[DEF]]
87     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 8 x s1>)
88     ; RV32I-NEXT: PseudoRET implicit $v8
89     ;
90     ; RV64I-LABEL: name: icmp_nxv8i1
91     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 8 x s1>) = G_IMPLICIT_DEF
92     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 8 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 8 x s1>), [[DEF]]
93     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 8 x s1>)
94     ; RV64I-NEXT: PseudoRET implicit $v8
95     %0:_(<vscale x 8 x s1>) = G_IMPLICIT_DEF
96     %1:_(<vscale x 8 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 8 x s1>), %0
97     $v8 = COPY %1(<vscale x 8 x s1>)
98     PseudoRET implicit $v8
102 name:            icmp_nxv16i1
103 legalized:       true
104 tracksRegLiveness: true
105 body:             |
106   bb.0.entry:
107     ; RV32I-LABEL: name: icmp_nxv16i1
108     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 16 x s1>) = G_IMPLICIT_DEF
109     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 16 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 16 x s1>), [[DEF]]
110     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 16 x s1>)
111     ; RV32I-NEXT: PseudoRET implicit $v8
112     ;
113     ; RV64I-LABEL: name: icmp_nxv16i1
114     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 16 x s1>) = G_IMPLICIT_DEF
115     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 16 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 16 x s1>), [[DEF]]
116     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 16 x s1>)
117     ; RV64I-NEXT: PseudoRET implicit $v8
118     %0:_(<vscale x 16 x s1>) = G_IMPLICIT_DEF
119     %1:_(<vscale x 16 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 16 x s1>), %0
120     $v8 = COPY %1(<vscale x 16 x s1>)
121     PseudoRET implicit $v8
125 name:            icmp_nxv32i1
126 legalized:       true
127 tracksRegLiveness: true
128 body:             |
129   bb.0.entry:
130     ; RV32I-LABEL: name: icmp_nxv32i1
131     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 32 x s1>) = G_IMPLICIT_DEF
132     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 32 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 32 x s1>), [[DEF]]
133     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 32 x s1>)
134     ; RV32I-NEXT: PseudoRET implicit $v8
135     ;
136     ; RV64I-LABEL: name: icmp_nxv32i1
137     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 32 x s1>) = G_IMPLICIT_DEF
138     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 32 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 32 x s1>), [[DEF]]
139     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 32 x s1>)
140     ; RV64I-NEXT: PseudoRET implicit $v8
141     %0:_(<vscale x 32 x s1>) = G_IMPLICIT_DEF
142     %1:_(<vscale x 32 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 32 x s1>), %0
143     $v8 = COPY %1(<vscale x 32 x s1>)
144     PseudoRET implicit $v8
148 name:            icmp_nxv64i1
149 legalized:       true
150 tracksRegLiveness: true
151 body:             |
152   bb.0.entry:
153     ; RV32I-LABEL: name: icmp_nxv64i1
154     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 64 x s1>) = G_IMPLICIT_DEF
155     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 64 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 64 x s1>), [[DEF]]
156     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 64 x s1>)
157     ; RV32I-NEXT: PseudoRET implicit $v8
158     ;
159     ; RV64I-LABEL: name: icmp_nxv64i1
160     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 64 x s1>) = G_IMPLICIT_DEF
161     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 64 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 64 x s1>), [[DEF]]
162     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 64 x s1>)
163     ; RV64I-NEXT: PseudoRET implicit $v8
164     %0:_(<vscale x 64 x s1>) = G_IMPLICIT_DEF
165     %1:_(<vscale x 64 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 64 x s1>), %0
166     $v8 = COPY %1(<vscale x 64 x s1>)
167     PseudoRET implicit $v8
171 name:            icmp_nxv1i8
172 legalized:       true
173 tracksRegLiveness: true
174 body:             |
175   bb.0.entry:
176     ; RV32I-LABEL: name: icmp_nxv1i8
177     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 1 x s8>) = G_IMPLICIT_DEF
178     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 1 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 1 x s8>), [[DEF]]
179     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 1 x s1>)
180     ; RV32I-NEXT: PseudoRET implicit $v8
181     ;
182     ; RV64I-LABEL: name: icmp_nxv1i8
183     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 1 x s8>) = G_IMPLICIT_DEF
184     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 1 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 1 x s8>), [[DEF]]
185     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 1 x s1>)
186     ; RV64I-NEXT: PseudoRET implicit $v8
187     %0:_(<vscale x 1 x s8>) = G_IMPLICIT_DEF
188     %1:_(<vscale x 1 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 1 x s8>), %0
189     $v8 = COPY %1(<vscale x 1 x s1>)
190     PseudoRET implicit $v8
194 name:            icmp_nxv2i8
195 legalized:       true
196 tracksRegLiveness: true
197 body:             |
198   bb.0.entry:
199     ; RV32I-LABEL: name: icmp_nxv2i8
200     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 2 x s8>) = G_IMPLICIT_DEF
201     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 2 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 2 x s8>), [[DEF]]
202     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 2 x s1>)
203     ; RV32I-NEXT: PseudoRET implicit $v8
204     ;
205     ; RV64I-LABEL: name: icmp_nxv2i8
206     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 2 x s8>) = G_IMPLICIT_DEF
207     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 2 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 2 x s8>), [[DEF]]
208     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 2 x s1>)
209     ; RV64I-NEXT: PseudoRET implicit $v8
210     %0:_(<vscale x 2 x s8>) = G_IMPLICIT_DEF
211     %1:_(<vscale x 2 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 2 x s8>), %0
212     $v8 = COPY %1(<vscale x 2 x s1>)
213     PseudoRET implicit $v8
217 name:            icmp_nxv4i8
218 legalized:       true
219 tracksRegLiveness: true
220 body:             |
221   bb.0.entry:
222     ; RV32I-LABEL: name: icmp_nxv4i8
223     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 4 x s8>) = G_IMPLICIT_DEF
224     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 4 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 4 x s8>), [[DEF]]
225     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 4 x s1>)
226     ; RV32I-NEXT: PseudoRET implicit $v8
227     ;
228     ; RV64I-LABEL: name: icmp_nxv4i8
229     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 4 x s8>) = G_IMPLICIT_DEF
230     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 4 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 4 x s8>), [[DEF]]
231     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 4 x s1>)
232     ; RV64I-NEXT: PseudoRET implicit $v8
233     %0:_(<vscale x 4 x s8>) = G_IMPLICIT_DEF
234     %1:_(<vscale x 4 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 4 x s8>), %0
235     $v8 = COPY %1(<vscale x 4 x s1>)
236     PseudoRET implicit $v8
240 name:            icmp_nxv8i8
241 legalized:       true
242 tracksRegLiveness: true
243 body:             |
244   bb.0.entry:
245     ; RV32I-LABEL: name: icmp_nxv8i8
246     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 8 x s8>) = G_IMPLICIT_DEF
247     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 8 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 8 x s8>), [[DEF]]
248     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 8 x s1>)
249     ; RV32I-NEXT: PseudoRET implicit $v8
250     ;
251     ; RV64I-LABEL: name: icmp_nxv8i8
252     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 8 x s8>) = G_IMPLICIT_DEF
253     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 8 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 8 x s8>), [[DEF]]
254     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 8 x s1>)
255     ; RV64I-NEXT: PseudoRET implicit $v8
256     %0:_(<vscale x 8 x s8>) = G_IMPLICIT_DEF
257     %1:_(<vscale x 8 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 8 x s8>), %0
258     $v8 = COPY %1(<vscale x 8 x s1>)
259     PseudoRET implicit $v8
263 name:            icmp_nxv16i8
264 legalized:       true
265 tracksRegLiveness: true
266 body:             |
267   bb.0.entry:
268     ; RV32I-LABEL: name: icmp_nxv16i8
269     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 16 x s8>) = G_IMPLICIT_DEF
270     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 16 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 16 x s8>), [[DEF]]
271     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 16 x s1>)
272     ; RV32I-NEXT: PseudoRET implicit $v8
273     ;
274     ; RV64I-LABEL: name: icmp_nxv16i8
275     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 16 x s8>) = G_IMPLICIT_DEF
276     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 16 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 16 x s8>), [[DEF]]
277     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 16 x s1>)
278     ; RV64I-NEXT: PseudoRET implicit $v8
279     %0:_(<vscale x 16 x s8>) = G_IMPLICIT_DEF
280     %1:_(<vscale x 16 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 16 x s8>), %0
281     $v8 = COPY %1(<vscale x 16 x s1>)
282     PseudoRET implicit $v8
286 name:            icmp_nxv32i8
287 legalized:       true
288 tracksRegLiveness: true
289 body:             |
290   bb.0.entry:
291     ; RV32I-LABEL: name: icmp_nxv32i8
292     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 32 x s8>) = G_IMPLICIT_DEF
293     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 32 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 32 x s8>), [[DEF]]
294     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 32 x s1>)
295     ; RV32I-NEXT: PseudoRET implicit $v8
296     ;
297     ; RV64I-LABEL: name: icmp_nxv32i8
298     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 32 x s8>) = G_IMPLICIT_DEF
299     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 32 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 32 x s8>), [[DEF]]
300     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 32 x s1>)
301     ; RV64I-NEXT: PseudoRET implicit $v8
302     %0:_(<vscale x 32 x s8>) = G_IMPLICIT_DEF
303     %1:_(<vscale x 32 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 32 x s8>), %0
304     $v8 = COPY %1(<vscale x 32 x s1>)
305     PseudoRET implicit $v8
309 name:            icmp_nxv64i8
310 legalized:       true
311 tracksRegLiveness: true
312 body:             |
313   bb.0.entry:
314     ; RV32I-LABEL: name: icmp_nxv64i8
315     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 64 x s8>) = G_IMPLICIT_DEF
316     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 64 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 64 x s8>), [[DEF]]
317     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 64 x s1>)
318     ; RV32I-NEXT: PseudoRET implicit $v8
319     ;
320     ; RV64I-LABEL: name: icmp_nxv64i8
321     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 64 x s8>) = G_IMPLICIT_DEF
322     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 64 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 64 x s8>), [[DEF]]
323     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 64 x s1>)
324     ; RV64I-NEXT: PseudoRET implicit $v8
325     %0:_(<vscale x 64 x s8>) = G_IMPLICIT_DEF
326     %1:_(<vscale x 64 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 64 x s8>), %0
327     $v8 = COPY %1(<vscale x 64 x s1>)
328     PseudoRET implicit $v8
332 name:            icmp_nxv1i16
333 legalized:       true
334 tracksRegLiveness: true
335 body:             |
336   bb.0.entry:
337     ; RV32I-LABEL: name: icmp_nxv1i16
338     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 1 x s16>) = G_IMPLICIT_DEF
339     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 1 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 1 x s16>), [[DEF]]
340     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 1 x s1>)
341     ; RV32I-NEXT: PseudoRET implicit $v8
342     ;
343     ; RV64I-LABEL: name: icmp_nxv1i16
344     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 1 x s16>) = G_IMPLICIT_DEF
345     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 1 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 1 x s16>), [[DEF]]
346     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 1 x s1>)
347     ; RV64I-NEXT: PseudoRET implicit $v8
348     %0:_(<vscale x 1 x s16>) = G_IMPLICIT_DEF
349     %1:_(<vscale x 1 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 1 x s16>), %0
350     $v8 = COPY %1(<vscale x 1 x s1>)
351     PseudoRET implicit $v8
355 name:            icmp_nxv2i16
356 legalized:       true
357 tracksRegLiveness: true
358 body:             |
359   bb.0.entry:
360     ; RV32I-LABEL: name: icmp_nxv2i16
361     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 2 x s16>) = G_IMPLICIT_DEF
362     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 2 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 2 x s16>), [[DEF]]
363     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 2 x s1>)
364     ; RV32I-NEXT: PseudoRET implicit $v8
365     ;
366     ; RV64I-LABEL: name: icmp_nxv2i16
367     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 2 x s16>) = G_IMPLICIT_DEF
368     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 2 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 2 x s16>), [[DEF]]
369     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 2 x s1>)
370     ; RV64I-NEXT: PseudoRET implicit $v8
371     %0:_(<vscale x 2 x s16>) = G_IMPLICIT_DEF
372     %1:_(<vscale x 2 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 2 x s16>), %0
373     $v8 = COPY %1(<vscale x 2 x s1>)
374     PseudoRET implicit $v8
378 name:            icmp_nxv4i16
379 legalized:       true
380 tracksRegLiveness: true
381 body:             |
382   bb.0.entry:
383     ; RV32I-LABEL: name: icmp_nxv4i16
384     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 4 x s16>) = G_IMPLICIT_DEF
385     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 4 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 4 x s16>), [[DEF]]
386     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 4 x s1>)
387     ; RV32I-NEXT: PseudoRET implicit $v8
388     ;
389     ; RV64I-LABEL: name: icmp_nxv4i16
390     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 4 x s16>) = G_IMPLICIT_DEF
391     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 4 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 4 x s16>), [[DEF]]
392     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 4 x s1>)
393     ; RV64I-NEXT: PseudoRET implicit $v8
394     %0:_(<vscale x 4 x s16>) = G_IMPLICIT_DEF
395     %1:_(<vscale x 4 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 4 x s16>), %0
396     $v8 = COPY %1(<vscale x 4 x s1>)
397     PseudoRET implicit $v8
401 name:            icmp_nxv8i16
402 legalized:       true
403 tracksRegLiveness: true
404 body:             |
405   bb.0.entry:
406     ; RV32I-LABEL: name: icmp_nxv8i16
407     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 8 x s16>) = G_IMPLICIT_DEF
408     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 8 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 8 x s16>), [[DEF]]
409     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 8 x s1>)
410     ; RV32I-NEXT: PseudoRET implicit $v8
411     ;
412     ; RV64I-LABEL: name: icmp_nxv8i16
413     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 8 x s16>) = G_IMPLICIT_DEF
414     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 8 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 8 x s16>), [[DEF]]
415     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 8 x s1>)
416     ; RV64I-NEXT: PseudoRET implicit $v8
417     %0:_(<vscale x 8 x s16>) = G_IMPLICIT_DEF
418     %1:_(<vscale x 8 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 8 x s16>), %0
419     $v8 = COPY %1(<vscale x 8 x s1>)
420     PseudoRET implicit $v8
424 name:            icmp_nxv16i16
425 legalized:       true
426 tracksRegLiveness: true
427 body:             |
428   bb.0.entry:
429     ; RV32I-LABEL: name: icmp_nxv16i16
430     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 16 x s16>) = G_IMPLICIT_DEF
431     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 16 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 16 x s16>), [[DEF]]
432     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 16 x s1>)
433     ; RV32I-NEXT: PseudoRET implicit $v8
434     ;
435     ; RV64I-LABEL: name: icmp_nxv16i16
436     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 16 x s16>) = G_IMPLICIT_DEF
437     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 16 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 16 x s16>), [[DEF]]
438     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 16 x s1>)
439     ; RV64I-NEXT: PseudoRET implicit $v8
440     %0:_(<vscale x 16 x s16>) = G_IMPLICIT_DEF
441     %1:_(<vscale x 16 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 16 x s16>), %0
442     $v8 = COPY %1(<vscale x 16 x s1>)
443     PseudoRET implicit $v8
447 name:            icmp_nxv32i16
448 legalized:       true
449 tracksRegLiveness: true
450 body:             |
451   bb.0.entry:
452     ; RV32I-LABEL: name: icmp_nxv32i16
453     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 32 x s16>) = G_IMPLICIT_DEF
454     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 32 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 32 x s16>), [[DEF]]
455     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 32 x s1>)
456     ; RV32I-NEXT: PseudoRET implicit $v8
457     ;
458     ; RV64I-LABEL: name: icmp_nxv32i16
459     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 32 x s16>) = G_IMPLICIT_DEF
460     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 32 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 32 x s16>), [[DEF]]
461     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 32 x s1>)
462     ; RV64I-NEXT: PseudoRET implicit $v8
463     %0:_(<vscale x 32 x s16>) = G_IMPLICIT_DEF
464     %1:_(<vscale x 32 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 32 x s16>), %0
465     $v8 = COPY %1(<vscale x 32 x s1>)
466     PseudoRET implicit $v8
470 name:            icmp_nxv1i32
471 legalized:       true
472 tracksRegLiveness: true
473 body:             |
474   bb.0.entry:
475     ; RV32I-LABEL: name: icmp_nxv1i32
476     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 1 x s32>) = G_IMPLICIT_DEF
477     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 1 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 1 x s32>), [[DEF]]
478     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 1 x s1>)
479     ; RV32I-NEXT: PseudoRET implicit $v8
480     ;
481     ; RV64I-LABEL: name: icmp_nxv1i32
482     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 1 x s32>) = G_IMPLICIT_DEF
483     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 1 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 1 x s32>), [[DEF]]
484     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 1 x s1>)
485     ; RV64I-NEXT: PseudoRET implicit $v8
486     %0:_(<vscale x 1 x s32>) = G_IMPLICIT_DEF
487     %1:_(<vscale x 1 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 1 x s32>), %0
488     $v8 = COPY %1(<vscale x 1 x s1>)
489     PseudoRET implicit $v8
493 name:            icmp_nxv2i32
494 legalized:       true
495 tracksRegLiveness: true
496 body:             |
497   bb.0.entry:
498     ; RV32I-LABEL: name: icmp_nxv2i32
499     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 2 x s32>) = G_IMPLICIT_DEF
500     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 2 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 2 x s32>), [[DEF]]
501     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 2 x s1>)
502     ; RV32I-NEXT: PseudoRET implicit $v8
503     ;
504     ; RV64I-LABEL: name: icmp_nxv2i32
505     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 2 x s32>) = G_IMPLICIT_DEF
506     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 2 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 2 x s32>), [[DEF]]
507     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 2 x s1>)
508     ; RV64I-NEXT: PseudoRET implicit $v8
509     %0:_(<vscale x 2 x s32>) = G_IMPLICIT_DEF
510     %1:_(<vscale x 2 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 2 x s32>), %0
511     $v8 = COPY %1(<vscale x 2 x s1>)
512     PseudoRET implicit $v8
516 name:            icmp_nxv4i32
517 legalized:       true
518 tracksRegLiveness: true
519 body:             |
520   bb.0.entry:
521     ; RV32I-LABEL: name: icmp_nxv4i32
522     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 4 x s32>) = G_IMPLICIT_DEF
523     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 4 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 4 x s32>), [[DEF]]
524     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 4 x s1>)
525     ; RV32I-NEXT: PseudoRET implicit $v8
526     ;
527     ; RV64I-LABEL: name: icmp_nxv4i32
528     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 4 x s32>) = G_IMPLICIT_DEF
529     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 4 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 4 x s32>), [[DEF]]
530     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 4 x s1>)
531     ; RV64I-NEXT: PseudoRET implicit $v8
532     %0:_(<vscale x 4 x s32>) = G_IMPLICIT_DEF
533     %1:_(<vscale x 4 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 4 x s32>), %0
534     $v8 = COPY %1(<vscale x 4 x s1>)
535     PseudoRET implicit $v8
539 name:            icmp_nxv8i32
540 legalized:       true
541 tracksRegLiveness: true
542 body:             |
543   bb.0.entry:
544     ; RV32I-LABEL: name: icmp_nxv8i32
545     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 8 x s32>) = G_IMPLICIT_DEF
546     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 8 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 8 x s32>), [[DEF]]
547     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 8 x s1>)
548     ; RV32I-NEXT: PseudoRET implicit $v8
549     ;
550     ; RV64I-LABEL: name: icmp_nxv8i32
551     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 8 x s32>) = G_IMPLICIT_DEF
552     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 8 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 8 x s32>), [[DEF]]
553     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 8 x s1>)
554     ; RV64I-NEXT: PseudoRET implicit $v8
555     %0:_(<vscale x 8 x s32>) = G_IMPLICIT_DEF
556     %1:_(<vscale x 8 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 8 x s32>), %0
557     $v8 = COPY %1(<vscale x 8 x s1>)
558     PseudoRET implicit $v8
562 name:            icmp_nxv16i32
563 legalized:       true
564 tracksRegLiveness: true
565 body:             |
566   bb.0.entry:
567     ; RV32I-LABEL: name: icmp_nxv16i32
568     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 16 x s32>) = G_IMPLICIT_DEF
569     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 16 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 16 x s32>), [[DEF]]
570     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 16 x s1>)
571     ; RV32I-NEXT: PseudoRET implicit $v8
572     ;
573     ; RV64I-LABEL: name: icmp_nxv16i32
574     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 16 x s32>) = G_IMPLICIT_DEF
575     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 16 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 16 x s32>), [[DEF]]
576     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 16 x s1>)
577     ; RV64I-NEXT: PseudoRET implicit $v8
578     %0:_(<vscale x 16 x s32>) = G_IMPLICIT_DEF
579     %1:_(<vscale x 16 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 16 x s32>), %0
580     $v8 = COPY %1(<vscale x 16 x s1>)
581     PseudoRET implicit $v8
585 name:            icmp_nxv1i64
586 legalized:       true
587 tracksRegLiveness: true
588 body:             |
589   bb.0.entry:
590     ; RV32I-LABEL: name: icmp_nxv1i64
591     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 1 x s64>) = G_IMPLICIT_DEF
592     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 1 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 1 x s64>), [[DEF]]
593     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 1 x s1>)
594     ; RV32I-NEXT: PseudoRET implicit $v8
595     ;
596     ; RV64I-LABEL: name: icmp_nxv1i64
597     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 1 x s64>) = G_IMPLICIT_DEF
598     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 1 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 1 x s64>), [[DEF]]
599     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 1 x s1>)
600     ; RV64I-NEXT: PseudoRET implicit $v8
601     %0:_(<vscale x 1 x s64>) = G_IMPLICIT_DEF
602     %1:_(<vscale x 1 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 1 x s64>), %0
603     $v8 = COPY %1(<vscale x 1 x s1>)
604     PseudoRET implicit $v8
608 name:            icmp_nxv2i64
609 legalized:       true
610 tracksRegLiveness: true
611 body:             |
612   bb.0.entry:
613     ; RV32I-LABEL: name: icmp_nxv2i64
614     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 2 x s64>) = G_IMPLICIT_DEF
615     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 2 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 2 x s64>), [[DEF]]
616     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 2 x s1>)
617     ; RV32I-NEXT: PseudoRET implicit $v8
618     ;
619     ; RV64I-LABEL: name: icmp_nxv2i64
620     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 2 x s64>) = G_IMPLICIT_DEF
621     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 2 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 2 x s64>), [[DEF]]
622     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 2 x s1>)
623     ; RV64I-NEXT: PseudoRET implicit $v8
624     %0:_(<vscale x 2 x s64>) = G_IMPLICIT_DEF
625     %1:_(<vscale x 2 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 2 x s64>), %0
626     $v8 = COPY %1(<vscale x 2 x s1>)
627     PseudoRET implicit $v8
631 name:            icmp_nxv4i64
632 legalized:       true
633 tracksRegLiveness: true
634 body:             |
635   bb.0.entry:
636     ; RV32I-LABEL: name: icmp_nxv4i64
637     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 4 x s64>) = G_IMPLICIT_DEF
638     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 4 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 4 x s64>), [[DEF]]
639     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 4 x s1>)
640     ; RV32I-NEXT: PseudoRET implicit $v8
641     ;
642     ; RV64I-LABEL: name: icmp_nxv4i64
643     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 4 x s64>) = G_IMPLICIT_DEF
644     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 4 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 4 x s64>), [[DEF]]
645     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 4 x s1>)
646     ; RV64I-NEXT: PseudoRET implicit $v8
647     %0:_(<vscale x 4 x s64>) = G_IMPLICIT_DEF
648     %1:_(<vscale x 4 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 4 x s64>), %0
649     $v8 = COPY %1(<vscale x 4 x s1>)
650     PseudoRET implicit $v8
654 name:            icmp_nxv8i64
655 legalized:       true
656 tracksRegLiveness: true
657 body:             |
658   bb.0.entry:
659     ; RV32I-LABEL: name: icmp_nxv8i64
660     ; RV32I: [[DEF:%[0-9]+]]:vrb(<vscale x 8 x s64>) = G_IMPLICIT_DEF
661     ; RV32I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 8 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 8 x s64>), [[DEF]]
662     ; RV32I-NEXT: $v8 = COPY [[ICMP]](<vscale x 8 x s1>)
663     ; RV32I-NEXT: PseudoRET implicit $v8
664     ;
665     ; RV64I-LABEL: name: icmp_nxv8i64
666     ; RV64I: [[DEF:%[0-9]+]]:vrb(<vscale x 8 x s64>) = G_IMPLICIT_DEF
667     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:vrb(<vscale x 8 x s1>) = G_ICMP intpred(sgt), [[DEF]](<vscale x 8 x s64>), [[DEF]]
668     ; RV64I-NEXT: $v8 = COPY [[ICMP]](<vscale x 8 x s1>)
669     ; RV64I-NEXT: PseudoRET implicit $v8
670     %0:_(<vscale x 8 x s64>) = G_IMPLICIT_DEF
671     %1:_(<vscale x 8 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 8 x s64>), %0
672     $v8 = COPY %1(<vscale x 8 x s1>)
673     PseudoRET implicit $v8