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
11 tracksRegLiveness: true
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
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
35 tracksRegLiveness: true
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
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
59 tracksRegLiveness: true
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
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
83 tracksRegLiveness: true
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
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
106 regBankSelected: true
107 tracksRegLiveness: true
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
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
130 regBankSelected: true
131 tracksRegLiveness: true
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
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
154 regBankSelected: true
155 tracksRegLiveness: true
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
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
178 regBankSelected: true
179 tracksRegLiveness: true
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
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
202 regBankSelected: true
203 tracksRegLiveness: true
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
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
226 regBankSelected: true
227 tracksRegLiveness: true
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
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
250 regBankSelected: true
251 tracksRegLiveness: true
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
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
274 regBankSelected: true
275 tracksRegLiveness: true
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
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
298 regBankSelected: true
299 tracksRegLiveness: true
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
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
322 regBankSelected: true
323 tracksRegLiveness: true
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
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
346 regBankSelected: true
347 tracksRegLiveness: true
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
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
370 regBankSelected: true
371 tracksRegLiveness: true
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
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
394 regBankSelected: true
395 tracksRegLiveness: true
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
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
418 regBankSelected: true
419 tracksRegLiveness: true
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
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
442 regBankSelected: true
443 tracksRegLiveness: true
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
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
466 regBankSelected: true
467 tracksRegLiveness: true
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
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
490 regBankSelected: true
491 tracksRegLiveness: true
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
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
514 regBankSelected: true
515 tracksRegLiveness: true
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
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