Skip to content

Commit 0be51cf

Browse files
authored
[RISCV] Add ISel patterns for Qualcomm uC Xqcicli extension (#148121)
Add CodeGen patterns for conditional load immediate instructions
1 parent 977cfea commit 0be51cf

File tree

3 files changed

+766
-0
lines changed

3 files changed

+766
-0
lines changed

llvm/lib/Target/RISCV/RISCVFeatures.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1488,6 +1488,9 @@ def HasVendorXqcics
14881488
def NoVendorXqcics
14891489
: Predicate<"!Subtarget->hasVendorXqcics()">;
14901490

1491+
def HasVendorXqcicsOrXqcicm
1492+
: Predicate<"Subtarget->hasVendorXqcics() || Subtarget->hasVendorXqcicm()">;
1493+
14911494
def FeatureVendorXqcicsr
14921495
: RISCVExperimentalExtension<0, 4, "Qualcomm uC CSR Extension">;
14931496
def HasVendorXqcicsr

llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
13401356
class 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>;
14981514
def : 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+
15011547
let Predicates = [HasVendorXqcics, IsRV32] in {
15021548
def : 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

Comments
 (0)