Revert rGe6ccb57bb3f6b761f2310e97fd6ca99eff42f73e "[SLP] Add cost model for `llvm...
[llvm-project.git] / llvm / test / CodeGen / RISCV / i32-icmp.ll
blobdeb7dfd883bff7004d65aa7ec0d9dcb0d36af579
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
3 ; RUN:   | FileCheck %s -check-prefix=RV32I
5 define i32 @icmp_eq(i32 %a, i32 %b) nounwind {
6 ; RV32I-LABEL: icmp_eq:
7 ; RV32I:       # %bb.0:
8 ; RV32I-NEXT:    xor a0, a0, a1
9 ; RV32I-NEXT:    seqz a0, a0
10 ; RV32I-NEXT:    ret
11   %1 = icmp eq i32 %a, %b
12   %2 = zext i1 %1 to i32
13   ret i32 %2
16 define i32 @icmp_eq_constant(i32 %a) nounwind {
17 ; RV32I-LABEL: icmp_eq_constant:
18 ; RV32I:       # %bb.0:
19 ; RV32I-NEXT:    addi a0, a0, -42
20 ; RV32I-NEXT:    seqz a0, a0
21 ; RV32I-NEXT:    ret
22   %1 = icmp eq i32 %a, 42
23   %2 = zext i1 %1 to i32
24   ret i32 %2
27 define i32 @icmp_eq_constant_2049(i32 %a) nounwind {
28 ; RV32I-LABEL: icmp_eq_constant_2049:
29 ; RV32I:       # %bb.0:
30 ; RV32I-NEXT:    lui a1, 1
31 ; RV32I-NEXT:    addi a1, a1, -2047
32 ; RV32I-NEXT:    xor a0, a0, a1
33 ; RV32I-NEXT:    seqz a0, a0
34 ; RV32I-NEXT:    ret
35   %1 = icmp eq i32 %a, 2049
36   %2 = zext i1 %1 to i32
37   ret i32 %2
40 define i32 @icmp_eq_constant_2048(i32 %a) nounwind {
41 ; RV32I-LABEL: icmp_eq_constant_2048:
42 ; RV32I:       # %bb.0:
43 ; RV32I-NEXT:    addi a0, a0, -2048
44 ; RV32I-NEXT:    seqz a0, a0
45 ; RV32I-NEXT:    ret
46   %1 = icmp eq i32 %a, 2048
47   %2 = zext i1 %1 to i32
48   ret i32 %2
51 define i32 @icmp_eq_constant_neg_2048(i32 %a) nounwind {
52 ; RV32I-LABEL: icmp_eq_constant_neg_2048:
53 ; RV32I:       # %bb.0:
54 ; RV32I-NEXT:    li a1, -2048
55 ; RV32I-NEXT:    xor a0, a0, a1
56 ; RV32I-NEXT:    seqz a0, a0
57 ; RV32I-NEXT:    ret
58   %1 = icmp eq i32 %a, -2048
59   %2 = zext i1 %1 to i32
60   ret i32 %2
63 define i32 @icmp_eq_constant_neg_2047(i32 %a) nounwind {
64 ; RV32I-LABEL: icmp_eq_constant_neg_2047:
65 ; RV32I:       # %bb.0:
66 ; RV32I-NEXT:    addi a0, a0, 2047
67 ; RV32I-NEXT:    seqz a0, a0
68 ; RV32I-NEXT:    ret
69   %1 = icmp eq i32 %a, -2047
70   %2 = zext i1 %1 to i32
71   ret i32 %2
74 define i32 @icmp_eqz(i32 %a) nounwind {
75 ; RV32I-LABEL: icmp_eqz:
76 ; RV32I:       # %bb.0:
77 ; RV32I-NEXT:    seqz a0, a0
78 ; RV32I-NEXT:    ret
79   %1 = icmp eq i32 %a, 0
80   %2 = zext i1 %1 to i32
81   ret i32 %2
84 define i32 @icmp_ne(i32 %a, i32 %b) nounwind {
85 ; RV32I-LABEL: icmp_ne:
86 ; RV32I:       # %bb.0:
87 ; RV32I-NEXT:    xor a0, a0, a1
88 ; RV32I-NEXT:    snez a0, a0
89 ; RV32I-NEXT:    ret
90   %1 = icmp ne i32 %a, %b
91   %2 = zext i1 %1 to i32
92   ret i32 %2
95 define i32 @icmp_ne_constant(i32 %a) nounwind {
96 ; RV32I-LABEL: icmp_ne_constant:
97 ; RV32I:       # %bb.0:
98 ; RV32I-NEXT:    addi a0, a0, -42
99 ; RV32I-NEXT:    snez a0, a0
100 ; RV32I-NEXT:    ret
101   %1 = icmp ne i32 %a, 42
102   %2 = zext i1 %1 to i32
103   ret i32 %2
106 define i32 @icmp_ne_constant_2049(i32 %a) nounwind {
107 ; RV32I-LABEL: icmp_ne_constant_2049:
108 ; RV32I:       # %bb.0:
109 ; RV32I-NEXT:    lui a1, 1
110 ; RV32I-NEXT:    addi a1, a1, -2047
111 ; RV32I-NEXT:    xor a0, a0, a1
112 ; RV32I-NEXT:    snez a0, a0
113 ; RV32I-NEXT:    ret
114   %1 = icmp ne i32 %a, 2049
115   %2 = zext i1 %1 to i32
116   ret i32 %2
119 define i32 @icmp_ne_constant_2048(i32 %a) nounwind {
120 ; RV32I-LABEL: icmp_ne_constant_2048:
121 ; RV32I:       # %bb.0:
122 ; RV32I-NEXT:    addi a0, a0, -2048
123 ; RV32I-NEXT:    snez a0, a0
124 ; RV32I-NEXT:    ret
125   %1 = icmp ne i32 %a, 2048
126   %2 = zext i1 %1 to i32
127   ret i32 %2
130 define i32 @icmp_ne_constant_neg_2048(i32 %a) nounwind {
131 ; RV32I-LABEL: icmp_ne_constant_neg_2048:
132 ; RV32I:       # %bb.0:
133 ; RV32I-NEXT:    li a1, -2048
134 ; RV32I-NEXT:    xor a0, a0, a1
135 ; RV32I-NEXT:    snez a0, a0
136 ; RV32I-NEXT:    ret
137   %1 = icmp ne i32 %a, -2048
138   %2 = zext i1 %1 to i32
139   ret i32 %2
142 define i32 @icmp_ne_constant_neg_2047(i32 %a) nounwind {
143 ; RV32I-LABEL: icmp_ne_constant_neg_2047:
144 ; RV32I:       # %bb.0:
145 ; RV32I-NEXT:    addi a0, a0, 2047
146 ; RV32I-NEXT:    snez a0, a0
147 ; RV32I-NEXT:    ret
148   %1 = icmp ne i32 %a, -2047
149   %2 = zext i1 %1 to i32
150   ret i32 %2
153 define i32 @icmp_nez(i32 %a) nounwind {
154 ; RV32I-LABEL: icmp_nez:
155 ; RV32I:       # %bb.0:
156 ; RV32I-NEXT:    snez a0, a0
157 ; RV32I-NEXT:    ret
158   %1 = icmp ne i32 %a, 0
159   %2 = zext i1 %1 to i32
160   ret i32 %2
163 define i32 @icmp_ugt(i32 %a, i32 %b) nounwind {
164 ; RV32I-LABEL: icmp_ugt:
165 ; RV32I:       # %bb.0:
166 ; RV32I-NEXT:    sltu a0, a1, a0
167 ; RV32I-NEXT:    ret
168   %1 = icmp ugt i32 %a, %b
169   %2 = zext i1 %1 to i32
170   ret i32 %2
173 define i32 @icmp_ugt_constant_zero(i32 %a) nounwind {
174 ; RV32I-LABEL: icmp_ugt_constant_zero:
175 ; RV32I:       # %bb.0:
176 ; RV32I-NEXT:    snez a0, a0
177 ; RV32I-NEXT:    ret
178   %1 = icmp ugt i32 %a, 0
179   %2 = zext i1 %1 to i32
180   ret i32 %2
183 define i32 @icmp_ugt_constant_2047(i32 %a) nounwind {
184 ; RV32I-LABEL: icmp_ugt_constant_2047:
185 ; RV32I:       # %bb.0:
186 ; RV32I-NEXT:    li a1, 2047
187 ; RV32I-NEXT:    sltu a0, a1, a0
188 ; RV32I-NEXT:    ret
189   %1 = icmp ugt i32 %a, 2047
190   %2 = zext i1 %1 to i32
191   ret i32 %2
194 define i32 @icmp_ugt_constant_2046(i32 %a) nounwind {
195 ; RV32I-LABEL: icmp_ugt_constant_2046:
196 ; RV32I:       # %bb.0:
197 ; RV32I-NEXT:    sltiu a0, a0, 2047
198 ; RV32I-NEXT:    xori a0, a0, 1
199 ; RV32I-NEXT:    ret
200   %1 = icmp ugt i32 %a, 2046
201   %2 = zext i1 %1 to i32
202   ret i32 %2
205 define i32 @icmp_ugt_constant_neg_2049(i32 %a) nounwind {
206 ; RV32I-LABEL: icmp_ugt_constant_neg_2049:
207 ; RV32I:       # %bb.0:
208 ; RV32I-NEXT:    sltiu a0, a0, -2048
209 ; RV32I-NEXT:    xori a0, a0, 1
210 ; RV32I-NEXT:    ret
211 ; 4294965247 signed extend is -2049
212   %1 = icmp ugt i32 %a, 4294965247
213   %2 = zext i1 %1 to i32
214   ret i32 %2
217 define i32 @icmp_ugt_constant_neg_2050(i32 %a) nounwind {
218 ; RV32I-LABEL: icmp_ugt_constant_neg_2050:
219 ; RV32I:       # %bb.0:
220 ; RV32I-NEXT:    lui a1, 1048575
221 ; RV32I-NEXT:    addi a1, a1, 2046
222 ; RV32I-NEXT:    sltu a0, a1, a0
223 ; RV32I-NEXT:    ret
224 ; 4294965246 signed extend is -2050
225   %1 = icmp ugt i32 %a, 4294965246
226   %2 = zext i1 %1 to i32
227   ret i32 %2
230 define i32 @icmp_uge(i32 %a, i32 %b) nounwind {
231 ; RV32I-LABEL: icmp_uge:
232 ; RV32I:       # %bb.0:
233 ; RV32I-NEXT:    sltu a0, a0, a1
234 ; RV32I-NEXT:    xori a0, a0, 1
235 ; RV32I-NEXT:    ret
236   %1 = icmp uge i32 %a, %b
237   %2 = zext i1 %1 to i32
238   ret i32 %2
241 define i32 @icmp_uge_constant_zero(i32 %a) nounwind {
242 ; RV32I-LABEL: icmp_uge_constant_zero:
243 ; RV32I:       # %bb.0:
244 ; RV32I-NEXT:    li a0, 1
245 ; RV32I-NEXT:    ret
246   %1 = icmp uge i32 %a, 0
247   %2 = zext i1 %1 to i32
248   ret i32 %2
251 define i32 @icmp_uge_constant_2047(i32 %a) nounwind {
252 ; RV32I-LABEL: icmp_uge_constant_2047:
253 ; RV32I:       # %bb.0:
254 ; RV32I-NEXT:    sltiu a0, a0, 2047
255 ; RV32I-NEXT:    xori a0, a0, 1
256 ; RV32I-NEXT:    ret
257   %1 = icmp uge i32 %a, 2047
258   %2 = zext i1 %1 to i32
259   ret i32 %2
262 define i32 @icmp_uge_constant_2048(i32 %a) nounwind {
263 ; RV32I-LABEL: icmp_uge_constant_2048:
264 ; RV32I:       # %bb.0:
265 ; RV32I-NEXT:    li a1, 2047
266 ; RV32I-NEXT:    sltu a0, a1, a0
267 ; RV32I-NEXT:    ret
268   %1 = icmp uge i32 %a, 2048
269   %2 = zext i1 %1 to i32
270   ret i32 %2
273 define i32 @icmp_uge_constant_neg_2048(i32 %a) nounwind {
274 ; RV32I-LABEL: icmp_uge_constant_neg_2048:
275 ; RV32I:       # %bb.0:
276 ; RV32I-NEXT:    sltiu a0, a0, -2048
277 ; RV32I-NEXT:    xori a0, a0, 1
278 ; RV32I-NEXT:    ret
279 ; 4294965248 signed extend is -2048
280   %1 = icmp uge i32 %a, 4294965248
281   %2 = zext i1 %1 to i32
282   ret i32 %2
285 define i32 @icmp_uge_constant_neg_2049(i32 %a) nounwind {
286 ; RV32I-LABEL: icmp_uge_constant_neg_2049:
287 ; RV32I:       # %bb.0:
288 ; RV32I-NEXT:    lui a1, 1048575
289 ; RV32I-NEXT:    addi a1, a1, 2046
290 ; RV32I-NEXT:    sltu a0, a1, a0
291 ; RV32I-NEXT:    ret
292 ; 4294965247 signed extend is -2049
293   %1 = icmp uge i32 %a, 4294965247
294   %2 = zext i1 %1 to i32
295   ret i32 %2
298 define i32 @icmp_ult(i32 %a, i32 %b) nounwind {
299 ; RV32I-LABEL: icmp_ult:
300 ; RV32I:       # %bb.0:
301 ; RV32I-NEXT:    sltu a0, a0, a1
302 ; RV32I-NEXT:    ret
303   %1 = icmp ult i32 %a, %b
304   %2 = zext i1 %1 to i32
305   ret i32 %2
308 define i32 @icmp_ult_constant_zero(i32 %a) nounwind {
309 ; RV32I-LABEL: icmp_ult_constant_zero:
310 ; RV32I:       # %bb.0:
311 ; RV32I-NEXT:    li a0, 0
312 ; RV32I-NEXT:    ret
313   %1 = icmp ult i32 %a, 0
314   %2 = zext i1 %1 to i32
315   ret i32 %2
318 define i32 @icmp_ult_constant_2047(i32 %a) nounwind {
319 ; RV32I-LABEL: icmp_ult_constant_2047:
320 ; RV32I:       # %bb.0:
321 ; RV32I-NEXT:    sltiu a0, a0, 2047
322 ; RV32I-NEXT:    ret
323   %1 = icmp ult i32 %a, 2047
324   %2 = zext i1 %1 to i32
325   ret i32 %2
328 define i32 @icmp_ult_constant_2048(i32 %a) nounwind {
329 ; RV32I-LABEL: icmp_ult_constant_2048:
330 ; RV32I:       # %bb.0:
331 ; RV32I-NEXT:    srli a0, a0, 11
332 ; RV32I-NEXT:    seqz a0, a0
333 ; RV32I-NEXT:    ret
334   %1 = icmp ult i32 %a, 2048
335   %2 = zext i1 %1 to i32
336   ret i32 %2
339 define i32 @icmp_ult_constant_neg_2048(i32 %a) nounwind {
340 ; RV32I-LABEL: icmp_ult_constant_neg_2048:
341 ; RV32I:       # %bb.0:
342 ; RV32I-NEXT:    sltiu a0, a0, -2048
343 ; RV32I-NEXT:    ret
344 ; 4294965248 signed extend is -2048
345   %1 = icmp ult i32 %a, 4294965248
346   %2 = zext i1 %1 to i32
347   ret i32 %2
350 define i32 @icmp_ult_constant_neg_2049(i32 %a) nounwind {
351 ; RV32I-LABEL: icmp_ult_constant_neg_2049:
352 ; RV32I:       # %bb.0:
353 ; RV32I-NEXT:    lui a1, 1048575
354 ; RV32I-NEXT:    addi a1, a1, 2047
355 ; RV32I-NEXT:    sltu a0, a0, a1
356 ; RV32I-NEXT:    ret
357 ; 4294965247 signed extend is -2049
358   %1 = icmp ult i32 %a, 4294965247
359   %2 = zext i1 %1 to i32
360   ret i32 %2
363 define i32 @icmp_ule(i32 %a, i32 %b) nounwind {
364 ; RV32I-LABEL: icmp_ule:
365 ; RV32I:       # %bb.0:
366 ; RV32I-NEXT:    sltu a0, a1, a0
367 ; RV32I-NEXT:    xori a0, a0, 1
368 ; RV32I-NEXT:    ret
369   %1 = icmp ule i32 %a, %b
370   %2 = zext i1 %1 to i32
371   ret i32 %2
374 define i32 @icmp_ule_constant_zero(i32 %a) nounwind {
375 ; RV32I-LABEL: icmp_ule_constant_zero:
376 ; RV32I:       # %bb.0:
377 ; RV32I-NEXT:    seqz a0, a0
378 ; RV32I-NEXT:    ret
379   %1 = icmp ule i32 %a, 0
380   %2 = zext i1 %1 to i32
381   ret i32 %2
384 define i32 @icmp_ule_constant_2046(i32 %a) nounwind {
385 ; RV32I-LABEL: icmp_ule_constant_2046:
386 ; RV32I:       # %bb.0:
387 ; RV32I-NEXT:    sltiu a0, a0, 2047
388 ; RV32I-NEXT:    ret
389   %1 = icmp ule i32 %a, 2046
390   %2 = zext i1 %1 to i32
391   ret i32 %2
394 define i32 @icmp_ule_constant_2047(i32 %a) nounwind {
395 ; RV32I-LABEL: icmp_ule_constant_2047:
396 ; RV32I:       # %bb.0:
397 ; RV32I-NEXT:    srli a0, a0, 11
398 ; RV32I-NEXT:    seqz a0, a0
399 ; RV32I-NEXT:    ret
400   %1 = icmp ule i32 %a, 2047
401   %2 = zext i1 %1 to i32
402   ret i32 %2
405 define i32 @icmp_ule_constant_neg_2049(i32 %a) nounwind {
406 ; RV32I-LABEL: icmp_ule_constant_neg_2049:
407 ; RV32I:       # %bb.0:
408 ; RV32I-NEXT:    sltiu a0, a0, -2048
409 ; RV32I-NEXT:    ret
410 ; 4294965247 signed extend is -2049
411   %1 = icmp ule i32 %a, 4294965247
412   %2 = zext i1 %1 to i32
413   ret i32 %2
416 define i32 @icmp_ule_constant_neg_2050(i32 %a) nounwind {
417 ; RV32I-LABEL: icmp_ule_constant_neg_2050:
418 ; RV32I:       # %bb.0:
419 ; RV32I-NEXT:    lui a1, 1048575
420 ; RV32I-NEXT:    addi a1, a1, 2047
421 ; RV32I-NEXT:    sltu a0, a0, a1
422 ; RV32I-NEXT:    ret
423 ; 4294965246 signed extend is -2050
424   %1 = icmp ule i32 %a, 4294965246
425   %2 = zext i1 %1 to i32
426   ret i32 %2
429 define i32 @icmp_sgt(i32 %a, i32 %b) nounwind {
430 ; RV32I-LABEL: icmp_sgt:
431 ; RV32I:       # %bb.0:
432 ; RV32I-NEXT:    slt a0, a1, a0
433 ; RV32I-NEXT:    ret
434   %1 = icmp sgt i32 %a, %b
435   %2 = zext i1 %1 to i32
436   ret i32 %2
439 define i32 @icmp_sgt_constant_zero(i32 %a) nounwind {
440 ; RV32I-LABEL: icmp_sgt_constant_zero:
441 ; RV32I:       # %bb.0:
442 ; RV32I-NEXT:    sgtz a0, a0
443 ; RV32I-NEXT:    ret
444   %1 = icmp sgt i32 %a, 0
445   %2 = zext i1 %1 to i32
446   ret i32 %2
449 define i32 @icmp_sgt_constant_2046(i32 %a) nounwind {
450 ; RV32I-LABEL: icmp_sgt_constant_2046:
451 ; RV32I:       # %bb.0:
452 ; RV32I-NEXT:    slti a0, a0, 2047
453 ; RV32I-NEXT:    xori a0, a0, 1
454 ; RV32I-NEXT:    ret
455   %1 = icmp sgt i32 %a, 2046
456   %2 = zext i1 %1 to i32
457   ret i32 %2
460 define i32 @icmp_sgt_constant_2047(i32 %a) nounwind {
461 ; RV32I-LABEL: icmp_sgt_constant_2047:
462 ; RV32I:       # %bb.0:
463 ; RV32I-NEXT:    li a1, 2047
464 ; RV32I-NEXT:    slt a0, a1, a0
465 ; RV32I-NEXT:    ret
466   %1 = icmp sgt i32 %a, 2047
467   %2 = zext i1 %1 to i32
468   ret i32 %2
471 define i32 @icmp_sgt_constant_neg_2049(i32 %a) nounwind {
472 ; RV32I-LABEL: icmp_sgt_constant_neg_2049:
473 ; RV32I:       # %bb.0:
474 ; RV32I-NEXT:    slti a0, a0, -2048
475 ; RV32I-NEXT:    xori a0, a0, 1
476 ; RV32I-NEXT:    ret
477   %1 = icmp sgt i32 %a, -2049
478   %2 = zext i1 %1 to i32
479   ret i32 %2
482 define i32 @icmp_sgt_constant_neg_2050(i32 %a) nounwind {
483 ; RV32I-LABEL: icmp_sgt_constant_neg_2050:
484 ; RV32I:       # %bb.0:
485 ; RV32I-NEXT:    lui a1, 1048575
486 ; RV32I-NEXT:    addi a1, a1, 2046
487 ; RV32I-NEXT:    slt a0, a1, a0
488 ; RV32I-NEXT:    ret
489   %1 = icmp sgt i32 %a, -2050
490   %2 = zext i1 %1 to i32
491   ret i32 %2
494 define i32 @icmp_sge(i32 %a, i32 %b) nounwind {
495 ; RV32I-LABEL: icmp_sge:
496 ; RV32I:       # %bb.0:
497 ; RV32I-NEXT:    slt a0, a0, a1
498 ; RV32I-NEXT:    xori a0, a0, 1
499 ; RV32I-NEXT:    ret
500   %1 = icmp sge i32 %a, %b
501   %2 = zext i1 %1 to i32
502   ret i32 %2
505 define i32 @icmp_sge_constant_zero(i32 %a) nounwind {
506 ; RV32I-LABEL: icmp_sge_constant_zero:
507 ; RV32I:       # %bb.0:
508 ; RV32I-NEXT:    not a0, a0
509 ; RV32I-NEXT:    srli a0, a0, 31
510 ; RV32I-NEXT:    ret
511   %1 = icmp sge i32 %a, 0
512   %2 = zext i1 %1 to i32
513   ret i32 %2
516 define i32 @icmp_sge_constant_2047(i32 %a) nounwind {
517 ; RV32I-LABEL: icmp_sge_constant_2047:
518 ; RV32I:       # %bb.0:
519 ; RV32I-NEXT:    slti a0, a0, 2047
520 ; RV32I-NEXT:    xori a0, a0, 1
521 ; RV32I-NEXT:    ret
522   %1 = icmp sge i32 %a, 2047
523   %2 = zext i1 %1 to i32
524   ret i32 %2
527 define i32 @icmp_sge_constant_2048(i32 %a) nounwind {
528 ; RV32I-LABEL: icmp_sge_constant_2048:
529 ; RV32I:       # %bb.0:
530 ; RV32I-NEXT:    li a1, 2047
531 ; RV32I-NEXT:    slt a0, a1, a0
532 ; RV32I-NEXT:    ret
533   %1 = icmp sge i32 %a, 2048
534   %2 = zext i1 %1 to i32
535   ret i32 %2
538 define i32 @icmp_sge_constant_neg_2047(i32 %a) nounwind {
539 ; RV32I-LABEL: icmp_sge_constant_neg_2047:
540 ; RV32I:       # %bb.0:
541 ; RV32I-NEXT:    slti a0, a0, -2047
542 ; RV32I-NEXT:    xori a0, a0, 1
543 ; RV32I-NEXT:    ret
544   %1 = icmp sge i32 %a, -2047
545   %2 = zext i1 %1 to i32
546   ret i32 %2
549 define i32 @icmp_sge_constant_neg_2048(i32 %a) nounwind {
550 ; RV32I-LABEL: icmp_sge_constant_neg_2048:
551 ; RV32I:       # %bb.0:
552 ; RV32I-NEXT:    not a0, a0
553 ; RV32I-NEXT:    srli a0, a0, 31
554 ; RV32I-NEXT:    ret
555   %1 = icmp sge i32 %a, 0
556   %2 = zext i1 %1 to i32
557   ret i32 %2
560 define i32 @icmp_slt(i32 %a, i32 %b) nounwind {
561 ; RV32I-LABEL: icmp_slt:
562 ; RV32I:       # %bb.0:
563 ; RV32I-NEXT:    slt a0, a0, a1
564 ; RV32I-NEXT:    ret
565   %1 = icmp slt i32 %a, %b
566   %2 = zext i1 %1 to i32
567   ret i32 %2
570 define i32 @icmp_slt_constant_zero(i32 %a) nounwind {
571 ; RV32I-LABEL: icmp_slt_constant_zero:
572 ; RV32I:       # %bb.0:
573 ; RV32I-NEXT:    srli a0, a0, 31
574 ; RV32I-NEXT:    ret
575   %1 = icmp slt i32 %a, 0
576   %2 = zext i1 %1 to i32
577   ret i32 %2
580 define i32 @icmp_slt_constant_2047(i32 %a) nounwind {
581 ; RV32I-LABEL: icmp_slt_constant_2047:
582 ; RV32I:       # %bb.0:
583 ; RV32I-NEXT:    slti a0, a0, 2047
584 ; RV32I-NEXT:    ret
585   %1 = icmp slt i32 %a, 2047
586   %2 = zext i1 %1 to i32
587   ret i32 %2
590 define i32 @icmp_slt_constant_2048(i32 %a) nounwind {
591 ; RV32I-LABEL: icmp_slt_constant_2048:
592 ; RV32I:       # %bb.0:
593 ; RV32I-NEXT:    lui a1, 1
594 ; RV32I-NEXT:    addi a1, a1, -2048
595 ; RV32I-NEXT:    slt a0, a0, a1
596 ; RV32I-NEXT:    ret
597   %1 = icmp slt i32 %a, 2048
598   %2 = zext i1 %1 to i32
599   ret i32 %2
602 define i32 @icmp_slt_constant_neg_2048(i32 %a) nounwind {
603 ; RV32I-LABEL: icmp_slt_constant_neg_2048:
604 ; RV32I:       # %bb.0:
605 ; RV32I-NEXT:    slti a0, a0, -2048
606 ; RV32I-NEXT:    ret
607   %1 = icmp slt i32 %a, -2048
608   %2 = zext i1 %1 to i32
609   ret i32 %2
612 define i32 @icmp_slt_constant_neg_2049(i32 %a) nounwind {
613 ; RV32I-LABEL: icmp_slt_constant_neg_2049:
614 ; RV32I:       # %bb.0:
615 ; RV32I-NEXT:    lui a1, 1048575
616 ; RV32I-NEXT:    addi a1, a1, 2047
617 ; RV32I-NEXT:    slt a0, a0, a1
618 ; RV32I-NEXT:    ret
619   %1 = icmp slt i32 %a, -2049
620   %2 = zext i1 %1 to i32
621   ret i32 %2
624 define i32 @icmp_sle(i32 %a, i32 %b) nounwind {
625 ; RV32I-LABEL: icmp_sle:
626 ; RV32I:       # %bb.0:
627 ; RV32I-NEXT:    slt a0, a1, a0
628 ; RV32I-NEXT:    xori a0, a0, 1
629 ; RV32I-NEXT:    ret
630   %1 = icmp sle i32 %a, %b
631   %2 = zext i1 %1 to i32
632   ret i32 %2
635 define i32 @icmp_sle_constant_zero(i32 %a) nounwind {
636 ; RV32I-LABEL: icmp_sle_constant_zero:
637 ; RV32I:       # %bb.0:
638 ; RV32I-NEXT:    slti a0, a0, 1
639 ; RV32I-NEXT:    ret
640   %1 = icmp sle i32 %a, 0
641   %2 = zext i1 %1 to i32
642   ret i32 %2
645 define i32 @icmp_sle_constant_2046(i32 %a) nounwind {
646 ; RV32I-LABEL: icmp_sle_constant_2046:
647 ; RV32I:       # %bb.0:
648 ; RV32I-NEXT:    slti a0, a0, 2047
649 ; RV32I-NEXT:    ret
650   %1 = icmp sle i32 %a, 2046
651   %2 = zext i1 %1 to i32
652   ret i32 %2
655 define i32 @icmp_sle_constant_2047(i32 %a) nounwind {
656 ; RV32I-LABEL: icmp_sle_constant_2047:
657 ; RV32I:       # %bb.0:
658 ; RV32I-NEXT:    lui a1, 1
659 ; RV32I-NEXT:    addi a1, a1, -2048
660 ; RV32I-NEXT:    slt a0, a0, a1
661 ; RV32I-NEXT:    ret
662   %1 = icmp sle i32 %a, 2047
663   %2 = zext i1 %1 to i32
664   ret i32 %2
667 define i32 @icmp_sle_constant_neg_2049(i32 %a) nounwind {
668 ; RV32I-LABEL: icmp_sle_constant_neg_2049:
669 ; RV32I:       # %bb.0:
670 ; RV32I-NEXT:    slti a0, a0, -2048
671 ; RV32I-NEXT:    ret
672   %1 = icmp sle i32 %a, -2049
673   %2 = zext i1 %1 to i32
674   ret i32 %2
677 define i32 @icmp_sle_constant_neg_2050(i32 %a) nounwind {
678 ; RV32I-LABEL: icmp_sle_constant_neg_2050:
679 ; RV32I:       # %bb.0:
680 ; RV32I-NEXT:    lui a1, 1048575
681 ; RV32I-NEXT:    addi a1, a1, 2047
682 ; RV32I-NEXT:    slt a0, a0, a1
683 ; RV32I-NEXT:    ret
684   %1 = icmp sle i32 %a, -2050
685   %2 = zext i1 %1 to i32
686   ret i32 %2