xref: /llvm-project/llvm/test/CodeGen/RISCV/select-constant-xor.ll (revision 6357b6373525f2c6154500727cc55bda2ee6910f)
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