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