mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-24 06:10:12 +00:00
[NFC] [PowerPC] Add isPredicable for basic instrs
PowerPC uses a dedicated method to check if the machine instr is predicable by opcode. However, there's a bit `isPredicable` in instr definition. This patch removes the method and set the bit only to opcodes referenced in it. Differential Revision: https://reviews.llvm.org/D71921
This commit is contained in:
parent
921f871ac4
commit
45c4b08d82
@ -71,13 +71,14 @@ def SRL64 : SDNodeXForm<imm, [{
|
||||
|
||||
let Interpretation64Bit = 1, isCodeGenOnly = 1 in {
|
||||
let isTerminator = 1, isBarrier = 1, PPC970_Unit = 7 in {
|
||||
let isReturn = 1, Uses = [LR8, RM] in
|
||||
let isReturn = 1, isPredicable = 1, Uses = [LR8, RM] in
|
||||
def BLR8 : XLForm_2_ext<19, 16, 20, 0, 0, (outs), (ins), "blr", IIC_BrB,
|
||||
[(retflag)]>, Requires<[In64BitMode]>;
|
||||
let isBranch = 1, isIndirectBranch = 1, Uses = [CTR8] in {
|
||||
def BCTR8 : XLForm_2_ext<19, 528, 20, 0, 0, (outs), (ins), "bctr", IIC_BrB,
|
||||
[]>,
|
||||
Requires<[In64BitMode]>;
|
||||
let isPredicable = 1 in
|
||||
def BCTR8 : XLForm_2_ext<19, 528, 20, 0, 0, (outs), (ins), "bctr", IIC_BrB,
|
||||
[]>,
|
||||
Requires<[In64BitMode]>;
|
||||
def BCCCTR8 : XLForm_2_br<19, 528, 0, (outs), (ins pred:$cond),
|
||||
"b${cond:cc}ctr${cond:pm} ${cond:reg}", IIC_BrB,
|
||||
[]>,
|
||||
@ -141,9 +142,10 @@ let isCall = 1, PPC970_Unit = 7, Defs = [LR8] in {
|
||||
[(PPCcall_nop (i64 imm:$func))]>;
|
||||
}
|
||||
let Uses = [CTR8, RM] in {
|
||||
def BCTRL8 : XLForm_2_ext<19, 528, 20, 0, 1, (outs), (ins),
|
||||
"bctrl", IIC_BrB, [(PPCbctrl)]>,
|
||||
Requires<[In64BitMode]>;
|
||||
let isPredicable = 1 in
|
||||
def BCTRL8 : XLForm_2_ext<19, 528, 20, 0, 1, (outs), (ins),
|
||||
"bctrl", IIC_BrB, [(PPCbctrl)]>,
|
||||
Requires<[In64BitMode]>;
|
||||
|
||||
let isCodeGenOnly = 1 in {
|
||||
def BCCCTRL8 : XLForm_2_br<19, 528, 1, (outs), (ins pred:$cond),
|
||||
|
@ -1587,22 +1587,6 @@ bool PPCInstrInfo::DefinesPredicate(MachineInstr &MI,
|
||||
return Found;
|
||||
}
|
||||
|
||||
bool PPCInstrInfo::isPredicable(const MachineInstr &MI) const {
|
||||
unsigned OpC = MI.getOpcode();
|
||||
switch (OpC) {
|
||||
default:
|
||||
return false;
|
||||
case PPC::B:
|
||||
case PPC::BLR:
|
||||
case PPC::BLR8:
|
||||
case PPC::BCTR:
|
||||
case PPC::BCTR8:
|
||||
case PPC::BCTRL:
|
||||
case PPC::BCTRL8:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
bool PPCInstrInfo::analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
|
||||
unsigned &SrcReg2, int &Mask,
|
||||
int &Value) const {
|
||||
|
@ -346,8 +346,6 @@ public:
|
||||
bool DefinesPredicate(MachineInstr &MI,
|
||||
std::vector<MachineOperand> &Pred) const override;
|
||||
|
||||
bool isPredicable(const MachineInstr &MI) const override;
|
||||
|
||||
// Comparison optimization.
|
||||
|
||||
bool analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
|
||||
|
@ -1390,12 +1390,13 @@ def RESTORE_CRBIT : PPCEmitTimePseudo<(outs crbitrc:$cond), (ins memri:$F),
|
||||
}
|
||||
|
||||
let isTerminator = 1, isBarrier = 1, PPC970_Unit = 7 in {
|
||||
let isReturn = 1, Uses = [LR, RM] in
|
||||
let isPredicable = 1, isReturn = 1, Uses = [LR, RM] in
|
||||
def BLR : XLForm_2_ext<19, 16, 20, 0, 0, (outs), (ins), "blr", IIC_BrB,
|
||||
[(retflag)]>, Requires<[In32BitMode]>;
|
||||
let isBranch = 1, isIndirectBranch = 1, Uses = [CTR] in {
|
||||
def BCTR : XLForm_2_ext<19, 528, 20, 0, 0, (outs), (ins), "bctr", IIC_BrB,
|
||||
[]>;
|
||||
let isPredicable = 1 in
|
||||
def BCTR : XLForm_2_ext<19, 528, 20, 0, 0, (outs), (ins), "bctr", IIC_BrB,
|
||||
[]>;
|
||||
|
||||
let isCodeGenOnly = 1 in {
|
||||
def BCCCTR : XLForm_2_br<19, 528, 0, (outs), (ins pred:$cond),
|
||||
@ -1428,9 +1429,10 @@ let Defs = [LR] in
|
||||
|
||||
let isBranch = 1, isTerminator = 1, hasCtrlDep = 1, PPC970_Unit = 7 in {
|
||||
let isBarrier = 1 in {
|
||||
def B : IForm<18, 0, 0, (outs), (ins directbrtarget:$dst),
|
||||
"b $dst", IIC_BrB,
|
||||
[(br bb:$dst)]>;
|
||||
let isPredicable = 1 in
|
||||
def B : IForm<18, 0, 0, (outs), (ins directbrtarget:$dst),
|
||||
"b $dst", IIC_BrB,
|
||||
[(br bb:$dst)]>;
|
||||
def BA : IForm<18, 1, 0, (outs), (ins absdirectbrtarget:$dst),
|
||||
"ba $dst", IIC_BrB, []>;
|
||||
}
|
||||
@ -1551,9 +1553,10 @@ let isCall = 1, PPC970_Unit = 7, Defs = [LR] in {
|
||||
}
|
||||
}
|
||||
let Uses = [CTR, RM] in {
|
||||
def BCTRL : XLForm_2_ext<19, 528, 20, 0, 1, (outs), (ins),
|
||||
"bctrl", IIC_BrB, [(PPCbctrl)]>,
|
||||
Requires<[In32BitMode]>;
|
||||
let isPredicable = 1 in
|
||||
def BCTRL : XLForm_2_ext<19, 528, 20, 0, 1, (outs), (ins),
|
||||
"bctrl", IIC_BrB, [(PPCbctrl)]>,
|
||||
Requires<[In32BitMode]>;
|
||||
|
||||
let isCodeGenOnly = 1 in {
|
||||
def BCCCTRL : XLForm_2_br<19, 528, 1, (outs), (ins pred:$cond),
|
||||
|
Loading…
Reference in New Issue
Block a user