@@ -1336,6 +1336,22 @@ class QCISELECTIICCPat<CondCode Cond, QCISELECTIICC Inst>
13361336 : Pat<(select (i32 (setcc (i32 GPRNoX0:$rd), (i32 GPRNoX0:$rs1), Cond)), simm5:$simm1, simm5:$simm2),
13371337 (Inst GPRNoX0:$rd, GPRNoX0:$rs1, simm5:$simm1, simm5:$simm2)>;
13381338
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+
13391355// Match `riscv_brcc` and lower to the appropriate XQCIBI branch instruction.
13401356class BcciPat<CondCode Cond, QCIBranchInst_rii Inst, DAGOperand InTyImm>
13411357 : Pat<(riscv_brcc (i32 GPRNoX0:$rs1), InTyImm:$rs2, Cond, bb:$imm12),
@@ -1498,6 +1514,36 @@ def : QCIMVCCIPat <SETEQ, QC_MVEQI, simm5>;
14981514def : QCIMVCCIPat <SETNE, QC_MVNEI, simm5>;
14991515}
15001516
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+
15011547let Predicates = [HasVendorXqcics, IsRV32] in {
15021548def : Pat<(select (i32 GPRNoX0:$rd), (i32 GPRNoX0:$rs2),(i32 GPRNoX0:$rs3)),
15031549 (QC_SELECTNEI GPRNoX0:$rd, (i32 0), GPRNoX0:$rs2, GPRNoX0:$rs3)>;
0 commit comments