add another target hook for branch folding.
llvm-svn: 31262
This commit is contained in:
parent
eef273a16f
commit
53ebf20c26
|
@ -318,6 +318,14 @@ public:
|
||||||
assert(0 && "Target didn't implement TargetInstrInfo::InsertBranch!");
|
assert(0 && "Target didn't implement TargetInstrInfo::InsertBranch!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// BlockHasNoFallThrough - Return true if the specified block does not
|
||||||
|
/// fall-through into its successor block. This is primarily used when a
|
||||||
|
/// branch is unanalyzable. It is useful for things like unconditional
|
||||||
|
/// indirect branches (jump tables).
|
||||||
|
virtual bool BlockHasNoFallThrough(MachineBasicBlock &MBB) const {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/// ReverseBranchCondition - Reverses the branch condition of the specified
|
/// ReverseBranchCondition - Reverses the branch condition of the specified
|
||||||
/// condition list, returning false on success and true if it cannot be
|
/// condition list, returning false on success and true if it cannot be
|
||||||
/// reversed.
|
/// reversed.
|
||||||
|
|
|
@ -420,6 +420,18 @@ void X86InstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||||
BuildMI(&MBB, X86::JMP, 1).addMBB(FBB);
|
BuildMI(&MBB, X86::JMP, 1).addMBB(FBB);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool X86InstrInfo::BlockHasNoFallThrough(MachineBasicBlock &MBB) const {
|
||||||
|
if (MBB.empty()) return false;
|
||||||
|
|
||||||
|
switch (MBB.back().getOpcode()) {
|
||||||
|
case X86::JMP: // Uncond branch.
|
||||||
|
case X86::JMP32r: // Indirect branch.
|
||||||
|
case X86::JMP32m: // Indirect branch through mem.
|
||||||
|
return true;
|
||||||
|
default: return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool X86InstrInfo::
|
bool X86InstrInfo::
|
||||||
ReverseBranchCondition(std::vector<MachineOperand> &Cond) const {
|
ReverseBranchCondition(std::vector<MachineOperand> &Cond) const {
|
||||||
assert(Cond.size() == 1 && "Invalid X86 branch condition!");
|
assert(Cond.size() == 1 && "Invalid X86 branch condition!");
|
||||||
|
|
|
@ -267,6 +267,7 @@ public:
|
||||||
virtual void InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
virtual void InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||||
MachineBasicBlock *FBB,
|
MachineBasicBlock *FBB,
|
||||||
const std::vector<MachineOperand> &Cond) const;
|
const std::vector<MachineOperand> &Cond) const;
|
||||||
|
virtual bool BlockHasNoFallThrough(MachineBasicBlock &MBB) const;
|
||||||
virtual bool ReverseBranchCondition(std::vector<MachineOperand> &Cond) const;
|
virtual bool ReverseBranchCondition(std::vector<MachineOperand> &Cond) const;
|
||||||
|
|
||||||
const TargetRegisterClass *getPointerRegClass() const;
|
const TargetRegisterClass *getPointerRegClass() const;
|
||||||
|
|
Loading…
Reference in New Issue