17801d796SDavid Green; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2a27ae8aaSShivam Gupta; RUN: llc -mtriple=riscv32 %s -o - | FileCheck %s --check-prefix=RV32 3a27ae8aaSShivam Gupta; RUN: llc -mtriple=riscv64 %s -o - | FileCheck %s --check-prefix=RV64 47801d796SDavid Green 57801d796SDavid Greendefine i32 @xori64i32(i64 %a) { 6a27ae8aaSShivam Gupta; RV32-LABEL: xori64i32: 7a27ae8aaSShivam Gupta; RV32: # %bb.0: 8a8c79121SCraig Topper; RV32-NEXT: srai a1, a1, 31 9a8c79121SCraig Topper; RV32-NEXT: lui a0, 524288 10a8c79121SCraig Topper; RV32-NEXT: addi a0, a0, -1 11a8c79121SCraig Topper; RV32-NEXT: xor a0, a1, a0 12a27ae8aaSShivam Gupta; RV32-NEXT: ret 137801d796SDavid Green; 14a27ae8aaSShivam Gupta; RV64-LABEL: xori64i32: 15a27ae8aaSShivam Gupta; RV64: # %bb.0: 16a27ae8aaSShivam Gupta; RV64-NEXT: srai a0, a0, 63 17a27ae8aaSShivam Gupta; RV64-NEXT: lui a1, 524288 18a27ae8aaSShivam Gupta; RV64-NEXT: addiw a1, a1, -1 19a27ae8aaSShivam Gupta; RV64-NEXT: xor a0, a0, a1 20a27ae8aaSShivam Gupta; RV64-NEXT: ret 217801d796SDavid Green %shr4 = ashr i64 %a, 63 227801d796SDavid Green %conv5 = trunc i64 %shr4 to i32 237801d796SDavid Green %xor = xor i32 %conv5, 2147483647 247801d796SDavid Green ret i32 %xor 257801d796SDavid Green} 267801d796SDavid Green 277801d796SDavid Greendefine i64 @selecti64i64(i64 %a) { 28a27ae8aaSShivam Gupta; RV32-LABEL: selecti64i64: 29a27ae8aaSShivam Gupta; RV32: # %bb.0: 30a27ae8aaSShivam Gupta; RV32-NEXT: srai a1, a1, 31 31a27ae8aaSShivam Gupta; RV32-NEXT: lui a0, 524288 32a27ae8aaSShivam Gupta; RV32-NEXT: addi a0, a0, -1 33a27ae8aaSShivam Gupta; RV32-NEXT: xor a0, a1, a0 34a27ae8aaSShivam Gupta; RV32-NEXT: ret 357801d796SDavid Green; 36a27ae8aaSShivam Gupta; RV64-LABEL: selecti64i64: 37a27ae8aaSShivam Gupta; RV64: # %bb.0: 38a27ae8aaSShivam Gupta; RV64-NEXT: srai a0, a0, 63 39a27ae8aaSShivam Gupta; RV64-NEXT: lui a1, 524288 40a27ae8aaSShivam Gupta; RV64-NEXT: addiw a1, a1, -1 41a27ae8aaSShivam Gupta; RV64-NEXT: xor a0, a0, a1 42a27ae8aaSShivam Gupta; RV64-NEXT: ret 437801d796SDavid Green %c = icmp sgt i64 %a, -1 447801d796SDavid Green %s = select i1 %c, i64 2147483647, i64 -2147483648 457801d796SDavid Green ret i64 %s 467801d796SDavid Green} 477801d796SDavid Green 487801d796SDavid Greendefine i32 @selecti64i32(i64 %a) { 49a27ae8aaSShivam Gupta; RV32-LABEL: selecti64i32: 50a27ae8aaSShivam Gupta; RV32: # %bb.0: 51d660c0d7SLiqin Weng; RV32-NEXT: slti a0, a1, 0 52d660c0d7SLiqin Weng; RV32-NEXT: xori a0, a0, 1 53a27ae8aaSShivam Gupta; RV32-NEXT: lui a1, 524288 54a27ae8aaSShivam Gupta; RV32-NEXT: sub a0, a1, a0 55a27ae8aaSShivam Gupta; RV32-NEXT: ret 567801d796SDavid Green; 57a27ae8aaSShivam Gupta; RV64-LABEL: selecti64i32: 58a27ae8aaSShivam Gupta; RV64: # %bb.0: 59a27ae8aaSShivam Gupta; RV64-NEXT: srai a0, a0, 63 60a27ae8aaSShivam Gupta; RV64-NEXT: lui a1, 524288 61a27ae8aaSShivam Gupta; RV64-NEXT: addiw a1, a1, -1 62a27ae8aaSShivam Gupta; RV64-NEXT: xor a0, a0, a1 63a27ae8aaSShivam Gupta; RV64-NEXT: ret 647801d796SDavid Green %c = icmp sgt i64 %a, -1 657801d796SDavid Green %s = select i1 %c, i32 2147483647, i32 -2147483648 667801d796SDavid Green ret i32 %s 677801d796SDavid Green} 687801d796SDavid Green 697801d796SDavid Greendefine i64 @selecti32i64(i32 %a) { 70a27ae8aaSShivam Gupta; RV32-LABEL: selecti32i64: 71a27ae8aaSShivam Gupta; RV32: # %bb.0: 72a27ae8aaSShivam Gupta; RV32-NEXT: srai a1, a0, 31 73a27ae8aaSShivam Gupta; RV32-NEXT: lui a0, 524288 74a27ae8aaSShivam Gupta; RV32-NEXT: addi a0, a0, -1 75a27ae8aaSShivam Gupta; RV32-NEXT: xor a0, a1, a0 76a27ae8aaSShivam Gupta; RV32-NEXT: ret 777801d796SDavid Green; 78a27ae8aaSShivam Gupta; RV64-LABEL: selecti32i64: 79a27ae8aaSShivam Gupta; RV64: # %bb.0: 80a27ae8aaSShivam Gupta; RV64-NEXT: sraiw a0, a0, 31 81a27ae8aaSShivam Gupta; RV64-NEXT: lui a1, 524288 82a27ae8aaSShivam Gupta; RV64-NEXT: addiw a1, a1, -1 83a27ae8aaSShivam Gupta; RV64-NEXT: xor a0, a0, a1 84a27ae8aaSShivam Gupta; RV64-NEXT: ret 857801d796SDavid Green %c = icmp sgt i32 %a, -1 867801d796SDavid Green %s = select i1 %c, i64 2147483647, i64 -2147483648 877801d796SDavid Green ret i64 %s 887801d796SDavid Green} 897801d796SDavid Green 907801d796SDavid Green 917801d796SDavid Green 927801d796SDavid Greendefine i8 @xori32i8(i32 %a) { 93a27ae8aaSShivam Gupta; RV32-LABEL: xori32i8: 94a27ae8aaSShivam Gupta; RV32: # %bb.0: 95a27ae8aaSShivam Gupta; RV32-NEXT: srai a0, a0, 31 96a27ae8aaSShivam Gupta; RV32-NEXT: xori a0, a0, 84 97a27ae8aaSShivam Gupta; RV32-NEXT: ret 987801d796SDavid Green; 99a27ae8aaSShivam Gupta; RV64-LABEL: xori32i8: 100a27ae8aaSShivam Gupta; RV64: # %bb.0: 101a27ae8aaSShivam Gupta; RV64-NEXT: sraiw a0, a0, 31 102a27ae8aaSShivam Gupta; RV64-NEXT: xori a0, a0, 84 103a27ae8aaSShivam Gupta; RV64-NEXT: ret 1047801d796SDavid Green %shr4 = ashr i32 %a, 31 1057801d796SDavid Green %conv5 = trunc i32 %shr4 to i8 1067801d796SDavid Green %xor = xor i8 %conv5, 84 1077801d796SDavid Green ret i8 %xor 1087801d796SDavid Green} 1097801d796SDavid Green 1107801d796SDavid Greendefine i32 @selecti32i32(i32 %a) { 111a27ae8aaSShivam Gupta; RV32-LABEL: selecti32i32: 112a27ae8aaSShivam Gupta; RV32: # %bb.0: 113a27ae8aaSShivam Gupta; RV32-NEXT: srai a0, a0, 31 114a27ae8aaSShivam Gupta; RV32-NEXT: xori a0, a0, 84 115a27ae8aaSShivam Gupta; RV32-NEXT: ret 1167801d796SDavid Green; 117a27ae8aaSShivam Gupta; RV64-LABEL: selecti32i32: 118a27ae8aaSShivam Gupta; RV64: # %bb.0: 119a27ae8aaSShivam Gupta; RV64-NEXT: sraiw a0, a0, 31 120a27ae8aaSShivam Gupta; RV64-NEXT: xori a0, a0, 84 121a27ae8aaSShivam Gupta; RV64-NEXT: ret 1227801d796SDavid Green %c = icmp sgt i32 %a, -1 1237801d796SDavid Green %s = select i1 %c, i32 84, i32 -85 1247801d796SDavid Green ret i32 %s 1257801d796SDavid Green} 1267801d796SDavid Green 1277801d796SDavid Greendefine i8 @selecti32i8(i32 %a) { 128a27ae8aaSShivam Gupta; RV32-LABEL: selecti32i8: 129a27ae8aaSShivam Gupta; RV32: # %bb.0: 130a27ae8aaSShivam Gupta; RV32-NEXT: srai a0, a0, 31 131a27ae8aaSShivam Gupta; RV32-NEXT: xori a0, a0, 84 132a27ae8aaSShivam Gupta; RV32-NEXT: ret 1337801d796SDavid Green; 134a27ae8aaSShivam Gupta; RV64-LABEL: selecti32i8: 135a27ae8aaSShivam Gupta; RV64: # %bb.0: 136a27ae8aaSShivam Gupta; RV64-NEXT: sraiw a0, a0, 31 137a27ae8aaSShivam Gupta; RV64-NEXT: xori a0, a0, 84 138a27ae8aaSShivam Gupta; RV64-NEXT: ret 1397801d796SDavid Green %c = icmp sgt i32 %a, -1 1407801d796SDavid Green %s = select i1 %c, i8 84, i8 -85 1417801d796SDavid Green ret i8 %s 1427801d796SDavid Green} 1437801d796SDavid Green 1447801d796SDavid Greendefine i32 @selecti8i32(i8 %a) { 145a27ae8aaSShivam Gupta; RV32-LABEL: selecti8i32: 146a27ae8aaSShivam Gupta; RV32: # %bb.0: 147a27ae8aaSShivam Gupta; RV32-NEXT: slli a0, a0, 24 148a27ae8aaSShivam Gupta; RV32-NEXT: srai a0, a0, 31 149a27ae8aaSShivam Gupta; RV32-NEXT: xori a0, a0, 84 150a27ae8aaSShivam Gupta; RV32-NEXT: ret 1517801d796SDavid Green; 152a27ae8aaSShivam Gupta; RV64-LABEL: selecti8i32: 153a27ae8aaSShivam Gupta; RV64: # %bb.0: 154a27ae8aaSShivam Gupta; RV64-NEXT: slli a0, a0, 56 155a27ae8aaSShivam Gupta; RV64-NEXT: srai a0, a0, 63 156a27ae8aaSShivam Gupta; RV64-NEXT: xori a0, a0, 84 157a27ae8aaSShivam Gupta; RV64-NEXT: ret 1587801d796SDavid Green %c = icmp sgt i8 %a, -1 1597801d796SDavid Green %s = select i1 %c, i32 84, i32 -85 1607801d796SDavid Green ret i32 %s 1617801d796SDavid Green} 1627801d796SDavid Green 1637801d796SDavid Greendefine i32 @icmpasreq(i32 %input, i32 %a, i32 %b) { 164a27ae8aaSShivam Gupta; RV32-LABEL: icmpasreq: 165a27ae8aaSShivam Gupta; RV32: # %bb.0: 166a27ae8aaSShivam Gupta; RV32-NEXT: bltz a0, .LBB8_2 167a27ae8aaSShivam Gupta; RV32-NEXT: # %bb.1: 168a27ae8aaSShivam Gupta; RV32-NEXT: mv a1, a2 169a27ae8aaSShivam Gupta; RV32-NEXT: .LBB8_2: 170a27ae8aaSShivam Gupta; RV32-NEXT: mv a0, a1 171a27ae8aaSShivam Gupta; RV32-NEXT: ret 1727801d796SDavid Green; 173a27ae8aaSShivam Gupta; RV64-LABEL: icmpasreq: 174a27ae8aaSShivam Gupta; RV64: # %bb.0: 175a27ae8aaSShivam Gupta; RV64-NEXT: sext.w a3, a0 176a27ae8aaSShivam Gupta; RV64-NEXT: mv a0, a1 177a27ae8aaSShivam Gupta; RV64-NEXT: bltz a3, .LBB8_2 178a27ae8aaSShivam Gupta; RV64-NEXT: # %bb.1: 179a27ae8aaSShivam Gupta; RV64-NEXT: mv a0, a2 180a27ae8aaSShivam Gupta; RV64-NEXT: .LBB8_2: 181a27ae8aaSShivam Gupta; RV64-NEXT: ret 1827801d796SDavid Green %sh = ashr i32 %input, 31 1837801d796SDavid Green %c = icmp eq i32 %sh, -1 1847801d796SDavid Green %s = select i1 %c, i32 %a, i32 %b 1857801d796SDavid Green ret i32 %s 1867801d796SDavid Green} 1877801d796SDavid Green 1887801d796SDavid Greendefine i32 @icmpasrne(i32 %input, i32 %a, i32 %b) { 189a27ae8aaSShivam Gupta; RV32-LABEL: icmpasrne: 190a27ae8aaSShivam Gupta; RV32: # %bb.0: 191a27ae8aaSShivam Gupta; RV32-NEXT: bgez a0, .LBB9_2 192a27ae8aaSShivam Gupta; RV32-NEXT: # %bb.1: 193a27ae8aaSShivam Gupta; RV32-NEXT: mv a1, a2 194a27ae8aaSShivam Gupta; RV32-NEXT: .LBB9_2: 195a27ae8aaSShivam Gupta; RV32-NEXT: mv a0, a1 196a27ae8aaSShivam Gupta; RV32-NEXT: ret 1977801d796SDavid Green; 198a27ae8aaSShivam Gupta; RV64-LABEL: icmpasrne: 199a27ae8aaSShivam Gupta; RV64: # %bb.0: 200a27ae8aaSShivam Gupta; RV64-NEXT: sext.w a3, a0 201a27ae8aaSShivam Gupta; RV64-NEXT: mv a0, a1 202a27ae8aaSShivam Gupta; RV64-NEXT: bgez a3, .LBB9_2 203a27ae8aaSShivam Gupta; RV64-NEXT: # %bb.1: 204a27ae8aaSShivam Gupta; RV64-NEXT: mv a0, a2 205a27ae8aaSShivam Gupta; RV64-NEXT: .LBB9_2: 206a27ae8aaSShivam Gupta; RV64-NEXT: ret 2077801d796SDavid Green %sh = ashr i32 %input, 31 2087801d796SDavid Green %c = icmp ne i32 %sh, -1 2097801d796SDavid Green %s = select i1 %c, i32 %a, i32 %b 2107801d796SDavid Green ret i32 %s 2117801d796SDavid Green} 2127801d796SDavid Green 2137801d796SDavid Greendefine i32 @oneusecmp(i32 %a, i32 %b, i32 %d) { 214a27ae8aaSShivam Gupta; RV32-LABEL: oneusecmp: 215a27ae8aaSShivam Gupta; RV32: # %bb.0: 216a27ae8aaSShivam Gupta; RV32-NEXT: srai a3, a0, 31 217a27ae8aaSShivam Gupta; RV32-NEXT: xori a3, a3, 127 218a27ae8aaSShivam Gupta; RV32-NEXT: bltz a0, .LBB10_2 219a27ae8aaSShivam Gupta; RV32-NEXT: # %bb.1: 220a27ae8aaSShivam Gupta; RV32-NEXT: mv a2, a1 221a27ae8aaSShivam Gupta; RV32-NEXT: .LBB10_2: 222a27ae8aaSShivam Gupta; RV32-NEXT: add a0, a3, a2 223a27ae8aaSShivam Gupta; RV32-NEXT: ret 2247801d796SDavid Green; 225a27ae8aaSShivam Gupta; RV64-LABEL: oneusecmp: 226a27ae8aaSShivam Gupta; RV64: # %bb.0: 227a27ae8aaSShivam Gupta; RV64-NEXT: sext.w a3, a0 228*6357b637SCraig Topper; RV64-NEXT: sraiw a0, a0, 31 229a27ae8aaSShivam Gupta; RV64-NEXT: xori a0, a0, 127 230a27ae8aaSShivam Gupta; RV64-NEXT: bltz a3, .LBB10_2 231a27ae8aaSShivam Gupta; RV64-NEXT: # %bb.1: 232a27ae8aaSShivam Gupta; RV64-NEXT: mv a2, a1 233a27ae8aaSShivam Gupta; RV64-NEXT: .LBB10_2: 234a27ae8aaSShivam Gupta; RV64-NEXT: addw a0, a0, a2 235a27ae8aaSShivam Gupta; RV64-NEXT: ret 2367801d796SDavid Green %c = icmp sle i32 %a, -1 2377801d796SDavid Green %s = select i1 %c, i32 -128, i32 127 2387801d796SDavid Green %s2 = select i1 %c, i32 %d, i32 %b 2397801d796SDavid Green %x = add i32 %s, %s2 2407801d796SDavid Green ret i32 %x 2417801d796SDavid Green} 242