xref: /llvm-project/llvm/test/CodeGen/RISCV/i64-icmp.ll (revision 1806ce9097a635aa7a5530b5bf52547c78c87479)
17f817658SLiqin Weng; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
27f817658SLiqin Weng; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
37f817658SLiqin Weng; RUN:   | FileCheck %s -check-prefix=RV64I
47f817658SLiqin Weng
57f817658SLiqin Wengdefine i64 @icmp_eq(i64 %a, i64 %b) nounwind {
67f817658SLiqin Weng; RV64I-LABEL: icmp_eq:
77f817658SLiqin Weng; RV64I:       # %bb.0:
87f817658SLiqin Weng; RV64I-NEXT:    xor a0, a0, a1
97f817658SLiqin Weng; RV64I-NEXT:    seqz a0, a0
107f817658SLiqin Weng; RV64I-NEXT:    ret
117f817658SLiqin Weng  %1 = icmp eq i64 %a, %b
127f817658SLiqin Weng  %2 = zext i1 %1 to i64
137f817658SLiqin Weng  ret i64 %2
147f817658SLiqin Weng}
157f817658SLiqin Weng
167f817658SLiqin Wengdefine i64 @icmp_eq_constant(i64 %a) nounwind {
177f817658SLiqin Weng; RV64I-LABEL: icmp_eq_constant:
187f817658SLiqin Weng; RV64I:       # %bb.0:
197f817658SLiqin Weng; RV64I-NEXT:    addi a0, a0, -42
207f817658SLiqin Weng; RV64I-NEXT:    seqz a0, a0
217f817658SLiqin Weng; RV64I-NEXT:    ret
227f817658SLiqin Weng  %1 = icmp eq i64 %a, 42
237f817658SLiqin Weng  %2 = zext i1 %1 to i64
247f817658SLiqin Weng  ret i64 %2
257f817658SLiqin Weng}
267f817658SLiqin Weng
277f817658SLiqin Wengdefine i64 @icmp_eq_constant_2049(i64 %a) nounwind {
287f817658SLiqin Weng; RV64I-LABEL: icmp_eq_constant_2049:
297f817658SLiqin Weng; RV64I:       # %bb.0:
307f817658SLiqin Weng; RV64I-NEXT:    lui a1, 1
317f817658SLiqin Weng; RV64I-NEXT:    addiw a1, a1, -2047
327f817658SLiqin Weng; RV64I-NEXT:    xor a0, a0, a1
337f817658SLiqin Weng; RV64I-NEXT:    seqz a0, a0
347f817658SLiqin Weng; RV64I-NEXT:    ret
357f817658SLiqin Weng  %1 = icmp eq i64 %a, 2049
367f817658SLiqin Weng  %2 = zext i1 %1 to i64
377f817658SLiqin Weng  ret i64 %2
387f817658SLiqin Weng}
397f817658SLiqin Weng
407f817658SLiqin Wengdefine i64 @icmp_eq_constant_2048(i64 %a) nounwind {
417f817658SLiqin Weng; RV64I-LABEL: icmp_eq_constant_2048:
427f817658SLiqin Weng; RV64I:       # %bb.0:
437f817658SLiqin Weng; RV64I-NEXT:    addi a0, a0, -2048
447f817658SLiqin Weng; RV64I-NEXT:    seqz a0, a0
457f817658SLiqin Weng; RV64I-NEXT:    ret
467f817658SLiqin Weng  %1 = icmp eq i64 %a, 2048
477f817658SLiqin Weng  %2 = zext i1 %1 to i64
487f817658SLiqin Weng  ret i64 %2
497f817658SLiqin Weng}
507f817658SLiqin Weng
517f817658SLiqin Wengdefine i64 @icmp_eq_constant_neg_2048(i64 %a) nounwind {
527f817658SLiqin Weng; RV64I-LABEL: icmp_eq_constant_neg_2048:
537f817658SLiqin Weng; RV64I:       # %bb.0:
54e637feeeSCraig Topper; RV64I-NEXT:    xori a0, a0, -2048
557f817658SLiqin Weng; RV64I-NEXT:    seqz a0, a0
567f817658SLiqin Weng; RV64I-NEXT:    ret
577f817658SLiqin Weng  %1 = icmp eq i64 %a, -2048
587f817658SLiqin Weng  %2 = zext i1 %1 to i64
597f817658SLiqin Weng  ret i64 %2
607f817658SLiqin Weng}
617f817658SLiqin Weng
627f817658SLiqin Wengdefine i64 @icmp_eq_constant_neg_2047(i64 %a) nounwind {
637f817658SLiqin Weng; RV64I-LABEL: icmp_eq_constant_neg_2047:
647f817658SLiqin Weng; RV64I:       # %bb.0:
657f817658SLiqin Weng; RV64I-NEXT:    addi a0, a0, 2047
667f817658SLiqin Weng; RV64I-NEXT:    seqz a0, a0
677f817658SLiqin Weng; RV64I-NEXT:    ret
687f817658SLiqin Weng  %1 = icmp eq i64 %a, -2047
697f817658SLiqin Weng  %2 = zext i1 %1 to i64
707f817658SLiqin Weng  ret i64 %2
717f817658SLiqin Weng}
727f817658SLiqin Weng
737f817658SLiqin Wengdefine i64 @icmp_eqz(i64 %a) nounwind {
747f817658SLiqin Weng; RV64I-LABEL: icmp_eqz:
757f817658SLiqin Weng; RV64I:       # %bb.0:
767f817658SLiqin Weng; RV64I-NEXT:    seqz a0, a0
777f817658SLiqin Weng; RV64I-NEXT:    ret
787f817658SLiqin Weng  %1 = icmp eq i64 %a, 0
797f817658SLiqin Weng  %2 = zext i1 %1 to i64
807f817658SLiqin Weng  ret i64 %2
817f817658SLiqin Weng}
827f817658SLiqin Weng
837f817658SLiqin Wengdefine i64 @icmp_ne(i64 %a, i64 %b) nounwind {
847f817658SLiqin Weng; RV64I-LABEL: icmp_ne:
857f817658SLiqin Weng; RV64I:       # %bb.0:
867f817658SLiqin Weng; RV64I-NEXT:    xor a0, a0, a1
877f817658SLiqin Weng; RV64I-NEXT:    snez a0, a0
887f817658SLiqin Weng; RV64I-NEXT:    ret
897f817658SLiqin Weng  %1 = icmp ne i64 %a, %b
907f817658SLiqin Weng  %2 = zext i1 %1 to i64
917f817658SLiqin Weng  ret i64 %2
927f817658SLiqin Weng}
937f817658SLiqin Weng
947f817658SLiqin Wengdefine i64 @icmp_ne_constant(i64 %a) nounwind {
957f817658SLiqin Weng; RV64I-LABEL: icmp_ne_constant:
967f817658SLiqin Weng; RV64I:       # %bb.0:
977f817658SLiqin Weng; RV64I-NEXT:    addi a0, a0, -42
987f817658SLiqin Weng; RV64I-NEXT:    snez a0, a0
997f817658SLiqin Weng; RV64I-NEXT:    ret
1007f817658SLiqin Weng  %1 = icmp ne i64 %a, 42
1017f817658SLiqin Weng  %2 = zext i1 %1 to i64
1027f817658SLiqin Weng  ret i64 %2
1037f817658SLiqin Weng}
1047f817658SLiqin Weng
1057f817658SLiqin Wengdefine i64 @icmp_ne_constant_2049(i64 %a) nounwind {
1067f817658SLiqin Weng; RV64I-LABEL: icmp_ne_constant_2049:
1077f817658SLiqin Weng; RV64I:       # %bb.0:
1087f817658SLiqin Weng; RV64I-NEXT:    lui a1, 1
1097f817658SLiqin Weng; RV64I-NEXT:    addiw a1, a1, -2047
1107f817658SLiqin Weng; RV64I-NEXT:    xor a0, a0, a1
1117f817658SLiqin Weng; RV64I-NEXT:    snez a0, a0
1127f817658SLiqin Weng; RV64I-NEXT:    ret
1137f817658SLiqin Weng  %1 = icmp ne i64 %a, 2049
1147f817658SLiqin Weng  %2 = zext i1 %1 to i64
1157f817658SLiqin Weng  ret i64 %2
1167f817658SLiqin Weng}
1177f817658SLiqin Weng
1187f817658SLiqin Wengdefine i64 @icmp_ne_constant_2048(i64 %a) nounwind {
1197f817658SLiqin Weng; RV64I-LABEL: icmp_ne_constant_2048:
1207f817658SLiqin Weng; RV64I:       # %bb.0:
1217f817658SLiqin Weng; RV64I-NEXT:    addi a0, a0, -2048
1227f817658SLiqin Weng; RV64I-NEXT:    snez a0, a0
1237f817658SLiqin Weng; RV64I-NEXT:    ret
1247f817658SLiqin Weng  %1 = icmp ne i64 %a, 2048
1257f817658SLiqin Weng  %2 = zext i1 %1 to i64
1267f817658SLiqin Weng  ret i64 %2
1277f817658SLiqin Weng}
1287f817658SLiqin Weng
1297f817658SLiqin Wengdefine i64 @icmp_ne_constant_neg_2048(i64 %a) nounwind {
1307f817658SLiqin Weng; RV64I-LABEL: icmp_ne_constant_neg_2048:
1317f817658SLiqin Weng; RV64I:       # %bb.0:
132e637feeeSCraig Topper; RV64I-NEXT:    xori a0, a0, -2048
1337f817658SLiqin Weng; RV64I-NEXT:    snez a0, a0
1347f817658SLiqin Weng; RV64I-NEXT:    ret
1357f817658SLiqin Weng  %1 = icmp ne i64 %a, -2048
1367f817658SLiqin Weng  %2 = zext i1 %1 to i64
1377f817658SLiqin Weng  ret i64 %2
1387f817658SLiqin Weng}
1397f817658SLiqin Weng
1407f817658SLiqin Wengdefine i64 @icmp_ne_constant_neg_2047(i64 %a) nounwind {
1417f817658SLiqin Weng; RV64I-LABEL: icmp_ne_constant_neg_2047:
1427f817658SLiqin Weng; RV64I:       # %bb.0:
1437f817658SLiqin Weng; RV64I-NEXT:    addi a0, a0, 2047
1447f817658SLiqin Weng; RV64I-NEXT:    snez a0, a0
1457f817658SLiqin Weng; RV64I-NEXT:    ret
1467f817658SLiqin Weng  %1 = icmp ne i64 %a, -2047
1477f817658SLiqin Weng  %2 = zext i1 %1 to i64
1487f817658SLiqin Weng  ret i64 %2
1497f817658SLiqin Weng}
1507f817658SLiqin Weng
1517f817658SLiqin Wengdefine i64 @icmp_nez(i64 %a) nounwind {
1527f817658SLiqin Weng; RV64I-LABEL: icmp_nez:
1537f817658SLiqin Weng; RV64I:       # %bb.0:
1547f817658SLiqin Weng; RV64I-NEXT:    snez a0, a0
1557f817658SLiqin Weng; RV64I-NEXT:    ret
1567f817658SLiqin Weng  %1 = icmp ne i64 %a, 0
1577f817658SLiqin Weng  %2 = zext i1 %1 to i64
1587f817658SLiqin Weng  ret i64 %2
1597f817658SLiqin Weng}
1607f817658SLiqin Weng
161e493944fSCraig Topperdefine i64 @icmp_ne_neg_1(i64 %a) nounwind {
162e493944fSCraig Topper; RV64I-LABEL: icmp_ne_neg_1:
163e493944fSCraig Topper; RV64I:       # %bb.0:
164e493944fSCraig Topper; RV64I-NEXT:    sltiu a0, a0, -1
165e493944fSCraig Topper; RV64I-NEXT:    ret
166e493944fSCraig Topper  %1 = icmp ne i64 %a, -1
167e493944fSCraig Topper  %2 = zext i1 %1 to i64
168e493944fSCraig Topper  ret i64 %2
169e493944fSCraig Topper}
170e493944fSCraig Topper
1717f817658SLiqin Wengdefine i64 @icmp_ugt(i64 %a, i64 %b) nounwind {
1727f817658SLiqin Weng; RV64I-LABEL: icmp_ugt:
1737f817658SLiqin Weng; RV64I:       # %bb.0:
1747f817658SLiqin Weng; RV64I-NEXT:    sltu a0, a1, a0
1757f817658SLiqin Weng; RV64I-NEXT:    ret
1767f817658SLiqin Weng  %1 = icmp ugt i64 %a, %b
1777f817658SLiqin Weng  %2 = zext i1 %1 to i64
1787f817658SLiqin Weng  ret i64 %2
1797f817658SLiqin Weng}
1807f817658SLiqin Weng
1817f817658SLiqin Wengdefine i64 @icmp_ugt_constant_zero(i64 %a) nounwind {
1827f817658SLiqin Weng; RV64I-LABEL: icmp_ugt_constant_zero:
1837f817658SLiqin Weng; RV64I:       # %bb.0:
1847f817658SLiqin Weng; RV64I-NEXT:    snez a0, a0
1857f817658SLiqin Weng; RV64I-NEXT:    ret
1867f817658SLiqin Weng  %1 = icmp ugt i64 %a, 0
1877f817658SLiqin Weng  %2 = zext i1 %1 to i64
1887f817658SLiqin Weng  ret i64 %2
1897f817658SLiqin Weng}
1907f817658SLiqin Weng
1917f817658SLiqin Wengdefine i64 @icmp_ugt_constant_2047(i64 %a) nounwind {
1927f817658SLiqin Weng; RV64I-LABEL: icmp_ugt_constant_2047:
1937f817658SLiqin Weng; RV64I:       # %bb.0:
1947f817658SLiqin Weng; RV64I-NEXT:    li a1, 2047
1957f817658SLiqin Weng; RV64I-NEXT:    sltu a0, a1, a0
1967f817658SLiqin Weng; RV64I-NEXT:    ret
1977f817658SLiqin Weng  %1 = icmp ugt i64 %a, 2047
1987f817658SLiqin Weng  %2 = zext i1 %1 to i64
1997f817658SLiqin Weng  ret i64 %2
2007f817658SLiqin Weng}
2017f817658SLiqin Weng
2027f817658SLiqin Wengdefine i64 @icmp_ugt_constant_2046(i64 %a) nounwind {
2037f817658SLiqin Weng; RV64I-LABEL: icmp_ugt_constant_2046:
2047f817658SLiqin Weng; RV64I:       # %bb.0:
2057f817658SLiqin Weng; RV64I-NEXT:    sltiu a0, a0, 2047
2067f817658SLiqin Weng; RV64I-NEXT:    xori a0, a0, 1
2077f817658SLiqin Weng; RV64I-NEXT:    ret
2087f817658SLiqin Weng  %1 = icmp ugt i64 %a, 2046
2097f817658SLiqin Weng  %2 = zext i1 %1 to i64
2107f817658SLiqin Weng  ret i64 %2
2117f817658SLiqin Weng}
2127f817658SLiqin Weng
2137f817658SLiqin Wengdefine i64 @icmp_ugt_constant_neg_2049(i64 %a) nounwind {
2147f817658SLiqin Weng; RV64I-LABEL: icmp_ugt_constant_neg_2049:
2157f817658SLiqin Weng; RV64I:       # %bb.0:
216a3d51022SLiqin Weng; RV64I-NEXT:    sltiu a0, a0, -2048
217a3d51022SLiqin Weng; RV64I-NEXT:    xori a0, a0, 1
2187f817658SLiqin Weng; RV64I-NEXT:    ret
219a3d51022SLiqin Weng; 18446744073709549567 signed extend is -2049
220a3d51022SLiqin Weng  %1 = icmp ugt i64 %a, 18446744073709549567
2217f817658SLiqin Weng  %2 = zext i1 %1 to i64
2227f817658SLiqin Weng  ret i64 %2
2237f817658SLiqin Weng}
2247f817658SLiqin Weng
2257f817658SLiqin Wengdefine i64 @icmp_ugt_constant_neg_2050(i64 %a) nounwind {
2267f817658SLiqin Weng; RV64I-LABEL: icmp_ugt_constant_neg_2050:
2277f817658SLiqin Weng; RV64I:       # %bb.0:
228a3d51022SLiqin Weng; RV64I-NEXT:    lui a1, 1048575
229a3d51022SLiqin Weng; RV64I-NEXT:    addiw a1, a1, 2046
2307f817658SLiqin Weng; RV64I-NEXT:    sltu a0, a1, a0
2317f817658SLiqin Weng; RV64I-NEXT:    ret
232a3d51022SLiqin Weng; 18446744073709549566 signed extend is -2050
233a3d51022SLiqin Weng  %1 = icmp ugt i64 %a, 18446744073709549566
2347f817658SLiqin Weng  %2 = zext i1 %1 to i64
2357f817658SLiqin Weng  ret i64 %2
2367f817658SLiqin Weng}
2377f817658SLiqin Weng
2387f817658SLiqin Wengdefine i64 @icmp_uge(i64 %a, i64 %b) nounwind {
2397f817658SLiqin Weng; RV64I-LABEL: icmp_uge:
2407f817658SLiqin Weng; RV64I:       # %bb.0:
2417f817658SLiqin Weng; RV64I-NEXT:    sltu a0, a0, a1
2427f817658SLiqin Weng; RV64I-NEXT:    xori a0, a0, 1
2437f817658SLiqin Weng; RV64I-NEXT:    ret
2447f817658SLiqin Weng  %1 = icmp uge i64 %a, %b
2457f817658SLiqin Weng  %2 = zext i1 %1 to i64
2467f817658SLiqin Weng  ret i64 %2
2477f817658SLiqin Weng}
2487f817658SLiqin Weng
2497f817658SLiqin Wengdefine i64 @icmp_uge_constant_zero(i64 %a) nounwind {
2507f817658SLiqin Weng; RV64I-LABEL: icmp_uge_constant_zero:
2517f817658SLiqin Weng; RV64I:       # %bb.0:
2527f817658SLiqin Weng; RV64I-NEXT:    li a0, 1
2537f817658SLiqin Weng; RV64I-NEXT:    ret
2547f817658SLiqin Weng  %1 = icmp uge i64 %a, 0
2557f817658SLiqin Weng  %2 = zext i1 %1 to i64
2567f817658SLiqin Weng  ret i64 %2
2577f817658SLiqin Weng}
2587f817658SLiqin Weng
2597f817658SLiqin Wengdefine i64 @icmp_uge_constant_2047(i64 %a) nounwind {
2607f817658SLiqin Weng; RV64I-LABEL: icmp_uge_constant_2047:
2617f817658SLiqin Weng; RV64I:       # %bb.0:
2627f817658SLiqin Weng; RV64I-NEXT:    sltiu a0, a0, 2047
2637f817658SLiqin Weng; RV64I-NEXT:    xori a0, a0, 1
2647f817658SLiqin Weng; RV64I-NEXT:    ret
2657f817658SLiqin Weng  %1 = icmp uge i64 %a, 2047
2667f817658SLiqin Weng  %2 = zext i1 %1 to i64
2677f817658SLiqin Weng  ret i64 %2
2687f817658SLiqin Weng}
2697f817658SLiqin Weng
2707f817658SLiqin Wengdefine i64 @icmp_uge_constant_2048(i64 %a) nounwind {
2717f817658SLiqin Weng; RV64I-LABEL: icmp_uge_constant_2048:
2727f817658SLiqin Weng; RV64I:       # %bb.0:
2737f817658SLiqin Weng; RV64I-NEXT:    li a1, 2047
2747f817658SLiqin Weng; RV64I-NEXT:    sltu a0, a1, a0
2757f817658SLiqin Weng; RV64I-NEXT:    ret
2767f817658SLiqin Weng  %1 = icmp uge i64 %a, 2048
2777f817658SLiqin Weng  %2 = zext i1 %1 to i64
2787f817658SLiqin Weng  ret i64 %2
2797f817658SLiqin Weng}
2807f817658SLiqin Weng
2817f817658SLiqin Wengdefine i64 @icmp_uge_constant_neg_2048(i64 %a) nounwind {
2827f817658SLiqin Weng; RV64I-LABEL: icmp_uge_constant_neg_2048:
2837f817658SLiqin Weng; RV64I:       # %bb.0:
284a3d51022SLiqin Weng; RV64I-NEXT:    sltiu a0, a0, -2048
285a3d51022SLiqin Weng; RV64I-NEXT:    xori a0, a0, 1
2867f817658SLiqin Weng; RV64I-NEXT:    ret
287a3d51022SLiqin Weng; 18446744073709549568 signed extend is -2048
288a3d51022SLiqin Weng  %1 = icmp uge i64 %a, 18446744073709549568
2897f817658SLiqin Weng  %2 = zext i1 %1 to i64
2907f817658SLiqin Weng  ret i64 %2
2917f817658SLiqin Weng}
2927f817658SLiqin Weng
2937f817658SLiqin Wengdefine i64 @icmp_uge_constant_neg_2049(i64 %a) nounwind {
2947f817658SLiqin Weng; RV64I-LABEL: icmp_uge_constant_neg_2049:
2957f817658SLiqin Weng; RV64I:       # %bb.0:
296a3d51022SLiqin Weng; RV64I-NEXT:    lui a1, 1048575
297a3d51022SLiqin Weng; RV64I-NEXT:    addiw a1, a1, 2046
2987f817658SLiqin Weng; RV64I-NEXT:    sltu a0, a1, a0
2997f817658SLiqin Weng; RV64I-NEXT:    ret
300a3d51022SLiqin Weng; 18446744073709549567 signed extend is -2049
301a3d51022SLiqin Weng  %1 = icmp uge i64 %a, 18446744073709549567
3027f817658SLiqin Weng  %2 = zext i1 %1 to i64
3037f817658SLiqin Weng  ret i64 %2
3047f817658SLiqin Weng}
3057f817658SLiqin Weng
3067f817658SLiqin Wengdefine i64 @icmp_ult(i64 %a, i64 %b) nounwind {
3077f817658SLiqin Weng; RV64I-LABEL: icmp_ult:
3087f817658SLiqin Weng; RV64I:       # %bb.0:
3097f817658SLiqin Weng; RV64I-NEXT:    sltu a0, a0, a1
3107f817658SLiqin Weng; RV64I-NEXT:    ret
3117f817658SLiqin Weng  %1 = icmp ult i64 %a, %b
3127f817658SLiqin Weng  %2 = zext i1 %1 to i64
3137f817658SLiqin Weng  ret i64 %2
3147f817658SLiqin Weng}
3157f817658SLiqin Weng
3167f817658SLiqin Wengdefine i64 @icmp_ult_constant_zero(i64 %a) nounwind {
3177f817658SLiqin Weng; RV64I-LABEL: icmp_ult_constant_zero:
3187f817658SLiqin Weng; RV64I:       # %bb.0:
3197f817658SLiqin Weng; RV64I-NEXT:    li a0, 0
3207f817658SLiqin Weng; RV64I-NEXT:    ret
3217f817658SLiqin Weng  %1 = icmp ult i64 %a, 0
3227f817658SLiqin Weng  %2 = zext i1 %1 to i64
3237f817658SLiqin Weng  ret i64 %2
3247f817658SLiqin Weng}
3257f817658SLiqin Weng
3267f817658SLiqin Wengdefine i64 @icmp_ult_constant_2047(i64 %a) nounwind {
3277f817658SLiqin Weng; RV64I-LABEL: icmp_ult_constant_2047:
3287f817658SLiqin Weng; RV64I:       # %bb.0:
3297f817658SLiqin Weng; RV64I-NEXT:    sltiu a0, a0, 2047
3307f817658SLiqin Weng; RV64I-NEXT:    ret
3317f817658SLiqin Weng  %1 = icmp ult i64 %a, 2047
3327f817658SLiqin Weng  %2 = zext i1 %1 to i64
3337f817658SLiqin Weng  ret i64 %2
3347f817658SLiqin Weng}
3357f817658SLiqin Weng
3367f817658SLiqin Wengdefine i64 @icmp_ult_constant_2048(i64 %a) nounwind {
3377f817658SLiqin Weng; RV64I-LABEL: icmp_ult_constant_2048:
3387f817658SLiqin Weng; RV64I:       # %bb.0:
3397f817658SLiqin Weng; RV64I-NEXT:    srli a0, a0, 11
3407f817658SLiqin Weng; RV64I-NEXT:    seqz a0, a0
3417f817658SLiqin Weng; RV64I-NEXT:    ret
3427f817658SLiqin Weng  %1 = icmp ult i64 %a, 2048
3437f817658SLiqin Weng  %2 = zext i1 %1 to i64
3447f817658SLiqin Weng  ret i64 %2
3457f817658SLiqin Weng}
3467f817658SLiqin Weng
3477f817658SLiqin Wengdefine i64 @icmp_ult_constant_neg_2048(i64 %a) nounwind {
3487f817658SLiqin Weng; RV64I-LABEL: icmp_ult_constant_neg_2048:
3497f817658SLiqin Weng; RV64I:       # %bb.0:
350a3d51022SLiqin Weng; RV64I-NEXT:    sltiu a0, a0, -2048
3517f817658SLiqin Weng; RV64I-NEXT:    ret
352a3d51022SLiqin Weng; 18446744073709549568 signed extend is -2048
353a3d51022SLiqin Weng  %1 = icmp ult i64 %a, 18446744073709549568
3547f817658SLiqin Weng  %2 = zext i1 %1 to i64
3557f817658SLiqin Weng  ret i64 %2
3567f817658SLiqin Weng}
3577f817658SLiqin Weng
3587f817658SLiqin Wengdefine i64 @icmp_ult_constant_neg_2049(i64 %a) nounwind {
3597f817658SLiqin Weng; RV64I-LABEL: icmp_ult_constant_neg_2049:
3607f817658SLiqin Weng; RV64I:       # %bb.0:
361a3d51022SLiqin Weng; RV64I-NEXT:    lui a1, 1048575
362a3d51022SLiqin Weng; RV64I-NEXT:    addiw a1, a1, 2047
3637f817658SLiqin Weng; RV64I-NEXT:    sltu a0, a0, a1
3647f817658SLiqin Weng; RV64I-NEXT:    ret
365a3d51022SLiqin Weng; 18446744073709549567 signed extend is -2049
366a3d51022SLiqin Weng  %1 = icmp ult i64 %a, 18446744073709549567
3677f817658SLiqin Weng  %2 = zext i1 %1 to i64
3687f817658SLiqin Weng  ret i64 %2
3697f817658SLiqin Weng}
3707f817658SLiqin Weng
3717f817658SLiqin Wengdefine i64 @icmp_ule(i64 %a, i64 %b) nounwind {
3727f817658SLiqin Weng; RV64I-LABEL: icmp_ule:
3737f817658SLiqin Weng; RV64I:       # %bb.0:
3747f817658SLiqin Weng; RV64I-NEXT:    sltu a0, a1, a0
3757f817658SLiqin Weng; RV64I-NEXT:    xori a0, a0, 1
3767f817658SLiqin Weng; RV64I-NEXT:    ret
3777f817658SLiqin Weng  %1 = icmp ule i64 %a, %b
3787f817658SLiqin Weng  %2 = zext i1 %1 to i64
3797f817658SLiqin Weng  ret i64 %2
3807f817658SLiqin Weng}
3817f817658SLiqin Weng
3827f817658SLiqin Wengdefine i64 @icmp_ule_constant_zero(i64 %a) nounwind {
3837f817658SLiqin Weng; RV64I-LABEL: icmp_ule_constant_zero:
3847f817658SLiqin Weng; RV64I:       # %bb.0:
3857f817658SLiqin Weng; RV64I-NEXT:    seqz a0, a0
3867f817658SLiqin Weng; RV64I-NEXT:    ret
3877f817658SLiqin Weng  %1 = icmp ule i64 %a, 0
3887f817658SLiqin Weng  %2 = zext i1 %1 to i64
3897f817658SLiqin Weng  ret i64 %2
3907f817658SLiqin Weng}
3917f817658SLiqin Weng
3927f817658SLiqin Wengdefine i64 @icmp_ule_constant_2046(i64 %a) nounwind {
3937f817658SLiqin Weng; RV64I-LABEL: icmp_ule_constant_2046:
3947f817658SLiqin Weng; RV64I:       # %bb.0:
3957f817658SLiqin Weng; RV64I-NEXT:    sltiu a0, a0, 2047
3967f817658SLiqin Weng; RV64I-NEXT:    ret
3977f817658SLiqin Weng  %1 = icmp ule i64 %a, 2046
3987f817658SLiqin Weng  %2 = zext i1 %1 to i64
3997f817658SLiqin Weng  ret i64 %2
4007f817658SLiqin Weng}
4017f817658SLiqin Weng
4027f817658SLiqin Wengdefine i64 @icmp_ule_constant_2047(i64 %a) nounwind {
4037f817658SLiqin Weng; RV64I-LABEL: icmp_ule_constant_2047:
4047f817658SLiqin Weng; RV64I:       # %bb.0:
4057f817658SLiqin Weng; RV64I-NEXT:    srli a0, a0, 11
4067f817658SLiqin Weng; RV64I-NEXT:    seqz a0, a0
4077f817658SLiqin Weng; RV64I-NEXT:    ret
4087f817658SLiqin Weng  %1 = icmp ule i64 %a, 2047
4097f817658SLiqin Weng  %2 = zext i1 %1 to i64
4107f817658SLiqin Weng  ret i64 %2
4117f817658SLiqin Weng}
4127f817658SLiqin Weng
4137f817658SLiqin Wengdefine i64 @icmp_ule_constant_neg_2049(i64 %a) nounwind {
4147f817658SLiqin Weng; RV64I-LABEL: icmp_ule_constant_neg_2049:
4157f817658SLiqin Weng; RV64I:       # %bb.0:
416a3d51022SLiqin Weng; RV64I-NEXT:    sltiu a0, a0, -2048
4177f817658SLiqin Weng; RV64I-NEXT:    ret
418a3d51022SLiqin Weng; 18446744073709549567 signed extend is -2049
419a3d51022SLiqin Weng  %1 = icmp ule i64 %a, 18446744073709549567
4207f817658SLiqin Weng  %2 = zext i1 %1 to i64
4217f817658SLiqin Weng  ret i64 %2
4227f817658SLiqin Weng}
4237f817658SLiqin Weng
4247f817658SLiqin Wengdefine i64 @icmp_ule_constant_neg_2050(i64 %a) nounwind {
4257f817658SLiqin Weng; RV64I-LABEL: icmp_ule_constant_neg_2050:
4267f817658SLiqin Weng; RV64I:       # %bb.0:
427a3d51022SLiqin Weng; RV64I-NEXT:    lui a1, 1048575
428a3d51022SLiqin Weng; RV64I-NEXT:    addiw a1, a1, 2047
4297f817658SLiqin Weng; RV64I-NEXT:    sltu a0, a0, a1
4307f817658SLiqin Weng; RV64I-NEXT:    ret
431a3d51022SLiqin Weng; 18446744073709549566 signed extend is -2050
432a3d51022SLiqin Weng  %1 = icmp ule i64 %a, 18446744073709549566
4337f817658SLiqin Weng  %2 = zext i1 %1 to i64
4347f817658SLiqin Weng  ret i64 %2
4357f817658SLiqin Weng}
4367f817658SLiqin Weng
4377f817658SLiqin Wengdefine i64 @icmp_sgt(i64 %a, i64 %b) nounwind {
4387f817658SLiqin Weng; RV64I-LABEL: icmp_sgt:
4397f817658SLiqin Weng; RV64I:       # %bb.0:
4407f817658SLiqin Weng; RV64I-NEXT:    slt a0, a1, a0
4417f817658SLiqin Weng; RV64I-NEXT:    ret
4427f817658SLiqin Weng  %1 = icmp sgt i64 %a, %b
4437f817658SLiqin Weng  %2 = zext i1 %1 to i64
4447f817658SLiqin Weng  ret i64 %2
4457f817658SLiqin Weng}
4467f817658SLiqin Weng
4477f817658SLiqin Wengdefine i64 @icmp_sgt_constant_zero(i64 %a) nounwind {
4487f817658SLiqin Weng; RV64I-LABEL: icmp_sgt_constant_zero:
4497f817658SLiqin Weng; RV64I:       # %bb.0:
4507f817658SLiqin Weng; RV64I-NEXT:    sgtz a0, a0
4517f817658SLiqin Weng; RV64I-NEXT:    ret
4527f817658SLiqin Weng  %1 = icmp sgt i64 %a, 0
4537f817658SLiqin Weng  %2 = zext i1 %1 to i64
4547f817658SLiqin Weng  ret i64 %2
4557f817658SLiqin Weng}
4567f817658SLiqin Weng
4577f817658SLiqin Wengdefine i64 @icmp_sgt_constant_2046(i64 %a) nounwind {
4587f817658SLiqin Weng; RV64I-LABEL: icmp_sgt_constant_2046:
4597f817658SLiqin Weng; RV64I:       # %bb.0:
4607f817658SLiqin Weng; RV64I-NEXT:    slti a0, a0, 2047
4617f817658SLiqin Weng; RV64I-NEXT:    xori a0, a0, 1
4627f817658SLiqin Weng; RV64I-NEXT:    ret
4637f817658SLiqin Weng  %1 = icmp sgt i64 %a, 2046
4647f817658SLiqin Weng  %2 = zext i1 %1 to i64
4657f817658SLiqin Weng  ret i64 %2
4667f817658SLiqin Weng}
4677f817658SLiqin Weng
4687f817658SLiqin Wengdefine i64 @icmp_sgt_constant_2047(i64 %a) nounwind {
4697f817658SLiqin Weng; RV64I-LABEL: icmp_sgt_constant_2047:
4707f817658SLiqin Weng; RV64I:       # %bb.0:
4717f817658SLiqin Weng; RV64I-NEXT:    li a1, 2047
4727f817658SLiqin Weng; RV64I-NEXT:    slt a0, a1, a0
4737f817658SLiqin Weng; RV64I-NEXT:    ret
4747f817658SLiqin Weng  %1 = icmp sgt i64 %a, 2047
4757f817658SLiqin Weng  %2 = zext i1 %1 to i64
4767f817658SLiqin Weng  ret i64 %2
4777f817658SLiqin Weng}
4787f817658SLiqin Weng
4797f817658SLiqin Wengdefine i64 @icmp_sgt_constant_neg_2049(i64 %a) nounwind {
4807f817658SLiqin Weng; RV64I-LABEL: icmp_sgt_constant_neg_2049:
4817f817658SLiqin Weng; RV64I:       # %bb.0:
4827f817658SLiqin Weng; RV64I-NEXT:    slti a0, a0, -2048
4837f817658SLiqin Weng; RV64I-NEXT:    xori a0, a0, 1
4847f817658SLiqin Weng; RV64I-NEXT:    ret
4857f817658SLiqin Weng  %1 = icmp sgt i64 %a, -2049
4867f817658SLiqin Weng  %2 = zext i1 %1 to i64
4877f817658SLiqin Weng  ret i64 %2
4887f817658SLiqin Weng}
4897f817658SLiqin Weng
4907f817658SLiqin Wengdefine i64 @icmp_sgt_constant_neg_2050(i64 %a) nounwind {
4917f817658SLiqin Weng; RV64I-LABEL: icmp_sgt_constant_neg_2050:
4927f817658SLiqin Weng; RV64I:       # %bb.0:
4937f817658SLiqin Weng; RV64I-NEXT:    lui a1, 1048575
4947f817658SLiqin Weng; RV64I-NEXT:    addiw a1, a1, 2046
4957f817658SLiqin Weng; RV64I-NEXT:    slt a0, a1, a0
4967f817658SLiqin Weng; RV64I-NEXT:    ret
4977f817658SLiqin Weng  %1 = icmp sgt i64 %a, -2050
4987f817658SLiqin Weng  %2 = zext i1 %1 to i64
4997f817658SLiqin Weng  ret i64 %2
5007f817658SLiqin Weng}
5017f817658SLiqin Weng
5027f817658SLiqin Wengdefine i64 @icmp_sge(i64 %a, i64 %b) nounwind {
5037f817658SLiqin Weng; RV64I-LABEL: icmp_sge:
5047f817658SLiqin Weng; RV64I:       # %bb.0:
5057f817658SLiqin Weng; RV64I-NEXT:    slt a0, a0, a1
5067f817658SLiqin Weng; RV64I-NEXT:    xori a0, a0, 1
5077f817658SLiqin Weng; RV64I-NEXT:    ret
5087f817658SLiqin Weng  %1 = icmp sge i64 %a, %b
5097f817658SLiqin Weng  %2 = zext i1 %1 to i64
5107f817658SLiqin Weng  ret i64 %2
5117f817658SLiqin Weng}
5127f817658SLiqin Weng
5137f817658SLiqin Wengdefine i64 @icmp_sge_constant_zero(i64 %a) nounwind {
5147f817658SLiqin Weng; RV64I-LABEL: icmp_sge_constant_zero:
5157f817658SLiqin Weng; RV64I:       # %bb.0:
5167f817658SLiqin Weng; RV64I-NEXT:    not a0, a0
5177f817658SLiqin Weng; RV64I-NEXT:    srli a0, a0, 63
5187f817658SLiqin Weng; RV64I-NEXT:    ret
5197f817658SLiqin Weng  %1 = icmp sge i64 %a, 0
5207f817658SLiqin Weng  %2 = zext i1 %1 to i64
5217f817658SLiqin Weng  ret i64 %2
5227f817658SLiqin Weng}
5237f817658SLiqin Weng
5247f817658SLiqin Wengdefine i64 @icmp_sge_constant_2047(i64 %a) nounwind {
5257f817658SLiqin Weng; RV64I-LABEL: icmp_sge_constant_2047:
5267f817658SLiqin Weng; RV64I:       # %bb.0:
5277f817658SLiqin Weng; RV64I-NEXT:    slti a0, a0, 2047
5287f817658SLiqin Weng; RV64I-NEXT:    xori a0, a0, 1
5297f817658SLiqin Weng; RV64I-NEXT:    ret
5307f817658SLiqin Weng  %1 = icmp sge i64 %a, 2047
5317f817658SLiqin Weng  %2 = zext i1 %1 to i64
5327f817658SLiqin Weng  ret i64 %2
5337f817658SLiqin Weng}
5347f817658SLiqin Weng
5357f817658SLiqin Wengdefine i64 @icmp_sge_constant_2048(i64 %a) nounwind {
5367f817658SLiqin Weng; RV64I-LABEL: icmp_sge_constant_2048:
5377f817658SLiqin Weng; RV64I:       # %bb.0:
5387f817658SLiqin Weng; RV64I-NEXT:    li a1, 2047
5397f817658SLiqin Weng; RV64I-NEXT:    slt a0, a1, a0
5407f817658SLiqin Weng; RV64I-NEXT:    ret
5417f817658SLiqin Weng  %1 = icmp sge i64 %a, 2048
5427f817658SLiqin Weng  %2 = zext i1 %1 to i64
5437f817658SLiqin Weng  ret i64 %2
5447f817658SLiqin Weng}
5457f817658SLiqin Weng
5467f817658SLiqin Wengdefine i64 @icmp_sge_constant_neg_2047(i64 %a) nounwind {
5477f817658SLiqin Weng; RV64I-LABEL: icmp_sge_constant_neg_2047:
5487f817658SLiqin Weng; RV64I:       # %bb.0:
5497f817658SLiqin Weng; RV64I-NEXT:    slti a0, a0, -2047
5507f817658SLiqin Weng; RV64I-NEXT:    xori a0, a0, 1
5517f817658SLiqin Weng; RV64I-NEXT:    ret
5527f817658SLiqin Weng  %1 = icmp sge i64 %a, -2047
5537f817658SLiqin Weng  %2 = zext i1 %1 to i64
5547f817658SLiqin Weng  ret i64 %2
5557f817658SLiqin Weng}
5567f817658SLiqin Weng
5577f817658SLiqin Wengdefine i64 @icmp_sge_constant_neg_2048(i64 %a) nounwind {
5587f817658SLiqin Weng; RV64I-LABEL: icmp_sge_constant_neg_2048:
5597f817658SLiqin Weng; RV64I:       # %bb.0:
5607f817658SLiqin Weng; RV64I-NEXT:    not a0, a0
5617f817658SLiqin Weng; RV64I-NEXT:    srli a0, a0, 63
5627f817658SLiqin Weng; RV64I-NEXT:    ret
5637f817658SLiqin Weng  %1 = icmp sge i64 %a, 0
5647f817658SLiqin Weng  %2 = zext i1 %1 to i64
5657f817658SLiqin Weng  ret i64 %2
5667f817658SLiqin Weng}
5677f817658SLiqin Weng
5687f817658SLiqin Wengdefine i64 @icmp_slt(i64 %a, i64 %b) nounwind {
5697f817658SLiqin Weng; RV64I-LABEL: icmp_slt:
5707f817658SLiqin Weng; RV64I:       # %bb.0:
5717f817658SLiqin Weng; RV64I-NEXT:    slt a0, a0, a1
5727f817658SLiqin Weng; RV64I-NEXT:    ret
5737f817658SLiqin Weng  %1 = icmp slt i64 %a, %b
5747f817658SLiqin Weng  %2 = zext i1 %1 to i64
5757f817658SLiqin Weng  ret i64 %2
5767f817658SLiqin Weng}
5777f817658SLiqin Weng
5787f817658SLiqin Wengdefine i64 @icmp_slt_constant_zero(i64 %a) nounwind {
5797f817658SLiqin Weng; RV64I-LABEL: icmp_slt_constant_zero:
5807f817658SLiqin Weng; RV64I:       # %bb.0:
5817f817658SLiqin Weng; RV64I-NEXT:    srli a0, a0, 63
5827f817658SLiqin Weng; RV64I-NEXT:    ret
5837f817658SLiqin Weng  %1 = icmp slt i64 %a, 0
5847f817658SLiqin Weng  %2 = zext i1 %1 to i64
5857f817658SLiqin Weng  ret i64 %2
5867f817658SLiqin Weng}
5877f817658SLiqin Weng
5887f817658SLiqin Wengdefine i64 @icmp_slt_constant_2047(i64 %a) nounwind {
5897f817658SLiqin Weng; RV64I-LABEL: icmp_slt_constant_2047:
5907f817658SLiqin Weng; RV64I:       # %bb.0:
5917f817658SLiqin Weng; RV64I-NEXT:    slti a0, a0, 2047
5927f817658SLiqin Weng; RV64I-NEXT:    ret
5937f817658SLiqin Weng  %1 = icmp slt i64 %a, 2047
5947f817658SLiqin Weng  %2 = zext i1 %1 to i64
5957f817658SLiqin Weng  ret i64 %2
5967f817658SLiqin Weng}
5977f817658SLiqin Weng
5987f817658SLiqin Wengdefine i64 @icmp_slt_constant_2048(i64 %a) nounwind {
5997f817658SLiqin Weng; RV64I-LABEL: icmp_slt_constant_2048:
6007f817658SLiqin Weng; RV64I:       # %bb.0:
601*1806ce90SCraig Topper; RV64I-NEXT:    li a1, 1
602*1806ce90SCraig Topper; RV64I-NEXT:    slli a1, a1, 11
6037f817658SLiqin Weng; RV64I-NEXT:    slt a0, a0, a1
6047f817658SLiqin Weng; RV64I-NEXT:    ret
6057f817658SLiqin Weng  %1 = icmp slt i64 %a, 2048
6067f817658SLiqin Weng  %2 = zext i1 %1 to i64
6077f817658SLiqin Weng  ret i64 %2
6087f817658SLiqin Weng}
6097f817658SLiqin Weng
6107f817658SLiqin Wengdefine i64 @icmp_slt_constant_neg_2048(i64 %a) nounwind {
6117f817658SLiqin Weng; RV64I-LABEL: icmp_slt_constant_neg_2048:
6127f817658SLiqin Weng; RV64I:       # %bb.0:
6137f817658SLiqin Weng; RV64I-NEXT:    slti a0, a0, -2048
6147f817658SLiqin Weng; RV64I-NEXT:    ret
6157f817658SLiqin Weng  %1 = icmp slt i64 %a, -2048
6167f817658SLiqin Weng  %2 = zext i1 %1 to i64
6177f817658SLiqin Weng  ret i64 %2
6187f817658SLiqin Weng}
6197f817658SLiqin Weng
6207f817658SLiqin Wengdefine i64 @icmp_slt_constant_neg_2049(i64 %a) nounwind {
6217f817658SLiqin Weng; RV64I-LABEL: icmp_slt_constant_neg_2049:
6227f817658SLiqin Weng; RV64I:       # %bb.0:
6237f817658SLiqin Weng; RV64I-NEXT:    lui a1, 1048575
6247f817658SLiqin Weng; RV64I-NEXT:    addiw a1, a1, 2047
6257f817658SLiqin Weng; RV64I-NEXT:    slt a0, a0, a1
6267f817658SLiqin Weng; RV64I-NEXT:    ret
6277f817658SLiqin Weng  %1 = icmp slt i64 %a, -2049
6287f817658SLiqin Weng  %2 = zext i1 %1 to i64
6297f817658SLiqin Weng  ret i64 %2
6307f817658SLiqin Weng}
6317f817658SLiqin Weng
6327f817658SLiqin Wengdefine i64 @icmp_sle(i64 %a, i64 %b) nounwind {
6337f817658SLiqin Weng; RV64I-LABEL: icmp_sle:
6347f817658SLiqin Weng; RV64I:       # %bb.0:
6357f817658SLiqin Weng; RV64I-NEXT:    slt a0, a1, a0
6367f817658SLiqin Weng; RV64I-NEXT:    xori a0, a0, 1
6377f817658SLiqin Weng; RV64I-NEXT:    ret
6387f817658SLiqin Weng  %1 = icmp sle i64 %a, %b
6397f817658SLiqin Weng  %2 = zext i1 %1 to i64
6407f817658SLiqin Weng  ret i64 %2
6417f817658SLiqin Weng}
6427f817658SLiqin Weng
6437f817658SLiqin Wengdefine i64 @icmp_sle_constant_zero(i64 %a) nounwind {
6447f817658SLiqin Weng; RV64I-LABEL: icmp_sle_constant_zero:
6457f817658SLiqin Weng; RV64I:       # %bb.0:
6467f817658SLiqin Weng; RV64I-NEXT:    slti a0, a0, 1
6477f817658SLiqin Weng; RV64I-NEXT:    ret
6487f817658SLiqin Weng  %1 = icmp sle i64 %a, 0
6497f817658SLiqin Weng  %2 = zext i1 %1 to i64
6507f817658SLiqin Weng  ret i64 %2
6517f817658SLiqin Weng}
6527f817658SLiqin Weng
6537f817658SLiqin Wengdefine i64 @icmp_sle_constant_2046(i64 %a) nounwind {
6547f817658SLiqin Weng; RV64I-LABEL: icmp_sle_constant_2046:
6557f817658SLiqin Weng; RV64I:       # %bb.0:
6567f817658SLiqin Weng; RV64I-NEXT:    slti a0, a0, 2047
6577f817658SLiqin Weng; RV64I-NEXT:    ret
6587f817658SLiqin Weng  %1 = icmp sle i64 %a, 2046
6597f817658SLiqin Weng  %2 = zext i1 %1 to i64
6607f817658SLiqin Weng  ret i64 %2
6617f817658SLiqin Weng}
6627f817658SLiqin Weng
6637f817658SLiqin Wengdefine i64 @icmp_sle_constant_2047(i64 %a) nounwind {
6647f817658SLiqin Weng; RV64I-LABEL: icmp_sle_constant_2047:
6657f817658SLiqin Weng; RV64I:       # %bb.0:
666*1806ce90SCraig Topper; RV64I-NEXT:    li a1, 1
667*1806ce90SCraig Topper; RV64I-NEXT:    slli a1, a1, 11
6687f817658SLiqin Weng; RV64I-NEXT:    slt a0, a0, a1
6697f817658SLiqin Weng; RV64I-NEXT:    ret
6707f817658SLiqin Weng  %1 = icmp sle i64 %a, 2047
6717f817658SLiqin Weng  %2 = zext i1 %1 to i64
6727f817658SLiqin Weng  ret i64 %2
6737f817658SLiqin Weng}
6747f817658SLiqin Weng
6757f817658SLiqin Wengdefine i64 @icmp_sle_constant_neg_2049(i64 %a) nounwind {
6767f817658SLiqin Weng; RV64I-LABEL: icmp_sle_constant_neg_2049:
6777f817658SLiqin Weng; RV64I:       # %bb.0:
6787f817658SLiqin Weng; RV64I-NEXT:    slti a0, a0, -2048
6797f817658SLiqin Weng; RV64I-NEXT:    ret
6807f817658SLiqin Weng  %1 = icmp sle i64 %a, -2049
6817f817658SLiqin Weng  %2 = zext i1 %1 to i64
6827f817658SLiqin Weng  ret i64 %2
6837f817658SLiqin Weng}
6847f817658SLiqin Weng
6857f817658SLiqin Wengdefine i64 @icmp_sle_constant_neg_2050(i64 %a) nounwind {
6867f817658SLiqin Weng; RV64I-LABEL: icmp_sle_constant_neg_2050:
6877f817658SLiqin Weng; RV64I:       # %bb.0:
6887f817658SLiqin Weng; RV64I-NEXT:    lui a1, 1048575
6897f817658SLiqin Weng; RV64I-NEXT:    addiw a1, a1, 2047
6907f817658SLiqin Weng; RV64I-NEXT:    slt a0, a0, a1
6917f817658SLiqin Weng; RV64I-NEXT:    ret
6927f817658SLiqin Weng  %1 = icmp sle i64 %a, -2050
6937f817658SLiqin Weng  %2 = zext i1 %1 to i64
6947f817658SLiqin Weng  ret i64 %2
6957f817658SLiqin Weng}
696464b3a9dSCraig Topper
697464b3a9dSCraig Topperdefine i64 @icmp_eq_zext_inreg_small_constant(i64 %a) nounwind {
698464b3a9dSCraig Topper; RV64I-LABEL: icmp_eq_zext_inreg_small_constant:
699464b3a9dSCraig Topper; RV64I:       # %bb.0:
7000b027528SCraig Topper; RV64I-NEXT:    sext.w a0, a0
701464b3a9dSCraig Topper; RV64I-NEXT:    addi a0, a0, -123
702464b3a9dSCraig Topper; RV64I-NEXT:    seqz a0, a0
703464b3a9dSCraig Topper; RV64I-NEXT:    ret
704464b3a9dSCraig Topper  %1 = and i64 %a, 4294967295
705464b3a9dSCraig Topper  %2 = icmp eq i64 %1, 123
706464b3a9dSCraig Topper  %3 = zext i1 %2 to i64
707464b3a9dSCraig Topper  ret i64 %3
708464b3a9dSCraig Topper}
709464b3a9dSCraig Topper
710464b3a9dSCraig Topperdefine i64 @icmp_eq_zext_inreg_large_constant(i64 %a) nounwind {
711464b3a9dSCraig Topper; RV64I-LABEL: icmp_eq_zext_inreg_large_constant:
712464b3a9dSCraig Topper; RV64I:       # %bb.0:
7130b027528SCraig Topper; RV64I-NEXT:    sext.w a0, a0
7140b027528SCraig Topper; RV64I-NEXT:    lui a1, 563901
7150b027528SCraig Topper; RV64I-NEXT:    addiw a1, a1, -529
716464b3a9dSCraig Topper; RV64I-NEXT:    xor a0, a0, a1
717464b3a9dSCraig Topper; RV64I-NEXT:    seqz a0, a0
718464b3a9dSCraig Topper; RV64I-NEXT:    ret
719464b3a9dSCraig Topper  %1 = and i64 %a, 4294967295
720464b3a9dSCraig Topper  %2 = icmp eq i64 %1, 2309737967
721464b3a9dSCraig Topper  %3 = zext i1 %2 to i64
722464b3a9dSCraig Topper  ret i64 %3
723464b3a9dSCraig Topper}
724464b3a9dSCraig Topper
725464b3a9dSCraig Topperdefine i64 @icmp_ne_zext_inreg_small_constant(i64 %a) nounwind {
726464b3a9dSCraig Topper; RV64I-LABEL: icmp_ne_zext_inreg_small_constant:
727464b3a9dSCraig Topper; RV64I:       # %bb.0:
7280b027528SCraig Topper; RV64I-NEXT:    sext.w a0, a0
729464b3a9dSCraig Topper; RV64I-NEXT:    snez a0, a0
730464b3a9dSCraig Topper; RV64I-NEXT:    ret
731464b3a9dSCraig Topper  %1 = and i64 %a, 4294967295
732464b3a9dSCraig Topper  %2 = icmp ne i64 %1, 0
733464b3a9dSCraig Topper  %3 = zext i1 %2 to i64
734464b3a9dSCraig Topper  ret i64 %3
735464b3a9dSCraig Topper}
736464b3a9dSCraig Topper
737464b3a9dSCraig Topperdefine i64 @icmp_ne_zext_inreg_large_constant(i64 %a) nounwind {
738464b3a9dSCraig Topper; RV64I-LABEL: icmp_ne_zext_inreg_large_constant:
739464b3a9dSCraig Topper; RV64I:       # %bb.0:
7400b027528SCraig Topper; RV64I-NEXT:    sext.w a0, a0
7410b027528SCraig Topper; RV64I-NEXT:    addi a0, a0, 2
742464b3a9dSCraig Topper; RV64I-NEXT:    snez a0, a0
743464b3a9dSCraig Topper; RV64I-NEXT:    ret
744464b3a9dSCraig Topper  %1 = and i64 %a, 4294967295
745464b3a9dSCraig Topper  %2 = icmp ne i64 %1, 4294967294
746464b3a9dSCraig Topper  %3 = zext i1 %2 to i64
747464b3a9dSCraig Topper  ret i64 %3
748464b3a9dSCraig Topper}
74953d560b2SCraig Topper
75053d560b2SCraig Topper; This used to trigger an infinite loop where we toggled between 'and' and
75153d560b2SCraig Topper; 'sext_inreg'.
75253d560b2SCraig Topperdefine i64 @icmp_ne_zext_inreg_umin(i64 %a) nounwind {
75353d560b2SCraig Topper; RV64I-LABEL: icmp_ne_zext_inreg_umin:
75453d560b2SCraig Topper; RV64I:       # %bb.0:
75553d560b2SCraig Topper; RV64I-NEXT:    lui a1, 30141
75653d560b2SCraig Topper; RV64I-NEXT:    addiw a1, a1, -747
757e493944fSCraig Topper; RV64I-NEXT:    bltu a0, a1, .LBB67_2
75853d560b2SCraig Topper; RV64I-NEXT:  # %bb.1:
75953d560b2SCraig Topper; RV64I-NEXT:    mv a0, a1
760e493944fSCraig Topper; RV64I-NEXT:  .LBB67_2:
76153d560b2SCraig Topper; RV64I-NEXT:    addi a0, a0, -123
76253d560b2SCraig Topper; RV64I-NEXT:    snez a0, a0
76353d560b2SCraig Topper; RV64I-NEXT:    ret
76453d560b2SCraig Topper  %1 = call i64 @llvm.umin.i64(i64 %a, i64 123456789)
76553d560b2SCraig Topper  %2 = and i64 %1, 4294967295
76653d560b2SCraig Topper  %3 = icmp ne i64 %2, 123
76753d560b2SCraig Topper  %4 = zext i1 %3 to i64
76853d560b2SCraig Topper  ret i64 %4
76953d560b2SCraig Topper}
77053d560b2SCraig Topperdeclare i64 @llvm.umin.i64(i64, i64)
771