@@ -1336,6 +1336,22 @@ class QCISELECTIICCPat<CondCode Cond, QCISELECTIICC Inst>
1336
1336
: Pat<(select (i32 (setcc (i32 GPRNoX0:$rd), (i32 GPRNoX0:$rs1), Cond)), simm5:$simm1, simm5:$simm2),
1337
1337
(Inst GPRNoX0:$rd, GPRNoX0:$rs1, simm5:$simm1, simm5:$simm2)>;
1338
1338
1339
+ class QCILICCPat<CondCode Cond, QCILICC Inst>
1340
+ : Pat<(select (XLenVT (setcc (XLenVT GPRNoX0:$rs1), (XLenVT GPRNoX0:$rs2), Cond)), simm5:$simm, (XLenVT GPRNoX0:$rd)),
1341
+ (Inst GPRNoX0:$rd, GPRNoX0:$rs1, GPRNoX0:$rs2, simm5:$simm)>;
1342
+
1343
+ class QCILICCPatInv<CondCode Cond, QCILICC Inst>
1344
+ : Pat<(select (XLenVT (setcc (XLenVT GPRNoX0:$rs1), (XLenVT GPRNoX0:$rs2), Cond)), (XLenVT GPRNoX0:$rd), simm5:$simm),
1345
+ (Inst GPRNoX0:$rd, GPRNoX0:$rs1, GPRNoX0:$rs2, simm5:$simm)>;
1346
+
1347
+ class QCILICCIPat<CondCode Cond, QCILICC Inst, DAGOperand InTyImm>
1348
+ : Pat<(select (XLenVT (setcc (XLenVT GPRNoX0:$rs1), InTyImm:$imm, Cond)), simm5:$simm, (XLenVT GPRNoX0:$rd)),
1349
+ (Inst GPRNoX0:$rd, GPRNoX0:$rs1, InTyImm:$imm, simm5:$simm)>;
1350
+
1351
+ class QCILICCIPatInv<CondCode Cond, QCILICC Inst, DAGOperand InTyImm>
1352
+ : Pat<(select (XLenVT (setcc (XLenVT GPRNoX0:$rs1), InTyImm:$imm, Cond)), (XLenVT GPRNoX0:$rd), simm5:$simm),
1353
+ (Inst GPRNoX0:$rd, GPRNoX0:$rs1, InTyImm:$imm, simm5:$simm)>;
1354
+
1339
1355
// Match `riscv_brcc` and lower to the appropriate XQCIBI branch instruction.
1340
1356
class BcciPat<CondCode Cond, QCIBranchInst_rii Inst, DAGOperand InTyImm>
1341
1357
: Pat<(riscv_brcc (i32 GPRNoX0:$rs1), InTyImm:$rs2, Cond, bb:$imm12),
@@ -1498,6 +1514,36 @@ def : QCIMVCCIPat <SETEQ, QC_MVEQI, simm5>;
1498
1514
def : QCIMVCCIPat <SETNE, QC_MVNEI, simm5>;
1499
1515
}
1500
1516
1517
+ let Predicates = [HasVendorXqcicli, HasVendorXqcicsOrXqcicm, IsRV32] in {
1518
+ def : QCILICCPat <SETEQ, QC_LIEQ>;
1519
+ def : QCILICCPat <SETNE, QC_LINE>;
1520
+ def : QCILICCPat <SETLT, QC_LILT>;
1521
+ def : QCILICCPat <SETGE, QC_LIGE>;
1522
+ def : QCILICCPat <SETULT, QC_LILTU>;
1523
+ def : QCILICCPat <SETUGE, QC_LIGEU>;
1524
+
1525
+ def : QCILICCIPat <SETEQ, QC_LIEQI, simm5>;
1526
+ def : QCILICCIPat <SETNE, QC_LINEI, simm5>;
1527
+ def : QCILICCIPat <SETLT, QC_LILTI, simm5>;
1528
+ def : QCILICCIPat <SETGE, QC_LIGEI, simm5>;
1529
+ def : QCILICCIPat <SETULT, QC_LILTUI, uimm5>;
1530
+ def : QCILICCIPat <SETUGE, QC_LIGEUI, uimm5>;
1531
+
1532
+ def : QCILICCPatInv <SETNE, QC_LIEQ>;
1533
+ def : QCILICCPatInv <SETEQ, QC_LINE>;
1534
+ def : QCILICCPatInv <SETGE, QC_LILT>;
1535
+ def : QCILICCPatInv <SETLT, QC_LIGE>;
1536
+ def : QCILICCPatInv <SETUGE, QC_LILTU>;
1537
+ def : QCILICCPatInv <SETULT, QC_LIGEU>;
1538
+
1539
+ def : QCILICCIPatInv <SETNE, QC_LIEQI, simm5>;
1540
+ def : QCILICCIPatInv <SETEQ, QC_LINEI, simm5>;
1541
+ def : QCILICCIPatInv <SETGE, QC_LILTI, simm5>;
1542
+ def : QCILICCIPatInv <SETLT, QC_LIGEI, simm5>;
1543
+ def : QCILICCIPatInv <SETUGE, QC_LILTUI, uimm5>;
1544
+ def : QCILICCIPatInv <SETULT, QC_LIGEUI, uimm5>;
1545
+ }
1546
+
1501
1547
let Predicates = [HasVendorXqcics, IsRV32] in {
1502
1548
def : Pat<(select (i32 GPRNoX0:$rd), (i32 GPRNoX0:$rs2),(i32 GPRNoX0:$rs3)),
1503
1549
(QC_SELECTNEI GPRNoX0:$rd, (i32 0), GPRNoX0:$rs2, GPRNoX0:$rs3)>;
0 commit comments