mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 02:52:53 +02:00
[RISCV] Add a generic PatGprImm class and use it to simplify patterns in RISCVInstrInfoB.td. NFC
This commit is contained in:
parent
e6cb585789
commit
bb71ad0f17
@ -839,11 +839,14 @@ class PatGpr<SDPatternOperator OpNode, RVInst Inst>
|
||||
: Pat<(OpNode GPR:$rs1), (Inst GPR:$rs1)>;
|
||||
class PatGprGpr<SDPatternOperator OpNode, RVInst Inst>
|
||||
: Pat<(OpNode GPR:$rs1, GPR:$rs2), (Inst GPR:$rs1, GPR:$rs2)>;
|
||||
|
||||
class PatGprImm<SDPatternOperator OpNode, RVInst Inst, ImmLeaf ImmType>
|
||||
: Pat<(XLenVT (OpNode (XLenVT GPR:$rs1), ImmType:$imm)),
|
||||
(Inst GPR:$rs1, ImmType:$imm)>;
|
||||
class PatGprSimm12<SDPatternOperator OpNode, RVInstI Inst>
|
||||
: Pat<(OpNode GPR:$rs1, simm12:$imm12), (Inst GPR:$rs1, simm12:$imm12)>;
|
||||
: PatGprImm<OpNode, Inst, simm12>;
|
||||
class PatGprUimmLog2XLen<SDPatternOperator OpNode, RVInstIShift Inst>
|
||||
: Pat<(OpNode GPR:$rs1, uimmlog2xlen:$shamt),
|
||||
(Inst GPR:$rs1, uimmlog2xlen:$shamt)>;
|
||||
: PatGprImm<OpNode, Inst, uimmlog2xlen>;
|
||||
|
||||
/// Predicates
|
||||
|
||||
|
@ -712,8 +712,7 @@ def : Pat<(and (srl GPR:$rs1, uimmlog2xlen:$shamt), (XLenVT 1)),
|
||||
// There's no encoding for roli in the the 'B' extension as it can be
|
||||
// implemented with rori by negating the immediate.
|
||||
let Predicates = [HasStdExtZbbOrZbp] in {
|
||||
def : Pat<(rotr GPR:$rs1, uimmlog2xlen:$shamt),
|
||||
(RORI GPR:$rs1, uimmlog2xlen:$shamt)>;
|
||||
def : PatGprImm<rotr, RORI, uimmlog2xlen>;
|
||||
def : Pat<(rotl GPR:$rs1, uimmlog2xlen:$shamt),
|
||||
(RORI GPR:$rs1, (ImmSubFromXLen uimmlog2xlen:$shamt))>;
|
||||
|
||||
@ -723,12 +722,9 @@ def : Pat<(riscv_gorc GPR:$rs1, 7), (ORCB GPR:$rs1)>;
|
||||
}
|
||||
|
||||
let Predicates = [HasStdExtZbp] in {
|
||||
def : Pat<(riscv_shfl GPR:$rs1, shfl_uimm:$shamt),
|
||||
(SHFLI GPR:$rs1, shfl_uimm:$shamt)>;
|
||||
def : Pat<(riscv_grev GPR:$rs1, uimmlog2xlen:$shamt),
|
||||
(GREVI GPR:$rs1, uimmlog2xlen:$shamt)>;
|
||||
def : Pat<(riscv_gorc GPR:$rs1, uimmlog2xlen:$shamt),
|
||||
(GORCI GPR:$rs1, uimmlog2xlen:$shamt)>;
|
||||
def : PatGprImm<riscv_shfl, SHFLI, shfl_uimm>;
|
||||
def : PatGprImm<riscv_grev, GREVI, uimmlog2xlen>;
|
||||
def : PatGprImm<riscv_gorc, GORCI, uimmlog2xlen>;
|
||||
} // Predicates = [HasStdExtZbp]
|
||||
|
||||
let Predicates = [HasStdExtZbp, IsRV32] in {
|
||||
@ -875,8 +871,7 @@ def : Pat<(i64 (add (SLLIUWPat GPR:$rs1, (i64 3)), GPR:$rs2)),
|
||||
let Predicates = [HasStdExtZbbOrZbp, IsRV64] in {
|
||||
def : PatGprGpr<riscv_rolw, ROLW>;
|
||||
def : PatGprGpr<riscv_rorw, RORW>;
|
||||
def : Pat<(riscv_rorw GPR:$rs1, uimm5:$rs2),
|
||||
(RORIW GPR:$rs1, uimm5:$rs2)>;
|
||||
def : PatGprImm<riscv_rorw, RORIW, uimm5>;
|
||||
def : Pat<(riscv_rolw GPR:$rs1, uimm5:$rs2),
|
||||
(RORIW GPR:$rs1, (ImmSubFrom32 uimm5:$rs2))>;
|
||||
} // Predicates = [HasStdExtZbbOrZbp, IsRV64]
|
||||
@ -884,8 +879,8 @@ def : Pat<(riscv_rolw GPR:$rs1, uimm5:$rs2),
|
||||
let Predicates = [HasStdExtZbp, IsRV64] in {
|
||||
def : Pat<(riscv_rorw (riscv_grevw GPR:$rs1, 24), 16), (GREVIW GPR:$rs1, 8)>;
|
||||
def : Pat<(riscv_rolw (riscv_grevw GPR:$rs1, 24), 16), (GREVIW GPR:$rs1, 8)>;
|
||||
def : Pat<(riscv_grevw GPR:$rs1, uimm5:$shamt), (GREVIW GPR:$rs1, uimm5:$shamt)>;
|
||||
def : Pat<(riscv_gorcw GPR:$rs1, uimm5:$shamt), (GORCIW GPR:$rs1, uimm5:$shamt)>;
|
||||
def : PatGprImm<riscv_grevw, GREVIW, uimm5>;
|
||||
def : PatGprImm<riscv_gorcw, GORCIW, uimm5>;
|
||||
} // Predicates = [HasStdExtZbp, IsRV64]
|
||||
|
||||
let Predicates = [HasStdExtZbt, IsRV64] in {
|
||||
|
Loading…
Reference in New Issue
Block a user