[X86] IsNOT - don't fold not(pcmpgt(C1, C2)) -> pcmpgt(C2, C1 - 1)
[llvm-project.git] / llvm / test / CodeGen / RISCV / GlobalISel / instruction-select / rvv / icmp.mir
blobdf0d48aac92551161116544c4c54592fb866c68e
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=riscv32 -mattr=+v -run-pass=instruction-select -simplify-mir -verify-machineinstrs %s -o - | FileCheck -check-prefix=RV32I %s
3 # RUN: llc -mtriple=riscv64 -mattr=+v -run-pass=instruction-select -simplify-mir -verify-machineinstrs %s -o - | FileCheck -check-prefix=RV64I %s
5 # Don't test i1 element types here since they have been widened to i8 in legalization
7 ---
8 name:            icmp_nxv1i8
9 legalized:       true
10 regBankSelected: true
11 tracksRegLiveness: true
12 body:             |
13   bb.0.entry:
14     ; RV32I-LABEL: name: icmp_nxv1i8
15     ; RV32I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
16     ; RV32I-NEXT: [[PseudoVMSLTU_VV_MF8_:%[0-9]+]]:vr = PseudoVMSLTU_VV_MF8 [[DEF]], [[DEF]], -1, 3 /* e8 */
17     ; RV32I-NEXT: $v8 = COPY [[PseudoVMSLTU_VV_MF8_]]
18     ; RV32I-NEXT: PseudoRET implicit $v8
19     ;
20     ; RV64I-LABEL: name: icmp_nxv1i8
21     ; RV64I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
22     ; RV64I-NEXT: [[PseudoVMSLTU_VV_MF8_:%[0-9]+]]:vr = PseudoVMSLTU_VV_MF8 [[DEF]], [[DEF]], -1, 3 /* e8 */
23     ; RV64I-NEXT: $v8 = COPY [[PseudoVMSLTU_VV_MF8_]]
24     ; RV64I-NEXT: PseudoRET implicit $v8
25     %0:vrb(<vscale x 1 x s8>) = G_IMPLICIT_DEF
26     %1:vrb(<vscale x 1 x s1>) = G_ICMP intpred(ult), %0(<vscale x 1 x s8>), %0
27     $v8 = COPY %1(<vscale x 1 x s1>)
28     PseudoRET implicit $v8
30 ...
31 ---
32 name:            icmp_nxv2i8
33 legalized:       true
34 regBankSelected: true
35 tracksRegLiveness: true
36 body:             |
37   bb.0.entry:
38     ; RV32I-LABEL: name: icmp_nxv2i8
39     ; RV32I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
40     ; RV32I-NEXT: [[PseudoVMSLT_VV_MF4_:%[0-9]+]]:vr = PseudoVMSLT_VV_MF4 [[DEF]], [[DEF]], -1, 3 /* e8 */
41     ; RV32I-NEXT: $v8 = COPY [[PseudoVMSLT_VV_MF4_]]
42     ; RV32I-NEXT: PseudoRET implicit $v8
43     ;
44     ; RV64I-LABEL: name: icmp_nxv2i8
45     ; RV64I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
46     ; RV64I-NEXT: [[PseudoVMSLT_VV_MF4_:%[0-9]+]]:vr = PseudoVMSLT_VV_MF4 [[DEF]], [[DEF]], -1, 3 /* e8 */
47     ; RV64I-NEXT: $v8 = COPY [[PseudoVMSLT_VV_MF4_]]
48     ; RV64I-NEXT: PseudoRET implicit $v8
49     %0:vrb(<vscale x 2 x s8>) = G_IMPLICIT_DEF
50     %1:vrb(<vscale x 2 x s1>) = G_ICMP intpred(slt), %0(<vscale x 2 x s8>), %0
51     $v8 = COPY %1(<vscale x 2 x s1>)
52     PseudoRET implicit $v8
54 ...
55 ---
56 name:            icmp_nxv4i8
57 legalized:       true
58 regBankSelected: true
59 tracksRegLiveness: true
60 body:             |
61   bb.0.entry:
62     ; RV32I-LABEL: name: icmp_nxv4i8
63     ; RV32I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
64     ; RV32I-NEXT: [[PseudoVMSLEU_VV_MF2_:%[0-9]+]]:vr = PseudoVMSLEU_VV_MF2 [[DEF]], [[DEF]], -1, 3 /* e8 */
65     ; RV32I-NEXT: $v8 = COPY [[PseudoVMSLEU_VV_MF2_]]
66     ; RV32I-NEXT: PseudoRET implicit $v8
67     ;
68     ; RV64I-LABEL: name: icmp_nxv4i8
69     ; RV64I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
70     ; RV64I-NEXT: [[PseudoVMSLEU_VV_MF2_:%[0-9]+]]:vr = PseudoVMSLEU_VV_MF2 [[DEF]], [[DEF]], -1, 3 /* e8 */
71     ; RV64I-NEXT: $v8 = COPY [[PseudoVMSLEU_VV_MF2_]]
72     ; RV64I-NEXT: PseudoRET implicit $v8
73     %0:vrb(<vscale x 4 x s8>) = G_IMPLICIT_DEF
74     %1:vrb(<vscale x 4 x s1>) = G_ICMP intpred(uge), %0(<vscale x 4 x s8>), %0
75     $v8 = COPY %1(<vscale x 4 x s1>)
76     PseudoRET implicit $v8
78 ...
79 ---
80 name:            icmp_nxv8i8
81 legalized:       true
82 regBankSelected: true
83 tracksRegLiveness: true
84 body:             |
85   bb.0.entry:
86     ; RV32I-LABEL: name: icmp_nxv8i8
87     ; RV32I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
88     ; RV32I-NEXT: [[PseudoVMSLE_VV_M1_:%[0-9]+]]:vr = PseudoVMSLE_VV_M1 [[DEF]], [[DEF]], -1, 3 /* e8 */
89     ; RV32I-NEXT: $v8 = COPY [[PseudoVMSLE_VV_M1_]]
90     ; RV32I-NEXT: PseudoRET implicit $v8
91     ;
92     ; RV64I-LABEL: name: icmp_nxv8i8
93     ; RV64I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
94     ; RV64I-NEXT: [[PseudoVMSLE_VV_M1_:%[0-9]+]]:vr = PseudoVMSLE_VV_M1 [[DEF]], [[DEF]], -1, 3 /* e8 */
95     ; RV64I-NEXT: $v8 = COPY [[PseudoVMSLE_VV_M1_]]
96     ; RV64I-NEXT: PseudoRET implicit $v8
97     %0:vrb(<vscale x 8 x s8>) = G_IMPLICIT_DEF
98     %1:vrb(<vscale x 8 x s1>) = G_ICMP intpred(sge), %0(<vscale x 8 x s8>), %0
99     $v8 = COPY %1(<vscale x 8 x s1>)
100     PseudoRET implicit $v8
104 name:            icmp_nxv16i8
105 legalized:       true
106 regBankSelected: true
107 tracksRegLiveness: true
108 body:             |
109   bb.0.entry:
110     ; RV32I-LABEL: name: icmp_nxv16i8
111     ; RV32I: [[DEF:%[0-9]+]]:vrm2 = IMPLICIT_DEF
112     ; RV32I-NEXT: early-clobber %1:vr = PseudoVMSLTU_VV_M2 [[DEF]], [[DEF]], -1, 3 /* e8 */
113     ; RV32I-NEXT: $v8 = COPY %1
114     ; RV32I-NEXT: PseudoRET implicit $v8
115     ;
116     ; RV64I-LABEL: name: icmp_nxv16i8
117     ; RV64I: [[DEF:%[0-9]+]]:vrm2 = IMPLICIT_DEF
118     ; RV64I-NEXT: early-clobber %1:vr = PseudoVMSLTU_VV_M2 [[DEF]], [[DEF]], -1, 3 /* e8 */
119     ; RV64I-NEXT: $v8 = COPY %1
120     ; RV64I-NEXT: PseudoRET implicit $v8
121     %0:vrb(<vscale x 16 x s8>) = G_IMPLICIT_DEF
122     %1:vrb(<vscale x 16 x s1>) = G_ICMP intpred(ugt), %0(<vscale x 16 x s8>), %0
123     $v8 = COPY %1(<vscale x 16 x s1>)
124     PseudoRET implicit $v8
128 name:            icmp_nxv32i8
129 legalized:       true
130 regBankSelected: true
131 tracksRegLiveness: true
132 body:             |
133   bb.0.entry:
134     ; RV32I-LABEL: name: icmp_nxv32i8
135     ; RV32I: [[DEF:%[0-9]+]]:vrm4 = IMPLICIT_DEF
136     ; RV32I-NEXT: early-clobber %1:vr = PseudoVMSLT_VV_M4 [[DEF]], [[DEF]], -1, 3 /* e8 */
137     ; RV32I-NEXT: $v8 = COPY %1
138     ; RV32I-NEXT: PseudoRET implicit $v8
139     ;
140     ; RV64I-LABEL: name: icmp_nxv32i8
141     ; RV64I: [[DEF:%[0-9]+]]:vrm4 = IMPLICIT_DEF
142     ; RV64I-NEXT: early-clobber %1:vr = PseudoVMSLT_VV_M4 [[DEF]], [[DEF]], -1, 3 /* e8 */
143     ; RV64I-NEXT: $v8 = COPY %1
144     ; RV64I-NEXT: PseudoRET implicit $v8
145     %0:vrb(<vscale x 32 x s8>) = G_IMPLICIT_DEF
146     %1:vrb(<vscale x 32 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 32 x s8>), %0
147     $v8 = COPY %1(<vscale x 32 x s1>)
148     PseudoRET implicit $v8
152 name:            icmp_nxv64i8
153 legalized:       true
154 regBankSelected: true
155 tracksRegLiveness: true
156 body:             |
157   bb.0.entry:
158     ; RV32I-LABEL: name: icmp_nxv64i8
159     ; RV32I: [[DEF:%[0-9]+]]:vrm8 = IMPLICIT_DEF
160     ; RV32I-NEXT: early-clobber %1:vr = PseudoVMSLEU_VV_M8 [[DEF]], [[DEF]], -1, 3 /* e8 */
161     ; RV32I-NEXT: $v8 = COPY %1
162     ; RV32I-NEXT: PseudoRET implicit $v8
163     ;
164     ; RV64I-LABEL: name: icmp_nxv64i8
165     ; RV64I: [[DEF:%[0-9]+]]:vrm8 = IMPLICIT_DEF
166     ; RV64I-NEXT: early-clobber %1:vr = PseudoVMSLEU_VV_M8 [[DEF]], [[DEF]], -1, 3 /* e8 */
167     ; RV64I-NEXT: $v8 = COPY %1
168     ; RV64I-NEXT: PseudoRET implicit $v8
169     %0:vrb(<vscale x 64 x s8>) = G_IMPLICIT_DEF
170     %1:vrb(<vscale x 64 x s1>) = G_ICMP intpred(ule), %0(<vscale x 64 x s8>), %0
171     $v8 = COPY %1(<vscale x 64 x s1>)
172     PseudoRET implicit $v8
176 name:            icmp_nxv1i16
177 legalized:       true
178 regBankSelected: true
179 tracksRegLiveness: true
180 body:             |
181   bb.0.entry:
182     ; RV32I-LABEL: name: icmp_nxv1i16
183     ; RV32I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
184     ; RV32I-NEXT: [[PseudoVMSLE_VV_MF4_:%[0-9]+]]:vr = PseudoVMSLE_VV_MF4 [[DEF]], [[DEF]], -1, 4 /* e16 */
185     ; RV32I-NEXT: $v8 = COPY [[PseudoVMSLE_VV_MF4_]]
186     ; RV32I-NEXT: PseudoRET implicit $v8
187     ;
188     ; RV64I-LABEL: name: icmp_nxv1i16
189     ; RV64I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
190     ; RV64I-NEXT: [[PseudoVMSLE_VV_MF4_:%[0-9]+]]:vr = PseudoVMSLE_VV_MF4 [[DEF]], [[DEF]], -1, 4 /* e16 */
191     ; RV64I-NEXT: $v8 = COPY [[PseudoVMSLE_VV_MF4_]]
192     ; RV64I-NEXT: PseudoRET implicit $v8
193     %0:vrb(<vscale x 1 x s16>) = G_IMPLICIT_DEF
194     %1:vrb(<vscale x 1 x s1>) = G_ICMP intpred(sle), %0(<vscale x 1 x s16>), %0
195     $v8 = COPY %1(<vscale x 1 x s1>)
196     PseudoRET implicit $v8
200 name:            icmp_nxv2i16
201 legalized:       true
202 regBankSelected: true
203 tracksRegLiveness: true
204 body:             |
205   bb.0.entry:
206     ; RV32I-LABEL: name: icmp_nxv2i16
207     ; RV32I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
208     ; RV32I-NEXT: [[PseudoVMSNE_VV_MF2_:%[0-9]+]]:vr = PseudoVMSNE_VV_MF2 [[DEF]], [[DEF]], -1, 4 /* e16 */
209     ; RV32I-NEXT: $v8 = COPY [[PseudoVMSNE_VV_MF2_]]
210     ; RV32I-NEXT: PseudoRET implicit $v8
211     ;
212     ; RV64I-LABEL: name: icmp_nxv2i16
213     ; RV64I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
214     ; RV64I-NEXT: [[PseudoVMSNE_VV_MF2_:%[0-9]+]]:vr = PseudoVMSNE_VV_MF2 [[DEF]], [[DEF]], -1, 4 /* e16 */
215     ; RV64I-NEXT: $v8 = COPY [[PseudoVMSNE_VV_MF2_]]
216     ; RV64I-NEXT: PseudoRET implicit $v8
217     %0:vrb(<vscale x 2 x s16>) = G_IMPLICIT_DEF
218     %1:vrb(<vscale x 2 x s1>) = G_ICMP intpred(ne), %0(<vscale x 2 x s16>), %0
219     $v8 = COPY %1(<vscale x 2 x s1>)
220     PseudoRET implicit $v8
224 name:            icmp_nxv4i16
225 legalized:       true
226 regBankSelected: true
227 tracksRegLiveness: true
228 body:             |
229   bb.0.entry:
230     ; RV32I-LABEL: name: icmp_nxv4i16
231     ; RV32I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
232     ; RV32I-NEXT: [[PseudoVMSEQ_VV_M1_:%[0-9]+]]:vr = PseudoVMSEQ_VV_M1 [[DEF]], [[DEF]], -1, 4 /* e16 */
233     ; RV32I-NEXT: $v8 = COPY [[PseudoVMSEQ_VV_M1_]]
234     ; RV32I-NEXT: PseudoRET implicit $v8
235     ;
236     ; RV64I-LABEL: name: icmp_nxv4i16
237     ; RV64I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
238     ; RV64I-NEXT: [[PseudoVMSEQ_VV_M1_:%[0-9]+]]:vr = PseudoVMSEQ_VV_M1 [[DEF]], [[DEF]], -1, 4 /* e16 */
239     ; RV64I-NEXT: $v8 = COPY [[PseudoVMSEQ_VV_M1_]]
240     ; RV64I-NEXT: PseudoRET implicit $v8
241     %0:vrb(<vscale x 4 x s16>) = G_IMPLICIT_DEF
242     %1:vrb(<vscale x 4 x s1>) = G_ICMP intpred(eq), %0(<vscale x 4 x s16>), %0
243     $v8 = COPY %1(<vscale x 4 x s1>)
244     PseudoRET implicit $v8
248 name:            icmp_nxv8i16
249 legalized:       true
250 regBankSelected: true
251 tracksRegLiveness: true
252 body:             |
253   bb.0.entry:
254     ; RV32I-LABEL: name: icmp_nxv8i16
255     ; RV32I: [[DEF:%[0-9]+]]:vrm2 = IMPLICIT_DEF
256     ; RV32I-NEXT: early-clobber %1:vr = PseudoVMSLTU_VV_M2 [[DEF]], [[DEF]], -1, 4 /* e16 */
257     ; RV32I-NEXT: $v8 = COPY %1
258     ; RV32I-NEXT: PseudoRET implicit $v8
259     ;
260     ; RV64I-LABEL: name: icmp_nxv8i16
261     ; RV64I: [[DEF:%[0-9]+]]:vrm2 = IMPLICIT_DEF
262     ; RV64I-NEXT: early-clobber %1:vr = PseudoVMSLTU_VV_M2 [[DEF]], [[DEF]], -1, 4 /* e16 */
263     ; RV64I-NEXT: $v8 = COPY %1
264     ; RV64I-NEXT: PseudoRET implicit $v8
265     %0:vrb(<vscale x 8 x s16>) = G_IMPLICIT_DEF
266     %1:vrb(<vscale x 8 x s1>) = G_ICMP intpred(ult), %0(<vscale x 8 x s16>), %0
267     $v8 = COPY %1(<vscale x 8 x s1>)
268     PseudoRET implicit $v8
272 name:            icmp_nxv16i16
273 legalized:       true
274 regBankSelected: true
275 tracksRegLiveness: true
276 body:             |
277   bb.0.entry:
278     ; RV32I-LABEL: name: icmp_nxv16i16
279     ; RV32I: [[DEF:%[0-9]+]]:vrm4 = IMPLICIT_DEF
280     ; RV32I-NEXT: early-clobber %1:vr = PseudoVMSLT_VV_M4 [[DEF]], [[DEF]], -1, 4 /* e16 */
281     ; RV32I-NEXT: $v8 = COPY %1
282     ; RV32I-NEXT: PseudoRET implicit $v8
283     ;
284     ; RV64I-LABEL: name: icmp_nxv16i16
285     ; RV64I: [[DEF:%[0-9]+]]:vrm4 = IMPLICIT_DEF
286     ; RV64I-NEXT: early-clobber %1:vr = PseudoVMSLT_VV_M4 [[DEF]], [[DEF]], -1, 4 /* e16 */
287     ; RV64I-NEXT: $v8 = COPY %1
288     ; RV64I-NEXT: PseudoRET implicit $v8
289     %0:vrb(<vscale x 16 x s16>) = G_IMPLICIT_DEF
290     %1:vrb(<vscale x 16 x s1>) = G_ICMP intpred(slt), %0(<vscale x 16 x s16>), %0
291     $v8 = COPY %1(<vscale x 16 x s1>)
292     PseudoRET implicit $v8
296 name:            icmp_nxv32i16
297 legalized:       true
298 regBankSelected: true
299 tracksRegLiveness: true
300 body:             |
301   bb.0.entry:
302     ; RV32I-LABEL: name: icmp_nxv32i16
303     ; RV32I: [[DEF:%[0-9]+]]:vrm8 = IMPLICIT_DEF
304     ; RV32I-NEXT: early-clobber %1:vr = PseudoVMSLEU_VV_M8 [[DEF]], [[DEF]], -1, 4 /* e16 */
305     ; RV32I-NEXT: $v8 = COPY %1
306     ; RV32I-NEXT: PseudoRET implicit $v8
307     ;
308     ; RV64I-LABEL: name: icmp_nxv32i16
309     ; RV64I: [[DEF:%[0-9]+]]:vrm8 = IMPLICIT_DEF
310     ; RV64I-NEXT: early-clobber %1:vr = PseudoVMSLEU_VV_M8 [[DEF]], [[DEF]], -1, 4 /* e16 */
311     ; RV64I-NEXT: $v8 = COPY %1
312     ; RV64I-NEXT: PseudoRET implicit $v8
313     %0:vrb(<vscale x 32 x s16>) = G_IMPLICIT_DEF
314     %1:vrb(<vscale x 32 x s1>) = G_ICMP intpred(uge), %0(<vscale x 32 x s16>), %0
315     $v8 = COPY %1(<vscale x 32 x s1>)
316     PseudoRET implicit $v8
320 name:            icmp_nxv1i32
321 legalized:       true
322 regBankSelected: true
323 tracksRegLiveness: true
324 body:             |
325   bb.0.entry:
326     ; RV32I-LABEL: name: icmp_nxv1i32
327     ; RV32I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
328     ; RV32I-NEXT: [[PseudoVMSLE_VV_MF2_:%[0-9]+]]:vr = PseudoVMSLE_VV_MF2 [[DEF]], [[DEF]], -1, 5 /* e32 */
329     ; RV32I-NEXT: $v8 = COPY [[PseudoVMSLE_VV_MF2_]]
330     ; RV32I-NEXT: PseudoRET implicit $v8
331     ;
332     ; RV64I-LABEL: name: icmp_nxv1i32
333     ; RV64I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
334     ; RV64I-NEXT: [[PseudoVMSLE_VV_MF2_:%[0-9]+]]:vr = PseudoVMSLE_VV_MF2 [[DEF]], [[DEF]], -1, 5 /* e32 */
335     ; RV64I-NEXT: $v8 = COPY [[PseudoVMSLE_VV_MF2_]]
336     ; RV64I-NEXT: PseudoRET implicit $v8
337     %0:vrb(<vscale x 1 x s32>) = G_IMPLICIT_DEF
338     %1:vrb(<vscale x 1 x s1>) = G_ICMP intpred(sge), %0(<vscale x 1 x s32>), %0
339     $v8 = COPY %1(<vscale x 1 x s1>)
340     PseudoRET implicit $v8
344 name:            icmp_nxv2i32
345 legalized:       true
346 regBankSelected: true
347 tracksRegLiveness: true
348 body:             |
349   bb.0.entry:
350     ; RV32I-LABEL: name: icmp_nxv2i32
351     ; RV32I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
352     ; RV32I-NEXT: [[PseudoVMSLTU_VV_M1_:%[0-9]+]]:vr = PseudoVMSLTU_VV_M1 [[DEF]], [[DEF]], -1, 5 /* e32 */
353     ; RV32I-NEXT: $v8 = COPY [[PseudoVMSLTU_VV_M1_]]
354     ; RV32I-NEXT: PseudoRET implicit $v8
355     ;
356     ; RV64I-LABEL: name: icmp_nxv2i32
357     ; RV64I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
358     ; RV64I-NEXT: [[PseudoVMSLTU_VV_M1_:%[0-9]+]]:vr = PseudoVMSLTU_VV_M1 [[DEF]], [[DEF]], -1, 5 /* e32 */
359     ; RV64I-NEXT: $v8 = COPY [[PseudoVMSLTU_VV_M1_]]
360     ; RV64I-NEXT: PseudoRET implicit $v8
361     %0:vrb(<vscale x 2 x s32>) = G_IMPLICIT_DEF
362     %1:vrb(<vscale x 2 x s1>) = G_ICMP intpred(ugt), %0(<vscale x 2 x s32>), %0
363     $v8 = COPY %1(<vscale x 2 x s1>)
364     PseudoRET implicit $v8
368 name:            icmp_nxv4i32
369 legalized:       true
370 regBankSelected: true
371 tracksRegLiveness: true
372 body:             |
373   bb.0.entry:
374     ; RV32I-LABEL: name: icmp_nxv4i32
375     ; RV32I: [[DEF:%[0-9]+]]:vrm2 = IMPLICIT_DEF
376     ; RV32I-NEXT: early-clobber %1:vr = PseudoVMSLT_VV_M2 [[DEF]], [[DEF]], -1, 5 /* e32 */
377     ; RV32I-NEXT: $v8 = COPY %1
378     ; RV32I-NEXT: PseudoRET implicit $v8
379     ;
380     ; RV64I-LABEL: name: icmp_nxv4i32
381     ; RV64I: [[DEF:%[0-9]+]]:vrm2 = IMPLICIT_DEF
382     ; RV64I-NEXT: early-clobber %1:vr = PseudoVMSLT_VV_M2 [[DEF]], [[DEF]], -1, 5 /* e32 */
383     ; RV64I-NEXT: $v8 = COPY %1
384     ; RV64I-NEXT: PseudoRET implicit $v8
385     %0:vrb(<vscale x 4 x s32>) = G_IMPLICIT_DEF
386     %1:vrb(<vscale x 4 x s1>) = G_ICMP intpred(sgt), %0(<vscale x 4 x s32>), %0
387     $v8 = COPY %1(<vscale x 4 x s1>)
388     PseudoRET implicit $v8
392 name:            icmp_nxv8i32
393 legalized:       true
394 regBankSelected: true
395 tracksRegLiveness: true
396 body:             |
397   bb.0.entry:
398     ; RV32I-LABEL: name: icmp_nxv8i32
399     ; RV32I: [[DEF:%[0-9]+]]:vrm4 = IMPLICIT_DEF
400     ; RV32I-NEXT: early-clobber %1:vr = PseudoVMSLEU_VV_M4 [[DEF]], [[DEF]], -1, 5 /* e32 */
401     ; RV32I-NEXT: $v8 = COPY %1
402     ; RV32I-NEXT: PseudoRET implicit $v8
403     ;
404     ; RV64I-LABEL: name: icmp_nxv8i32
405     ; RV64I: [[DEF:%[0-9]+]]:vrm4 = IMPLICIT_DEF
406     ; RV64I-NEXT: early-clobber %1:vr = PseudoVMSLEU_VV_M4 [[DEF]], [[DEF]], -1, 5 /* e32 */
407     ; RV64I-NEXT: $v8 = COPY %1
408     ; RV64I-NEXT: PseudoRET implicit $v8
409     %0:vrb(<vscale x 8 x s32>) = G_IMPLICIT_DEF
410     %1:vrb(<vscale x 8 x s1>) = G_ICMP intpred(ule), %0(<vscale x 8 x s32>), %0
411     $v8 = COPY %1(<vscale x 8 x s1>)
412     PseudoRET implicit $v8
416 name:            icmp_nxv16i32
417 legalized:       true
418 regBankSelected: true
419 tracksRegLiveness: true
420 body:             |
421   bb.0.entry:
422     ; RV32I-LABEL: name: icmp_nxv16i32
423     ; RV32I: [[DEF:%[0-9]+]]:vrm8 = IMPLICIT_DEF
424     ; RV32I-NEXT: early-clobber %1:vr = PseudoVMSLE_VV_M8 [[DEF]], [[DEF]], -1, 5 /* e32 */
425     ; RV32I-NEXT: $v8 = COPY %1
426     ; RV32I-NEXT: PseudoRET implicit $v8
427     ;
428     ; RV64I-LABEL: name: icmp_nxv16i32
429     ; RV64I: [[DEF:%[0-9]+]]:vrm8 = IMPLICIT_DEF
430     ; RV64I-NEXT: early-clobber %1:vr = PseudoVMSLE_VV_M8 [[DEF]], [[DEF]], -1, 5 /* e32 */
431     ; RV64I-NEXT: $v8 = COPY %1
432     ; RV64I-NEXT: PseudoRET implicit $v8
433     %0:vrb(<vscale x 16 x s32>) = G_IMPLICIT_DEF
434     %1:vrb(<vscale x 16 x s1>) = G_ICMP intpred(sle), %0(<vscale x 16 x s32>), %0
435     $v8 = COPY %1(<vscale x 16 x s1>)
436     PseudoRET implicit $v8
440 name:            icmp_nxv1i64
441 legalized:       true
442 regBankSelected: true
443 tracksRegLiveness: true
444 body:             |
445   bb.0.entry:
446     ; RV32I-LABEL: name: icmp_nxv1i64
447     ; RV32I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
448     ; RV32I-NEXT: [[PseudoVMSEQ_VV_M1_:%[0-9]+]]:vr = PseudoVMSEQ_VV_M1 [[DEF]], [[DEF]], -1, 6 /* e64 */
449     ; RV32I-NEXT: $v8 = COPY [[PseudoVMSEQ_VV_M1_]]
450     ; RV32I-NEXT: PseudoRET implicit $v8
451     ;
452     ; RV64I-LABEL: name: icmp_nxv1i64
453     ; RV64I: [[DEF:%[0-9]+]]:vr = IMPLICIT_DEF
454     ; RV64I-NEXT: [[PseudoVMSEQ_VV_M1_:%[0-9]+]]:vr = PseudoVMSEQ_VV_M1 [[DEF]], [[DEF]], -1, 6 /* e64 */
455     ; RV64I-NEXT: $v8 = COPY [[PseudoVMSEQ_VV_M1_]]
456     ; RV64I-NEXT: PseudoRET implicit $v8
457     %0:vrb(<vscale x 1 x s64>) = G_IMPLICIT_DEF
458     %1:vrb(<vscale x 1 x s1>) = G_ICMP intpred(eq), %0(<vscale x 1 x s64>), %0
459     $v8 = COPY %1(<vscale x 1 x s1>)
460     PseudoRET implicit $v8
464 name:            icmp_nxv2i64
465 legalized:       true
466 regBankSelected: true
467 tracksRegLiveness: true
468 body:             |
469   bb.0.entry:
470     ; RV32I-LABEL: name: icmp_nxv2i64
471     ; RV32I: [[DEF:%[0-9]+]]:vrm2 = IMPLICIT_DEF
472     ; RV32I-NEXT: early-clobber %1:vr = PseudoVMSNE_VV_M2 [[DEF]], [[DEF]], -1, 6 /* e64 */
473     ; RV32I-NEXT: $v8 = COPY %1
474     ; RV32I-NEXT: PseudoRET implicit $v8
475     ;
476     ; RV64I-LABEL: name: icmp_nxv2i64
477     ; RV64I: [[DEF:%[0-9]+]]:vrm2 = IMPLICIT_DEF
478     ; RV64I-NEXT: early-clobber %1:vr = PseudoVMSNE_VV_M2 [[DEF]], [[DEF]], -1, 6 /* e64 */
479     ; RV64I-NEXT: $v8 = COPY %1
480     ; RV64I-NEXT: PseudoRET implicit $v8
481     %0:vrb(<vscale x 2 x s64>) = G_IMPLICIT_DEF
482     %1:vrb(<vscale x 2 x s1>) = G_ICMP intpred(ne), %0(<vscale x 2 x s64>), %0
483     $v8 = COPY %1(<vscale x 2 x s1>)
484     PseudoRET implicit $v8
488 name:            icmp_nxv4i64
489 legalized:       true
490 regBankSelected: true
491 tracksRegLiveness: true
492 body:             |
493   bb.0.entry:
494     ; RV32I-LABEL: name: icmp_nxv4i64
495     ; RV32I: [[DEF:%[0-9]+]]:vrm4 = IMPLICIT_DEF
496     ; RV32I-NEXT: early-clobber %1:vr = PseudoVMSLTU_VV_M4 [[DEF]], [[DEF]], -1, 6 /* e64 */
497     ; RV32I-NEXT: $v8 = COPY %1
498     ; RV32I-NEXT: PseudoRET implicit $v8
499     ;
500     ; RV64I-LABEL: name: icmp_nxv4i64
501     ; RV64I: [[DEF:%[0-9]+]]:vrm4 = IMPLICIT_DEF
502     ; RV64I-NEXT: early-clobber %1:vr = PseudoVMSLTU_VV_M4 [[DEF]], [[DEF]], -1, 6 /* e64 */
503     ; RV64I-NEXT: $v8 = COPY %1
504     ; RV64I-NEXT: PseudoRET implicit $v8
505     %0:vrb(<vscale x 4 x s64>) = G_IMPLICIT_DEF
506     %1:vrb(<vscale x 4 x s1>) = G_ICMP intpred(ult), %0(<vscale x 4 x s64>), %0
507     $v8 = COPY %1(<vscale x 4 x s1>)
508     PseudoRET implicit $v8
512 name:            icmp_nxv8i64
513 legalized:       true
514 regBankSelected: true
515 tracksRegLiveness: true
516 body:             |
517   bb.0.entry:
518     ; RV32I-LABEL: name: icmp_nxv8i64
519     ; RV32I: [[DEF:%[0-9]+]]:vrm8 = IMPLICIT_DEF
520     ; RV32I-NEXT: early-clobber %1:vr = PseudoVMSLTU_VV_M8 [[DEF]], [[DEF]], -1, 6 /* e64 */
521     ; RV32I-NEXT: $v8 = COPY %1
522     ; RV32I-NEXT: PseudoRET implicit $v8
523     ;
524     ; RV64I-LABEL: name: icmp_nxv8i64
525     ; RV64I: [[DEF:%[0-9]+]]:vrm8 = IMPLICIT_DEF
526     ; RV64I-NEXT: early-clobber %1:vr = PseudoVMSLTU_VV_M8 [[DEF]], [[DEF]], -1, 6 /* e64 */
527     ; RV64I-NEXT: $v8 = COPY %1
528     ; RV64I-NEXT: PseudoRET implicit $v8
529     %0:vrb(<vscale x 8 x s64>) = G_IMPLICIT_DEF
530     %1:vrb(<vscale x 8 x s1>) = G_ICMP intpred(ult), %0(<vscale x 8 x s64>), %0
531     $v8 = COPY %1(<vscale x 8 x s1>)
532     PseudoRET implicit $v8