xref: /llvm-project/llvm/test/CodeGen/RISCV/condops.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
195075d3dSAlex Bradbury; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2f73844d9SYeting Kuo; RUN: llc -mtriple=riscv32 -target-abi=ilp32f -mattr=+f,+zbs < %s | FileCheck %s -check-prefix=RV32I
3f73844d9SYeting Kuo; RUN: llc -mtriple=riscv64 -target-abi=lp64f -mattr=+f,+zbs < %s | FileCheck %s -check-prefix=RV64I
49bd97fcfSCraig Topper; RUN: llc -mtriple=riscv32 -target-abi=ilp32f -mattr=+f,+zbs,+xventanacondops < %s | FileCheck %s -check-prefix=RV32XVENTANACONDOPS
5f73844d9SYeting Kuo; RUN: llc -mtriple=riscv64 -target-abi=lp64f -mattr=+f,+zbs,+xventanacondops < %s | FileCheck %s -check-prefix=RV64XVENTANACONDOPS
6f73844d9SYeting Kuo; RUN: llc -mtriple=riscv64 -target-abi=lp64f -mattr=+f,+zbs,+xtheadcondmov < %s | FileCheck %s -check-prefix=RV64XTHEADCONDMOV
7d833b9d6SAlex Bradbury; RUN: llc -mtriple=riscv32 -target-abi=ilp32f -mattr=+f,+zbs,+zicond < %s | FileCheck %s -check-prefix=RV32ZICOND
8d833b9d6SAlex Bradbury; RUN: llc -mtriple=riscv64 -target-abi=lp64f -mattr=+f,+zbs,+zicond < %s | FileCheck %s -check-prefix=RV64ZICOND
9f68f04d0SPhilipp Tomsich
10f68f04d0SPhilipp Tomsichdefine i64 @zero1(i64 %rs1, i1 zeroext %rc) {
1195075d3dSAlex Bradbury; RV32I-LABEL: zero1:
1295075d3dSAlex Bradbury; RV32I:       # %bb.0:
1395075d3dSAlex Bradbury; RV32I-NEXT:    neg a2, a2
1495075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a2, a0
1595075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a2, a1
1695075d3dSAlex Bradbury; RV32I-NEXT:    ret
1795075d3dSAlex Bradbury;
1895075d3dSAlex Bradbury; RV64I-LABEL: zero1:
1995075d3dSAlex Bradbury; RV64I:       # %bb.0:
2095075d3dSAlex Bradbury; RV64I-NEXT:    neg a1, a1
2195075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a1, a0
2295075d3dSAlex Bradbury; RV64I-NEXT:    ret
2395075d3dSAlex Bradbury;
249bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero1:
259bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
269bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a0, a0, a2
279bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
289bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
299bd97fcfSCraig Topper;
30f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero1:
31f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
32f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a0, a1
33f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
34f68f04d0SPhilipp Tomsich;
35f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero1:
36f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
37f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a0, zero, a1
38f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
39a755e80eSAlex Bradbury;
40a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero1:
41a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
42a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a0, a0, a2
43a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
44a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
45a755e80eSAlex Bradbury;
46a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero1:
47a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
48a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a0, a1
49a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
50f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 0
51f68f04d0SPhilipp Tomsich  ret i64 %sel
52f68f04d0SPhilipp Tomsich}
53f68f04d0SPhilipp Tomsich
54f68f04d0SPhilipp Tomsichdefine i64 @zero2(i64 %rs1, i1 zeroext %rc) {
5595075d3dSAlex Bradbury; RV32I-LABEL: zero2:
5695075d3dSAlex Bradbury; RV32I:       # %bb.0:
5795075d3dSAlex Bradbury; RV32I-NEXT:    addi a2, a2, -1
5895075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a2, a0
5995075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a2, a1
6095075d3dSAlex Bradbury; RV32I-NEXT:    ret
6195075d3dSAlex Bradbury;
6295075d3dSAlex Bradbury; RV64I-LABEL: zero2:
6395075d3dSAlex Bradbury; RV64I:       # %bb.0:
6495075d3dSAlex Bradbury; RV64I-NEXT:    addi a1, a1, -1
6595075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a1, a0
6695075d3dSAlex Bradbury; RV64I-NEXT:    ret
6795075d3dSAlex Bradbury;
689bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero2:
699bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
709bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a2
719bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a1, a2
729bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
739bd97fcfSCraig Topper;
74f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero2:
75f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
76f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a1
77f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
78f68f04d0SPhilipp Tomsich;
79f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero2:
80f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
81f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a0, zero, a1
82f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
83a755e80eSAlex Bradbury;
84a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero2:
85a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
86a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a0, a0, a2
87a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a1, a1, a2
88a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
89a755e80eSAlex Bradbury;
90a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero2:
91a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
92a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a0, a1
93a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
94f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 0, i64 %rs1
95f68f04d0SPhilipp Tomsich  ret i64 %sel
96f68f04d0SPhilipp Tomsich}
97f68f04d0SPhilipp Tomsich
98f73844d9SYeting Kuodefine i64 @zero_singlebit1(i64 %rs1, i64 %rs2) {
99f73844d9SYeting Kuo; RV32I-LABEL: zero_singlebit1:
100f73844d9SYeting Kuo; RV32I:       # %bb.0:
101f73844d9SYeting Kuo; RV32I-NEXT:    bexti a2, a2, 12
102f73844d9SYeting Kuo; RV32I-NEXT:    addi a2, a2, -1
103f73844d9SYeting Kuo; RV32I-NEXT:    and a0, a2, a0
104f73844d9SYeting Kuo; RV32I-NEXT:    and a1, a2, a1
105f73844d9SYeting Kuo; RV32I-NEXT:    ret
106f73844d9SYeting Kuo;
107f73844d9SYeting Kuo; RV64I-LABEL: zero_singlebit1:
108f73844d9SYeting Kuo; RV64I:       # %bb.0:
109f73844d9SYeting Kuo; RV64I-NEXT:    bexti a1, a1, 12
110f73844d9SYeting Kuo; RV64I-NEXT:    addi a1, a1, -1
111f73844d9SYeting Kuo; RV64I-NEXT:    and a0, a1, a0
112f73844d9SYeting Kuo; RV64I-NEXT:    ret
113f73844d9SYeting Kuo;
1149bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero_singlebit1:
1159bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
1169bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    bexti a2, a2, 12
1179bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a2
1189bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a1, a2
1199bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
1209bd97fcfSCraig Topper;
121f73844d9SYeting Kuo; RV64XVENTANACONDOPS-LABEL: zero_singlebit1:
122f73844d9SYeting Kuo; RV64XVENTANACONDOPS:       # %bb.0:
123f73844d9SYeting Kuo; RV64XVENTANACONDOPS-NEXT:    bexti a1, a1, 12
124f73844d9SYeting Kuo; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a1
125f73844d9SYeting Kuo; RV64XVENTANACONDOPS-NEXT:    ret
126f73844d9SYeting Kuo;
127f73844d9SYeting Kuo; RV64XTHEADCONDMOV-LABEL: zero_singlebit1:
128f73844d9SYeting Kuo; RV64XTHEADCONDMOV:       # %bb.0:
129f73844d9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    lui a2, 1
130f73844d9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    and a1, a1, a2
131f73844d9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    th.mvnez a0, zero, a1
132f73844d9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    ret
133f73844d9SYeting Kuo;
134f73844d9SYeting Kuo; RV32ZICOND-LABEL: zero_singlebit1:
135f73844d9SYeting Kuo; RV32ZICOND:       # %bb.0:
136f73844d9SYeting Kuo; RV32ZICOND-NEXT:    bexti a2, a2, 12
137f73844d9SYeting Kuo; RV32ZICOND-NEXT:    czero.nez a0, a0, a2
138f73844d9SYeting Kuo; RV32ZICOND-NEXT:    czero.nez a1, a1, a2
139f73844d9SYeting Kuo; RV32ZICOND-NEXT:    ret
140f73844d9SYeting Kuo;
141f73844d9SYeting Kuo; RV64ZICOND-LABEL: zero_singlebit1:
142f73844d9SYeting Kuo; RV64ZICOND:       # %bb.0:
143f73844d9SYeting Kuo; RV64ZICOND-NEXT:    bexti a1, a1, 12
144f73844d9SYeting Kuo; RV64ZICOND-NEXT:    czero.nez a0, a0, a1
145f73844d9SYeting Kuo; RV64ZICOND-NEXT:    ret
146f73844d9SYeting Kuo  %and = and i64 %rs2, 4096
147f73844d9SYeting Kuo  %rc = icmp eq i64 %and, 0
148f73844d9SYeting Kuo  %sel = select i1 %rc, i64 %rs1, i64 0
149f73844d9SYeting Kuo  ret i64 %sel
150f73844d9SYeting Kuo}
151f73844d9SYeting Kuo
152f73844d9SYeting Kuodefine i64 @zero_singlebit2(i64 %rs1, i64 %rs2) {
153f73844d9SYeting Kuo; RV32I-LABEL: zero_singlebit2:
154f73844d9SYeting Kuo; RV32I:       # %bb.0:
155f73844d9SYeting Kuo; RV32I-NEXT:    slli a2, a2, 19
156f73844d9SYeting Kuo; RV32I-NEXT:    srai a2, a2, 31
157f73844d9SYeting Kuo; RV32I-NEXT:    and a0, a2, a0
158f73844d9SYeting Kuo; RV32I-NEXT:    and a1, a2, a1
159f73844d9SYeting Kuo; RV32I-NEXT:    ret
160f73844d9SYeting Kuo;
161f73844d9SYeting Kuo; RV64I-LABEL: zero_singlebit2:
162f73844d9SYeting Kuo; RV64I:       # %bb.0:
163f73844d9SYeting Kuo; RV64I-NEXT:    slli a1, a1, 51
164f73844d9SYeting Kuo; RV64I-NEXT:    srai a1, a1, 63
165f73844d9SYeting Kuo; RV64I-NEXT:    and a0, a1, a0
166f73844d9SYeting Kuo; RV64I-NEXT:    ret
167f73844d9SYeting Kuo;
1689bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero_singlebit2:
1699bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
1709bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    bexti a2, a2, 12
1719bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a0, a0, a2
1729bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
1739bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
1749bd97fcfSCraig Topper;
175f73844d9SYeting Kuo; RV64XVENTANACONDOPS-LABEL: zero_singlebit2:
176f73844d9SYeting Kuo; RV64XVENTANACONDOPS:       # %bb.0:
177f35c0f2fSYeting Kuo; RV64XVENTANACONDOPS-NEXT:    bexti a1, a1, 12
178f35c0f2fSYeting Kuo; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a0, a1
179f73844d9SYeting Kuo; RV64XVENTANACONDOPS-NEXT:    ret
180f73844d9SYeting Kuo;
181f73844d9SYeting Kuo; RV64XTHEADCONDMOV-LABEL: zero_singlebit2:
182f73844d9SYeting Kuo; RV64XTHEADCONDMOV:       # %bb.0:
183f73844d9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    slli a1, a1, 51
184f73844d9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    srai a1, a1, 63
185f73844d9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    and a0, a1, a0
186f73844d9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    ret
187f73844d9SYeting Kuo;
188f73844d9SYeting Kuo; RV32ZICOND-LABEL: zero_singlebit2:
189f73844d9SYeting Kuo; RV32ZICOND:       # %bb.0:
190f35c0f2fSYeting Kuo; RV32ZICOND-NEXT:    bexti a2, a2, 12
191f35c0f2fSYeting Kuo; RV32ZICOND-NEXT:    czero.eqz a0, a0, a2
192f35c0f2fSYeting Kuo; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
193f73844d9SYeting Kuo; RV32ZICOND-NEXT:    ret
194f73844d9SYeting Kuo;
195f73844d9SYeting Kuo; RV64ZICOND-LABEL: zero_singlebit2:
196f73844d9SYeting Kuo; RV64ZICOND:       # %bb.0:
197f35c0f2fSYeting Kuo; RV64ZICOND-NEXT:    bexti a1, a1, 12
198f35c0f2fSYeting Kuo; RV64ZICOND-NEXT:    czero.eqz a0, a0, a1
199f73844d9SYeting Kuo; RV64ZICOND-NEXT:    ret
200f73844d9SYeting Kuo  %and = and i64 %rs2, 4096
201f73844d9SYeting Kuo  %rc = icmp eq i64 %and, 0
202f73844d9SYeting Kuo  %sel = select i1 %rc, i64 0, i64 %rs1
203f73844d9SYeting Kuo  ret i64 %sel
204f73844d9SYeting Kuo}
205f73844d9SYeting Kuo
206f68f04d0SPhilipp Tomsichdefine i64 @add1(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
20795075d3dSAlex Bradbury; RV32I-LABEL: add1:
20895075d3dSAlex Bradbury; RV32I:       # %bb.0:
20995075d3dSAlex Bradbury; RV32I-NEXT:    neg a0, a0
21095075d3dSAlex Bradbury; RV32I-NEXT:    and a4, a0, a4
21195075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a0, a3
212*9122c523SPengcheng Wang; RV32I-NEXT:    add a2, a2, a4
21395075d3dSAlex Bradbury; RV32I-NEXT:    add a0, a1, a0
21495075d3dSAlex Bradbury; RV32I-NEXT:    sltu a1, a0, a1
21595075d3dSAlex Bradbury; RV32I-NEXT:    add a1, a2, a1
21695075d3dSAlex Bradbury; RV32I-NEXT:    ret
21795075d3dSAlex Bradbury;
21895075d3dSAlex Bradbury; RV64I-LABEL: add1:
21995075d3dSAlex Bradbury; RV64I:       # %bb.0:
22095075d3dSAlex Bradbury; RV64I-NEXT:    neg a0, a0
22195075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a2
22295075d3dSAlex Bradbury; RV64I-NEXT:    add a0, a1, a0
22395075d3dSAlex Bradbury; RV64I-NEXT:    ret
22495075d3dSAlex Bradbury;
2259bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: add1:
2269bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
2279bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a4, a4, a0
2289bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a0, a3, a0
229*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    add a2, a2, a4
2309bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    add a0, a1, a0
2319bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sltu a1, a0, a1
2329bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    add a1, a2, a1
2339bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
2349bd97fcfSCraig Topper;
235f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: add1:
236f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
237f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a0
238f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    add a0, a1, a0
239f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
240f68f04d0SPhilipp Tomsich;
241f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: add1:
242f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
243f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a2, zero, a0
244f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    add a0, a1, a2
245f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
246a755e80eSAlex Bradbury;
247a755e80eSAlex Bradbury; RV32ZICOND-LABEL: add1:
248a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
24917e2df66SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a4, a4, a0
25017e2df66SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a0, a3, a0
251*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    add a2, a2, a4
25217e2df66SMikhail Gudim; RV32ZICOND-NEXT:    add a0, a1, a0
25317e2df66SMikhail Gudim; RV32ZICOND-NEXT:    sltu a1, a0, a1
25417e2df66SMikhail Gudim; RV32ZICOND-NEXT:    add a1, a2, a1
255a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
256a755e80eSAlex Bradbury;
257a755e80eSAlex Bradbury; RV64ZICOND-LABEL: add1:
258a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
259a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a2, a0
260a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    add a0, a1, a0
261a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
262f68f04d0SPhilipp Tomsich  %add = add i64 %rs1, %rs2
263f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %add, i64 %rs1
264f68f04d0SPhilipp Tomsich  ret i64 %sel
265f68f04d0SPhilipp Tomsich}
266f68f04d0SPhilipp Tomsich
267f68f04d0SPhilipp Tomsichdefine i64 @add2(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
26895075d3dSAlex Bradbury; RV32I-LABEL: add2:
26995075d3dSAlex Bradbury; RV32I:       # %bb.0:
27095075d3dSAlex Bradbury; RV32I-NEXT:    neg a0, a0
27195075d3dSAlex Bradbury; RV32I-NEXT:    and a2, a0, a2
27295075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a0, a1
273*9122c523SPengcheng Wang; RV32I-NEXT:    add a1, a4, a2
27495075d3dSAlex Bradbury; RV32I-NEXT:    add a0, a3, a0
275*9122c523SPengcheng Wang; RV32I-NEXT:    sltu a2, a0, a3
276*9122c523SPengcheng Wang; RV32I-NEXT:    add a1, a1, a2
27795075d3dSAlex Bradbury; RV32I-NEXT:    ret
27895075d3dSAlex Bradbury;
27995075d3dSAlex Bradbury; RV64I-LABEL: add2:
28095075d3dSAlex Bradbury; RV64I:       # %bb.0:
28195075d3dSAlex Bradbury; RV64I-NEXT:    neg a0, a0
28295075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
28395075d3dSAlex Bradbury; RV64I-NEXT:    add a0, a2, a0
28495075d3dSAlex Bradbury; RV64I-NEXT:    ret
28595075d3dSAlex Bradbury;
2869bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: add2:
2879bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
2889bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a2, a2, a0
2899bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a0, a1, a0
290*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    add a1, a4, a2
2919bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    add a0, a3, a0
292*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    sltu a2, a0, a3
293*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    add a1, a1, a2
2949bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
2959bd97fcfSCraig Topper;
296f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: add2:
297f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
298f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a1, a0
299f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    add a0, a2, a0
300f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
301f68f04d0SPhilipp Tomsich;
302f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: add2:
303f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
304f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a0
305f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    add a0, a2, a1
306f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
307a755e80eSAlex Bradbury;
308a755e80eSAlex Bradbury; RV32ZICOND-LABEL: add2:
309a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
31017e2df66SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a0
31117e2df66SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a0, a1, a0
312*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    add a1, a4, a2
31317e2df66SMikhail Gudim; RV32ZICOND-NEXT:    add a0, a3, a0
314*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    sltu a2, a0, a3
315*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    add a1, a1, a2
316a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
317a755e80eSAlex Bradbury;
318a755e80eSAlex Bradbury; RV64ZICOND-LABEL: add2:
319a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
320a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a1, a0
321a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    add a0, a2, a0
322a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
323f68f04d0SPhilipp Tomsich  %add = add i64 %rs1, %rs2
324f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %add, i64 %rs2
325f68f04d0SPhilipp Tomsich  ret i64 %sel
326f68f04d0SPhilipp Tomsich}
327f68f04d0SPhilipp Tomsich
328f68f04d0SPhilipp Tomsichdefine i64 @add3(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
32995075d3dSAlex Bradbury; RV32I-LABEL: add3:
33095075d3dSAlex Bradbury; RV32I:       # %bb.0:
33195075d3dSAlex Bradbury; RV32I-NEXT:    addi a0, a0, -1
33295075d3dSAlex Bradbury; RV32I-NEXT:    and a4, a0, a4
33395075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a0, a3
334*9122c523SPengcheng Wang; RV32I-NEXT:    add a2, a2, a4
33595075d3dSAlex Bradbury; RV32I-NEXT:    add a0, a1, a0
33695075d3dSAlex Bradbury; RV32I-NEXT:    sltu a1, a0, a1
33795075d3dSAlex Bradbury; RV32I-NEXT:    add a1, a2, a1
33895075d3dSAlex Bradbury; RV32I-NEXT:    ret
33995075d3dSAlex Bradbury;
34095075d3dSAlex Bradbury; RV64I-LABEL: add3:
34195075d3dSAlex Bradbury; RV64I:       # %bb.0:
34295075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
34395075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a2
34495075d3dSAlex Bradbury; RV64I-NEXT:    add a0, a1, a0
34595075d3dSAlex Bradbury; RV64I-NEXT:    ret
34695075d3dSAlex Bradbury;
3479bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: add3:
3489bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
3499bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a4, a4, a0
3509bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a3, a0
351*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    add a2, a2, a4
3529bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    add a0, a1, a0
3539bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sltu a1, a0, a1
3549bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    add a1, a2, a1
3559bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
3569bd97fcfSCraig Topper;
357f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: add3:
358f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
359f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a0
360f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    add a0, a1, a0
361f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
362f68f04d0SPhilipp Tomsich;
363f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: add3:
364f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
365f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a2, zero, a0
366f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    add a0, a1, a2
367f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
368a755e80eSAlex Bradbury;
369a755e80eSAlex Bradbury; RV32ZICOND-LABEL: add3:
370a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
37117e2df66SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a4, a4, a0
37217e2df66SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a0, a3, a0
373*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    add a2, a2, a4
37417e2df66SMikhail Gudim; RV32ZICOND-NEXT:    add a0, a1, a0
37517e2df66SMikhail Gudim; RV32ZICOND-NEXT:    sltu a1, a0, a1
37617e2df66SMikhail Gudim; RV32ZICOND-NEXT:    add a1, a2, a1
377a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
378a755e80eSAlex Bradbury;
379a755e80eSAlex Bradbury; RV64ZICOND-LABEL: add3:
380a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
381a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a2, a0
382a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    add a0, a1, a0
383a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
384f68f04d0SPhilipp Tomsich  %add = add i64 %rs1, %rs2
385f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %add
386f68f04d0SPhilipp Tomsich  ret i64 %sel
387f68f04d0SPhilipp Tomsich}
388f68f04d0SPhilipp Tomsich
389f68f04d0SPhilipp Tomsichdefine i64 @add4(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
39095075d3dSAlex Bradbury; RV32I-LABEL: add4:
39195075d3dSAlex Bradbury; RV32I:       # %bb.0:
39295075d3dSAlex Bradbury; RV32I-NEXT:    addi a0, a0, -1
39395075d3dSAlex Bradbury; RV32I-NEXT:    and a2, a0, a2
39495075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a0, a1
395*9122c523SPengcheng Wang; RV32I-NEXT:    add a1, a4, a2
39695075d3dSAlex Bradbury; RV32I-NEXT:    add a0, a3, a0
397*9122c523SPengcheng Wang; RV32I-NEXT:    sltu a2, a0, a3
398*9122c523SPengcheng Wang; RV32I-NEXT:    add a1, a1, a2
39995075d3dSAlex Bradbury; RV32I-NEXT:    ret
40095075d3dSAlex Bradbury;
40195075d3dSAlex Bradbury; RV64I-LABEL: add4:
40295075d3dSAlex Bradbury; RV64I:       # %bb.0:
40395075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
40495075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
40595075d3dSAlex Bradbury; RV64I-NEXT:    add a0, a2, a0
40695075d3dSAlex Bradbury; RV64I-NEXT:    ret
40795075d3dSAlex Bradbury;
4089bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: add4:
4099bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
4109bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a2, a2, a0
4119bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a1, a0
412*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    add a1, a4, a2
4139bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    add a0, a3, a0
414*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    sltu a2, a0, a3
415*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    add a1, a1, a2
4169bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
4179bd97fcfSCraig Topper;
418f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: add4:
419f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
420f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a1, a0
421f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    add a0, a2, a0
422f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
423f68f04d0SPhilipp Tomsich;
424f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: add4:
425f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
426f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a1, zero, a0
427f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    add a0, a2, a1
428f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
429a755e80eSAlex Bradbury;
430a755e80eSAlex Bradbury; RV32ZICOND-LABEL: add4:
431a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
43217e2df66SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a2, a2, a0
43317e2df66SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a0, a1, a0
434*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    add a1, a4, a2
43517e2df66SMikhail Gudim; RV32ZICOND-NEXT:    add a0, a3, a0
436*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    sltu a2, a0, a3
437*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    add a1, a1, a2
438a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
439a755e80eSAlex Bradbury;
440a755e80eSAlex Bradbury; RV64ZICOND-LABEL: add4:
441a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
442a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a1, a0
443a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    add a0, a2, a0
444a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
445f68f04d0SPhilipp Tomsich  %add = add i64 %rs1, %rs2
446f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs2, i64 %add
447f68f04d0SPhilipp Tomsich  ret i64 %sel
448f68f04d0SPhilipp Tomsich}
449f68f04d0SPhilipp Tomsich
450f68f04d0SPhilipp Tomsichdefine i64 @sub1(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
45195075d3dSAlex Bradbury; RV32I-LABEL: sub1:
45295075d3dSAlex Bradbury; RV32I:       # %bb.0:
45395075d3dSAlex Bradbury; RV32I-NEXT:    neg a0, a0
45495075d3dSAlex Bradbury; RV32I-NEXT:    and a3, a0, a3
45595075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a0, a4
456*9122c523SPengcheng Wang; RV32I-NEXT:    sltu a4, a1, a3
45795075d3dSAlex Bradbury; RV32I-NEXT:    sub a2, a2, a0
458*9122c523SPengcheng Wang; RV32I-NEXT:    sub a2, a2, a4
45995075d3dSAlex Bradbury; RV32I-NEXT:    sub a0, a1, a3
46095075d3dSAlex Bradbury; RV32I-NEXT:    mv a1, a2
46195075d3dSAlex Bradbury; RV32I-NEXT:    ret
46295075d3dSAlex Bradbury;
46395075d3dSAlex Bradbury; RV64I-LABEL: sub1:
46495075d3dSAlex Bradbury; RV64I:       # %bb.0:
46595075d3dSAlex Bradbury; RV64I-NEXT:    neg a0, a0
46695075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a2
46795075d3dSAlex Bradbury; RV64I-NEXT:    sub a0, a1, a0
46895075d3dSAlex Bradbury; RV64I-NEXT:    ret
46995075d3dSAlex Bradbury;
4709bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: sub1:
4719bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
4729bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a3, a3, a0
4739bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a0, a4, a0
474*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    sltu a4, a1, a3
4759bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sub a2, a2, a0
476*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    sub a2, a2, a4
4779bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sub a0, a1, a3
4789bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    mv a1, a2
4799bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
4809bd97fcfSCraig Topper;
481f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: sub1:
482f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
483f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a0
484f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    sub a0, a1, a0
485f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
486f68f04d0SPhilipp Tomsich;
487f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: sub1:
488f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
489f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a2, zero, a0
490f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    sub a0, a1, a2
491f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
492a755e80eSAlex Bradbury;
493a755e80eSAlex Bradbury; RV32ZICOND-LABEL: sub1:
494a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
49517e2df66SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a3, a3, a0
49617e2df66SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a0, a4, a0
497*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    sltu a4, a1, a3
49817e2df66SMikhail Gudim; RV32ZICOND-NEXT:    sub a2, a2, a0
499*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    sub a2, a2, a4
50017e2df66SMikhail Gudim; RV32ZICOND-NEXT:    sub a0, a1, a3
501a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    mv a1, a2
502a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
503a755e80eSAlex Bradbury;
504a755e80eSAlex Bradbury; RV64ZICOND-LABEL: sub1:
505a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
506a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a2, a0
507a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    sub a0, a1, a0
508a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
509f68f04d0SPhilipp Tomsich  %sub = sub i64 %rs1, %rs2
510f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %sub, i64 %rs1
511f68f04d0SPhilipp Tomsich  ret i64 %sel
512f68f04d0SPhilipp Tomsich}
513f68f04d0SPhilipp Tomsich
514f68f04d0SPhilipp Tomsichdefine i64 @sub2(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
51595075d3dSAlex Bradbury; RV32I-LABEL: sub2:
51695075d3dSAlex Bradbury; RV32I:       # %bb.0:
51795075d3dSAlex Bradbury; RV32I-NEXT:    addi a0, a0, -1
51895075d3dSAlex Bradbury; RV32I-NEXT:    and a3, a0, a3
51995075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a0, a4
520*9122c523SPengcheng Wang; RV32I-NEXT:    sltu a4, a1, a3
52195075d3dSAlex Bradbury; RV32I-NEXT:    sub a2, a2, a0
522*9122c523SPengcheng Wang; RV32I-NEXT:    sub a2, a2, a4
52395075d3dSAlex Bradbury; RV32I-NEXT:    sub a0, a1, a3
52495075d3dSAlex Bradbury; RV32I-NEXT:    mv a1, a2
52595075d3dSAlex Bradbury; RV32I-NEXT:    ret
52695075d3dSAlex Bradbury;
52795075d3dSAlex Bradbury; RV64I-LABEL: sub2:
52895075d3dSAlex Bradbury; RV64I:       # %bb.0:
52995075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
53095075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a2
53195075d3dSAlex Bradbury; RV64I-NEXT:    sub a0, a1, a0
53295075d3dSAlex Bradbury; RV64I-NEXT:    ret
53395075d3dSAlex Bradbury;
5349bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: sub2:
5359bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
5369bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a3, a3, a0
5379bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a4, a0
538*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    sltu a4, a1, a3
5399bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sub a2, a2, a0
540*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    sub a2, a2, a4
5419bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sub a0, a1, a3
5429bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    mv a1, a2
5439bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
5449bd97fcfSCraig Topper;
545f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: sub2:
546f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
547f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a0
548f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    sub a0, a1, a0
549f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
550f68f04d0SPhilipp Tomsich;
551f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: sub2:
552f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
553f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a2, zero, a0
554f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    sub a0, a1, a2
555f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
556a755e80eSAlex Bradbury;
557a755e80eSAlex Bradbury; RV32ZICOND-LABEL: sub2:
558a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
55917e2df66SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a3, a3, a0
56017e2df66SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a0, a4, a0
561*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    sltu a4, a1, a3
56217e2df66SMikhail Gudim; RV32ZICOND-NEXT:    sub a2, a2, a0
563*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    sub a2, a2, a4
56417e2df66SMikhail Gudim; RV32ZICOND-NEXT:    sub a0, a1, a3
565a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    mv a1, a2
566a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
567a755e80eSAlex Bradbury;
568a755e80eSAlex Bradbury; RV64ZICOND-LABEL: sub2:
569a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
570a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a2, a0
571a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    sub a0, a1, a0
572a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
573f68f04d0SPhilipp Tomsich  %sub = sub i64 %rs1, %rs2
574f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %sub
575f68f04d0SPhilipp Tomsich  ret i64 %sel
576f68f04d0SPhilipp Tomsich}
577f68f04d0SPhilipp Tomsich
578f68f04d0SPhilipp Tomsichdefine i64 @or1(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
57995075d3dSAlex Bradbury; RV32I-LABEL: or1:
58095075d3dSAlex Bradbury; RV32I:       # %bb.0:
581*9122c523SPengcheng Wang; RV32I-NEXT:    neg a0, a0
582*9122c523SPengcheng Wang; RV32I-NEXT:    and a3, a0, a3
583*9122c523SPengcheng Wang; RV32I-NEXT:    and a4, a0, a4
584*9122c523SPengcheng Wang; RV32I-NEXT:    or a0, a1, a3
585*9122c523SPengcheng Wang; RV32I-NEXT:    or a1, a2, a4
58695075d3dSAlex Bradbury; RV32I-NEXT:    ret
58795075d3dSAlex Bradbury;
58895075d3dSAlex Bradbury; RV64I-LABEL: or1:
58995075d3dSAlex Bradbury; RV64I:       # %bb.0:
59095075d3dSAlex Bradbury; RV64I-NEXT:    neg a0, a0
59195075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a2
59295075d3dSAlex Bradbury; RV64I-NEXT:    or a0, a1, a0
59395075d3dSAlex Bradbury; RV64I-NEXT:    ret
59495075d3dSAlex Bradbury;
5959bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: or1:
5969bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
5979bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a3, a3, a0
598*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a4, a4, a0
599*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a1, a3
600*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a2, a4
6019bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
6029bd97fcfSCraig Topper;
603f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: or1:
604f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
605f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a0
606f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a1, a0
607f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
608f68f04d0SPhilipp Tomsich;
609f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: or1:
610f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
611f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a2, zero, a0
612f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    or a0, a1, a2
613f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
614a755e80eSAlex Bradbury;
615a755e80eSAlex Bradbury; RV32ZICOND-LABEL: or1:
616a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
617a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a3, a3, a0
618*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a4, a4, a0
619*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a1, a3
620*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a2, a4
621a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
622a755e80eSAlex Bradbury;
623a755e80eSAlex Bradbury; RV64ZICOND-LABEL: or1:
624a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
625a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a2, a0
626a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a1, a0
627a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
628f68f04d0SPhilipp Tomsich  %or = or i64 %rs1, %rs2
629f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %or, i64 %rs1
630f68f04d0SPhilipp Tomsich  ret i64 %sel
631f68f04d0SPhilipp Tomsich}
632f68f04d0SPhilipp Tomsich
633f68f04d0SPhilipp Tomsichdefine i64 @or2(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
63495075d3dSAlex Bradbury; RV32I-LABEL: or2:
63595075d3dSAlex Bradbury; RV32I:       # %bb.0:
636*9122c523SPengcheng Wang; RV32I-NEXT:    neg a0, a0
637*9122c523SPengcheng Wang; RV32I-NEXT:    and a1, a0, a1
638*9122c523SPengcheng Wang; RV32I-NEXT:    and a2, a0, a2
639*9122c523SPengcheng Wang; RV32I-NEXT:    or a0, a3, a1
640*9122c523SPengcheng Wang; RV32I-NEXT:    or a1, a4, a2
64195075d3dSAlex Bradbury; RV32I-NEXT:    ret
64295075d3dSAlex Bradbury;
64395075d3dSAlex Bradbury; RV64I-LABEL: or2:
64495075d3dSAlex Bradbury; RV64I:       # %bb.0:
64595075d3dSAlex Bradbury; RV64I-NEXT:    neg a0, a0
64695075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
64795075d3dSAlex Bradbury; RV64I-NEXT:    or a0, a2, a0
64895075d3dSAlex Bradbury; RV64I-NEXT:    ret
64995075d3dSAlex Bradbury;
6509bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: or2:
6519bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
6529bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a0
653*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a2, a2, a0
654*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a3, a1
655*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a4, a2
6569bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
6579bd97fcfSCraig Topper;
658f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: or2:
659f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
660f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a1, a0
661f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a2, a0
662f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
663f68f04d0SPhilipp Tomsich;
664f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: or2:
665f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
666f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a0
667f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    or a0, a2, a1
668f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
669a755e80eSAlex Bradbury;
670a755e80eSAlex Bradbury; RV32ZICOND-LABEL: or2:
671a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
672a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a1, a1, a0
673*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a2, a2, a0
674*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a3, a1
675*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a4, a2
676a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
677a755e80eSAlex Bradbury;
678a755e80eSAlex Bradbury; RV64ZICOND-LABEL: or2:
679a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
680a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a1, a0
681a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a2, a0
682a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
683f68f04d0SPhilipp Tomsich  %or = or i64 %rs1, %rs2
684f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %or, i64 %rs2
685f68f04d0SPhilipp Tomsich  ret i64 %sel
686f68f04d0SPhilipp Tomsich}
687f68f04d0SPhilipp Tomsich
688f68f04d0SPhilipp Tomsichdefine i64 @or3(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
68995075d3dSAlex Bradbury; RV32I-LABEL: or3:
69095075d3dSAlex Bradbury; RV32I:       # %bb.0:
691*9122c523SPengcheng Wang; RV32I-NEXT:    addi a0, a0, -1
692*9122c523SPengcheng Wang; RV32I-NEXT:    and a3, a0, a3
693*9122c523SPengcheng Wang; RV32I-NEXT:    and a4, a0, a4
694*9122c523SPengcheng Wang; RV32I-NEXT:    or a0, a1, a3
695*9122c523SPengcheng Wang; RV32I-NEXT:    or a1, a2, a4
69695075d3dSAlex Bradbury; RV32I-NEXT:    ret
69795075d3dSAlex Bradbury;
69895075d3dSAlex Bradbury; RV64I-LABEL: or3:
69995075d3dSAlex Bradbury; RV64I:       # %bb.0:
70095075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
70195075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a2
70295075d3dSAlex Bradbury; RV64I-NEXT:    or a0, a1, a0
70395075d3dSAlex Bradbury; RV64I-NEXT:    ret
70495075d3dSAlex Bradbury;
7059bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: or3:
7069bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
7079bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a3, a3, a0
708*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a4, a4, a0
709*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a1, a3
710*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a2, a4
7119bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
7129bd97fcfSCraig Topper;
713f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: or3:
714f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
715f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a0
716f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a1, a0
717f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
718f68f04d0SPhilipp Tomsich;
719f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: or3:
720f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
721f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a2, zero, a0
722f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    or a0, a1, a2
723f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
724a755e80eSAlex Bradbury;
725a755e80eSAlex Bradbury; RV32ZICOND-LABEL: or3:
726a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
727a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a3, a3, a0
728*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a4, a4, a0
729*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a1, a3
730*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a2, a4
731a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
732a755e80eSAlex Bradbury;
733a755e80eSAlex Bradbury; RV64ZICOND-LABEL: or3:
734a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
735a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a2, a0
736a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a1, a0
737a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
738f68f04d0SPhilipp Tomsich  %or = or i64 %rs1, %rs2
739f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %or
740f68f04d0SPhilipp Tomsich  ret i64 %sel
741f68f04d0SPhilipp Tomsich}
742f68f04d0SPhilipp Tomsich
743f68f04d0SPhilipp Tomsichdefine i64 @or4(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
74495075d3dSAlex Bradbury; RV32I-LABEL: or4:
74595075d3dSAlex Bradbury; RV32I:       # %bb.0:
746*9122c523SPengcheng Wang; RV32I-NEXT:    addi a0, a0, -1
747*9122c523SPengcheng Wang; RV32I-NEXT:    and a1, a0, a1
748*9122c523SPengcheng Wang; RV32I-NEXT:    and a2, a0, a2
749*9122c523SPengcheng Wang; RV32I-NEXT:    or a0, a3, a1
750*9122c523SPengcheng Wang; RV32I-NEXT:    or a1, a4, a2
75195075d3dSAlex Bradbury; RV32I-NEXT:    ret
75295075d3dSAlex Bradbury;
75395075d3dSAlex Bradbury; RV64I-LABEL: or4:
75495075d3dSAlex Bradbury; RV64I:       # %bb.0:
75595075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
75695075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
75795075d3dSAlex Bradbury; RV64I-NEXT:    or a0, a2, a0
75895075d3dSAlex Bradbury; RV64I-NEXT:    ret
75995075d3dSAlex Bradbury;
7609bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: or4:
7619bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
7629bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a1, a0
763*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a2, a2, a0
764*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a3, a1
765*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a4, a2
7669bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
7679bd97fcfSCraig Topper;
768f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: or4:
769f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
770f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a1, a0
771f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a2, a0
772f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
773f68f04d0SPhilipp Tomsich;
774f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: or4:
775f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
776f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a1, zero, a0
777f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    or a0, a2, a1
778f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
779a755e80eSAlex Bradbury;
780a755e80eSAlex Bradbury; RV32ZICOND-LABEL: or4:
781a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
782a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a1, a1, a0
783*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a2, a2, a0
784*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a3, a1
785*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a4, a2
786a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
787a755e80eSAlex Bradbury;
788a755e80eSAlex Bradbury; RV64ZICOND-LABEL: or4:
789a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
790a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a1, a0
791a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a2, a0
792a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
793f68f04d0SPhilipp Tomsich  %or = or i64 %rs1, %rs2
794f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs2, i64 %or
795f68f04d0SPhilipp Tomsich  ret i64 %sel
796f68f04d0SPhilipp Tomsich}
797f68f04d0SPhilipp Tomsich
798f68f04d0SPhilipp Tomsichdefine i64 @xor1(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
79995075d3dSAlex Bradbury; RV32I-LABEL: xor1:
80095075d3dSAlex Bradbury; RV32I:       # %bb.0:
801*9122c523SPengcheng Wang; RV32I-NEXT:    neg a0, a0
802*9122c523SPengcheng Wang; RV32I-NEXT:    and a3, a0, a3
803*9122c523SPengcheng Wang; RV32I-NEXT:    and a4, a0, a4
804*9122c523SPengcheng Wang; RV32I-NEXT:    xor a0, a1, a3
805*9122c523SPengcheng Wang; RV32I-NEXT:    xor a1, a2, a4
80695075d3dSAlex Bradbury; RV32I-NEXT:    ret
80795075d3dSAlex Bradbury;
80895075d3dSAlex Bradbury; RV64I-LABEL: xor1:
80995075d3dSAlex Bradbury; RV64I:       # %bb.0:
81095075d3dSAlex Bradbury; RV64I-NEXT:    neg a0, a0
81195075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a2
81295075d3dSAlex Bradbury; RV64I-NEXT:    xor a0, a1, a0
81395075d3dSAlex Bradbury; RV64I-NEXT:    ret
81495075d3dSAlex Bradbury;
8159bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: xor1:
8169bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
8179bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a3, a3, a0
818*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a4, a4, a0
819*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    xor a0, a1, a3
820*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    xor a1, a2, a4
8219bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
8229bd97fcfSCraig Topper;
823f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: xor1:
824f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
825f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a0
826f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    xor a0, a1, a0
827f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
828f68f04d0SPhilipp Tomsich;
829f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: xor1:
830f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
831f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a2, zero, a0
832f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    xor a0, a1, a2
833f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
834a755e80eSAlex Bradbury;
835a755e80eSAlex Bradbury; RV32ZICOND-LABEL: xor1:
836a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
837a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a3, a3, a0
838*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a4, a4, a0
839*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    xor a0, a1, a3
840*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    xor a1, a2, a4
841a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
842a755e80eSAlex Bradbury;
843a755e80eSAlex Bradbury; RV64ZICOND-LABEL: xor1:
844a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
845a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a2, a0
846a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    xor a0, a1, a0
847a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
848f68f04d0SPhilipp Tomsich  %xor = xor i64 %rs1, %rs2
849f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %xor, i64 %rs1
850f68f04d0SPhilipp Tomsich  ret i64 %sel
851f68f04d0SPhilipp Tomsich}
852f68f04d0SPhilipp Tomsich
853f68f04d0SPhilipp Tomsichdefine i64 @xor2(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
85495075d3dSAlex Bradbury; RV32I-LABEL: xor2:
85595075d3dSAlex Bradbury; RV32I:       # %bb.0:
856*9122c523SPengcheng Wang; RV32I-NEXT:    neg a0, a0
857*9122c523SPengcheng Wang; RV32I-NEXT:    and a1, a0, a1
858*9122c523SPengcheng Wang; RV32I-NEXT:    and a2, a0, a2
859*9122c523SPengcheng Wang; RV32I-NEXT:    xor a0, a3, a1
860*9122c523SPengcheng Wang; RV32I-NEXT:    xor a1, a4, a2
86195075d3dSAlex Bradbury; RV32I-NEXT:    ret
86295075d3dSAlex Bradbury;
86395075d3dSAlex Bradbury; RV64I-LABEL: xor2:
86495075d3dSAlex Bradbury; RV64I:       # %bb.0:
86595075d3dSAlex Bradbury; RV64I-NEXT:    neg a0, a0
86695075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
86795075d3dSAlex Bradbury; RV64I-NEXT:    xor a0, a2, a0
86895075d3dSAlex Bradbury; RV64I-NEXT:    ret
86995075d3dSAlex Bradbury;
8709bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: xor2:
8719bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
8729bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a0
873*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a2, a2, a0
874*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    xor a0, a3, a1
875*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    xor a1, a4, a2
8769bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
8779bd97fcfSCraig Topper;
878f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: xor2:
879f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
880f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a1, a0
881f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    xor a0, a2, a0
882f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
883f68f04d0SPhilipp Tomsich;
884f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: xor2:
885f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
886f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a0
887f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    xor a0, a2, a1
888f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
889a755e80eSAlex Bradbury;
890a755e80eSAlex Bradbury; RV32ZICOND-LABEL: xor2:
891a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
892a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a1, a1, a0
893*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a2, a2, a0
894*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    xor a0, a3, a1
895*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    xor a1, a4, a2
896a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
897a755e80eSAlex Bradbury;
898a755e80eSAlex Bradbury; RV64ZICOND-LABEL: xor2:
899a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
900a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a1, a0
901a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    xor a0, a2, a0
902a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
903f68f04d0SPhilipp Tomsich  %xor = xor i64 %rs1, %rs2
904f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %xor, i64 %rs2
905f68f04d0SPhilipp Tomsich  ret i64 %sel
906f68f04d0SPhilipp Tomsich}
907f68f04d0SPhilipp Tomsich
908f68f04d0SPhilipp Tomsichdefine i64 @xor3(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
90995075d3dSAlex Bradbury; RV32I-LABEL: xor3:
91095075d3dSAlex Bradbury; RV32I:       # %bb.0:
911*9122c523SPengcheng Wang; RV32I-NEXT:    addi a0, a0, -1
912*9122c523SPengcheng Wang; RV32I-NEXT:    and a3, a0, a3
913*9122c523SPengcheng Wang; RV32I-NEXT:    and a4, a0, a4
914*9122c523SPengcheng Wang; RV32I-NEXT:    xor a0, a1, a3
915*9122c523SPengcheng Wang; RV32I-NEXT:    xor a1, a2, a4
91695075d3dSAlex Bradbury; RV32I-NEXT:    ret
91795075d3dSAlex Bradbury;
91895075d3dSAlex Bradbury; RV64I-LABEL: xor3:
91995075d3dSAlex Bradbury; RV64I:       # %bb.0:
92095075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
92195075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a2
92295075d3dSAlex Bradbury; RV64I-NEXT:    xor a0, a1, a0
92395075d3dSAlex Bradbury; RV64I-NEXT:    ret
92495075d3dSAlex Bradbury;
9259bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: xor3:
9269bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
9279bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a3, a3, a0
928*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a4, a4, a0
929*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    xor a0, a1, a3
930*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    xor a1, a2, a4
9319bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
9329bd97fcfSCraig Topper;
933f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: xor3:
934f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
935f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a0
936f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    xor a0, a1, a0
937f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
938f68f04d0SPhilipp Tomsich;
939f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: xor3:
940f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
941f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a2, zero, a0
942f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    xor a0, a1, a2
943f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
944a755e80eSAlex Bradbury;
945a755e80eSAlex Bradbury; RV32ZICOND-LABEL: xor3:
946a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
947a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a3, a3, a0
948*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a4, a4, a0
949*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    xor a0, a1, a3
950*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    xor a1, a2, a4
951a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
952a755e80eSAlex Bradbury;
953a755e80eSAlex Bradbury; RV64ZICOND-LABEL: xor3:
954a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
955a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a2, a0
956a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    xor a0, a1, a0
957a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
958f68f04d0SPhilipp Tomsich  %xor = xor i64 %rs1, %rs2
959f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %xor
960f68f04d0SPhilipp Tomsich  ret i64 %sel
961f68f04d0SPhilipp Tomsich}
962f68f04d0SPhilipp Tomsich
963f68f04d0SPhilipp Tomsichdefine i64 @xor4(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
96495075d3dSAlex Bradbury; RV32I-LABEL: xor4:
96595075d3dSAlex Bradbury; RV32I:       # %bb.0:
966*9122c523SPengcheng Wang; RV32I-NEXT:    addi a0, a0, -1
967*9122c523SPengcheng Wang; RV32I-NEXT:    and a1, a0, a1
968*9122c523SPengcheng Wang; RV32I-NEXT:    and a2, a0, a2
969*9122c523SPengcheng Wang; RV32I-NEXT:    xor a0, a3, a1
970*9122c523SPengcheng Wang; RV32I-NEXT:    xor a1, a4, a2
97195075d3dSAlex Bradbury; RV32I-NEXT:    ret
97295075d3dSAlex Bradbury;
97395075d3dSAlex Bradbury; RV64I-LABEL: xor4:
97495075d3dSAlex Bradbury; RV64I:       # %bb.0:
97595075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
97695075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
97795075d3dSAlex Bradbury; RV64I-NEXT:    xor a0, a2, a0
97895075d3dSAlex Bradbury; RV64I-NEXT:    ret
97995075d3dSAlex Bradbury;
9809bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: xor4:
9819bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
9829bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a1, a0
983*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a2, a2, a0
984*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    xor a0, a3, a1
985*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    xor a1, a4, a2
9869bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
9879bd97fcfSCraig Topper;
988f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: xor4:
989f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
990f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a1, a0
991f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    xor a0, a2, a0
992f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
993f68f04d0SPhilipp Tomsich;
994f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: xor4:
995f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
996f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a1, zero, a0
997f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    xor a0, a2, a1
998f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
999a755e80eSAlex Bradbury;
1000a755e80eSAlex Bradbury; RV32ZICOND-LABEL: xor4:
1001a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
1002a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a1, a1, a0
1003*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a2, a2, a0
1004*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    xor a0, a3, a1
1005*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    xor a1, a4, a2
1006a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
1007a755e80eSAlex Bradbury;
1008a755e80eSAlex Bradbury; RV64ZICOND-LABEL: xor4:
1009a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
1010a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a1, a0
1011a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    xor a0, a2, a0
1012a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
1013f68f04d0SPhilipp Tomsich  %xor = xor i64 %rs1, %rs2
1014f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs2, i64 %xor
1015f68f04d0SPhilipp Tomsich  ret i64 %sel
1016f68f04d0SPhilipp Tomsich}
1017f68f04d0SPhilipp Tomsich
1018f68f04d0SPhilipp Tomsichdefine i64 @and1(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
101995075d3dSAlex Bradbury; RV32I-LABEL: and1:
102095075d3dSAlex Bradbury; RV32I:       # %bb.0:
1021f73844d9SYeting Kuo; RV32I-NEXT:    beqz a0, .LBB18_2
102295075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
102395075d3dSAlex Bradbury; RV32I-NEXT:    and a2, a2, a4
102495075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a3
1025f73844d9SYeting Kuo; RV32I-NEXT:  .LBB18_2:
102695075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a1
102795075d3dSAlex Bradbury; RV32I-NEXT:    mv a1, a2
102895075d3dSAlex Bradbury; RV32I-NEXT:    ret
102995075d3dSAlex Bradbury;
103095075d3dSAlex Bradbury; RV64I-LABEL: and1:
103195075d3dSAlex Bradbury; RV64I:       # %bb.0:
1032f73844d9SYeting Kuo; RV64I-NEXT:    beqz a0, .LBB18_2
103395075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
103495075d3dSAlex Bradbury; RV64I-NEXT:    and a1, a1, a2
1035f73844d9SYeting Kuo; RV64I-NEXT:  .LBB18_2:
103695075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a1
103795075d3dSAlex Bradbury; RV64I-NEXT:    ret
103895075d3dSAlex Bradbury;
10399bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: and1:
10409bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
10419bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    and a4, a2, a4
10429bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    and a3, a1, a3
10439bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a1, a0
1044*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a2, a2, a0
1045*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a3, a1
1046*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a4, a2
10479bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
10489bd97fcfSCraig Topper;
1049f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: and1:
1050f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
10510c055286SCraig Topper; RV64XVENTANACONDOPS-NEXT:    and a2, a1, a2
1052f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a1, a0
10530c055286SCraig Topper; RV64XVENTANACONDOPS-NEXT:    or a0, a2, a0
1054f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
1055f68f04d0SPhilipp Tomsich;
1056f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: and1:
1057f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
1058f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    and a2, a1, a2
1059f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a2, a1, a0
1060f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a2
1061f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
1062a755e80eSAlex Bradbury;
1063a755e80eSAlex Bradbury; RV32ZICOND-LABEL: and1:
1064a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
10655c5a1a29SAlex Bradbury; RV32ZICOND-NEXT:    and a4, a2, a4
10665c5a1a29SAlex Bradbury; RV32ZICOND-NEXT:    and a3, a1, a3
10675c5a1a29SAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a1, a1, a0
1068*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a2, a2, a0
1069*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a3, a1
1070*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a4, a2
1071a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
1072a755e80eSAlex Bradbury;
1073a755e80eSAlex Bradbury; RV64ZICOND-LABEL: and1:
1074a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
10755c5a1a29SAlex Bradbury; RV64ZICOND-NEXT:    and a2, a1, a2
1076a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a1, a0
10775c5a1a29SAlex Bradbury; RV64ZICOND-NEXT:    or a0, a2, a0
1078a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
1079f68f04d0SPhilipp Tomsich  %and = and i64 %rs1, %rs2
1080f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %and, i64 %rs1
1081f68f04d0SPhilipp Tomsich  ret i64 %sel
1082f68f04d0SPhilipp Tomsich}
1083f68f04d0SPhilipp Tomsich
1084f68f04d0SPhilipp Tomsichdefine i64 @and2(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
108595075d3dSAlex Bradbury; RV32I-LABEL: and2:
108695075d3dSAlex Bradbury; RV32I:       # %bb.0:
1087f73844d9SYeting Kuo; RV32I-NEXT:    beqz a0, .LBB19_2
108895075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
108995075d3dSAlex Bradbury; RV32I-NEXT:    and a4, a2, a4
109095075d3dSAlex Bradbury; RV32I-NEXT:    and a3, a1, a3
1091f73844d9SYeting Kuo; RV32I-NEXT:  .LBB19_2:
109295075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a3
109395075d3dSAlex Bradbury; RV32I-NEXT:    mv a1, a4
109495075d3dSAlex Bradbury; RV32I-NEXT:    ret
109595075d3dSAlex Bradbury;
109695075d3dSAlex Bradbury; RV64I-LABEL: and2:
109795075d3dSAlex Bradbury; RV64I:       # %bb.0:
1098f73844d9SYeting Kuo; RV64I-NEXT:    beqz a0, .LBB19_2
109995075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
110095075d3dSAlex Bradbury; RV64I-NEXT:    and a2, a1, a2
1101f73844d9SYeting Kuo; RV64I-NEXT:  .LBB19_2:
110295075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a2
110395075d3dSAlex Bradbury; RV64I-NEXT:    ret
110495075d3dSAlex Bradbury;
11059bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: and2:
11069bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
1107*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    and a2, a2, a4
11089bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    and a1, a1, a3
1109*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a3, a3, a0
1110*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a4, a4, a0
1111*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a1, a3
1112*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a2, a4
11139bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
11149bd97fcfSCraig Topper;
1115f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: and2:
1116f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
11170c055286SCraig Topper; RV64XVENTANACONDOPS-NEXT:    and a1, a1, a2
1118f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a0
1119f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a1, a0
1120f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
1121f68f04d0SPhilipp Tomsich;
1122f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: and2:
1123f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
1124f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    and a1, a1, a2
1125f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, a2, a0
1126f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
1127f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
1128a755e80eSAlex Bradbury;
1129a755e80eSAlex Bradbury; RV32ZICOND-LABEL: and2:
1130a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
1131*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    and a2, a2, a4
11325c5a1a29SAlex Bradbury; RV32ZICOND-NEXT:    and a1, a1, a3
1133*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a3, a3, a0
1134*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a4, a4, a0
1135*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a1, a3
1136*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a2, a4
1137a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
1138a755e80eSAlex Bradbury;
1139a755e80eSAlex Bradbury; RV64ZICOND-LABEL: and2:
1140a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
11415c5a1a29SAlex Bradbury; RV64ZICOND-NEXT:    and a1, a1, a2
1142a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a2, a0
1143a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a1, a0
1144a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
1145f68f04d0SPhilipp Tomsich  %and = and i64 %rs1, %rs2
1146f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %and, i64 %rs2
1147f68f04d0SPhilipp Tomsich  ret i64 %sel
1148f68f04d0SPhilipp Tomsich}
1149f68f04d0SPhilipp Tomsich
1150f68f04d0SPhilipp Tomsichdefine i64 @and3(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
115195075d3dSAlex Bradbury; RV32I-LABEL: and3:
115295075d3dSAlex Bradbury; RV32I:       # %bb.0:
1153f73844d9SYeting Kuo; RV32I-NEXT:    bnez a0, .LBB20_2
115495075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
115595075d3dSAlex Bradbury; RV32I-NEXT:    and a2, a2, a4
115695075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a3
1157f73844d9SYeting Kuo; RV32I-NEXT:  .LBB20_2:
115895075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a1
115995075d3dSAlex Bradbury; RV32I-NEXT:    mv a1, a2
116095075d3dSAlex Bradbury; RV32I-NEXT:    ret
116195075d3dSAlex Bradbury;
116295075d3dSAlex Bradbury; RV64I-LABEL: and3:
116395075d3dSAlex Bradbury; RV64I:       # %bb.0:
1164f73844d9SYeting Kuo; RV64I-NEXT:    bnez a0, .LBB20_2
116595075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
116695075d3dSAlex Bradbury; RV64I-NEXT:    and a1, a1, a2
1167f73844d9SYeting Kuo; RV64I-NEXT:  .LBB20_2:
116895075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a1
116995075d3dSAlex Bradbury; RV64I-NEXT:    ret
117095075d3dSAlex Bradbury;
11719bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: and3:
11729bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
11739bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    and a4, a2, a4
11749bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    and a3, a1, a3
11759bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a0
1176*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a2, a2, a0
1177*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a3, a1
1178*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a4, a2
11799bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
11809bd97fcfSCraig Topper;
1181f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: and3:
1182f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
11830c055286SCraig Topper; RV64XVENTANACONDOPS-NEXT:    and a2, a1, a2
1184f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a1, a0
11850c055286SCraig Topper; RV64XVENTANACONDOPS-NEXT:    or a0, a2, a0
1186f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
1187f68f04d0SPhilipp Tomsich;
1188f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: and3:
1189f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
1190f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    and a2, a1, a2
1191f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a2, a1, a0
1192f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a2
1193f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
1194a755e80eSAlex Bradbury;
1195a755e80eSAlex Bradbury; RV32ZICOND-LABEL: and3:
1196a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
11975c5a1a29SAlex Bradbury; RV32ZICOND-NEXT:    and a4, a2, a4
11985c5a1a29SAlex Bradbury; RV32ZICOND-NEXT:    and a3, a1, a3
11995c5a1a29SAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a1, a1, a0
1200*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a2, a2, a0
1201*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a3, a1
1202*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a4, a2
1203a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
1204a755e80eSAlex Bradbury;
1205a755e80eSAlex Bradbury; RV64ZICOND-LABEL: and3:
1206a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
12075c5a1a29SAlex Bradbury; RV64ZICOND-NEXT:    and a2, a1, a2
1208a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a1, a0
12095c5a1a29SAlex Bradbury; RV64ZICOND-NEXT:    or a0, a2, a0
1210a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
1211f68f04d0SPhilipp Tomsich  %and = and i64 %rs1, %rs2
1212f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %and
1213f68f04d0SPhilipp Tomsich  ret i64 %sel
1214f68f04d0SPhilipp Tomsich}
1215f68f04d0SPhilipp Tomsich
1216f68f04d0SPhilipp Tomsichdefine i64 @and4(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
121795075d3dSAlex Bradbury; RV32I-LABEL: and4:
121895075d3dSAlex Bradbury; RV32I:       # %bb.0:
1219f73844d9SYeting Kuo; RV32I-NEXT:    bnez a0, .LBB21_2
122095075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
122195075d3dSAlex Bradbury; RV32I-NEXT:    and a4, a2, a4
122295075d3dSAlex Bradbury; RV32I-NEXT:    and a3, a1, a3
1223f73844d9SYeting Kuo; RV32I-NEXT:  .LBB21_2:
122495075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a3
122595075d3dSAlex Bradbury; RV32I-NEXT:    mv a1, a4
122695075d3dSAlex Bradbury; RV32I-NEXT:    ret
122795075d3dSAlex Bradbury;
122895075d3dSAlex Bradbury; RV64I-LABEL: and4:
122995075d3dSAlex Bradbury; RV64I:       # %bb.0:
1230f73844d9SYeting Kuo; RV64I-NEXT:    bnez a0, .LBB21_2
123195075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
123295075d3dSAlex Bradbury; RV64I-NEXT:    and a2, a1, a2
1233f73844d9SYeting Kuo; RV64I-NEXT:  .LBB21_2:
123495075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a2
123595075d3dSAlex Bradbury; RV64I-NEXT:    ret
123695075d3dSAlex Bradbury;
12379bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: and4:
12389bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
1239*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    and a2, a2, a4
12409bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    and a1, a1, a3
1241*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a3, a3, a0
1242*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a4, a4, a0
1243*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a1, a3
1244*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a2, a4
12459bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
12469bd97fcfSCraig Topper;
1247f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: and4:
1248f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
12490c055286SCraig Topper; RV64XVENTANACONDOPS-NEXT:    and a1, a1, a2
1250f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a0
1251f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a1, a0
1252f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
1253f68f04d0SPhilipp Tomsich;
1254f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: and4:
1255f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
1256f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    and a1, a1, a2
1257f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a1, a2, a0
1258f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
1259f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
1260a755e80eSAlex Bradbury;
1261a755e80eSAlex Bradbury; RV32ZICOND-LABEL: and4:
1262a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
1263*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    and a2, a2, a4
12645c5a1a29SAlex Bradbury; RV32ZICOND-NEXT:    and a1, a1, a3
1265*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a3, a3, a0
1266*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a4, a4, a0
1267*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a1, a3
1268*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a2, a4
1269a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
1270a755e80eSAlex Bradbury;
1271a755e80eSAlex Bradbury; RV64ZICOND-LABEL: and4:
1272a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
12735c5a1a29SAlex Bradbury; RV64ZICOND-NEXT:    and a1, a1, a2
1274a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a2, a0
1275a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a1, a0
1276a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
1277f68f04d0SPhilipp Tomsich  %and = and i64 %rs1, %rs2
1278f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs2, i64 %and
1279f68f04d0SPhilipp Tomsich  ret i64 %sel
1280f68f04d0SPhilipp Tomsich}
1281f68f04d0SPhilipp Tomsich
1282f68f04d0SPhilipp Tomsichdefine i64 @basic(i1 zeroext %rc, i64 %rs1, i64 %rs2) {
128395075d3dSAlex Bradbury; RV32I-LABEL: basic:
128495075d3dSAlex Bradbury; RV32I:       # %bb.0:
1285f73844d9SYeting Kuo; RV32I-NEXT:    bnez a0, .LBB22_2
128695075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
128795075d3dSAlex Bradbury; RV32I-NEXT:    mv a1, a3
128895075d3dSAlex Bradbury; RV32I-NEXT:    mv a2, a4
1289f73844d9SYeting Kuo; RV32I-NEXT:  .LBB22_2:
129095075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a1
129195075d3dSAlex Bradbury; RV32I-NEXT:    mv a1, a2
129295075d3dSAlex Bradbury; RV32I-NEXT:    ret
129395075d3dSAlex Bradbury;
129495075d3dSAlex Bradbury; RV64I-LABEL: basic:
129595075d3dSAlex Bradbury; RV64I:       # %bb.0:
1296f73844d9SYeting Kuo; RV64I-NEXT:    bnez a0, .LBB22_2
129795075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
129895075d3dSAlex Bradbury; RV64I-NEXT:    mv a1, a2
1299f73844d9SYeting Kuo; RV64I-NEXT:  .LBB22_2:
130095075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a1
130195075d3dSAlex Bradbury; RV64I-NEXT:    ret
130295075d3dSAlex Bradbury;
13039bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: basic:
13049bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
13059bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a3, a3, a0
13069bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a0
1307*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a4, a4, a0
1308*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a2, a2, a0
1309*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a1, a3
1310*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a2, a4
13119bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
13129bd97fcfSCraig Topper;
1313f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: basic:
1314f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
1315f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a2, a2, a0
1316f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a1, a0
1317f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a2
1318f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
1319f68f04d0SPhilipp Tomsich;
1320f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: basic:
1321f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
1322f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, a2, a0
1323f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
1324f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
1325a755e80eSAlex Bradbury;
1326a755e80eSAlex Bradbury; RV32ZICOND-LABEL: basic:
1327a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
1328a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a3, a3, a0
1329a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a1, a1, a0
1330*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a4, a4, a0
1331*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a2, a2, a0
1332*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a1, a3
1333*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a2, a4
1334a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
1335a755e80eSAlex Bradbury;
1336a755e80eSAlex Bradbury; RV64ZICOND-LABEL: basic:
1337a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
1338a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a2, a2, a0
1339a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a1, a0
1340a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a0, a2
1341a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
1342f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
1343f68f04d0SPhilipp Tomsich  ret i64 %sel
1344f68f04d0SPhilipp Tomsich}
1345f68f04d0SPhilipp Tomsich
1346f68f04d0SPhilipp Tomsichdefine i64 @seteq(i64 %a, i64 %b, i64 %rs1, i64 %rs2) {
134795075d3dSAlex Bradbury; RV32I-LABEL: seteq:
134895075d3dSAlex Bradbury; RV32I:       # %bb.0:
134995075d3dSAlex Bradbury; RV32I-NEXT:    xor a1, a1, a3
135095075d3dSAlex Bradbury; RV32I-NEXT:    xor a0, a0, a2
1351*9122c523SPengcheng Wang; RV32I-NEXT:    or a1, a0, a1
135295075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
1353*9122c523SPengcheng Wang; RV32I-NEXT:    beqz a1, .LBB23_2
135495075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
135595075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a6
1356*9122c523SPengcheng Wang; RV32I-NEXT:    mv a5, a7
1357f73844d9SYeting Kuo; RV32I-NEXT:  .LBB23_2:
1358*9122c523SPengcheng Wang; RV32I-NEXT:    mv a1, a5
135995075d3dSAlex Bradbury; RV32I-NEXT:    ret
136095075d3dSAlex Bradbury;
136195075d3dSAlex Bradbury; RV64I-LABEL: seteq:
136295075d3dSAlex Bradbury; RV64I:       # %bb.0:
1363f73844d9SYeting Kuo; RV64I-NEXT:    beq a0, a1, .LBB23_2
136495075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
136595075d3dSAlex Bradbury; RV64I-NEXT:    mv a2, a3
1366f73844d9SYeting Kuo; RV64I-NEXT:  .LBB23_2:
136795075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a2
136895075d3dSAlex Bradbury; RV64I-NEXT:    ret
136995075d3dSAlex Bradbury;
13709bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: seteq:
13719bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
13729bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor a1, a1, a3
13739bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor a0, a0, a2
1374*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
1375*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a6, a0
1376*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a2, a4, a0
1377*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a3, a7, a0
1378*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a4, a5, a0
1379*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
1380*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a4, a3
13819bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
13829bd97fcfSCraig Topper;
1383f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: seteq:
1384f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
1385f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    xor a0, a0, a1
1386e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a3, a0
1387e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a0
1388f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a1
1389f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
1390f68f04d0SPhilipp Tomsich;
1391f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: seteq:
1392f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
1393f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    xor a0, a0, a1
1394f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a2, a3, a0
1395f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a2
1396f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
1397a755e80eSAlex Bradbury;
1398a755e80eSAlex Bradbury; RV32ZICOND-LABEL: seteq:
1399a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
1400a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor a1, a1, a3
1401a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor a0, a0, a2
1402*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
1403*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a6, a0
1404*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a2, a4, a0
1405*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a3, a7, a0
1406*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a4, a5, a0
1407*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
1408*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a4, a3
1409a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
1410a755e80eSAlex Bradbury;
1411a755e80eSAlex Bradbury; RV64ZICOND-LABEL: seteq:
1412a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
1413a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    xor a0, a0, a1
1414e28307e9SCraig Topper; RV64ZICOND-NEXT:    czero.eqz a1, a3, a0
1415e28307e9SCraig Topper; RV64ZICOND-NEXT:    czero.nez a0, a2, a0
1416a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a0, a1
1417a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
1418f68f04d0SPhilipp Tomsich  %rc = icmp eq i64 %a, %b
1419f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
1420f68f04d0SPhilipp Tomsich  ret i64 %sel
1421f68f04d0SPhilipp Tomsich}
1422f68f04d0SPhilipp Tomsich
1423f68f04d0SPhilipp Tomsichdefine i64 @setne(i64 %a, i64 %b, i64 %rs1, i64 %rs2) {
142495075d3dSAlex Bradbury; RV32I-LABEL: setne:
142595075d3dSAlex Bradbury; RV32I:       # %bb.0:
142695075d3dSAlex Bradbury; RV32I-NEXT:    xor a1, a1, a3
142795075d3dSAlex Bradbury; RV32I-NEXT:    xor a0, a0, a2
1428*9122c523SPengcheng Wang; RV32I-NEXT:    or a1, a0, a1
142995075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
1430*9122c523SPengcheng Wang; RV32I-NEXT:    bnez a1, .LBB24_2
143195075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
143295075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a6
1433*9122c523SPengcheng Wang; RV32I-NEXT:    mv a5, a7
1434f73844d9SYeting Kuo; RV32I-NEXT:  .LBB24_2:
1435*9122c523SPengcheng Wang; RV32I-NEXT:    mv a1, a5
143695075d3dSAlex Bradbury; RV32I-NEXT:    ret
143795075d3dSAlex Bradbury;
143895075d3dSAlex Bradbury; RV64I-LABEL: setne:
143995075d3dSAlex Bradbury; RV64I:       # %bb.0:
1440f73844d9SYeting Kuo; RV64I-NEXT:    bne a0, a1, .LBB24_2
144195075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
144295075d3dSAlex Bradbury; RV64I-NEXT:    mv a2, a3
1443f73844d9SYeting Kuo; RV64I-NEXT:  .LBB24_2:
144495075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a2
144595075d3dSAlex Bradbury; RV64I-NEXT:    ret
144695075d3dSAlex Bradbury;
14479bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: setne:
14489bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
14499bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor a1, a1, a3
14509bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor a0, a0, a2
1451*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
1452*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a6, a0
1453*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a2, a4, a0
1454*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a3, a7, a0
1455*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a4, a5, a0
1456*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
1457*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a4, a3
14589bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
14599bd97fcfSCraig Topper;
1460f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: setne:
1461f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
1462f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    xor a0, a0, a1
1463f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a1, a3, a0
1464f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a0
1465f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a1
1466f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
1467f68f04d0SPhilipp Tomsich;
1468f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: setne:
1469f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
1470f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    xor a0, a0, a1
1471f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a2, a3, a0
1472f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a2
1473f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
1474a755e80eSAlex Bradbury;
1475a755e80eSAlex Bradbury; RV32ZICOND-LABEL: setne:
1476a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
1477a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor a1, a1, a3
1478a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor a0, a0, a2
1479*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
1480*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a1, a6, a0
1481*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a2, a4, a0
1482*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a3, a7, a0
1483*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a4, a5, a0
1484*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
1485*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a4, a3
1486a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
1487a755e80eSAlex Bradbury;
1488a755e80eSAlex Bradbury; RV64ZICOND-LABEL: setne:
1489a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
1490a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    xor a0, a0, a1
1491a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a1, a3, a0
1492a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a2, a0
1493a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a0, a1
1494a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
1495f68f04d0SPhilipp Tomsich  %rc = icmp ne i64 %a, %b
1496f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
1497f68f04d0SPhilipp Tomsich  ret i64 %sel
1498f68f04d0SPhilipp Tomsich}
1499f68f04d0SPhilipp Tomsich
1500f68f04d0SPhilipp Tomsichdefine i64 @setgt(i64 %a, i64 %b, i64 %rs1, i64 %rs2) {
150195075d3dSAlex Bradbury; RV32I-LABEL: setgt:
150295075d3dSAlex Bradbury; RV32I:       # %bb.0:
1503f73844d9SYeting Kuo; RV32I-NEXT:    beq a1, a3, .LBB25_2
150495075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
150595075d3dSAlex Bradbury; RV32I-NEXT:    slt a0, a3, a1
1506f73844d9SYeting Kuo; RV32I-NEXT:    beqz a0, .LBB25_3
1507f73844d9SYeting Kuo; RV32I-NEXT:    j .LBB25_4
1508f73844d9SYeting Kuo; RV32I-NEXT:  .LBB25_2:
150995075d3dSAlex Bradbury; RV32I-NEXT:    sltu a0, a2, a0
1510f73844d9SYeting Kuo; RV32I-NEXT:    bnez a0, .LBB25_4
1511f73844d9SYeting Kuo; RV32I-NEXT:  .LBB25_3:
151295075d3dSAlex Bradbury; RV32I-NEXT:    mv a4, a6
151395075d3dSAlex Bradbury; RV32I-NEXT:    mv a5, a7
1514f73844d9SYeting Kuo; RV32I-NEXT:  .LBB25_4:
151595075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
151695075d3dSAlex Bradbury; RV32I-NEXT:    mv a1, a5
151795075d3dSAlex Bradbury; RV32I-NEXT:    ret
151895075d3dSAlex Bradbury;
151995075d3dSAlex Bradbury; RV64I-LABEL: setgt:
152095075d3dSAlex Bradbury; RV64I:       # %bb.0:
1521f73844d9SYeting Kuo; RV64I-NEXT:    blt a1, a0, .LBB25_2
152295075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
152395075d3dSAlex Bradbury; RV64I-NEXT:    mv a2, a3
1524f73844d9SYeting Kuo; RV64I-NEXT:  .LBB25_2:
152595075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a2
152695075d3dSAlex Bradbury; RV64I-NEXT:    ret
152795075d3dSAlex Bradbury;
15289bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: setgt:
15299bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
15309bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor t0, a1, a3
15319bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    slt a1, a3, a1
15329bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sltu a0, a2, a0
1533*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, t0
15349bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, t0
1535*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
1536*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a6, a0
1537*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a2, a4, a0
1538*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a3, a7, a0
1539*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a4, a5, a0
1540*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
1541*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a4, a3
15429bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
15439bd97fcfSCraig Topper;
1544f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: setgt:
1545f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
1546f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    slt a0, a1, a0
1547f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a1, a3, a0
1548f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a0
1549f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a1
1550f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
1551f68f04d0SPhilipp Tomsich;
1552f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: setgt:
1553f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
1554f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    slt a0, a1, a0
1555f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a2, a3, a0
1556f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a2
1557f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
1558a755e80eSAlex Bradbury;
1559a755e80eSAlex Bradbury; RV32ZICOND-LABEL: setgt:
1560a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
1561a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor t0, a1, a3
1562a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    slt a1, a3, a1
1563e28307e9SCraig Topper; RV32ZICOND-NEXT:    sltu a0, a2, a0
1564*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a1, t0
1565e28307e9SCraig Topper; RV32ZICOND-NEXT:    czero.nez a0, a0, t0
1566*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
1567*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a1, a6, a0
1568*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a2, a4, a0
1569*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a3, a7, a0
1570*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a4, a5, a0
1571*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
1572*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a4, a3
1573a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
1574a755e80eSAlex Bradbury;
1575a755e80eSAlex Bradbury; RV64ZICOND-LABEL: setgt:
1576a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
1577a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    slt a0, a1, a0
1578a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a1, a3, a0
1579a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a2, a0
1580a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a0, a1
1581a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
1582f68f04d0SPhilipp Tomsich  %rc = icmp sgt i64 %a, %b
1583f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
1584f68f04d0SPhilipp Tomsich  ret i64 %sel
1585f68f04d0SPhilipp Tomsich}
1586f68f04d0SPhilipp Tomsich
1587f68f04d0SPhilipp Tomsichdefine i64 @setge(i64 %a, i64 %b, i64 %rs1, i64 %rs2) {
158895075d3dSAlex Bradbury; RV32I-LABEL: setge:
158995075d3dSAlex Bradbury; RV32I:       # %bb.0:
1590f73844d9SYeting Kuo; RV32I-NEXT:    beq a1, a3, .LBB26_2
159195075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
159295075d3dSAlex Bradbury; RV32I-NEXT:    slt a0, a1, a3
1593f73844d9SYeting Kuo; RV32I-NEXT:    bnez a0, .LBB26_3
1594f73844d9SYeting Kuo; RV32I-NEXT:    j .LBB26_4
1595f73844d9SYeting Kuo; RV32I-NEXT:  .LBB26_2:
159695075d3dSAlex Bradbury; RV32I-NEXT:    sltu a0, a0, a2
1597f73844d9SYeting Kuo; RV32I-NEXT:    beqz a0, .LBB26_4
1598f73844d9SYeting Kuo; RV32I-NEXT:  .LBB26_3:
159995075d3dSAlex Bradbury; RV32I-NEXT:    mv a4, a6
160095075d3dSAlex Bradbury; RV32I-NEXT:    mv a5, a7
1601f73844d9SYeting Kuo; RV32I-NEXT:  .LBB26_4:
160295075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
160395075d3dSAlex Bradbury; RV32I-NEXT:    mv a1, a5
160495075d3dSAlex Bradbury; RV32I-NEXT:    ret
160595075d3dSAlex Bradbury;
160695075d3dSAlex Bradbury; RV64I-LABEL: setge:
160795075d3dSAlex Bradbury; RV64I:       # %bb.0:
1608f73844d9SYeting Kuo; RV64I-NEXT:    bge a0, a1, .LBB26_2
160995075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
161095075d3dSAlex Bradbury; RV64I-NEXT:    mv a2, a3
1611f73844d9SYeting Kuo; RV64I-NEXT:  .LBB26_2:
161295075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a2
161395075d3dSAlex Bradbury; RV64I-NEXT:    ret
161495075d3dSAlex Bradbury;
16159bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: setge:
16169bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
16179bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor t0, a1, a3
16189bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    slt a1, a1, a3
16199bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sltu a0, a0, a2
1620*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, t0
16219bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, t0
1622*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
1623*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a6, a0
1624*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a2, a4, a0
1625*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a3, a7, a0
1626*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a4, a5, a0
1627*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
1628*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a4, a3
16299bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
16309bd97fcfSCraig Topper;
1631f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: setge:
1632f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
1633f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    slt a0, a0, a1
16347dfe6232SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a3, a0
16357dfe6232SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a0
1636f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a1
1637f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
1638f68f04d0SPhilipp Tomsich;
1639f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: setge:
1640f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
1641f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    slt a0, a0, a1
1642f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a2, a3, a0
1643f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a2
1644f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
1645a755e80eSAlex Bradbury;
1646a755e80eSAlex Bradbury; RV32ZICOND-LABEL: setge:
1647a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
1648a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor t0, a1, a3
1649a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    slt a1, a1, a3
1650e28307e9SCraig Topper; RV32ZICOND-NEXT:    sltu a0, a0, a2
1651*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a1, t0
1652e28307e9SCraig Topper; RV32ZICOND-NEXT:    czero.nez a0, a0, t0
1653*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
1654*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a6, a0
1655*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a2, a4, a0
1656*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a3, a7, a0
1657*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a4, a5, a0
1658*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
1659*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a4, a3
1660a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
1661a755e80eSAlex Bradbury;
1662a755e80eSAlex Bradbury; RV64ZICOND-LABEL: setge:
1663a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
1664a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    slt a0, a0, a1
16657dfe6232SCraig Topper; RV64ZICOND-NEXT:    czero.eqz a1, a3, a0
16667dfe6232SCraig Topper; RV64ZICOND-NEXT:    czero.nez a0, a2, a0
1667a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a0, a1
1668a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
1669f68f04d0SPhilipp Tomsich  %rc = icmp sge i64 %a, %b
1670f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
1671f68f04d0SPhilipp Tomsich  ret i64 %sel
1672f68f04d0SPhilipp Tomsich}
1673f68f04d0SPhilipp Tomsich
1674f68f04d0SPhilipp Tomsichdefine i64 @setlt(i64 %a, i64 %b, i64 %rs1, i64 %rs2) {
167595075d3dSAlex Bradbury; RV32I-LABEL: setlt:
167695075d3dSAlex Bradbury; RV32I:       # %bb.0:
1677f73844d9SYeting Kuo; RV32I-NEXT:    beq a1, a3, .LBB27_2
167895075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
167995075d3dSAlex Bradbury; RV32I-NEXT:    slt a0, a1, a3
1680f73844d9SYeting Kuo; RV32I-NEXT:    beqz a0, .LBB27_3
1681f73844d9SYeting Kuo; RV32I-NEXT:    j .LBB27_4
1682f73844d9SYeting Kuo; RV32I-NEXT:  .LBB27_2:
168395075d3dSAlex Bradbury; RV32I-NEXT:    sltu a0, a0, a2
1684f73844d9SYeting Kuo; RV32I-NEXT:    bnez a0, .LBB27_4
1685f73844d9SYeting Kuo; RV32I-NEXT:  .LBB27_3:
168695075d3dSAlex Bradbury; RV32I-NEXT:    mv a4, a6
168795075d3dSAlex Bradbury; RV32I-NEXT:    mv a5, a7
1688f73844d9SYeting Kuo; RV32I-NEXT:  .LBB27_4:
168995075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
169095075d3dSAlex Bradbury; RV32I-NEXT:    mv a1, a5
169195075d3dSAlex Bradbury; RV32I-NEXT:    ret
169295075d3dSAlex Bradbury;
169395075d3dSAlex Bradbury; RV64I-LABEL: setlt:
169495075d3dSAlex Bradbury; RV64I:       # %bb.0:
1695f73844d9SYeting Kuo; RV64I-NEXT:    blt a0, a1, .LBB27_2
169695075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
169795075d3dSAlex Bradbury; RV64I-NEXT:    mv a2, a3
1698f73844d9SYeting Kuo; RV64I-NEXT:  .LBB27_2:
169995075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a2
170095075d3dSAlex Bradbury; RV64I-NEXT:    ret
170195075d3dSAlex Bradbury;
17029bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: setlt:
17039bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
17049bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor t0, a1, a3
17059bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    slt a1, a1, a3
17069bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sltu a0, a0, a2
1707*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, t0
17089bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, t0
1709*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
1710*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a6, a0
1711*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a2, a4, a0
1712*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a3, a7, a0
1713*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a4, a5, a0
1714*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
1715*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a4, a3
17169bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
17179bd97fcfSCraig Topper;
1718f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: setlt:
1719f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
1720f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    slt a0, a0, a1
1721f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a1, a3, a0
1722f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a0
1723f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a1
1724f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
1725f68f04d0SPhilipp Tomsich;
1726f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: setlt:
1727f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
1728f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    slt a0, a0, a1
1729f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a2, a3, a0
1730f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a2
1731f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
1732a755e80eSAlex Bradbury;
1733a755e80eSAlex Bradbury; RV32ZICOND-LABEL: setlt:
1734a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
1735a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor t0, a1, a3
1736a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    slt a1, a1, a3
1737e28307e9SCraig Topper; RV32ZICOND-NEXT:    sltu a0, a0, a2
1738*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a1, t0
1739e28307e9SCraig Topper; RV32ZICOND-NEXT:    czero.nez a0, a0, t0
1740*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
1741*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a1, a6, a0
1742*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a2, a4, a0
1743*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a3, a7, a0
1744*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a4, a5, a0
1745*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
1746*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a4, a3
1747a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
1748a755e80eSAlex Bradbury;
1749a755e80eSAlex Bradbury; RV64ZICOND-LABEL: setlt:
1750a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
1751a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    slt a0, a0, a1
1752a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a1, a3, a0
1753a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a2, a0
1754a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a0, a1
1755a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
1756f68f04d0SPhilipp Tomsich  %rc = icmp slt i64 %a, %b
1757f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
1758f68f04d0SPhilipp Tomsich  ret i64 %sel
1759f68f04d0SPhilipp Tomsich}
1760f68f04d0SPhilipp Tomsich
1761f68f04d0SPhilipp Tomsichdefine i64 @setle(i64 %a, i64 %b, i64 %rs1, i64 %rs2) {
176295075d3dSAlex Bradbury; RV32I-LABEL: setle:
176395075d3dSAlex Bradbury; RV32I:       # %bb.0:
1764f73844d9SYeting Kuo; RV32I-NEXT:    beq a1, a3, .LBB28_2
176595075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
176695075d3dSAlex Bradbury; RV32I-NEXT:    slt a0, a3, a1
1767f73844d9SYeting Kuo; RV32I-NEXT:    bnez a0, .LBB28_3
1768f73844d9SYeting Kuo; RV32I-NEXT:    j .LBB28_4
1769f73844d9SYeting Kuo; RV32I-NEXT:  .LBB28_2:
177095075d3dSAlex Bradbury; RV32I-NEXT:    sltu a0, a2, a0
1771f73844d9SYeting Kuo; RV32I-NEXT:    beqz a0, .LBB28_4
1772f73844d9SYeting Kuo; RV32I-NEXT:  .LBB28_3:
177395075d3dSAlex Bradbury; RV32I-NEXT:    mv a4, a6
177495075d3dSAlex Bradbury; RV32I-NEXT:    mv a5, a7
1775f73844d9SYeting Kuo; RV32I-NEXT:  .LBB28_4:
177695075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
177795075d3dSAlex Bradbury; RV32I-NEXT:    mv a1, a5
177895075d3dSAlex Bradbury; RV32I-NEXT:    ret
177995075d3dSAlex Bradbury;
178095075d3dSAlex Bradbury; RV64I-LABEL: setle:
178195075d3dSAlex Bradbury; RV64I:       # %bb.0:
1782f73844d9SYeting Kuo; RV64I-NEXT:    bge a1, a0, .LBB28_2
178395075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
178495075d3dSAlex Bradbury; RV64I-NEXT:    mv a2, a3
1785f73844d9SYeting Kuo; RV64I-NEXT:  .LBB28_2:
178695075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a2
178795075d3dSAlex Bradbury; RV64I-NEXT:    ret
178895075d3dSAlex Bradbury;
17899bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: setle:
17909bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
17919bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor t0, a1, a3
17929bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    slt a1, a3, a1
17939bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sltu a0, a2, a0
1794*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, t0
17959bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, t0
1796*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
1797*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a6, a0
1798*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a2, a4, a0
1799*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a3, a7, a0
1800*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a4, a5, a0
1801*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
1802*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a4, a3
18039bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
18049bd97fcfSCraig Topper;
1805f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: setle:
1806f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
1807f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    slt a0, a1, a0
18087dfe6232SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a3, a0
18097dfe6232SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a0
1810f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a1
1811f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
1812f68f04d0SPhilipp Tomsich;
1813f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: setle:
1814f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
1815f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    slt a0, a1, a0
1816f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a2, a3, a0
1817f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a2
1818f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
1819a755e80eSAlex Bradbury;
1820a755e80eSAlex Bradbury; RV32ZICOND-LABEL: setle:
1821a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
1822a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor t0, a1, a3
1823a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    slt a1, a3, a1
1824e28307e9SCraig Topper; RV32ZICOND-NEXT:    sltu a0, a2, a0
1825*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a1, t0
1826e28307e9SCraig Topper; RV32ZICOND-NEXT:    czero.nez a0, a0, t0
1827*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
1828*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a6, a0
1829*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a2, a4, a0
1830*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a3, a7, a0
1831*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a4, a5, a0
1832*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
1833*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a4, a3
1834a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
1835a755e80eSAlex Bradbury;
1836a755e80eSAlex Bradbury; RV64ZICOND-LABEL: setle:
1837a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
1838a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    slt a0, a1, a0
18397dfe6232SCraig Topper; RV64ZICOND-NEXT:    czero.eqz a1, a3, a0
18407dfe6232SCraig Topper; RV64ZICOND-NEXT:    czero.nez a0, a2, a0
1841a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a0, a1
1842a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
1843f68f04d0SPhilipp Tomsich  %rc = icmp sle i64 %a, %b
1844f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
1845f68f04d0SPhilipp Tomsich  ret i64 %sel
1846f68f04d0SPhilipp Tomsich}
1847f68f04d0SPhilipp Tomsich
1848f68f04d0SPhilipp Tomsichdefine i64 @setugt(i64 %a, i64 %b, i64 %rs1, i64 %rs2) {
184995075d3dSAlex Bradbury; RV32I-LABEL: setugt:
185095075d3dSAlex Bradbury; RV32I:       # %bb.0:
1851f73844d9SYeting Kuo; RV32I-NEXT:    beq a1, a3, .LBB29_2
185295075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
185395075d3dSAlex Bradbury; RV32I-NEXT:    sltu a0, a3, a1
1854f73844d9SYeting Kuo; RV32I-NEXT:    beqz a0, .LBB29_3
1855f73844d9SYeting Kuo; RV32I-NEXT:    j .LBB29_4
1856f73844d9SYeting Kuo; RV32I-NEXT:  .LBB29_2:
185795075d3dSAlex Bradbury; RV32I-NEXT:    sltu a0, a2, a0
1858f73844d9SYeting Kuo; RV32I-NEXT:    bnez a0, .LBB29_4
1859f73844d9SYeting Kuo; RV32I-NEXT:  .LBB29_3:
186095075d3dSAlex Bradbury; RV32I-NEXT:    mv a4, a6
186195075d3dSAlex Bradbury; RV32I-NEXT:    mv a5, a7
1862f73844d9SYeting Kuo; RV32I-NEXT:  .LBB29_4:
186395075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
186495075d3dSAlex Bradbury; RV32I-NEXT:    mv a1, a5
186595075d3dSAlex Bradbury; RV32I-NEXT:    ret
186695075d3dSAlex Bradbury;
186795075d3dSAlex Bradbury; RV64I-LABEL: setugt:
186895075d3dSAlex Bradbury; RV64I:       # %bb.0:
1869f73844d9SYeting Kuo; RV64I-NEXT:    bltu a1, a0, .LBB29_2
187095075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
187195075d3dSAlex Bradbury; RV64I-NEXT:    mv a2, a3
1872f73844d9SYeting Kuo; RV64I-NEXT:  .LBB29_2:
187395075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a2
187495075d3dSAlex Bradbury; RV64I-NEXT:    ret
187595075d3dSAlex Bradbury;
18769bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: setugt:
18779bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
18789bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor t0, a1, a3
18799bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sltu a1, a3, a1
18809bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sltu a0, a2, a0
1881*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, t0
18829bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, t0
1883*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
1884*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a6, a0
1885*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a2, a4, a0
1886*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a3, a7, a0
1887*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a4, a5, a0
1888*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
1889*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a4, a3
18909bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
18919bd97fcfSCraig Topper;
1892f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: setugt:
1893f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
1894f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    sltu a0, a1, a0
1895f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a1, a3, a0
1896f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a0
1897f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a1
1898f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
1899f68f04d0SPhilipp Tomsich;
1900f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: setugt:
1901f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
1902f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    sltu a0, a1, a0
1903f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a2, a3, a0
1904f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a2
1905f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
1906a755e80eSAlex Bradbury;
1907a755e80eSAlex Bradbury; RV32ZICOND-LABEL: setugt:
1908a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
1909a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor t0, a1, a3
1910a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    sltu a1, a3, a1
1911e28307e9SCraig Topper; RV32ZICOND-NEXT:    sltu a0, a2, a0
1912*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a1, t0
1913e28307e9SCraig Topper; RV32ZICOND-NEXT:    czero.nez a0, a0, t0
1914*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
1915*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a1, a6, a0
1916*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a2, a4, a0
1917*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a3, a7, a0
1918*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a4, a5, a0
1919*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
1920*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a4, a3
1921a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
1922a755e80eSAlex Bradbury;
1923a755e80eSAlex Bradbury; RV64ZICOND-LABEL: setugt:
1924a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
1925a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    sltu a0, a1, a0
1926a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a1, a3, a0
1927a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a2, a0
1928a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a0, a1
1929a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
1930f68f04d0SPhilipp Tomsich  %rc = icmp ugt i64 %a, %b
1931f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
1932f68f04d0SPhilipp Tomsich  ret i64 %sel
1933f68f04d0SPhilipp Tomsich}
1934f68f04d0SPhilipp Tomsich
1935f68f04d0SPhilipp Tomsichdefine i64 @setuge(i64 %a, i64 %b, i64 %rs1, i64 %rs2) {
193695075d3dSAlex Bradbury; RV32I-LABEL: setuge:
193795075d3dSAlex Bradbury; RV32I:       # %bb.0:
1938f73844d9SYeting Kuo; RV32I-NEXT:    beq a1, a3, .LBB30_2
193995075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
194095075d3dSAlex Bradbury; RV32I-NEXT:    sltu a0, a1, a3
1941f73844d9SYeting Kuo; RV32I-NEXT:    bnez a0, .LBB30_3
1942f73844d9SYeting Kuo; RV32I-NEXT:    j .LBB30_4
1943f73844d9SYeting Kuo; RV32I-NEXT:  .LBB30_2:
194495075d3dSAlex Bradbury; RV32I-NEXT:    sltu a0, a0, a2
1945f73844d9SYeting Kuo; RV32I-NEXT:    beqz a0, .LBB30_4
1946f73844d9SYeting Kuo; RV32I-NEXT:  .LBB30_3:
194795075d3dSAlex Bradbury; RV32I-NEXT:    mv a4, a6
194895075d3dSAlex Bradbury; RV32I-NEXT:    mv a5, a7
1949f73844d9SYeting Kuo; RV32I-NEXT:  .LBB30_4:
195095075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
195195075d3dSAlex Bradbury; RV32I-NEXT:    mv a1, a5
195295075d3dSAlex Bradbury; RV32I-NEXT:    ret
195395075d3dSAlex Bradbury;
195495075d3dSAlex Bradbury; RV64I-LABEL: setuge:
195595075d3dSAlex Bradbury; RV64I:       # %bb.0:
1956f73844d9SYeting Kuo; RV64I-NEXT:    bgeu a0, a1, .LBB30_2
195795075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
195895075d3dSAlex Bradbury; RV64I-NEXT:    mv a2, a3
1959f73844d9SYeting Kuo; RV64I-NEXT:  .LBB30_2:
196095075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a2
196195075d3dSAlex Bradbury; RV64I-NEXT:    ret
196295075d3dSAlex Bradbury;
19639bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: setuge:
19649bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
19659bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor t0, a1, a3
19669bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sltu a1, a1, a3
19679bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sltu a0, a0, a2
1968*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, t0
19699bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, t0
1970*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
1971*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a6, a0
1972*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a2, a4, a0
1973*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a3, a7, a0
1974*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a4, a5, a0
1975*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
1976*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a4, a3
19779bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
19789bd97fcfSCraig Topper;
1979f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: setuge:
1980f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
1981f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    sltu a0, a0, a1
19827dfe6232SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a3, a0
19837dfe6232SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a0
1984f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a1
1985f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
1986f68f04d0SPhilipp Tomsich;
1987f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: setuge:
1988f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
1989f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    sltu a0, a0, a1
1990f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a2, a3, a0
1991f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a2
1992f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
1993a755e80eSAlex Bradbury;
1994a755e80eSAlex Bradbury; RV32ZICOND-LABEL: setuge:
1995a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
1996a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor t0, a1, a3
1997a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    sltu a1, a1, a3
1998e28307e9SCraig Topper; RV32ZICOND-NEXT:    sltu a0, a0, a2
1999*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a1, t0
2000e28307e9SCraig Topper; RV32ZICOND-NEXT:    czero.nez a0, a0, t0
2001*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
2002*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a6, a0
2003*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a2, a4, a0
2004*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a3, a7, a0
2005*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a4, a5, a0
2006*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
2007*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a4, a3
2008a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
2009a755e80eSAlex Bradbury;
2010a755e80eSAlex Bradbury; RV64ZICOND-LABEL: setuge:
2011a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
2012a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    sltu a0, a0, a1
20137dfe6232SCraig Topper; RV64ZICOND-NEXT:    czero.eqz a1, a3, a0
20147dfe6232SCraig Topper; RV64ZICOND-NEXT:    czero.nez a0, a2, a0
2015a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a0, a1
2016a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
2017f68f04d0SPhilipp Tomsich  %rc = icmp uge i64 %a, %b
2018f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
2019f68f04d0SPhilipp Tomsich  ret i64 %sel
2020f68f04d0SPhilipp Tomsich}
2021f68f04d0SPhilipp Tomsich
2022f68f04d0SPhilipp Tomsichdefine i64 @setult(i64 %a, i64 %b, i64 %rs1, i64 %rs2) {
202395075d3dSAlex Bradbury; RV32I-LABEL: setult:
202495075d3dSAlex Bradbury; RV32I:       # %bb.0:
2025f73844d9SYeting Kuo; RV32I-NEXT:    beq a1, a3, .LBB31_2
202695075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
202795075d3dSAlex Bradbury; RV32I-NEXT:    sltu a0, a1, a3
2028f73844d9SYeting Kuo; RV32I-NEXT:    beqz a0, .LBB31_3
2029f73844d9SYeting Kuo; RV32I-NEXT:    j .LBB31_4
2030f73844d9SYeting Kuo; RV32I-NEXT:  .LBB31_2:
203195075d3dSAlex Bradbury; RV32I-NEXT:    sltu a0, a0, a2
2032f73844d9SYeting Kuo; RV32I-NEXT:    bnez a0, .LBB31_4
2033f73844d9SYeting Kuo; RV32I-NEXT:  .LBB31_3:
203495075d3dSAlex Bradbury; RV32I-NEXT:    mv a4, a6
203595075d3dSAlex Bradbury; RV32I-NEXT:    mv a5, a7
2036f73844d9SYeting Kuo; RV32I-NEXT:  .LBB31_4:
203795075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
203895075d3dSAlex Bradbury; RV32I-NEXT:    mv a1, a5
203995075d3dSAlex Bradbury; RV32I-NEXT:    ret
204095075d3dSAlex Bradbury;
204195075d3dSAlex Bradbury; RV64I-LABEL: setult:
204295075d3dSAlex Bradbury; RV64I:       # %bb.0:
2043f73844d9SYeting Kuo; RV64I-NEXT:    bltu a0, a1, .LBB31_2
204495075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
204595075d3dSAlex Bradbury; RV64I-NEXT:    mv a2, a3
2046f73844d9SYeting Kuo; RV64I-NEXT:  .LBB31_2:
204795075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a2
204895075d3dSAlex Bradbury; RV64I-NEXT:    ret
204995075d3dSAlex Bradbury;
20509bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: setult:
20519bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
20529bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor t0, a1, a3
20539bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sltu a1, a1, a3
20549bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sltu a0, a0, a2
2055*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, t0
20569bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, t0
2057*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
2058*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a6, a0
2059*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a2, a4, a0
2060*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a3, a7, a0
2061*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a4, a5, a0
2062*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
2063*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a4, a3
20649bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
20659bd97fcfSCraig Topper;
2066f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: setult:
2067f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
2068f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    sltu a0, a0, a1
2069f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a1, a3, a0
2070f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a0
2071f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a1
2072f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
2073f68f04d0SPhilipp Tomsich;
2074f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: setult:
2075f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
2076f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    sltu a0, a0, a1
2077f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a2, a3, a0
2078f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a2
2079f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
2080a755e80eSAlex Bradbury;
2081a755e80eSAlex Bradbury; RV32ZICOND-LABEL: setult:
2082a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
2083a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor t0, a1, a3
2084a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    sltu a1, a1, a3
2085e28307e9SCraig Topper; RV32ZICOND-NEXT:    sltu a0, a0, a2
2086*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a1, t0
2087e28307e9SCraig Topper; RV32ZICOND-NEXT:    czero.nez a0, a0, t0
2088*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
2089*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a1, a6, a0
2090*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a2, a4, a0
2091*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a3, a7, a0
2092*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a4, a5, a0
2093*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
2094*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a4, a3
2095a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
2096a755e80eSAlex Bradbury;
2097a755e80eSAlex Bradbury; RV64ZICOND-LABEL: setult:
2098a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
2099a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    sltu a0, a0, a1
2100a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a1, a3, a0
2101a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a2, a0
2102a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a0, a1
2103a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
2104f68f04d0SPhilipp Tomsich  %rc = icmp ult i64 %a, %b
2105f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
2106f68f04d0SPhilipp Tomsich  ret i64 %sel
2107f68f04d0SPhilipp Tomsich}
2108f68f04d0SPhilipp Tomsich
2109f68f04d0SPhilipp Tomsichdefine i64 @setule(i64 %a, i64 %b, i64 %rs1, i64 %rs2) {
211095075d3dSAlex Bradbury; RV32I-LABEL: setule:
211195075d3dSAlex Bradbury; RV32I:       # %bb.0:
2112f73844d9SYeting Kuo; RV32I-NEXT:    beq a1, a3, .LBB32_2
211395075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
211495075d3dSAlex Bradbury; RV32I-NEXT:    sltu a0, a3, a1
2115f73844d9SYeting Kuo; RV32I-NEXT:    bnez a0, .LBB32_3
2116f73844d9SYeting Kuo; RV32I-NEXT:    j .LBB32_4
2117f73844d9SYeting Kuo; RV32I-NEXT:  .LBB32_2:
211895075d3dSAlex Bradbury; RV32I-NEXT:    sltu a0, a2, a0
2119f73844d9SYeting Kuo; RV32I-NEXT:    beqz a0, .LBB32_4
2120f73844d9SYeting Kuo; RV32I-NEXT:  .LBB32_3:
212195075d3dSAlex Bradbury; RV32I-NEXT:    mv a4, a6
212295075d3dSAlex Bradbury; RV32I-NEXT:    mv a5, a7
2123f73844d9SYeting Kuo; RV32I-NEXT:  .LBB32_4:
212495075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
212595075d3dSAlex Bradbury; RV32I-NEXT:    mv a1, a5
212695075d3dSAlex Bradbury; RV32I-NEXT:    ret
212795075d3dSAlex Bradbury;
212895075d3dSAlex Bradbury; RV64I-LABEL: setule:
212995075d3dSAlex Bradbury; RV64I:       # %bb.0:
2130f73844d9SYeting Kuo; RV64I-NEXT:    bgeu a1, a0, .LBB32_2
213195075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
213295075d3dSAlex Bradbury; RV64I-NEXT:    mv a2, a3
2133f73844d9SYeting Kuo; RV64I-NEXT:  .LBB32_2:
213495075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a2
213595075d3dSAlex Bradbury; RV64I-NEXT:    ret
213695075d3dSAlex Bradbury;
21379bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: setule:
21389bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
21399bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor t0, a1, a3
21409bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sltu a1, a3, a1
21419bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sltu a0, a2, a0
2142*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, t0
21439bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, t0
2144*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
2145*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a6, a0
2146*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a2, a4, a0
2147*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a3, a7, a0
2148*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a4, a5, a0
2149*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
2150*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a4, a3
21519bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
21529bd97fcfSCraig Topper;
2153f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: setule:
2154f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
2155f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    sltu a0, a1, a0
21567dfe6232SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a3, a0
21577dfe6232SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a0
2158f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a1
2159f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
2160f68f04d0SPhilipp Tomsich;
2161f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: setule:
2162f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
2163f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    sltu a0, a1, a0
2164f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a2, a3, a0
2165f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a2
2166f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
2167a755e80eSAlex Bradbury;
2168a755e80eSAlex Bradbury; RV32ZICOND-LABEL: setule:
2169a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
2170a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor t0, a1, a3
2171a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    sltu a1, a3, a1
2172e28307e9SCraig Topper; RV32ZICOND-NEXT:    sltu a0, a2, a0
2173*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a1, t0
2174e28307e9SCraig Topper; RV32ZICOND-NEXT:    czero.nez a0, a0, t0
2175*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
2176*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a6, a0
2177*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a2, a4, a0
2178*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a3, a7, a0
2179*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a4, a5, a0
2180*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
2181*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a4, a3
2182a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
2183a755e80eSAlex Bradbury;
2184a755e80eSAlex Bradbury; RV64ZICOND-LABEL: setule:
2185a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
2186a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    sltu a0, a1, a0
21877dfe6232SCraig Topper; RV64ZICOND-NEXT:    czero.eqz a1, a3, a0
21887dfe6232SCraig Topper; RV64ZICOND-NEXT:    czero.nez a0, a2, a0
2189a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a0, a1
2190a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
2191f68f04d0SPhilipp Tomsich  %rc = icmp ule i64 %a, %b
2192f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
2193f68f04d0SPhilipp Tomsich  ret i64 %sel
2194f68f04d0SPhilipp Tomsich}
2195f68f04d0SPhilipp Tomsich
2196f68f04d0SPhilipp Tomsichdefine i64 @seteq_zero(i64 %a, i64 %rs1, i64 %rs2) {
219795075d3dSAlex Bradbury; RV32I-LABEL: seteq_zero:
219895075d3dSAlex Bradbury; RV32I:       # %bb.0:
2199*9122c523SPengcheng Wang; RV32I-NEXT:    or a1, a0, a1
220095075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a2
2201*9122c523SPengcheng Wang; RV32I-NEXT:    beqz a1, .LBB33_2
220295075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
220395075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
2204*9122c523SPengcheng Wang; RV32I-NEXT:    mv a3, a5
2205f73844d9SYeting Kuo; RV32I-NEXT:  .LBB33_2:
2206*9122c523SPengcheng Wang; RV32I-NEXT:    mv a1, a3
220795075d3dSAlex Bradbury; RV32I-NEXT:    ret
220895075d3dSAlex Bradbury;
220995075d3dSAlex Bradbury; RV64I-LABEL: seteq_zero:
221095075d3dSAlex Bradbury; RV64I:       # %bb.0:
2211f73844d9SYeting Kuo; RV64I-NEXT:    beqz a0, .LBB33_2
221295075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
221395075d3dSAlex Bradbury; RV64I-NEXT:    mv a1, a2
2214f73844d9SYeting Kuo; RV64I-NEXT:  .LBB33_2:
221595075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a1
221695075d3dSAlex Bradbury; RV64I-NEXT:    ret
221795075d3dSAlex Bradbury;
22189bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: seteq_zero:
22199bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
2220*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
2221*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a4, a0
2222*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a2, a2, a0
2223*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a4, a5, a0
2224*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a3, a3, a0
2225*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
2226*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a3, a4
22279bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
22289bd97fcfSCraig Topper;
2229f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: seteq_zero:
2230f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
2231e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskc a2, a2, a0
2232e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a1, a0
2233e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a2
2234f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
2235f68f04d0SPhilipp Tomsich;
2236f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: seteq_zero:
2237f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
2238f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a1, a2, a0
2239f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
2240f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
2241a755e80eSAlex Bradbury;
2242a755e80eSAlex Bradbury; RV32ZICOND-LABEL: seteq_zero:
2243a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
2244*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
2245*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a4, a0
2246*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a2, a2, a0
2247*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a4, a5, a0
2248*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a3, a3, a0
2249*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
2250*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a3, a4
2251a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
2252a755e80eSAlex Bradbury;
2253a755e80eSAlex Bradbury; RV64ZICOND-LABEL: seteq_zero:
2254a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
2255e28307e9SCraig Topper; RV64ZICOND-NEXT:    czero.eqz a2, a2, a0
2256e28307e9SCraig Topper; RV64ZICOND-NEXT:    czero.nez a0, a1, a0
2257e28307e9SCraig Topper; RV64ZICOND-NEXT:    or a0, a0, a2
2258a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
2259f68f04d0SPhilipp Tomsich  %rc = icmp eq i64 %a, 0
2260f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
2261f68f04d0SPhilipp Tomsich  ret i64 %sel
2262f68f04d0SPhilipp Tomsich}
2263f68f04d0SPhilipp Tomsich
2264f68f04d0SPhilipp Tomsichdefine i64 @setne_zero(i64 %a, i64 %rs1, i64 %rs2) {
226595075d3dSAlex Bradbury; RV32I-LABEL: setne_zero:
226695075d3dSAlex Bradbury; RV32I:       # %bb.0:
2267*9122c523SPengcheng Wang; RV32I-NEXT:    or a1, a0, a1
226895075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a2
2269*9122c523SPengcheng Wang; RV32I-NEXT:    bnez a1, .LBB34_2
227095075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
227195075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
2272*9122c523SPengcheng Wang; RV32I-NEXT:    mv a3, a5
2273f73844d9SYeting Kuo; RV32I-NEXT:  .LBB34_2:
2274*9122c523SPengcheng Wang; RV32I-NEXT:    mv a1, a3
227595075d3dSAlex Bradbury; RV32I-NEXT:    ret
227695075d3dSAlex Bradbury;
227795075d3dSAlex Bradbury; RV64I-LABEL: setne_zero:
227895075d3dSAlex Bradbury; RV64I:       # %bb.0:
2279f73844d9SYeting Kuo; RV64I-NEXT:    bnez a0, .LBB34_2
228095075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
228195075d3dSAlex Bradbury; RV64I-NEXT:    mv a1, a2
2282f73844d9SYeting Kuo; RV64I-NEXT:  .LBB34_2:
228395075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a1
228495075d3dSAlex Bradbury; RV64I-NEXT:    ret
228595075d3dSAlex Bradbury;
22869bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: setne_zero:
22879bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
2288*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
2289*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a4, a0
2290*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a2, a2, a0
2291*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a4, a5, a0
2292*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a3, a3, a0
2293*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
2294*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a3, a4
22959bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
22969bd97fcfSCraig Topper;
2297f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: setne_zero:
2298f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
2299f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a2, a2, a0
2300f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a1, a0
2301f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a2
2302f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
2303f68f04d0SPhilipp Tomsich;
2304f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: setne_zero:
2305f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
2306f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, a2, a0
2307f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
2308f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
2309a755e80eSAlex Bradbury;
2310a755e80eSAlex Bradbury; RV32ZICOND-LABEL: setne_zero:
2311a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
2312*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
2313*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a1, a4, a0
2314*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a2, a2, a0
2315*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a4, a5, a0
2316*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a3, a3, a0
2317*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
2318*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a3, a4
2319a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
2320a755e80eSAlex Bradbury;
2321a755e80eSAlex Bradbury; RV64ZICOND-LABEL: setne_zero:
2322a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
2323a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a2, a2, a0
2324a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a1, a0
2325a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a0, a2
2326a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
2327f68f04d0SPhilipp Tomsich  %rc = icmp ne i64 %a, 0
2328f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
2329f68f04d0SPhilipp Tomsich  ret i64 %sel
2330f68f04d0SPhilipp Tomsich}
2331f68f04d0SPhilipp Tomsich
2332f68f04d0SPhilipp Tomsichdefine i64 @seteq_constant(i64 %a, i64 %rs1, i64 %rs2) {
233395075d3dSAlex Bradbury; RV32I-LABEL: seteq_constant:
233495075d3dSAlex Bradbury; RV32I:       # %bb.0:
233595075d3dSAlex Bradbury; RV32I-NEXT:    xori a0, a0, 123
2336*9122c523SPengcheng Wang; RV32I-NEXT:    or a1, a0, a1
233795075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a2
2338*9122c523SPengcheng Wang; RV32I-NEXT:    beqz a1, .LBB35_2
233995075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
234095075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
2341*9122c523SPengcheng Wang; RV32I-NEXT:    mv a3, a5
2342f73844d9SYeting Kuo; RV32I-NEXT:  .LBB35_2:
2343*9122c523SPengcheng Wang; RV32I-NEXT:    mv a1, a3
234495075d3dSAlex Bradbury; RV32I-NEXT:    ret
234595075d3dSAlex Bradbury;
234695075d3dSAlex Bradbury; RV64I-LABEL: seteq_constant:
234795075d3dSAlex Bradbury; RV64I:       # %bb.0:
234895075d3dSAlex Bradbury; RV64I-NEXT:    li a3, 123
2349f73844d9SYeting Kuo; RV64I-NEXT:    beq a0, a3, .LBB35_2
235095075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
235195075d3dSAlex Bradbury; RV64I-NEXT:    mv a1, a2
2352f73844d9SYeting Kuo; RV64I-NEXT:  .LBB35_2:
235395075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a1
235495075d3dSAlex Bradbury; RV64I-NEXT:    ret
235595075d3dSAlex Bradbury;
23569bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: seteq_constant:
23579bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
23589bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xori a0, a0, 123
2359*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
2360*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a4, a0
2361*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a2, a2, a0
2362*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a4, a5, a0
2363*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a3, a3, a0
2364*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
2365*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a3, a4
23669bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
23679bd97fcfSCraig Topper;
2368f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: seteq_constant:
2369f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
2370f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    addi a0, a0, -123
2371e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskc a2, a2, a0
2372e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a1, a0
2373e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a2
2374f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
2375f68f04d0SPhilipp Tomsich;
2376f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: seteq_constant:
2377f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
2378f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    addi a0, a0, -123
2379f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a1, a2, a0
2380f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
2381f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
2382a755e80eSAlex Bradbury;
2383a755e80eSAlex Bradbury; RV32ZICOND-LABEL: seteq_constant:
2384a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
2385a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xori a0, a0, 123
2386*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
2387*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a4, a0
2388*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a2, a2, a0
2389*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a4, a5, a0
2390*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a3, a3, a0
2391*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
2392*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a3, a4
2393a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
2394a755e80eSAlex Bradbury;
2395a755e80eSAlex Bradbury; RV64ZICOND-LABEL: seteq_constant:
2396a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
2397a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    addi a0, a0, -123
2398e28307e9SCraig Topper; RV64ZICOND-NEXT:    czero.eqz a2, a2, a0
2399e28307e9SCraig Topper; RV64ZICOND-NEXT:    czero.nez a0, a1, a0
2400e28307e9SCraig Topper; RV64ZICOND-NEXT:    or a0, a0, a2
2401a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
2402f68f04d0SPhilipp Tomsich  %rc = icmp eq i64 %a, 123
2403f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
2404f68f04d0SPhilipp Tomsich  ret i64 %sel
2405f68f04d0SPhilipp Tomsich}
2406f68f04d0SPhilipp Tomsich
2407f68f04d0SPhilipp Tomsichdefine i64 @setne_constant(i64 %a, i64 %rs1, i64 %rs2) {
240895075d3dSAlex Bradbury; RV32I-LABEL: setne_constant:
240995075d3dSAlex Bradbury; RV32I:       # %bb.0:
241095075d3dSAlex Bradbury; RV32I-NEXT:    xori a0, a0, 456
2411*9122c523SPengcheng Wang; RV32I-NEXT:    or a1, a0, a1
241295075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a2
2413*9122c523SPengcheng Wang; RV32I-NEXT:    bnez a1, .LBB36_2
241495075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
241595075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
2416*9122c523SPengcheng Wang; RV32I-NEXT:    mv a3, a5
2417f73844d9SYeting Kuo; RV32I-NEXT:  .LBB36_2:
2418*9122c523SPengcheng Wang; RV32I-NEXT:    mv a1, a3
241995075d3dSAlex Bradbury; RV32I-NEXT:    ret
242095075d3dSAlex Bradbury;
242195075d3dSAlex Bradbury; RV64I-LABEL: setne_constant:
242295075d3dSAlex Bradbury; RV64I:       # %bb.0:
242395075d3dSAlex Bradbury; RV64I-NEXT:    li a3, 456
2424f73844d9SYeting Kuo; RV64I-NEXT:    bne a0, a3, .LBB36_2
242595075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
242695075d3dSAlex Bradbury; RV64I-NEXT:    mv a1, a2
2427f73844d9SYeting Kuo; RV64I-NEXT:  .LBB36_2:
242895075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a1
242995075d3dSAlex Bradbury; RV64I-NEXT:    ret
243095075d3dSAlex Bradbury;
24319bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: setne_constant:
24329bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
24339bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xori a0, a0, 456
2434*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
2435*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a4, a0
2436*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a2, a2, a0
2437*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a4, a5, a0
2438*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a3, a3, a0
2439*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
2440*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a3, a4
24419bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
24429bd97fcfSCraig Topper;
2443f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: setne_constant:
2444f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
2445f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    addi a0, a0, -456
2446f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a2, a2, a0
2447f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a1, a0
2448f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a2
2449f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
2450f68f04d0SPhilipp Tomsich;
2451f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: setne_constant:
2452f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
2453f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    addi a0, a0, -456
2454f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, a2, a0
2455f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
2456f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
2457a755e80eSAlex Bradbury;
2458a755e80eSAlex Bradbury; RV32ZICOND-LABEL: setne_constant:
2459a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
2460a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xori a0, a0, 456
2461*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
2462*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a1, a4, a0
2463*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a2, a2, a0
2464*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a4, a5, a0
2465*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a3, a3, a0
2466*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
2467*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a3, a4
2468a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
2469a755e80eSAlex Bradbury;
2470a755e80eSAlex Bradbury; RV64ZICOND-LABEL: setne_constant:
2471a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
2472a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    addi a0, a0, -456
2473a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a2, a2, a0
2474a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a1, a0
2475a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a0, a2
2476a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
2477f68f04d0SPhilipp Tomsich  %rc = icmp ne i64 %a, 456
2478f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
2479f68f04d0SPhilipp Tomsich  ret i64 %sel
2480f68f04d0SPhilipp Tomsich}
2481f68f04d0SPhilipp Tomsich
2482f68f04d0SPhilipp Tomsichdefine i64 @seteq_2048(i64 %a, i64 %rs1, i64 %rs2) {
248395075d3dSAlex Bradbury; RV32I-LABEL: seteq_2048:
248495075d3dSAlex Bradbury; RV32I:       # %bb.0:
2485f73844d9SYeting Kuo; RV32I-NEXT:    binvi a0, a0, 11
2486*9122c523SPengcheng Wang; RV32I-NEXT:    or a1, a0, a1
248795075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a2
2488*9122c523SPengcheng Wang; RV32I-NEXT:    beqz a1, .LBB37_2
248995075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
249095075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
2491*9122c523SPengcheng Wang; RV32I-NEXT:    mv a3, a5
2492f73844d9SYeting Kuo; RV32I-NEXT:  .LBB37_2:
2493*9122c523SPengcheng Wang; RV32I-NEXT:    mv a1, a3
249495075d3dSAlex Bradbury; RV32I-NEXT:    ret
249595075d3dSAlex Bradbury;
249695075d3dSAlex Bradbury; RV64I-LABEL: seteq_2048:
249795075d3dSAlex Bradbury; RV64I:       # %bb.0:
2498f73844d9SYeting Kuo; RV64I-NEXT:    bseti a3, zero, 11
2499f73844d9SYeting Kuo; RV64I-NEXT:    beq a0, a3, .LBB37_2
250095075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
250195075d3dSAlex Bradbury; RV64I-NEXT:    mv a1, a2
2502f73844d9SYeting Kuo; RV64I-NEXT:  .LBB37_2:
250395075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a1
250495075d3dSAlex Bradbury; RV64I-NEXT:    ret
250595075d3dSAlex Bradbury;
25069bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: seteq_2048:
25079bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
25089bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    binvi a0, a0, 11
2509*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
2510*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a4, a0
2511*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a2, a2, a0
2512*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a4, a5, a0
2513*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a3, a3, a0
2514*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
2515*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a3, a4
25169bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
25179bd97fcfSCraig Topper;
2518f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: seteq_2048:
2519f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
2520f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    addi a0, a0, -2048
2521e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskc a2, a2, a0
2522e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a1, a0
2523e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a2
2524f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
2525f68f04d0SPhilipp Tomsich;
2526f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: seteq_2048:
2527f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
2528f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    addi a0, a0, -2048
2529f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a1, a2, a0
2530f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
2531f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
2532a755e80eSAlex Bradbury;
2533a755e80eSAlex Bradbury; RV32ZICOND-LABEL: seteq_2048:
2534a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
2535f73844d9SYeting Kuo; RV32ZICOND-NEXT:    binvi a0, a0, 11
2536*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
2537*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a4, a0
2538*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a2, a2, a0
2539*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a4, a5, a0
2540*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a3, a3, a0
2541*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
2542*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a3, a4
2543a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
2544a755e80eSAlex Bradbury;
2545a755e80eSAlex Bradbury; RV64ZICOND-LABEL: seteq_2048:
2546a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
2547a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    addi a0, a0, -2048
2548e28307e9SCraig Topper; RV64ZICOND-NEXT:    czero.eqz a2, a2, a0
2549e28307e9SCraig Topper; RV64ZICOND-NEXT:    czero.nez a0, a1, a0
2550e28307e9SCraig Topper; RV64ZICOND-NEXT:    or a0, a0, a2
2551a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
2552f68f04d0SPhilipp Tomsich  %rc = icmp eq i64 %a, 2048
2553f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
2554f68f04d0SPhilipp Tomsich  ret i64 %sel
2555f68f04d0SPhilipp Tomsich}
2556f68f04d0SPhilipp Tomsich
2557f68f04d0SPhilipp Tomsichdefine i64 @seteq_neg2048(i64 %a, i64 %rs1, i64 %rs2) {
255895075d3dSAlex Bradbury; RV32I-LABEL: seteq_neg2048:
255995075d3dSAlex Bradbury; RV32I:       # %bb.0:
256095075d3dSAlex Bradbury; RV32I-NEXT:    not a1, a1
256195075d3dSAlex Bradbury; RV32I-NEXT:    xori a0, a0, -2048
2562*9122c523SPengcheng Wang; RV32I-NEXT:    or a1, a0, a1
256395075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a2
2564*9122c523SPengcheng Wang; RV32I-NEXT:    beqz a1, .LBB38_2
256595075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
256695075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
2567*9122c523SPengcheng Wang; RV32I-NEXT:    mv a3, a5
2568f73844d9SYeting Kuo; RV32I-NEXT:  .LBB38_2:
2569*9122c523SPengcheng Wang; RV32I-NEXT:    mv a1, a3
257095075d3dSAlex Bradbury; RV32I-NEXT:    ret
257195075d3dSAlex Bradbury;
257295075d3dSAlex Bradbury; RV64I-LABEL: seteq_neg2048:
257395075d3dSAlex Bradbury; RV64I:       # %bb.0:
257495075d3dSAlex Bradbury; RV64I-NEXT:    li a3, -2048
2575f73844d9SYeting Kuo; RV64I-NEXT:    beq a0, a3, .LBB38_2
257695075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
257795075d3dSAlex Bradbury; RV64I-NEXT:    mv a1, a2
2578f73844d9SYeting Kuo; RV64I-NEXT:  .LBB38_2:
257995075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a1
258095075d3dSAlex Bradbury; RV64I-NEXT:    ret
258195075d3dSAlex Bradbury;
25829bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: seteq_neg2048:
25839bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
25849bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    not a1, a1
25859bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xori a0, a0, -2048
2586*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
2587*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a4, a0
2588*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a2, a2, a0
2589*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a4, a5, a0
2590*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a3, a3, a0
2591*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
2592*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a3, a4
25939bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
25949bd97fcfSCraig Topper;
2595f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: seteq_neg2048:
2596f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
2597f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    xori a0, a0, -2048
2598e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskc a2, a2, a0
2599e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a1, a0
2600e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a2
2601f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
2602f68f04d0SPhilipp Tomsich;
2603f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: seteq_neg2048:
2604f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
2605f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    xori a0, a0, -2048
2606f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a1, a2, a0
2607f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
2608f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
2609a755e80eSAlex Bradbury;
2610a755e80eSAlex Bradbury; RV32ZICOND-LABEL: seteq_neg2048:
2611a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
2612a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    not a1, a1
2613a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xori a0, a0, -2048
2614*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
2615*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a4, a0
2616*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a2, a2, a0
2617*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a4, a5, a0
2618*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a3, a3, a0
2619*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
2620*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a3, a4
2621a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
2622a755e80eSAlex Bradbury;
2623a755e80eSAlex Bradbury; RV64ZICOND-LABEL: seteq_neg2048:
2624a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
2625a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    xori a0, a0, -2048
2626e28307e9SCraig Topper; RV64ZICOND-NEXT:    czero.eqz a2, a2, a0
2627e28307e9SCraig Topper; RV64ZICOND-NEXT:    czero.nez a0, a1, a0
2628e28307e9SCraig Topper; RV64ZICOND-NEXT:    or a0, a0, a2
2629a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
2630f68f04d0SPhilipp Tomsich  %rc = icmp eq i64 %a, -2048
2631f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
2632f68f04d0SPhilipp Tomsich  ret i64 %sel
2633f68f04d0SPhilipp Tomsich}
2634f68f04d0SPhilipp Tomsich
2635f68f04d0SPhilipp Tomsichdefine i64 @setne_neg2048(i64 %a, i64 %rs1, i64 %rs2) {
263695075d3dSAlex Bradbury; RV32I-LABEL: setne_neg2048:
263795075d3dSAlex Bradbury; RV32I:       # %bb.0:
263895075d3dSAlex Bradbury; RV32I-NEXT:    not a1, a1
263995075d3dSAlex Bradbury; RV32I-NEXT:    xori a0, a0, -2048
2640*9122c523SPengcheng Wang; RV32I-NEXT:    or a1, a0, a1
264195075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a2
2642*9122c523SPengcheng Wang; RV32I-NEXT:    bnez a1, .LBB39_2
264395075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.1:
264495075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, a4
2645*9122c523SPengcheng Wang; RV32I-NEXT:    mv a3, a5
2646f73844d9SYeting Kuo; RV32I-NEXT:  .LBB39_2:
2647*9122c523SPengcheng Wang; RV32I-NEXT:    mv a1, a3
264895075d3dSAlex Bradbury; RV32I-NEXT:    ret
264995075d3dSAlex Bradbury;
265095075d3dSAlex Bradbury; RV64I-LABEL: setne_neg2048:
265195075d3dSAlex Bradbury; RV64I:       # %bb.0:
265295075d3dSAlex Bradbury; RV64I-NEXT:    li a3, -2048
2653f73844d9SYeting Kuo; RV64I-NEXT:    bne a0, a3, .LBB39_2
265495075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.1:
265595075d3dSAlex Bradbury; RV64I-NEXT:    mv a1, a2
2656f73844d9SYeting Kuo; RV64I-NEXT:  .LBB39_2:
265795075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, a1
265895075d3dSAlex Bradbury; RV64I-NEXT:    ret
265995075d3dSAlex Bradbury;
26609bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: setne_neg2048:
26619bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
26629bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    not a1, a1
26639bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xori a0, a0, -2048
2664*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
2665*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a4, a0
2666*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a2, a2, a0
2667*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a4, a5, a0
2668*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a3, a3, a0
2669*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a2, a1
2670*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a3, a4
26719bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
26729bd97fcfSCraig Topper;
2673f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: setne_neg2048:
2674f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
2675f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    xori a0, a0, -2048
2676f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a2, a2, a0
2677f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a1, a0
2678f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a2
2679f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
2680f68f04d0SPhilipp Tomsich;
2681f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: setne_neg2048:
2682f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
2683f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    xori a0, a0, -2048
2684f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, a2, a0
2685f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
2686f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
2687a755e80eSAlex Bradbury;
2688a755e80eSAlex Bradbury; RV32ZICOND-LABEL: setne_neg2048:
2689a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
2690a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    not a1, a1
2691a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xori a0, a0, -2048
2692*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a1
2693*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a1, a4, a0
2694*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a2, a2, a0
2695*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a4, a5, a0
2696*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a3, a3, a0
2697*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a1
2698*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a3, a4
2699a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
2700a755e80eSAlex Bradbury;
2701a755e80eSAlex Bradbury; RV64ZICOND-LABEL: setne_neg2048:
2702a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
2703a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    xori a0, a0, -2048
2704a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a2, a2, a0
2705a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a1, a0
2706a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    or a0, a0, a2
2707a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
2708f68f04d0SPhilipp Tomsich  %rc = icmp ne i64 %a, -2048
2709f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 %rs2
2710f68f04d0SPhilipp Tomsich  ret i64 %sel
2711f68f04d0SPhilipp Tomsich}
2712f68f04d0SPhilipp Tomsich
2713f68f04d0SPhilipp Tomsichdefine i64 @zero1_seteq(i64 %a, i64 %b, i64 %rs1) {
271495075d3dSAlex Bradbury; RV32I-LABEL: zero1_seteq:
271595075d3dSAlex Bradbury; RV32I:       # %bb.0:
271695075d3dSAlex Bradbury; RV32I-NEXT:    xor a1, a1, a3
271795075d3dSAlex Bradbury; RV32I-NEXT:    xor a0, a0, a2
271895075d3dSAlex Bradbury; RV32I-NEXT:    or a0, a0, a1
271995075d3dSAlex Bradbury; RV32I-NEXT:    snez a0, a0
272095075d3dSAlex Bradbury; RV32I-NEXT:    addi a1, a0, -1
272195075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a1, a4
272295075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a5
272395075d3dSAlex Bradbury; RV32I-NEXT:    ret
272495075d3dSAlex Bradbury;
272595075d3dSAlex Bradbury; RV64I-LABEL: zero1_seteq:
272695075d3dSAlex Bradbury; RV64I:       # %bb.0:
272795075d3dSAlex Bradbury; RV64I-NEXT:    xor a0, a0, a1
272895075d3dSAlex Bradbury; RV64I-NEXT:    snez a0, a0
272995075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
273095075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a2
273195075d3dSAlex Bradbury; RV64I-NEXT:    ret
273295075d3dSAlex Bradbury;
27339bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero1_seteq:
27349bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
27359bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor a1, a1, a3
27369bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor a0, a0, a2
27379bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a1, a0, a1
27389bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a4, a1
27399bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a5, a1
27409bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
27419bd97fcfSCraig Topper;
2742f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero1_seteq:
2743f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
2744f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    xor a0, a0, a1
2745f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a0
2746f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
2747f68f04d0SPhilipp Tomsich;
2748f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero1_seteq:
2749f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
2750f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    xor a0, a0, a1
2751f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a2, zero, a0
2752f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a2
2753f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
2754a755e80eSAlex Bradbury;
2755a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero1_seteq:
2756a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
2757a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor a1, a1, a3
2758a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor a0, a0, a2
2759a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    or a1, a0, a1
2760a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a0, a4, a1
2761a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a1, a5, a1
2762a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
2763a755e80eSAlex Bradbury;
2764a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero1_seteq:
2765a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
2766a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    xor a0, a0, a1
2767a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a2, a0
2768a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
2769f68f04d0SPhilipp Tomsich  %rc = icmp eq i64 %a, %b
2770f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 0
2771f68f04d0SPhilipp Tomsich  ret i64 %sel
2772f68f04d0SPhilipp Tomsich}
2773f68f04d0SPhilipp Tomsich
2774f68f04d0SPhilipp Tomsichdefine i64 @zero2_seteq(i64 %a, i64 %b, i64 %rs1) {
277595075d3dSAlex Bradbury; RV32I-LABEL: zero2_seteq:
277695075d3dSAlex Bradbury; RV32I:       # %bb.0:
277795075d3dSAlex Bradbury; RV32I-NEXT:    xor a1, a1, a3
277895075d3dSAlex Bradbury; RV32I-NEXT:    xor a0, a0, a2
277995075d3dSAlex Bradbury; RV32I-NEXT:    or a0, a0, a1
278095075d3dSAlex Bradbury; RV32I-NEXT:    seqz a0, a0
278195075d3dSAlex Bradbury; RV32I-NEXT:    addi a1, a0, -1
278295075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a1, a4
278395075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a5
278495075d3dSAlex Bradbury; RV32I-NEXT:    ret
278595075d3dSAlex Bradbury;
278695075d3dSAlex Bradbury; RV64I-LABEL: zero2_seteq:
278795075d3dSAlex Bradbury; RV64I:       # %bb.0:
278895075d3dSAlex Bradbury; RV64I-NEXT:    xor a0, a0, a1
278995075d3dSAlex Bradbury; RV64I-NEXT:    seqz a0, a0
279095075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
279195075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a2
279295075d3dSAlex Bradbury; RV64I-NEXT:    ret
279395075d3dSAlex Bradbury;
27949bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero2_seteq:
27959bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
27969bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor a1, a1, a3
27979bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor a0, a0, a2
27989bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a1, a0, a1
27999bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a0, a4, a1
28009bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a5, a1
28019bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
28029bd97fcfSCraig Topper;
2803f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero2_seteq:
2804f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
2805f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    xor a0, a0, a1
2806f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a0
2807f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
2808f68f04d0SPhilipp Tomsich;
2809f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero2_seteq:
2810f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
2811f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    xor a0, a0, a1
2812f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a2, zero, a0
2813f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a2
2814f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
2815a755e80eSAlex Bradbury;
2816a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero2_seteq:
2817a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
2818a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor a1, a1, a3
2819a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor a0, a0, a2
2820a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    or a1, a0, a1
2821a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a0, a4, a1
2822a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a1, a5, a1
2823a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
2824a755e80eSAlex Bradbury;
2825a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero2_seteq:
2826a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
2827a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    xor a0, a0, a1
2828a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a2, a0
2829a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
2830f68f04d0SPhilipp Tomsich  %rc = icmp eq i64 %a, %b
2831f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 0, i64 %rs1
2832f68f04d0SPhilipp Tomsich  ret i64 %sel
2833f68f04d0SPhilipp Tomsich}
2834f68f04d0SPhilipp Tomsich
2835f68f04d0SPhilipp Tomsichdefine i64 @zero1_setne(i64 %a, i64 %b, i64 %rs1) {
283695075d3dSAlex Bradbury; RV32I-LABEL: zero1_setne:
283795075d3dSAlex Bradbury; RV32I:       # %bb.0:
283895075d3dSAlex Bradbury; RV32I-NEXT:    xor a1, a1, a3
283995075d3dSAlex Bradbury; RV32I-NEXT:    xor a0, a0, a2
284095075d3dSAlex Bradbury; RV32I-NEXT:    or a0, a0, a1
284195075d3dSAlex Bradbury; RV32I-NEXT:    seqz a0, a0
284295075d3dSAlex Bradbury; RV32I-NEXT:    addi a1, a0, -1
284395075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a1, a4
284495075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a5
284595075d3dSAlex Bradbury; RV32I-NEXT:    ret
284695075d3dSAlex Bradbury;
284795075d3dSAlex Bradbury; RV64I-LABEL: zero1_setne:
284895075d3dSAlex Bradbury; RV64I:       # %bb.0:
284995075d3dSAlex Bradbury; RV64I-NEXT:    xor a0, a0, a1
285095075d3dSAlex Bradbury; RV64I-NEXT:    seqz a0, a0
285195075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
285295075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a2
285395075d3dSAlex Bradbury; RV64I-NEXT:    ret
285495075d3dSAlex Bradbury;
28559bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero1_setne:
28569bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
28579bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor a1, a1, a3
28589bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor a0, a0, a2
28599bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a1, a0, a1
28609bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a0, a4, a1
28619bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a5, a1
28629bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
28639bd97fcfSCraig Topper;
2864f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero1_setne:
2865f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
2866f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    xor a0, a0, a1
2867f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a0
2868f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
2869f68f04d0SPhilipp Tomsich;
2870f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero1_setne:
2871f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
2872f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    xor a0, a0, a1
2873f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a2, zero, a0
2874f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a2
2875f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
2876a755e80eSAlex Bradbury;
2877a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero1_setne:
2878a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
2879a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor a1, a1, a3
2880a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor a0, a0, a2
2881a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    or a1, a0, a1
2882a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a0, a4, a1
2883a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a1, a5, a1
2884a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
2885a755e80eSAlex Bradbury;
2886a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero1_setne:
2887a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
2888a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    xor a0, a0, a1
2889a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a2, a0
2890a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
2891f68f04d0SPhilipp Tomsich  %rc = icmp ne i64 %a, %b
2892f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 0
2893f68f04d0SPhilipp Tomsich  ret i64 %sel
2894f68f04d0SPhilipp Tomsich}
2895f68f04d0SPhilipp Tomsich
2896f68f04d0SPhilipp Tomsichdefine i64 @zero2_setne(i64 %a, i64 %b, i64 %rs1) {
289795075d3dSAlex Bradbury; RV32I-LABEL: zero2_setne:
289895075d3dSAlex Bradbury; RV32I:       # %bb.0:
289995075d3dSAlex Bradbury; RV32I-NEXT:    xor a1, a1, a3
290095075d3dSAlex Bradbury; RV32I-NEXT:    xor a0, a0, a2
290195075d3dSAlex Bradbury; RV32I-NEXT:    or a0, a0, a1
290295075d3dSAlex Bradbury; RV32I-NEXT:    snez a0, a0
290395075d3dSAlex Bradbury; RV32I-NEXT:    addi a1, a0, -1
290495075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a1, a4
290595075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a5
290695075d3dSAlex Bradbury; RV32I-NEXT:    ret
290795075d3dSAlex Bradbury;
290895075d3dSAlex Bradbury; RV64I-LABEL: zero2_setne:
290995075d3dSAlex Bradbury; RV64I:       # %bb.0:
291095075d3dSAlex Bradbury; RV64I-NEXT:    xor a0, a0, a1
291195075d3dSAlex Bradbury; RV64I-NEXT:    snez a0, a0
291295075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
291395075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a2
291495075d3dSAlex Bradbury; RV64I-NEXT:    ret
291595075d3dSAlex Bradbury;
29169bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero2_setne:
29179bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
29189bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor a1, a1, a3
29199bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xor a0, a0, a2
29209bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a1, a0, a1
29219bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a4, a1
29229bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a5, a1
29239bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
29249bd97fcfSCraig Topper;
2925f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero2_setne:
2926f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
2927f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    xor a0, a0, a1
2928f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a0
2929f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
2930f68f04d0SPhilipp Tomsich;
2931f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero2_setne:
2932f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
2933f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    xor a0, a0, a1
2934f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a2, zero, a0
2935f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a2
2936f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
2937a755e80eSAlex Bradbury;
2938a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero2_setne:
2939a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
2940a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor a1, a1, a3
2941a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xor a0, a0, a2
2942a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    or a1, a0, a1
2943a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a0, a4, a1
2944a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a1, a5, a1
2945a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
2946a755e80eSAlex Bradbury;
2947a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero2_setne:
2948a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
2949a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    xor a0, a0, a1
2950a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a2, a0
2951a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
2952f68f04d0SPhilipp Tomsich  %rc = icmp ne i64 %a, %b
2953f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 0, i64 %rs1
2954f68f04d0SPhilipp Tomsich  ret i64 %sel
2955f68f04d0SPhilipp Tomsich}
2956f68f04d0SPhilipp Tomsich
2957f68f04d0SPhilipp Tomsichdefine i64 @zero1_seteq_zero(i64 %a, i64 %rs1) {
295895075d3dSAlex Bradbury; RV32I-LABEL: zero1_seteq_zero:
295995075d3dSAlex Bradbury; RV32I:       # %bb.0:
296095075d3dSAlex Bradbury; RV32I-NEXT:    or a0, a0, a1
296195075d3dSAlex Bradbury; RV32I-NEXT:    snez a0, a0
296295075d3dSAlex Bradbury; RV32I-NEXT:    addi a1, a0, -1
296395075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a1, a2
296495075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a3
296595075d3dSAlex Bradbury; RV32I-NEXT:    ret
296695075d3dSAlex Bradbury;
296795075d3dSAlex Bradbury; RV64I-LABEL: zero1_seteq_zero:
296895075d3dSAlex Bradbury; RV64I:       # %bb.0:
296995075d3dSAlex Bradbury; RV64I-NEXT:    snez a0, a0
297095075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
297195075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
297295075d3dSAlex Bradbury; RV64I-NEXT:    ret
297395075d3dSAlex Bradbury;
29749bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero1_seteq_zero:
29759bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
29769bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a1, a0, a1
29779bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a1
29789bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a3, a1
29799bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
29809bd97fcfSCraig Topper;
2981f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero1_seteq_zero:
2982f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
2983f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a1, a0
2984f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
2985f68f04d0SPhilipp Tomsich;
2986f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero1_seteq_zero:
2987f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
2988f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a1, zero, a0
2989f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
2990f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
2991a755e80eSAlex Bradbury;
2992a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero1_seteq_zero:
2993a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
2994a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    or a1, a0, a1
2995a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a0, a2, a1
2996a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a1, a3, a1
2997a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
2998a755e80eSAlex Bradbury;
2999a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero1_seteq_zero:
3000a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
3001a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a1, a0
3002a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
3003f68f04d0SPhilipp Tomsich  %rc = icmp eq i64 %a, 0
3004f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 0
3005f68f04d0SPhilipp Tomsich  ret i64 %sel
3006f68f04d0SPhilipp Tomsich}
3007f68f04d0SPhilipp Tomsich
3008f68f04d0SPhilipp Tomsichdefine i64 @zero2_seteq_zero(i64 %a, i64 %rs1) {
300995075d3dSAlex Bradbury; RV32I-LABEL: zero2_seteq_zero:
301095075d3dSAlex Bradbury; RV32I:       # %bb.0:
301195075d3dSAlex Bradbury; RV32I-NEXT:    or a0, a0, a1
301295075d3dSAlex Bradbury; RV32I-NEXT:    seqz a0, a0
301395075d3dSAlex Bradbury; RV32I-NEXT:    addi a1, a0, -1
301495075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a1, a2
301595075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a3
301695075d3dSAlex Bradbury; RV32I-NEXT:    ret
301795075d3dSAlex Bradbury;
301895075d3dSAlex Bradbury; RV64I-LABEL: zero2_seteq_zero:
301995075d3dSAlex Bradbury; RV64I:       # %bb.0:
302095075d3dSAlex Bradbury; RV64I-NEXT:    seqz a0, a0
302195075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
302295075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
302395075d3dSAlex Bradbury; RV64I-NEXT:    ret
302495075d3dSAlex Bradbury;
30259bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero2_seteq_zero:
30269bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
30279bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a1, a0, a1
30289bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a1
30299bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a3, a1
30309bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
30319bd97fcfSCraig Topper;
3032f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero2_seteq_zero:
3033f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
3034f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a1, a0
3035f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
3036f68f04d0SPhilipp Tomsich;
3037f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero2_seteq_zero:
3038f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
3039f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a0
3040f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
3041f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
3042a755e80eSAlex Bradbury;
3043a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero2_seteq_zero:
3044a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
3045a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    or a1, a0, a1
3046a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a0, a2, a1
3047a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a1, a3, a1
3048a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
3049a755e80eSAlex Bradbury;
3050a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero2_seteq_zero:
3051a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
3052a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a1, a0
3053a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
3054f68f04d0SPhilipp Tomsich  %rc = icmp eq i64 %a, 0
3055f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 0, i64 %rs1
3056f68f04d0SPhilipp Tomsich  ret i64 %sel
3057f68f04d0SPhilipp Tomsich}
3058f68f04d0SPhilipp Tomsich
3059f68f04d0SPhilipp Tomsichdefine i64 @zero1_setne_zero(i64 %a, i64 %rs1) {
306095075d3dSAlex Bradbury; RV32I-LABEL: zero1_setne_zero:
306195075d3dSAlex Bradbury; RV32I:       # %bb.0:
306295075d3dSAlex Bradbury; RV32I-NEXT:    or a0, a0, a1
306395075d3dSAlex Bradbury; RV32I-NEXT:    seqz a0, a0
306495075d3dSAlex Bradbury; RV32I-NEXT:    addi a1, a0, -1
306595075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a1, a2
306695075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a3
306795075d3dSAlex Bradbury; RV32I-NEXT:    ret
306895075d3dSAlex Bradbury;
306995075d3dSAlex Bradbury; RV64I-LABEL: zero1_setne_zero:
307095075d3dSAlex Bradbury; RV64I:       # %bb.0:
307195075d3dSAlex Bradbury; RV64I-NEXT:    seqz a0, a0
307295075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
307395075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
307495075d3dSAlex Bradbury; RV64I-NEXT:    ret
307595075d3dSAlex Bradbury;
30769bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero1_setne_zero:
30779bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
30789bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a1, a0, a1
30799bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a1
30809bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a3, a1
30819bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
30829bd97fcfSCraig Topper;
3083f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero1_setne_zero:
3084f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
3085f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a1, a0
3086f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
3087f68f04d0SPhilipp Tomsich;
3088f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero1_setne_zero:
3089f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
3090f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a0
3091f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
3092f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
3093a755e80eSAlex Bradbury;
3094a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero1_setne_zero:
3095a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
3096a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    or a1, a0, a1
3097a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a0, a2, a1
3098a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a1, a3, a1
3099a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
3100a755e80eSAlex Bradbury;
3101a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero1_setne_zero:
3102a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
3103a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a1, a0
3104a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
3105f68f04d0SPhilipp Tomsich  %rc = icmp ne i64 %a, 0
3106f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 0
3107f68f04d0SPhilipp Tomsich  ret i64 %sel
3108f68f04d0SPhilipp Tomsich}
3109f68f04d0SPhilipp Tomsich
3110f68f04d0SPhilipp Tomsichdefine i64 @zero2_setne_zero(i64 %a, i64 %rs1) {
311195075d3dSAlex Bradbury; RV32I-LABEL: zero2_setne_zero:
311295075d3dSAlex Bradbury; RV32I:       # %bb.0:
311395075d3dSAlex Bradbury; RV32I-NEXT:    or a0, a0, a1
311495075d3dSAlex Bradbury; RV32I-NEXT:    snez a0, a0
311595075d3dSAlex Bradbury; RV32I-NEXT:    addi a1, a0, -1
311695075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a1, a2
311795075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a3
311895075d3dSAlex Bradbury; RV32I-NEXT:    ret
311995075d3dSAlex Bradbury;
312095075d3dSAlex Bradbury; RV64I-LABEL: zero2_setne_zero:
312195075d3dSAlex Bradbury; RV64I:       # %bb.0:
312295075d3dSAlex Bradbury; RV64I-NEXT:    snez a0, a0
312395075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
312495075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
312595075d3dSAlex Bradbury; RV64I-NEXT:    ret
312695075d3dSAlex Bradbury;
31279bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero2_setne_zero:
31289bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
31299bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a1, a0, a1
31309bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a1
31319bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a3, a1
31329bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
31339bd97fcfSCraig Topper;
3134f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero2_setne_zero:
3135f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
3136f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a1, a0
3137f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
3138f68f04d0SPhilipp Tomsich;
3139f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero2_setne_zero:
3140f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
3141f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a1, zero, a0
3142f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
3143f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
3144a755e80eSAlex Bradbury;
3145a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero2_setne_zero:
3146a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
3147a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    or a1, a0, a1
3148a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a0, a2, a1
3149a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a1, a3, a1
3150a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
3151a755e80eSAlex Bradbury;
3152a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero2_setne_zero:
3153a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
3154a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a1, a0
3155a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
3156f68f04d0SPhilipp Tomsich  %rc = icmp ne i64 %a, 0
3157f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 0, i64 %rs1
3158f68f04d0SPhilipp Tomsich  ret i64 %sel
3159f68f04d0SPhilipp Tomsich}
3160f68f04d0SPhilipp Tomsich
3161f68f04d0SPhilipp Tomsichdefine i64 @zero1_seteq_constant(i64 %a, i64 %rs1) {
316295075d3dSAlex Bradbury; RV32I-LABEL: zero1_seteq_constant:
316395075d3dSAlex Bradbury; RV32I:       # %bb.0:
316495075d3dSAlex Bradbury; RV32I-NEXT:    not a1, a1
316595075d3dSAlex Bradbury; RV32I-NEXT:    xori a0, a0, -231
316695075d3dSAlex Bradbury; RV32I-NEXT:    or a0, a0, a1
316795075d3dSAlex Bradbury; RV32I-NEXT:    snez a0, a0
316895075d3dSAlex Bradbury; RV32I-NEXT:    addi a1, a0, -1
316995075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a1, a2
317095075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a3
317195075d3dSAlex Bradbury; RV32I-NEXT:    ret
317295075d3dSAlex Bradbury;
317395075d3dSAlex Bradbury; RV64I-LABEL: zero1_seteq_constant:
317495075d3dSAlex Bradbury; RV64I:       # %bb.0:
317595075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, 231
317695075d3dSAlex Bradbury; RV64I-NEXT:    snez a0, a0
317795075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
317895075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
317995075d3dSAlex Bradbury; RV64I-NEXT:    ret
318095075d3dSAlex Bradbury;
31819bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero1_seteq_constant:
31829bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
31839bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    not a1, a1
31849bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xori a0, a0, -231
31859bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a1, a0, a1
31869bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a1
31879bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a3, a1
31889bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
31899bd97fcfSCraig Topper;
3190f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero1_seteq_constant:
3191f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
3192f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    addi a0, a0, 231
3193f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a1, a0
3194f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
3195f68f04d0SPhilipp Tomsich;
3196f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero1_seteq_constant:
3197f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
3198f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    addi a0, a0, 231
3199f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a1, zero, a0
3200f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
3201f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
3202a755e80eSAlex Bradbury;
3203a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero1_seteq_constant:
3204a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
3205a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    not a1, a1
3206a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xori a0, a0, -231
3207a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    or a1, a0, a1
3208a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a0, a2, a1
3209a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a1, a3, a1
3210a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
3211a755e80eSAlex Bradbury;
3212a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero1_seteq_constant:
3213a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
3214a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    addi a0, a0, 231
3215a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a1, a0
3216a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
3217f68f04d0SPhilipp Tomsich  %rc = icmp eq i64 %a, -231
3218f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 0
3219f68f04d0SPhilipp Tomsich  ret i64 %sel
3220f68f04d0SPhilipp Tomsich}
3221f68f04d0SPhilipp Tomsich
3222f68f04d0SPhilipp Tomsichdefine i64 @zero2_seteq_constant(i64 %a, i64 %rs1) {
322395075d3dSAlex Bradbury; RV32I-LABEL: zero2_seteq_constant:
322495075d3dSAlex Bradbury; RV32I:       # %bb.0:
322595075d3dSAlex Bradbury; RV32I-NEXT:    xori a0, a0, 546
322695075d3dSAlex Bradbury; RV32I-NEXT:    or a0, a0, a1
322795075d3dSAlex Bradbury; RV32I-NEXT:    seqz a0, a0
322895075d3dSAlex Bradbury; RV32I-NEXT:    addi a1, a0, -1
322995075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a1, a2
323095075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a3
323195075d3dSAlex Bradbury; RV32I-NEXT:    ret
323295075d3dSAlex Bradbury;
323395075d3dSAlex Bradbury; RV64I-LABEL: zero2_seteq_constant:
323495075d3dSAlex Bradbury; RV64I:       # %bb.0:
323595075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -546
323695075d3dSAlex Bradbury; RV64I-NEXT:    seqz a0, a0
323795075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
323895075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
323995075d3dSAlex Bradbury; RV64I-NEXT:    ret
324095075d3dSAlex Bradbury;
32419bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero2_seteq_constant:
32429bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
32439bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xori a0, a0, 546
32449bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a1, a0, a1
32459bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a1
32469bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a3, a1
32479bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
32489bd97fcfSCraig Topper;
3249f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero2_seteq_constant:
3250f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
3251f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    addi a0, a0, -546
3252f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a1, a0
3253f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
3254f68f04d0SPhilipp Tomsich;
3255f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero2_seteq_constant:
3256f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
3257f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    addi a0, a0, -546
3258f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a0
3259f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
3260f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
3261a755e80eSAlex Bradbury;
3262a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero2_seteq_constant:
3263a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
3264a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xori a0, a0, 546
3265a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    or a1, a0, a1
3266a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a0, a2, a1
3267a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a1, a3, a1
3268a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
3269a755e80eSAlex Bradbury;
3270a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero2_seteq_constant:
3271a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
3272a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    addi a0, a0, -546
3273a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a1, a0
3274a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
3275f68f04d0SPhilipp Tomsich  %rc = icmp eq i64 %a, 546
3276f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 0, i64 %rs1
3277f68f04d0SPhilipp Tomsich  ret i64 %sel
3278f68f04d0SPhilipp Tomsich}
3279f68f04d0SPhilipp Tomsich
3280f68f04d0SPhilipp Tomsichdefine i64 @zero1_setne_constant(i64 %a, i64 %rs1) {
328195075d3dSAlex Bradbury; RV32I-LABEL: zero1_setne_constant:
328295075d3dSAlex Bradbury; RV32I:       # %bb.0:
328395075d3dSAlex Bradbury; RV32I-NEXT:    xori a0, a0, 321
328495075d3dSAlex Bradbury; RV32I-NEXT:    or a0, a0, a1
328595075d3dSAlex Bradbury; RV32I-NEXT:    seqz a0, a0
328695075d3dSAlex Bradbury; RV32I-NEXT:    addi a1, a0, -1
328795075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a1, a2
328895075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a3
328995075d3dSAlex Bradbury; RV32I-NEXT:    ret
329095075d3dSAlex Bradbury;
329195075d3dSAlex Bradbury; RV64I-LABEL: zero1_setne_constant:
329295075d3dSAlex Bradbury; RV64I:       # %bb.0:
329395075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -321
329495075d3dSAlex Bradbury; RV64I-NEXT:    seqz a0, a0
329595075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
329695075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
329795075d3dSAlex Bradbury; RV64I-NEXT:    ret
329895075d3dSAlex Bradbury;
32999bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero1_setne_constant:
33009bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
33019bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xori a0, a0, 321
33029bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a1, a0, a1
33039bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a1
33049bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a3, a1
33059bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
33069bd97fcfSCraig Topper;
3307f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero1_setne_constant:
3308f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
3309f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    addi a0, a0, -321
3310f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a1, a0
3311f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
3312f68f04d0SPhilipp Tomsich;
3313f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero1_setne_constant:
3314f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
3315f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    addi a0, a0, -321
3316f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a0
3317f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
3318f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
3319a755e80eSAlex Bradbury;
3320a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero1_setne_constant:
3321a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
3322a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xori a0, a0, 321
3323a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    or a1, a0, a1
3324a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a0, a2, a1
3325a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a1, a3, a1
3326a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
3327a755e80eSAlex Bradbury;
3328a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero1_setne_constant:
3329a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
3330a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    addi a0, a0, -321
3331a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a1, a0
3332a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
3333f68f04d0SPhilipp Tomsich  %rc = icmp ne i64 %a, 321
3334f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 0
3335f68f04d0SPhilipp Tomsich  ret i64 %sel
3336f68f04d0SPhilipp Tomsich}
3337f68f04d0SPhilipp Tomsich
3338f68f04d0SPhilipp Tomsichdefine i64 @zero2_setne_constant(i64 %a, i64 %rs1) {
333995075d3dSAlex Bradbury; RV32I-LABEL: zero2_setne_constant:
334095075d3dSAlex Bradbury; RV32I:       # %bb.0:
334195075d3dSAlex Bradbury; RV32I-NEXT:    not a1, a1
334295075d3dSAlex Bradbury; RV32I-NEXT:    xori a0, a0, -654
334395075d3dSAlex Bradbury; RV32I-NEXT:    or a0, a0, a1
334495075d3dSAlex Bradbury; RV32I-NEXT:    snez a0, a0
334595075d3dSAlex Bradbury; RV32I-NEXT:    addi a1, a0, -1
334695075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a1, a2
334795075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a3
334895075d3dSAlex Bradbury; RV32I-NEXT:    ret
334995075d3dSAlex Bradbury;
335095075d3dSAlex Bradbury; RV64I-LABEL: zero2_setne_constant:
335195075d3dSAlex Bradbury; RV64I:       # %bb.0:
335295075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, 654
335395075d3dSAlex Bradbury; RV64I-NEXT:    snez a0, a0
335495075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
335595075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
335695075d3dSAlex Bradbury; RV64I-NEXT:    ret
335795075d3dSAlex Bradbury;
33589bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero2_setne_constant:
33599bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
33609bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    not a1, a1
33619bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xori a0, a0, -654
33629bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a1, a0, a1
33639bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a1
33649bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a3, a1
33659bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
33669bd97fcfSCraig Topper;
3367f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero2_setne_constant:
3368f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
3369f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    addi a0, a0, 654
3370f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a1, a0
3371f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
3372f68f04d0SPhilipp Tomsich;
3373f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero2_setne_constant:
3374f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
3375f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    addi a0, a0, 654
3376f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a1, zero, a0
3377f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
3378f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
3379a755e80eSAlex Bradbury;
3380a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero2_setne_constant:
3381a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
3382a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    not a1, a1
3383a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xori a0, a0, -654
3384a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    or a1, a0, a1
3385a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a0, a2, a1
3386a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a1, a3, a1
3387a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
3388a755e80eSAlex Bradbury;
3389a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero2_setne_constant:
3390a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
3391a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    addi a0, a0, 654
3392a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a1, a0
3393a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
3394f68f04d0SPhilipp Tomsich  %rc = icmp ne i64 %a, -654
3395f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 0, i64 %rs1
3396f68f04d0SPhilipp Tomsich  ret i64 %sel
3397f68f04d0SPhilipp Tomsich}
3398f68f04d0SPhilipp Tomsich
3399f68f04d0SPhilipp Tomsichdefine i64 @zero1_seteq_neg2048(i64 %a, i64 %rs1) {
340095075d3dSAlex Bradbury; RV32I-LABEL: zero1_seteq_neg2048:
340195075d3dSAlex Bradbury; RV32I:       # %bb.0:
340295075d3dSAlex Bradbury; RV32I-NEXT:    not a1, a1
340395075d3dSAlex Bradbury; RV32I-NEXT:    xori a0, a0, -2048
340495075d3dSAlex Bradbury; RV32I-NEXT:    or a0, a0, a1
340595075d3dSAlex Bradbury; RV32I-NEXT:    snez a0, a0
340695075d3dSAlex Bradbury; RV32I-NEXT:    addi a1, a0, -1
340795075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a1, a2
340895075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a3
340995075d3dSAlex Bradbury; RV32I-NEXT:    ret
341095075d3dSAlex Bradbury;
341195075d3dSAlex Bradbury; RV64I-LABEL: zero1_seteq_neg2048:
341295075d3dSAlex Bradbury; RV64I:       # %bb.0:
341395075d3dSAlex Bradbury; RV64I-NEXT:    xori a0, a0, -2048
341495075d3dSAlex Bradbury; RV64I-NEXT:    snez a0, a0
341595075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
341695075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
341795075d3dSAlex Bradbury; RV64I-NEXT:    ret
341895075d3dSAlex Bradbury;
34199bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero1_seteq_neg2048:
34209bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
34219bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    not a1, a1
34229bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xori a0, a0, -2048
34239bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a1, a0, a1
34249bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a1
34259bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a3, a1
34269bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
34279bd97fcfSCraig Topper;
3428f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero1_seteq_neg2048:
3429f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
3430f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    xori a0, a0, -2048
3431f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a1, a0
3432f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
3433f68f04d0SPhilipp Tomsich;
3434f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero1_seteq_neg2048:
3435f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
3436f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    xori a0, a0, -2048
3437f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a1, zero, a0
3438f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
3439f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
3440a755e80eSAlex Bradbury;
3441a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero1_seteq_neg2048:
3442a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
3443a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    not a1, a1
3444a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xori a0, a0, -2048
3445a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    or a1, a0, a1
3446a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a0, a2, a1
3447a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a1, a3, a1
3448a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
3449a755e80eSAlex Bradbury;
3450a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero1_seteq_neg2048:
3451a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
3452a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    xori a0, a0, -2048
3453a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a1, a0
3454a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
3455f68f04d0SPhilipp Tomsich  %rc = icmp eq i64 %a, -2048
3456f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 0
3457f68f04d0SPhilipp Tomsich  ret i64 %sel
3458f68f04d0SPhilipp Tomsich}
3459f68f04d0SPhilipp Tomsich
3460f68f04d0SPhilipp Tomsichdefine i64 @zero2_seteq_neg2048(i64 %a, i64 %rs1) {
346195075d3dSAlex Bradbury; RV32I-LABEL: zero2_seteq_neg2048:
346295075d3dSAlex Bradbury; RV32I:       # %bb.0:
346395075d3dSAlex Bradbury; RV32I-NEXT:    not a1, a1
346495075d3dSAlex Bradbury; RV32I-NEXT:    xori a0, a0, -2048
346595075d3dSAlex Bradbury; RV32I-NEXT:    or a0, a0, a1
346695075d3dSAlex Bradbury; RV32I-NEXT:    seqz a0, a0
346795075d3dSAlex Bradbury; RV32I-NEXT:    addi a1, a0, -1
346895075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a1, a2
346995075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a3
347095075d3dSAlex Bradbury; RV32I-NEXT:    ret
347195075d3dSAlex Bradbury;
347295075d3dSAlex Bradbury; RV64I-LABEL: zero2_seteq_neg2048:
347395075d3dSAlex Bradbury; RV64I:       # %bb.0:
347495075d3dSAlex Bradbury; RV64I-NEXT:    xori a0, a0, -2048
347595075d3dSAlex Bradbury; RV64I-NEXT:    seqz a0, a0
347695075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
347795075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
347895075d3dSAlex Bradbury; RV64I-NEXT:    ret
347995075d3dSAlex Bradbury;
34809bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero2_seteq_neg2048:
34819bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
34829bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    not a1, a1
34839bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xori a0, a0, -2048
34849bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a1, a0, a1
34859bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a1
34869bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a3, a1
34879bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
34889bd97fcfSCraig Topper;
3489f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero2_seteq_neg2048:
3490f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
3491f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    xori a0, a0, -2048
3492f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a1, a0
3493f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
3494f68f04d0SPhilipp Tomsich;
3495f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero2_seteq_neg2048:
3496f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
3497f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    xori a0, a0, -2048
3498f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a0
3499f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
3500f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
3501a755e80eSAlex Bradbury;
3502a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero2_seteq_neg2048:
3503a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
3504a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    not a1, a1
3505a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xori a0, a0, -2048
3506a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    or a1, a0, a1
3507a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a0, a2, a1
3508a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a1, a3, a1
3509a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
3510a755e80eSAlex Bradbury;
3511a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero2_seteq_neg2048:
3512a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
3513a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    xori a0, a0, -2048
3514a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a1, a0
3515a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
3516f68f04d0SPhilipp Tomsich  %rc = icmp eq i64 %a, -2048
3517f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 0, i64 %rs1
3518f68f04d0SPhilipp Tomsich  ret i64 %sel
3519f68f04d0SPhilipp Tomsich}
3520f68f04d0SPhilipp Tomsich
3521f68f04d0SPhilipp Tomsichdefine i64 @zero1_setne_neg2048(i64 %a, i64 %rs1) {
352295075d3dSAlex Bradbury; RV32I-LABEL: zero1_setne_neg2048:
352395075d3dSAlex Bradbury; RV32I:       # %bb.0:
352495075d3dSAlex Bradbury; RV32I-NEXT:    not a1, a1
352595075d3dSAlex Bradbury; RV32I-NEXT:    xori a0, a0, -2048
352695075d3dSAlex Bradbury; RV32I-NEXT:    or a0, a0, a1
352795075d3dSAlex Bradbury; RV32I-NEXT:    seqz a0, a0
352895075d3dSAlex Bradbury; RV32I-NEXT:    addi a1, a0, -1
352995075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a1, a2
353095075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a3
353195075d3dSAlex Bradbury; RV32I-NEXT:    ret
353295075d3dSAlex Bradbury;
353395075d3dSAlex Bradbury; RV64I-LABEL: zero1_setne_neg2048:
353495075d3dSAlex Bradbury; RV64I:       # %bb.0:
353595075d3dSAlex Bradbury; RV64I-NEXT:    xori a0, a0, -2048
353695075d3dSAlex Bradbury; RV64I-NEXT:    seqz a0, a0
353795075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
353895075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
353995075d3dSAlex Bradbury; RV64I-NEXT:    ret
354095075d3dSAlex Bradbury;
35419bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero1_setne_neg2048:
35429bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
35439bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    not a1, a1
35449bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xori a0, a0, -2048
35459bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a1, a0, a1
35469bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a1
35479bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a3, a1
35489bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
35499bd97fcfSCraig Topper;
3550f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero1_setne_neg2048:
3551f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
3552f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    xori a0, a0, -2048
3553f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a1, a0
3554f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
3555f68f04d0SPhilipp Tomsich;
3556f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero1_setne_neg2048:
3557f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
3558f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    xori a0, a0, -2048
3559f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a0
3560f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
3561f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
3562a755e80eSAlex Bradbury;
3563a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero1_setne_neg2048:
3564a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
3565a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    not a1, a1
3566a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xori a0, a0, -2048
3567a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    or a1, a0, a1
3568a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a0, a2, a1
3569a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz a1, a3, a1
3570a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
3571a755e80eSAlex Bradbury;
3572a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero1_setne_neg2048:
3573a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
3574a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    xori a0, a0, -2048
3575a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz a0, a1, a0
3576a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
3577f68f04d0SPhilipp Tomsich  %rc = icmp ne i64 %a, -2048
3578f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 %rs1, i64 0
3579f68f04d0SPhilipp Tomsich  ret i64 %sel
3580f68f04d0SPhilipp Tomsich}
3581f68f04d0SPhilipp Tomsich
3582f68f04d0SPhilipp Tomsichdefine i64 @zero2_setne_neg2048(i64 %a, i64 %rs1) {
358395075d3dSAlex Bradbury; RV32I-LABEL: zero2_setne_neg2048:
358495075d3dSAlex Bradbury; RV32I:       # %bb.0:
358595075d3dSAlex Bradbury; RV32I-NEXT:    not a1, a1
358695075d3dSAlex Bradbury; RV32I-NEXT:    xori a0, a0, -2048
358795075d3dSAlex Bradbury; RV32I-NEXT:    or a0, a0, a1
358895075d3dSAlex Bradbury; RV32I-NEXT:    snez a0, a0
358995075d3dSAlex Bradbury; RV32I-NEXT:    addi a1, a0, -1
359095075d3dSAlex Bradbury; RV32I-NEXT:    and a0, a1, a2
359195075d3dSAlex Bradbury; RV32I-NEXT:    and a1, a1, a3
359295075d3dSAlex Bradbury; RV32I-NEXT:    ret
359395075d3dSAlex Bradbury;
359495075d3dSAlex Bradbury; RV64I-LABEL: zero2_setne_neg2048:
359595075d3dSAlex Bradbury; RV64I:       # %bb.0:
359695075d3dSAlex Bradbury; RV64I-NEXT:    xori a0, a0, -2048
359795075d3dSAlex Bradbury; RV64I-NEXT:    snez a0, a0
359895075d3dSAlex Bradbury; RV64I-NEXT:    addi a0, a0, -1
359995075d3dSAlex Bradbury; RV64I-NEXT:    and a0, a0, a1
360095075d3dSAlex Bradbury; RV64I-NEXT:    ret
360195075d3dSAlex Bradbury;
36029bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: zero2_setne_neg2048:
36039bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
36049bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    not a1, a1
36059bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    xori a0, a0, -2048
36069bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a1, a0, a1
36079bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a2, a1
36089bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a3, a1
36099bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
36109bd97fcfSCraig Topper;
3611f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: zero2_setne_neg2048:
3612f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0:
3613f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    xori a0, a0, -2048
3614f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a1, a0
3615f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
3616f68f04d0SPhilipp Tomsich;
3617f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: zero2_setne_neg2048:
3618f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0:
3619f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    xori a0, a0, -2048
3620f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez a1, zero, a0
3621f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv a0, a1
3622f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
3623a755e80eSAlex Bradbury;
3624a755e80eSAlex Bradbury; RV32ZICOND-LABEL: zero2_setne_neg2048:
3625a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0:
3626a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    not a1, a1
3627a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    xori a0, a0, -2048
3628a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    or a1, a0, a1
3629a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a0, a2, a1
3630a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez a1, a3, a1
3631a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
3632a755e80eSAlex Bradbury;
3633a755e80eSAlex Bradbury; RV64ZICOND-LABEL: zero2_setne_neg2048:
3634a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0:
3635a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    xori a0, a0, -2048
3636a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez a0, a1, a0
3637a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
3638f68f04d0SPhilipp Tomsich  %rc = icmp ne i64 %a, -2048
3639f68f04d0SPhilipp Tomsich  %sel = select i1 %rc, i64 0, i64 %rs1
3640f68f04d0SPhilipp Tomsich  ret i64 %sel
3641f68f04d0SPhilipp Tomsich}
3642f68f04d0SPhilipp Tomsich
3643f68f04d0SPhilipp Tomsichdefine void @sextw_removal_maskc(i1 %c, i32 signext %arg, i32 signext %arg1) nounwind {
364495075d3dSAlex Bradbury; RV32I-LABEL: sextw_removal_maskc:
364595075d3dSAlex Bradbury; RV32I:       # %bb.0: # %bb
364695075d3dSAlex Bradbury; RV32I-NEXT:    addi sp, sp, -16
364795075d3dSAlex Bradbury; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
364895075d3dSAlex Bradbury; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
364995075d3dSAlex Bradbury; RV32I-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill
365095075d3dSAlex Bradbury; RV32I-NEXT:    mv s0, a2
365195075d3dSAlex Bradbury; RV32I-NEXT:    slli a0, a0, 31
365295075d3dSAlex Bradbury; RV32I-NEXT:    srai a0, a0, 31
365395075d3dSAlex Bradbury; RV32I-NEXT:    and s1, a0, a1
3654f73844d9SYeting Kuo; RV32I-NEXT:  .LBB56_1: # %bb2
365595075d3dSAlex Bradbury; RV32I-NEXT:    # =>This Inner Loop Header: Depth=1
365695075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, s1
3657eabaee0cSFangrui Song; RV32I-NEXT:    call bar
365895075d3dSAlex Bradbury; RV32I-NEXT:    sll s1, s1, s0
3659f73844d9SYeting Kuo; RV32I-NEXT:    bnez a0, .LBB56_1
366095075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.2: # %bb7
366195075d3dSAlex Bradbury; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
366295075d3dSAlex Bradbury; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
366395075d3dSAlex Bradbury; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
366495075d3dSAlex Bradbury; RV32I-NEXT:    addi sp, sp, 16
366595075d3dSAlex Bradbury; RV32I-NEXT:    ret
366695075d3dSAlex Bradbury;
366795075d3dSAlex Bradbury; RV64I-LABEL: sextw_removal_maskc:
366895075d3dSAlex Bradbury; RV64I:       # %bb.0: # %bb
366995075d3dSAlex Bradbury; RV64I-NEXT:    addi sp, sp, -32
367095075d3dSAlex Bradbury; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
367195075d3dSAlex Bradbury; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
367295075d3dSAlex Bradbury; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
367395075d3dSAlex Bradbury; RV64I-NEXT:    mv s0, a2
367495075d3dSAlex Bradbury; RV64I-NEXT:    slli a0, a0, 63
367595075d3dSAlex Bradbury; RV64I-NEXT:    srai a0, a0, 63
367695075d3dSAlex Bradbury; RV64I-NEXT:    and s1, a0, a1
3677f73844d9SYeting Kuo; RV64I-NEXT:  .LBB56_1: # %bb2
367895075d3dSAlex Bradbury; RV64I-NEXT:    # =>This Inner Loop Header: Depth=1
367995075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, s1
3680eabaee0cSFangrui Song; RV64I-NEXT:    call bar
368195075d3dSAlex Bradbury; RV64I-NEXT:    sllw s1, s1, s0
3682f73844d9SYeting Kuo; RV64I-NEXT:    bnez a0, .LBB56_1
368395075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.2: # %bb7
368495075d3dSAlex Bradbury; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
368595075d3dSAlex Bradbury; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
368695075d3dSAlex Bradbury; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
368795075d3dSAlex Bradbury; RV64I-NEXT:    addi sp, sp, 32
368895075d3dSAlex Bradbury; RV64I-NEXT:    ret
368995075d3dSAlex Bradbury;
36909bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: sextw_removal_maskc:
36919bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0: # %bb
36929bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    addi sp, sp, -16
36939bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
36949bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
36959bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill
36969bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    mv s0, a2
36979bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    andi a0, a0, 1
36989bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc s1, a1, a0
36999bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:  .LBB56_1: # %bb2
37009bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    # =>This Inner Loop Header: Depth=1
37019bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    mv a0, s1
37029bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    call bar
37039bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sll s1, s1, s0
37049bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    bnez a0, .LBB56_1
37059bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:  # %bb.2: # %bb7
37069bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
37079bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
37089bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
37099bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    addi sp, sp, 16
37109bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
37119bd97fcfSCraig Topper;
3712f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: sextw_removal_maskc:
3713f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0: # %bb
3714f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    addi sp, sp, -32
3715f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
3716f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
3717f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
3718f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    mv s0, a2
3719f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    andi a0, a0, 1
3720f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskc s1, a1, a0
3721f73844d9SYeting Kuo; RV64XVENTANACONDOPS-NEXT:  .LBB56_1: # %bb2
3722f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    # =>This Inner Loop Header: Depth=1
3723f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    mv a0, s1
3724eabaee0cSFangrui Song; RV64XVENTANACONDOPS-NEXT:    call bar
3725f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    sllw s1, s1, s0
3726f73844d9SYeting Kuo; RV64XVENTANACONDOPS-NEXT:    bnez a0, .LBB56_1
3727f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:  # %bb.2: # %bb7
3728f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
3729f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
3730f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
3731f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    addi sp, sp, 32
3732f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
3733f68f04d0SPhilipp Tomsich;
3734f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: sextw_removal_maskc:
3735f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0: # %bb
3736f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    addi sp, sp, -32
3737f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
3738f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
3739f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
3740f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv s0, a2
3741f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv s1, a1
3742f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    andi a0, a0, 1
3743f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mveqz s1, zero, a0
3744f73844d9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:  .LBB56_1: # %bb2
3745f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    # =>This Inner Loop Header: Depth=1
3746f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    sext.w a0, s1
3747eabaee0cSFangrui Song; RV64XTHEADCONDMOV-NEXT:    call bar
3748f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    sllw s1, s1, s0
3749f73844d9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    bnez a0, .LBB56_1
3750f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:  # %bb.2: # %bb7
3751f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
3752f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
3753f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
3754f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    addi sp, sp, 32
3755f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
3756a755e80eSAlex Bradbury;
3757a755e80eSAlex Bradbury; RV32ZICOND-LABEL: sextw_removal_maskc:
3758a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0: # %bb
3759a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    addi sp, sp, -16
3760a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
3761a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
3762a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill
3763a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    mv s0, a2
3764a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    andi a0, a0, 1
3765a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.eqz s1, a1, a0
3766f73844d9SYeting Kuo; RV32ZICOND-NEXT:  .LBB56_1: # %bb2
3767a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    # =>This Inner Loop Header: Depth=1
3768a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    mv a0, s1
3769eabaee0cSFangrui Song; RV32ZICOND-NEXT:    call bar
3770a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    sll s1, s1, s0
3771f73844d9SYeting Kuo; RV32ZICOND-NEXT:    bnez a0, .LBB56_1
3772a755e80eSAlex Bradbury; RV32ZICOND-NEXT:  # %bb.2: # %bb7
3773a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
3774a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
3775a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
3776a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    addi sp, sp, 16
3777a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
3778a755e80eSAlex Bradbury;
3779a755e80eSAlex Bradbury; RV64ZICOND-LABEL: sextw_removal_maskc:
3780a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0: # %bb
3781a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    addi sp, sp, -32
3782a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
3783a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
3784a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
3785a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    mv s0, a2
3786a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    andi a0, a0, 1
3787a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.eqz s1, a1, a0
3788f73844d9SYeting Kuo; RV64ZICOND-NEXT:  .LBB56_1: # %bb2
3789a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    # =>This Inner Loop Header: Depth=1
37901f395115SCraig Topper; RV64ZICOND-NEXT:    mv a0, s1
3791eabaee0cSFangrui Song; RV64ZICOND-NEXT:    call bar
3792a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    sllw s1, s1, s0
3793f73844d9SYeting Kuo; RV64ZICOND-NEXT:    bnez a0, .LBB56_1
3794a755e80eSAlex Bradbury; RV64ZICOND-NEXT:  # %bb.2: # %bb7
3795a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
3796a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
3797a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
3798a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    addi sp, sp, 32
3799a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
3800f68f04d0SPhilipp Tomsichbb:
3801f68f04d0SPhilipp Tomsich  %i = select i1 %c, i32 %arg, i32 0
3802f68f04d0SPhilipp Tomsich  br label %bb2
3803f68f04d0SPhilipp Tomsich
3804f68f04d0SPhilipp Tomsichbb2:                                              ; preds = %bb2, %bb
3805f68f04d0SPhilipp Tomsich  %i3 = phi i32 [ %i, %bb ], [ %i5, %bb2 ]
3806f68f04d0SPhilipp Tomsich  %i4 = tail call signext i32 @bar(i32 signext %i3)
3807f68f04d0SPhilipp Tomsich  %i5 = shl i32 %i3, %arg1
3808f68f04d0SPhilipp Tomsich  %i6 = icmp eq i32 %i4, 0
3809f68f04d0SPhilipp Tomsich  br i1 %i6, label %bb7, label %bb2
3810f68f04d0SPhilipp Tomsich
3811f68f04d0SPhilipp Tomsichbb7:                                              ; preds = %bb2
3812f68f04d0SPhilipp Tomsich  ret void
3813f68f04d0SPhilipp Tomsich}
3814f68f04d0SPhilipp Tomsichdeclare signext i32 @bar(i32 signext)
3815f68f04d0SPhilipp Tomsich
3816f68f04d0SPhilipp Tomsichdefine void @sextw_removal_maskcn(i1 %c, i32 signext %arg, i32 signext %arg1) nounwind {
381795075d3dSAlex Bradbury; RV32I-LABEL: sextw_removal_maskcn:
381895075d3dSAlex Bradbury; RV32I:       # %bb.0: # %bb
381995075d3dSAlex Bradbury; RV32I-NEXT:    addi sp, sp, -16
382095075d3dSAlex Bradbury; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
382195075d3dSAlex Bradbury; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
382295075d3dSAlex Bradbury; RV32I-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill
382395075d3dSAlex Bradbury; RV32I-NEXT:    mv s0, a2
382495075d3dSAlex Bradbury; RV32I-NEXT:    andi a0, a0, 1
382595075d3dSAlex Bradbury; RV32I-NEXT:    addi a0, a0, -1
382695075d3dSAlex Bradbury; RV32I-NEXT:    and s1, a0, a1
3827f73844d9SYeting Kuo; RV32I-NEXT:  .LBB57_1: # %bb2
382895075d3dSAlex Bradbury; RV32I-NEXT:    # =>This Inner Loop Header: Depth=1
382995075d3dSAlex Bradbury; RV32I-NEXT:    mv a0, s1
3830eabaee0cSFangrui Song; RV32I-NEXT:    call bar
383195075d3dSAlex Bradbury; RV32I-NEXT:    sll s1, s1, s0
3832f73844d9SYeting Kuo; RV32I-NEXT:    bnez a0, .LBB57_1
383395075d3dSAlex Bradbury; RV32I-NEXT:  # %bb.2: # %bb7
383495075d3dSAlex Bradbury; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
383595075d3dSAlex Bradbury; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
383695075d3dSAlex Bradbury; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
383795075d3dSAlex Bradbury; RV32I-NEXT:    addi sp, sp, 16
383895075d3dSAlex Bradbury; RV32I-NEXT:    ret
383995075d3dSAlex Bradbury;
384095075d3dSAlex Bradbury; RV64I-LABEL: sextw_removal_maskcn:
384195075d3dSAlex Bradbury; RV64I:       # %bb.0: # %bb
384295075d3dSAlex Bradbury; RV64I-NEXT:    addi sp, sp, -32
384395075d3dSAlex Bradbury; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
384495075d3dSAlex Bradbury; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
384595075d3dSAlex Bradbury; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
384695075d3dSAlex Bradbury; RV64I-NEXT:    mv s0, a2
384795075d3dSAlex Bradbury; RV64I-NEXT:    andi a0, a0, 1
384895075d3dSAlex Bradbury; RV64I-NEXT:    addiw a0, a0, -1
384995075d3dSAlex Bradbury; RV64I-NEXT:    and s1, a0, a1
3850f73844d9SYeting Kuo; RV64I-NEXT:  .LBB57_1: # %bb2
385195075d3dSAlex Bradbury; RV64I-NEXT:    # =>This Inner Loop Header: Depth=1
385295075d3dSAlex Bradbury; RV64I-NEXT:    mv a0, s1
3853eabaee0cSFangrui Song; RV64I-NEXT:    call bar
385495075d3dSAlex Bradbury; RV64I-NEXT:    sllw s1, s1, s0
3855f73844d9SYeting Kuo; RV64I-NEXT:    bnez a0, .LBB57_1
385695075d3dSAlex Bradbury; RV64I-NEXT:  # %bb.2: # %bb7
385795075d3dSAlex Bradbury; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
385895075d3dSAlex Bradbury; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
385995075d3dSAlex Bradbury; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
386095075d3dSAlex Bradbury; RV64I-NEXT:    addi sp, sp, 32
386195075d3dSAlex Bradbury; RV64I-NEXT:    ret
386295075d3dSAlex Bradbury;
38639bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: sextw_removal_maskcn:
38649bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0: # %bb
38659bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    addi sp, sp, -16
38669bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
38679bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
38689bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill
38699bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    mv s0, a2
38709bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    andi a0, a0, 1
38719bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn s1, a1, a0
38729bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:  .LBB57_1: # %bb2
38739bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    # =>This Inner Loop Header: Depth=1
38749bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    mv a0, s1
38759bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    call bar
38769bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sll s1, s1, s0
38779bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    bnez a0, .LBB57_1
38789bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:  # %bb.2: # %bb7
38799bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
38809bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
38819bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
38829bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    addi sp, sp, 16
38839bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
38849bd97fcfSCraig Topper;
3885f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-LABEL: sextw_removal_maskcn:
3886f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS:       # %bb.0: # %bb
3887f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    addi sp, sp, -32
3888f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
3889f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
3890f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
3891f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    mv s0, a2
3892f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    andi a0, a0, 1
3893f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    vt.maskcn s1, a1, a0
3894f73844d9SYeting Kuo; RV64XVENTANACONDOPS-NEXT:  .LBB57_1: # %bb2
3895f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    # =>This Inner Loop Header: Depth=1
3896f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    mv a0, s1
3897eabaee0cSFangrui Song; RV64XVENTANACONDOPS-NEXT:    call bar
3898f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    sllw s1, s1, s0
3899f73844d9SYeting Kuo; RV64XVENTANACONDOPS-NEXT:    bnez a0, .LBB57_1
3900f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:  # %bb.2: # %bb7
3901f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
3902f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
3903f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
3904f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    addi sp, sp, 32
3905f68f04d0SPhilipp Tomsich; RV64XVENTANACONDOPS-NEXT:    ret
3906f68f04d0SPhilipp Tomsich;
3907f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-LABEL: sextw_removal_maskcn:
3908f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV:       # %bb.0: # %bb
3909f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    addi sp, sp, -32
3910f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
3911f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
3912f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
3913f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv s0, a2
3914f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    mv s1, a1
3915f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    andi a0, a0, 1
3916f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    th.mvnez s1, zero, a0
3917f73844d9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:  .LBB57_1: # %bb2
3918f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    # =>This Inner Loop Header: Depth=1
3919f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    sext.w a0, s1
3920eabaee0cSFangrui Song; RV64XTHEADCONDMOV-NEXT:    call bar
3921f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    sllw s1, s1, s0
3922f73844d9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    bnez a0, .LBB57_1
3923f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:  # %bb.2: # %bb7
3924f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
3925f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
3926f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
3927f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    addi sp, sp, 32
3928f68f04d0SPhilipp Tomsich; RV64XTHEADCONDMOV-NEXT:    ret
3929a755e80eSAlex Bradbury;
3930a755e80eSAlex Bradbury; RV32ZICOND-LABEL: sextw_removal_maskcn:
3931a755e80eSAlex Bradbury; RV32ZICOND:       # %bb.0: # %bb
3932a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    addi sp, sp, -16
3933a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
3934a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
3935a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill
3936a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    mv s0, a2
3937a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    andi a0, a0, 1
3938a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    czero.nez s1, a1, a0
3939f73844d9SYeting Kuo; RV32ZICOND-NEXT:  .LBB57_1: # %bb2
3940a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    # =>This Inner Loop Header: Depth=1
3941a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    mv a0, s1
3942eabaee0cSFangrui Song; RV32ZICOND-NEXT:    call bar
3943a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    sll s1, s1, s0
3944f73844d9SYeting Kuo; RV32ZICOND-NEXT:    bnez a0, .LBB57_1
3945a755e80eSAlex Bradbury; RV32ZICOND-NEXT:  # %bb.2: # %bb7
3946a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
3947a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
3948a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
3949a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    addi sp, sp, 16
3950a755e80eSAlex Bradbury; RV32ZICOND-NEXT:    ret
3951a755e80eSAlex Bradbury;
3952a755e80eSAlex Bradbury; RV64ZICOND-LABEL: sextw_removal_maskcn:
3953a755e80eSAlex Bradbury; RV64ZICOND:       # %bb.0: # %bb
3954a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    addi sp, sp, -32
3955a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
3956a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
3957a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
3958a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    mv s0, a2
3959a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    andi a0, a0, 1
3960a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    czero.nez s1, a1, a0
3961f73844d9SYeting Kuo; RV64ZICOND-NEXT:  .LBB57_1: # %bb2
3962a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    # =>This Inner Loop Header: Depth=1
39631f395115SCraig Topper; RV64ZICOND-NEXT:    mv a0, s1
3964eabaee0cSFangrui Song; RV64ZICOND-NEXT:    call bar
3965a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    sllw s1, s1, s0
3966f73844d9SYeting Kuo; RV64ZICOND-NEXT:    bnez a0, .LBB57_1
3967a755e80eSAlex Bradbury; RV64ZICOND-NEXT:  # %bb.2: # %bb7
3968a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
3969a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
3970a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
3971a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    addi sp, sp, 32
3972a755e80eSAlex Bradbury; RV64ZICOND-NEXT:    ret
3973f68f04d0SPhilipp Tomsichbb:
3974f68f04d0SPhilipp Tomsich  %i = select i1 %c, i32 0, i32 %arg
3975f68f04d0SPhilipp Tomsich  br label %bb2
3976f68f04d0SPhilipp Tomsich
3977f68f04d0SPhilipp Tomsichbb2:                                              ; preds = %bb2, %bb
3978f68f04d0SPhilipp Tomsich  %i3 = phi i32 [ %i, %bb ], [ %i5, %bb2 ]
3979f68f04d0SPhilipp Tomsich  %i4 = tail call signext i32 @bar(i32 signext %i3)
3980f68f04d0SPhilipp Tomsich  %i5 = shl i32 %i3, %arg1
3981f68f04d0SPhilipp Tomsich  %i6 = icmp eq i32 %i4, 0
3982f68f04d0SPhilipp Tomsich  br i1 %i6, label %bb7, label %bb2
3983f68f04d0SPhilipp Tomsich
3984f68f04d0SPhilipp Tomsichbb7:                                              ; preds = %bb2
3985f68f04d0SPhilipp Tomsich  ret void
3986f68f04d0SPhilipp Tomsich}
3987fda45d91SCraig Topper
3988fda45d91SCraig Topperdefine i32 @setune_32(float %a, float %b, i32 %rs1, i32 %rs2) {
3989fda45d91SCraig Topper; RV32I-LABEL: setune_32:
3990fda45d91SCraig Topper; RV32I:       # %bb.0:
3991fda45d91SCraig Topper; RV32I-NEXT:    feq.s a2, fa0, fa1
3992f73844d9SYeting Kuo; RV32I-NEXT:    beqz a2, .LBB58_2
3993fda45d91SCraig Topper; RV32I-NEXT:  # %bb.1:
3994fda45d91SCraig Topper; RV32I-NEXT:    mv a0, a1
3995f73844d9SYeting Kuo; RV32I-NEXT:  .LBB58_2:
3996fda45d91SCraig Topper; RV32I-NEXT:    ret
3997fda45d91SCraig Topper;
3998fda45d91SCraig Topper; RV64I-LABEL: setune_32:
3999fda45d91SCraig Topper; RV64I:       # %bb.0:
4000fda45d91SCraig Topper; RV64I-NEXT:    feq.s a2, fa0, fa1
4001f73844d9SYeting Kuo; RV64I-NEXT:    beqz a2, .LBB58_2
4002fda45d91SCraig Topper; RV64I-NEXT:  # %bb.1:
4003fda45d91SCraig Topper; RV64I-NEXT:    mv a0, a1
4004f73844d9SYeting Kuo; RV64I-NEXT:  .LBB58_2:
4005fda45d91SCraig Topper; RV64I-NEXT:    ret
4006fda45d91SCraig Topper;
40079bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: setune_32:
40089bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
40099bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    feq.s a2, fa0, fa1
40109bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
40119bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a2
40129bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a1
40139bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
40149bd97fcfSCraig Topper;
4015fda45d91SCraig Topper; RV64XVENTANACONDOPS-LABEL: setune_32:
4016fda45d91SCraig Topper; RV64XVENTANACONDOPS:       # %bb.0:
4017fda45d91SCraig Topper; RV64XVENTANACONDOPS-NEXT:    feq.s a2, fa0, fa1
40187dfe6232SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
40197dfe6232SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a2
40200c055286SCraig Topper; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a1
4021fda45d91SCraig Topper; RV64XVENTANACONDOPS-NEXT:    ret
4022fda45d91SCraig Topper;
4023fda45d91SCraig Topper; RV64XTHEADCONDMOV-LABEL: setune_32:
4024fda45d91SCraig Topper; RV64XTHEADCONDMOV:       # %bb.0:
4025fda45d91SCraig Topper; RV64XTHEADCONDMOV-NEXT:    feq.s a2, fa0, fa1
4026fda45d91SCraig Topper; RV64XTHEADCONDMOV-NEXT:    th.mvnez a0, a1, a2
4027fda45d91SCraig Topper; RV64XTHEADCONDMOV-NEXT:    ret
4028fda45d91SCraig Topper;
4029fda45d91SCraig Topper; RV32ZICOND-LABEL: setune_32:
4030fda45d91SCraig Topper; RV32ZICOND:       # %bb.0:
4031fda45d91SCraig Topper; RV32ZICOND-NEXT:    feq.s a2, fa0, fa1
40327dfe6232SCraig Topper; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
40337dfe6232SCraig Topper; RV32ZICOND-NEXT:    czero.nez a0, a0, a2
4034fda45d91SCraig Topper; RV32ZICOND-NEXT:    or a0, a0, a1
4035fda45d91SCraig Topper; RV32ZICOND-NEXT:    ret
4036fda45d91SCraig Topper;
4037fda45d91SCraig Topper; RV64ZICOND-LABEL: setune_32:
4038fda45d91SCraig Topper; RV64ZICOND:       # %bb.0:
4039fda45d91SCraig Topper; RV64ZICOND-NEXT:    feq.s a2, fa0, fa1
40407dfe6232SCraig Topper; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
40417dfe6232SCraig Topper; RV64ZICOND-NEXT:    czero.nez a0, a0, a2
4042fda45d91SCraig Topper; RV64ZICOND-NEXT:    or a0, a0, a1
4043fda45d91SCraig Topper; RV64ZICOND-NEXT:    ret
4044fda45d91SCraig Topper  %rc = fcmp une float %a, %b
4045fda45d91SCraig Topper  %sel = select i1 %rc, i32 %rs1, i32 %rs2
4046fda45d91SCraig Topper  ret i32 %sel
4047fda45d91SCraig Topper}
4048fda45d91SCraig Topper
4049fda45d91SCraig Topperdefine i64 @setune_64(float %a, float %b, i64 %rs1, i64 %rs2) {
4050fda45d91SCraig Topper; RV32I-LABEL: setune_64:
4051fda45d91SCraig Topper; RV32I:       # %bb.0:
4052fda45d91SCraig Topper; RV32I-NEXT:    feq.s a4, fa0, fa1
4053f73844d9SYeting Kuo; RV32I-NEXT:    beqz a4, .LBB59_2
4054fda45d91SCraig Topper; RV32I-NEXT:  # %bb.1:
4055fda45d91SCraig Topper; RV32I-NEXT:    mv a0, a2
4056fda45d91SCraig Topper; RV32I-NEXT:    mv a1, a3
4057f73844d9SYeting Kuo; RV32I-NEXT:  .LBB59_2:
4058fda45d91SCraig Topper; RV32I-NEXT:    ret
4059fda45d91SCraig Topper;
4060fda45d91SCraig Topper; RV64I-LABEL: setune_64:
4061fda45d91SCraig Topper; RV64I:       # %bb.0:
4062fda45d91SCraig Topper; RV64I-NEXT:    feq.s a2, fa0, fa1
4063f73844d9SYeting Kuo; RV64I-NEXT:    beqz a2, .LBB59_2
4064fda45d91SCraig Topper; RV64I-NEXT:  # %bb.1:
4065fda45d91SCraig Topper; RV64I-NEXT:    mv a0, a1
4066f73844d9SYeting Kuo; RV64I-NEXT:  .LBB59_2:
4067fda45d91SCraig Topper; RV64I-NEXT:    ret
4068fda45d91SCraig Topper;
40699bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: setune_64:
40709bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
40719bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    feq.s a4, fa0, fa1
40729bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a2, a2, a4
40739bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a4
4074*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    vt.maskc a3, a3, a4
40759bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn a1, a1, a4
4076*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a0, a0, a2
4077*9122c523SPengcheng Wang; RV32XVENTANACONDOPS-NEXT:    or a1, a1, a3
40789bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
40799bd97fcfSCraig Topper;
4080fda45d91SCraig Topper; RV64XVENTANACONDOPS-LABEL: setune_64:
4081fda45d91SCraig Topper; RV64XVENTANACONDOPS:       # %bb.0:
4082fda45d91SCraig Topper; RV64XVENTANACONDOPS-NEXT:    feq.s a2, fa0, fa1
40837dfe6232SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
40847dfe6232SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a2
40850c055286SCraig Topper; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a1
4086fda45d91SCraig Topper; RV64XVENTANACONDOPS-NEXT:    ret
4087fda45d91SCraig Topper;
4088fda45d91SCraig Topper; RV64XTHEADCONDMOV-LABEL: setune_64:
4089fda45d91SCraig Topper; RV64XTHEADCONDMOV:       # %bb.0:
4090fda45d91SCraig Topper; RV64XTHEADCONDMOV-NEXT:    feq.s a2, fa0, fa1
4091fda45d91SCraig Topper; RV64XTHEADCONDMOV-NEXT:    th.mvnez a0, a1, a2
4092fda45d91SCraig Topper; RV64XTHEADCONDMOV-NEXT:    ret
4093fda45d91SCraig Topper;
4094fda45d91SCraig Topper; RV32ZICOND-LABEL: setune_64:
4095fda45d91SCraig Topper; RV32ZICOND:       # %bb.0:
4096fda45d91SCraig Topper; RV32ZICOND-NEXT:    feq.s a4, fa0, fa1
40977dfe6232SCraig Topper; RV32ZICOND-NEXT:    czero.eqz a2, a2, a4
40987dfe6232SCraig Topper; RV32ZICOND-NEXT:    czero.nez a0, a0, a4
4099*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a3, a3, a4
41007dfe6232SCraig Topper; RV32ZICOND-NEXT:    czero.nez a1, a1, a4
4101*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a2
4102*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a1, a3
4103fda45d91SCraig Topper; RV32ZICOND-NEXT:    ret
4104fda45d91SCraig Topper;
4105fda45d91SCraig Topper; RV64ZICOND-LABEL: setune_64:
4106fda45d91SCraig Topper; RV64ZICOND:       # %bb.0:
4107fda45d91SCraig Topper; RV64ZICOND-NEXT:    feq.s a2, fa0, fa1
41087dfe6232SCraig Topper; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
41097dfe6232SCraig Topper; RV64ZICOND-NEXT:    czero.nez a0, a0, a2
4110fda45d91SCraig Topper; RV64ZICOND-NEXT:    or a0, a0, a1
4111fda45d91SCraig Topper; RV64ZICOND-NEXT:    ret
4112fda45d91SCraig Topper  %rc = fcmp une float %a, %b
4113fda45d91SCraig Topper  %sel = select i1 %rc, i64 %rs1, i64 %rs2
4114fda45d91SCraig Topper  ret i64 %sel
4115fda45d91SCraig Topper}
411682686d7dSCraig Topper
411782686d7dSCraig Topper; Test that we can ComputeNumSignBits across basic blocks when the live out is
411882686d7dSCraig Topper; RISCVISD::SELECT_CC. There should be no slli+srai or sext.h in the output.
411982686d7dSCraig Topperdefine signext i16 @numsignbits(i16 signext %0, i16 signext %1, i16 signext %2, i16 signext %3) nounwind {
412082686d7dSCraig Topper; RV32I-LABEL: numsignbits:
412182686d7dSCraig Topper; RV32I:       # %bb.0:
412282686d7dSCraig Topper; RV32I-NEXT:    addi sp, sp, -16
412382686d7dSCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
412482686d7dSCraig Topper; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
412582686d7dSCraig Topper; RV32I-NEXT:    mv s0, a3
4126f73844d9SYeting Kuo; RV32I-NEXT:    beqz a0, .LBB60_2
412782686d7dSCraig Topper; RV32I-NEXT:  # %bb.1:
412882686d7dSCraig Topper; RV32I-NEXT:    mv s0, a2
4129f73844d9SYeting Kuo; RV32I-NEXT:  .LBB60_2:
4130f73844d9SYeting Kuo; RV32I-NEXT:    beqz a1, .LBB60_4
413182686d7dSCraig Topper; RV32I-NEXT:  # %bb.3:
413282686d7dSCraig Topper; RV32I-NEXT:    mv a0, s0
4133eabaee0cSFangrui Song; RV32I-NEXT:    call bat
4134f73844d9SYeting Kuo; RV32I-NEXT:  .LBB60_4:
413582686d7dSCraig Topper; RV32I-NEXT:    mv a0, s0
413682686d7dSCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
413782686d7dSCraig Topper; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
413882686d7dSCraig Topper; RV32I-NEXT:    addi sp, sp, 16
413982686d7dSCraig Topper; RV32I-NEXT:    ret
414082686d7dSCraig Topper;
414182686d7dSCraig Topper; RV64I-LABEL: numsignbits:
414282686d7dSCraig Topper; RV64I:       # %bb.0:
414382686d7dSCraig Topper; RV64I-NEXT:    addi sp, sp, -16
414482686d7dSCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
414582686d7dSCraig Topper; RV64I-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill
414682686d7dSCraig Topper; RV64I-NEXT:    mv s0, a3
4147f73844d9SYeting Kuo; RV64I-NEXT:    beqz a0, .LBB60_2
414882686d7dSCraig Topper; RV64I-NEXT:  # %bb.1:
414982686d7dSCraig Topper; RV64I-NEXT:    mv s0, a2
4150f73844d9SYeting Kuo; RV64I-NEXT:  .LBB60_2:
4151f73844d9SYeting Kuo; RV64I-NEXT:    beqz a1, .LBB60_4
415282686d7dSCraig Topper; RV64I-NEXT:  # %bb.3:
415382686d7dSCraig Topper; RV64I-NEXT:    mv a0, s0
4154eabaee0cSFangrui Song; RV64I-NEXT:    call bat
4155f73844d9SYeting Kuo; RV64I-NEXT:  .LBB60_4:
415682686d7dSCraig Topper; RV64I-NEXT:    mv a0, s0
415782686d7dSCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
415882686d7dSCraig Topper; RV64I-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload
415982686d7dSCraig Topper; RV64I-NEXT:    addi sp, sp, 16
416082686d7dSCraig Topper; RV64I-NEXT:    ret
416182686d7dSCraig Topper;
41629bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: numsignbits:
41639bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0:
41649bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    addi sp, sp, -16
41659bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
41669bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
41679bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a2, a2, a0
41689bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskcn s0, a3, a0
41699bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    or s0, s0, a2
41709bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    beqz a1, .LBB60_2
41719bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:  # %bb.1:
41729bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    mv a0, s0
41739bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    call bat
41749bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:  .LBB60_2:
41759bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    mv a0, s0
41769bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
41779bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
41789bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    addi sp, sp, 16
41799bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
41809bd97fcfSCraig Topper;
418182686d7dSCraig Topper; RV64XVENTANACONDOPS-LABEL: numsignbits:
418282686d7dSCraig Topper; RV64XVENTANACONDOPS:       # %bb.0:
418382686d7dSCraig Topper; RV64XVENTANACONDOPS-NEXT:    addi sp, sp, -16
418482686d7dSCraig Topper; RV64XVENTANACONDOPS-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
418582686d7dSCraig Topper; RV64XVENTANACONDOPS-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill
4186e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskc a2, a2, a0
4187e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskcn s0, a3, a0
4188e28307e9SCraig Topper; RV64XVENTANACONDOPS-NEXT:    or s0, s0, a2
4189f73844d9SYeting Kuo; RV64XVENTANACONDOPS-NEXT:    beqz a1, .LBB60_2
419082686d7dSCraig Topper; RV64XVENTANACONDOPS-NEXT:  # %bb.1:
41915990199eSCraig Topper; RV64XVENTANACONDOPS-NEXT:    mv a0, s0
4192eabaee0cSFangrui Song; RV64XVENTANACONDOPS-NEXT:    call bat
4193f73844d9SYeting Kuo; RV64XVENTANACONDOPS-NEXT:  .LBB60_2:
41945990199eSCraig Topper; RV64XVENTANACONDOPS-NEXT:    mv a0, s0
419582686d7dSCraig Topper; RV64XVENTANACONDOPS-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
419682686d7dSCraig Topper; RV64XVENTANACONDOPS-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload
419782686d7dSCraig Topper; RV64XVENTANACONDOPS-NEXT:    addi sp, sp, 16
419882686d7dSCraig Topper; RV64XVENTANACONDOPS-NEXT:    ret
419982686d7dSCraig Topper;
420082686d7dSCraig Topper; RV64XTHEADCONDMOV-LABEL: numsignbits:
420182686d7dSCraig Topper; RV64XTHEADCONDMOV:       # %bb.0:
420282686d7dSCraig Topper; RV64XTHEADCONDMOV-NEXT:    addi sp, sp, -16
420382686d7dSCraig Topper; RV64XTHEADCONDMOV-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
420482686d7dSCraig Topper; RV64XTHEADCONDMOV-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill
420582686d7dSCraig Topper; RV64XTHEADCONDMOV-NEXT:    mv s0, a2
420682686d7dSCraig Topper; RV64XTHEADCONDMOV-NEXT:    th.mveqz s0, a3, a0
4207f73844d9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    beqz a1, .LBB60_2
420882686d7dSCraig Topper; RV64XTHEADCONDMOV-NEXT:  # %bb.1:
420982686d7dSCraig Topper; RV64XTHEADCONDMOV-NEXT:    mv a0, s0
4210eabaee0cSFangrui Song; RV64XTHEADCONDMOV-NEXT:    call bat
4211f73844d9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:  .LBB60_2:
421282686d7dSCraig Topper; RV64XTHEADCONDMOV-NEXT:    mv a0, s0
421382686d7dSCraig Topper; RV64XTHEADCONDMOV-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
421482686d7dSCraig Topper; RV64XTHEADCONDMOV-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload
421582686d7dSCraig Topper; RV64XTHEADCONDMOV-NEXT:    addi sp, sp, 16
421682686d7dSCraig Topper; RV64XTHEADCONDMOV-NEXT:    ret
421782686d7dSCraig Topper;
421882686d7dSCraig Topper; RV32ZICOND-LABEL: numsignbits:
421982686d7dSCraig Topper; RV32ZICOND:       # %bb.0:
422082686d7dSCraig Topper; RV32ZICOND-NEXT:    addi sp, sp, -16
422182686d7dSCraig Topper; RV32ZICOND-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
422282686d7dSCraig Topper; RV32ZICOND-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
4223e28307e9SCraig Topper; RV32ZICOND-NEXT:    czero.eqz a2, a2, a0
4224e28307e9SCraig Topper; RV32ZICOND-NEXT:    czero.nez s0, a3, a0
4225e28307e9SCraig Topper; RV32ZICOND-NEXT:    or s0, s0, a2
4226f73844d9SYeting Kuo; RV32ZICOND-NEXT:    beqz a1, .LBB60_2
422782686d7dSCraig Topper; RV32ZICOND-NEXT:  # %bb.1:
42285990199eSCraig Topper; RV32ZICOND-NEXT:    mv a0, s0
4229eabaee0cSFangrui Song; RV32ZICOND-NEXT:    call bat
4230f73844d9SYeting Kuo; RV32ZICOND-NEXT:  .LBB60_2:
42315990199eSCraig Topper; RV32ZICOND-NEXT:    mv a0, s0
423282686d7dSCraig Topper; RV32ZICOND-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
423382686d7dSCraig Topper; RV32ZICOND-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
423482686d7dSCraig Topper; RV32ZICOND-NEXT:    addi sp, sp, 16
423582686d7dSCraig Topper; RV32ZICOND-NEXT:    ret
423682686d7dSCraig Topper;
423782686d7dSCraig Topper; RV64ZICOND-LABEL: numsignbits:
423882686d7dSCraig Topper; RV64ZICOND:       # %bb.0:
423982686d7dSCraig Topper; RV64ZICOND-NEXT:    addi sp, sp, -16
424082686d7dSCraig Topper; RV64ZICOND-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
424182686d7dSCraig Topper; RV64ZICOND-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill
4242e28307e9SCraig Topper; RV64ZICOND-NEXT:    czero.eqz a2, a2, a0
4243e28307e9SCraig Topper; RV64ZICOND-NEXT:    czero.nez s0, a3, a0
4244e28307e9SCraig Topper; RV64ZICOND-NEXT:    or s0, s0, a2
4245f73844d9SYeting Kuo; RV64ZICOND-NEXT:    beqz a1, .LBB60_2
424682686d7dSCraig Topper; RV64ZICOND-NEXT:  # %bb.1:
42475990199eSCraig Topper; RV64ZICOND-NEXT:    mv a0, s0
4248eabaee0cSFangrui Song; RV64ZICOND-NEXT:    call bat
4249f73844d9SYeting Kuo; RV64ZICOND-NEXT:  .LBB60_2:
42505990199eSCraig Topper; RV64ZICOND-NEXT:    mv a0, s0
425182686d7dSCraig Topper; RV64ZICOND-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
425282686d7dSCraig Topper; RV64ZICOND-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload
425382686d7dSCraig Topper; RV64ZICOND-NEXT:    addi sp, sp, 16
425482686d7dSCraig Topper; RV64ZICOND-NEXT:    ret
425582686d7dSCraig Topper  %5 = icmp eq i16 %0, 0
425682686d7dSCraig Topper  %6 = select i1 %5, i16 %3, i16 %2
425782686d7dSCraig Topper  %7 = icmp eq i16 %1, 0
425882686d7dSCraig Topper  br i1 %7, label %9, label %8
425982686d7dSCraig Topper
426082686d7dSCraig Topper8:                                                ; preds = %4
426182686d7dSCraig Topper  tail call void @bat(i16 signext %6)
426282686d7dSCraig Topper  br label %9
426382686d7dSCraig Topper
426482686d7dSCraig Topper9:                                                ; preds = %8, %4
426582686d7dSCraig Topper  ret i16 %6
426682686d7dSCraig Topper}
426782686d7dSCraig Topper
426882686d7dSCraig Topperdeclare void @bat(i16 signext)
4269a756a6b9SYeting Kuo
4270a756a6b9SYeting Kuodefine i64 @single_bit(i64 %x) {
4271a756a6b9SYeting Kuo; RV32I-LABEL: single_bit:
4272a756a6b9SYeting Kuo; RV32I:       # %bb.0: # %entry
4273a756a6b9SYeting Kuo; RV32I-NEXT:    slli a2, a0, 21
4274a756a6b9SYeting Kuo; RV32I-NEXT:    srai a2, a2, 31
4275a756a6b9SYeting Kuo; RV32I-NEXT:    and a0, a2, a0
4276a756a6b9SYeting Kuo; RV32I-NEXT:    and a1, a2, a1
4277a756a6b9SYeting Kuo; RV32I-NEXT:    ret
4278a756a6b9SYeting Kuo;
4279a756a6b9SYeting Kuo; RV64I-LABEL: single_bit:
4280a756a6b9SYeting Kuo; RV64I:       # %bb.0: # %entry
4281a756a6b9SYeting Kuo; RV64I-NEXT:    slli a1, a0, 53
4282a756a6b9SYeting Kuo; RV64I-NEXT:    srai a1, a1, 63
4283a756a6b9SYeting Kuo; RV64I-NEXT:    and a0, a1, a0
4284a756a6b9SYeting Kuo; RV64I-NEXT:    ret
4285a756a6b9SYeting Kuo;
42869bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: single_bit:
42879bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0: # %entry
42889bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    andi a2, a0, 1024
42899bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a0, a0, a2
42909bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
42919bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
42929bd97fcfSCraig Topper;
4293a756a6b9SYeting Kuo; RV64XVENTANACONDOPS-LABEL: single_bit:
4294a756a6b9SYeting Kuo; RV64XVENTANACONDOPS:       # %bb.0: # %entry
4295a756a6b9SYeting Kuo; RV64XVENTANACONDOPS-NEXT:    andi a1, a0, 1024
4296a756a6b9SYeting Kuo; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a0, a1
4297a756a6b9SYeting Kuo; RV64XVENTANACONDOPS-NEXT:    ret
4298a756a6b9SYeting Kuo;
4299a756a6b9SYeting Kuo; RV64XTHEADCONDMOV-LABEL: single_bit:
4300a756a6b9SYeting Kuo; RV64XTHEADCONDMOV:       # %bb.0: # %entry
4301a756a6b9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    slli a1, a0, 53
4302a756a6b9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    srai a1, a1, 63
4303a756a6b9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    and a0, a1, a0
4304a756a6b9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    ret
4305a756a6b9SYeting Kuo;
4306a756a6b9SYeting Kuo; RV32ZICOND-LABEL: single_bit:
4307a756a6b9SYeting Kuo; RV32ZICOND:       # %bb.0: # %entry
4308a756a6b9SYeting Kuo; RV32ZICOND-NEXT:    andi a2, a0, 1024
4309a756a6b9SYeting Kuo; RV32ZICOND-NEXT:    czero.eqz a0, a0, a2
4310a756a6b9SYeting Kuo; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
4311a756a6b9SYeting Kuo; RV32ZICOND-NEXT:    ret
4312a756a6b9SYeting Kuo;
4313a756a6b9SYeting Kuo; RV64ZICOND-LABEL: single_bit:
4314a756a6b9SYeting Kuo; RV64ZICOND:       # %bb.0: # %entry
4315a756a6b9SYeting Kuo; RV64ZICOND-NEXT:    andi a1, a0, 1024
4316a756a6b9SYeting Kuo; RV64ZICOND-NEXT:    czero.eqz a0, a0, a1
4317a756a6b9SYeting Kuo; RV64ZICOND-NEXT:    ret
4318a756a6b9SYeting Kuoentry:
4319a756a6b9SYeting Kuo  %and = and i64 %x, 1024
4320a756a6b9SYeting Kuo  %tobool.not = icmp eq i64 %and, 0
4321a756a6b9SYeting Kuo  %cond = select i1 %tobool.not, i64 0, i64 %x
4322a756a6b9SYeting Kuo  ret i64 %cond
4323a756a6b9SYeting Kuo}
4324a756a6b9SYeting Kuo
4325a756a6b9SYeting Kuo; Test to fold select with single bit check to (and (sra (shl x))).
4326a756a6b9SYeting Kuodefine i64 @single_bit2(i64 %x) {
4327a756a6b9SYeting Kuo; RV32I-LABEL: single_bit2:
4328a756a6b9SYeting Kuo; RV32I:       # %bb.0: # %entry
4329a756a6b9SYeting Kuo; RV32I-NEXT:    slli a2, a0, 20
4330a756a6b9SYeting Kuo; RV32I-NEXT:    srai a2, a2, 31
4331a756a6b9SYeting Kuo; RV32I-NEXT:    and a0, a2, a0
4332a756a6b9SYeting Kuo; RV32I-NEXT:    and a1, a2, a1
4333a756a6b9SYeting Kuo; RV32I-NEXT:    ret
4334a756a6b9SYeting Kuo;
4335a756a6b9SYeting Kuo; RV64I-LABEL: single_bit2:
4336a756a6b9SYeting Kuo; RV64I:       # %bb.0: # %entry
4337a756a6b9SYeting Kuo; RV64I-NEXT:    slli a1, a0, 52
4338a756a6b9SYeting Kuo; RV64I-NEXT:    srai a1, a1, 63
4339a756a6b9SYeting Kuo; RV64I-NEXT:    and a0, a1, a0
4340a756a6b9SYeting Kuo; RV64I-NEXT:    ret
4341a756a6b9SYeting Kuo;
43429bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: single_bit2:
43439bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0: # %entry
43449bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    bexti a2, a0, 11
43459bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a0, a0, a2
43469bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
43479bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
43489bd97fcfSCraig Topper;
4349a756a6b9SYeting Kuo; RV64XVENTANACONDOPS-LABEL: single_bit2:
4350a756a6b9SYeting Kuo; RV64XVENTANACONDOPS:       # %bb.0: # %entry
4351f35c0f2fSYeting Kuo; RV64XVENTANACONDOPS-NEXT:    bexti a1, a0, 11
4352f35c0f2fSYeting Kuo; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a0, a1
4353a756a6b9SYeting Kuo; RV64XVENTANACONDOPS-NEXT:    ret
4354a756a6b9SYeting Kuo;
4355a756a6b9SYeting Kuo; RV64XTHEADCONDMOV-LABEL: single_bit2:
4356a756a6b9SYeting Kuo; RV64XTHEADCONDMOV:       # %bb.0: # %entry
4357a756a6b9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    slli a1, a0, 52
4358a756a6b9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    srai a1, a1, 63
4359a756a6b9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    and a0, a1, a0
4360a756a6b9SYeting Kuo; RV64XTHEADCONDMOV-NEXT:    ret
4361a756a6b9SYeting Kuo;
4362a756a6b9SYeting Kuo; RV32ZICOND-LABEL: single_bit2:
4363a756a6b9SYeting Kuo; RV32ZICOND:       # %bb.0: # %entry
4364f35c0f2fSYeting Kuo; RV32ZICOND-NEXT:    bexti a2, a0, 11
4365f35c0f2fSYeting Kuo; RV32ZICOND-NEXT:    czero.eqz a0, a0, a2
4366f35c0f2fSYeting Kuo; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
4367a756a6b9SYeting Kuo; RV32ZICOND-NEXT:    ret
4368a756a6b9SYeting Kuo;
4369a756a6b9SYeting Kuo; RV64ZICOND-LABEL: single_bit2:
4370a756a6b9SYeting Kuo; RV64ZICOND:       # %bb.0: # %entry
4371f35c0f2fSYeting Kuo; RV64ZICOND-NEXT:    bexti a1, a0, 11
4372f35c0f2fSYeting Kuo; RV64ZICOND-NEXT:    czero.eqz a0, a0, a1
4373a756a6b9SYeting Kuo; RV64ZICOND-NEXT:    ret
4374a756a6b9SYeting Kuoentry:
4375a756a6b9SYeting Kuo  %and = and i64 %x, 2048
4376a756a6b9SYeting Kuo  %tobool.not = icmp eq i64 %and, 0
4377a756a6b9SYeting Kuo  %cond = select i1 %tobool.not, i64 0, i64 %x
4378a756a6b9SYeting Kuo  ret i64 %cond
4379a756a6b9SYeting Kuo}
4380b57ba8ecSCraig Topper
4381b57ba8ecSCraig Topper; Test that we don't crash on types larger than 64 bits.
4382b57ba8ecSCraig Topperdefine i64 @single_bit3(i80 %x, i64 %y) {
4383b57ba8ecSCraig Topper; RV32I-LABEL: single_bit3:
4384b57ba8ecSCraig Topper; RV32I:       # %bb.0: # %entry
4385b57ba8ecSCraig Topper; RV32I-NEXT:    lw a0, 8(a0)
4386b57ba8ecSCraig Topper; RV32I-NEXT:    slli a0, a0, 31
4387b57ba8ecSCraig Topper; RV32I-NEXT:    srai a3, a0, 31
4388b57ba8ecSCraig Topper; RV32I-NEXT:    and a0, a3, a1
4389b57ba8ecSCraig Topper; RV32I-NEXT:    and a1, a3, a2
4390b57ba8ecSCraig Topper; RV32I-NEXT:    ret
4391b57ba8ecSCraig Topper;
4392b57ba8ecSCraig Topper; RV64I-LABEL: single_bit3:
4393b57ba8ecSCraig Topper; RV64I:       # %bb.0: # %entry
4394b57ba8ecSCraig Topper; RV64I-NEXT:    slli a1, a1, 63
4395b57ba8ecSCraig Topper; RV64I-NEXT:    srai a0, a1, 63
4396b57ba8ecSCraig Topper; RV64I-NEXT:    and a0, a0, a2
4397b57ba8ecSCraig Topper; RV64I-NEXT:    ret
4398b57ba8ecSCraig Topper;
43999bd97fcfSCraig Topper; RV32XVENTANACONDOPS-LABEL: single_bit3:
44009bd97fcfSCraig Topper; RV32XVENTANACONDOPS:       # %bb.0: # %entry
44019bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    lw a0, 8(a0)
44029bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    andi a3, a0, 1
44039bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a0, a1, a3
44049bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    vt.maskc a1, a2, a3
44059bd97fcfSCraig Topper; RV32XVENTANACONDOPS-NEXT:    ret
44069bd97fcfSCraig Topper;
4407b57ba8ecSCraig Topper; RV64XVENTANACONDOPS-LABEL: single_bit3:
4408b57ba8ecSCraig Topper; RV64XVENTANACONDOPS:       # %bb.0: # %entry
4409b57ba8ecSCraig Topper; RV64XVENTANACONDOPS-NEXT:    andi a1, a1, 1
4410b57ba8ecSCraig Topper; RV64XVENTANACONDOPS-NEXT:    vt.maskc a0, a2, a1
4411b57ba8ecSCraig Topper; RV64XVENTANACONDOPS-NEXT:    ret
4412b57ba8ecSCraig Topper;
4413b57ba8ecSCraig Topper; RV64XTHEADCONDMOV-LABEL: single_bit3:
4414b57ba8ecSCraig Topper; RV64XTHEADCONDMOV:       # %bb.0: # %entry
4415b57ba8ecSCraig Topper; RV64XTHEADCONDMOV-NEXT:    slli a1, a1, 63
4416b57ba8ecSCraig Topper; RV64XTHEADCONDMOV-NEXT:    srai a0, a1, 63
4417b57ba8ecSCraig Topper; RV64XTHEADCONDMOV-NEXT:    and a0, a0, a2
4418b57ba8ecSCraig Topper; RV64XTHEADCONDMOV-NEXT:    ret
4419b57ba8ecSCraig Topper;
4420b57ba8ecSCraig Topper; RV32ZICOND-LABEL: single_bit3:
4421b57ba8ecSCraig Topper; RV32ZICOND:       # %bb.0: # %entry
4422b57ba8ecSCraig Topper; RV32ZICOND-NEXT:    lw a0, 8(a0)
4423b57ba8ecSCraig Topper; RV32ZICOND-NEXT:    andi a3, a0, 1
4424b57ba8ecSCraig Topper; RV32ZICOND-NEXT:    czero.eqz a0, a1, a3
4425b57ba8ecSCraig Topper; RV32ZICOND-NEXT:    czero.eqz a1, a2, a3
4426b57ba8ecSCraig Topper; RV32ZICOND-NEXT:    ret
4427b57ba8ecSCraig Topper;
4428b57ba8ecSCraig Topper; RV64ZICOND-LABEL: single_bit3:
4429b57ba8ecSCraig Topper; RV64ZICOND:       # %bb.0: # %entry
4430b57ba8ecSCraig Topper; RV64ZICOND-NEXT:    andi a1, a1, 1
4431b57ba8ecSCraig Topper; RV64ZICOND-NEXT:    czero.eqz a0, a2, a1
4432b57ba8ecSCraig Topper; RV64ZICOND-NEXT:    ret
4433b57ba8ecSCraig Topperentry:
4434b57ba8ecSCraig Topper  %and = and i80 %x, 18446744073709551616 ; 1 << 64
4435b57ba8ecSCraig Topper  %tobool.not = icmp eq i80 %and, 0
4436b57ba8ecSCraig Topper  %cond = select i1 %tobool.not, i64 0, i64 %y
4437b57ba8ecSCraig Topper  ret i64 %cond
4438b57ba8ecSCraig Topper}
4439