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