mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-03 17:31:50 +00:00
Address comments on last patch:
- Loosen the restrictions when checking of it branches to a landing pad. - Make the loop more efficient by checking the '.insert' return value. - Do cheaper checks first. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91101 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4bde1ab82d
commit
64bdde2093
@ -327,9 +327,9 @@ public:
|
||||
/// 'Old', change the code and CFG so that it branches to 'New' instead.
|
||||
void ReplaceUsesOfBlockWith(MachineBasicBlock *Old, MachineBasicBlock *New);
|
||||
|
||||
/// BranchesToLandingPad - The basic block branches only to a landing pad or
|
||||
/// to another basic block which branches only to a landing pad. No other
|
||||
/// instructions are present other than the unconditional branch.
|
||||
/// BranchesToLandingPad - The basic block is a landing pad or branches only
|
||||
/// to a landing pad. No other instructions are present other than the
|
||||
/// unconditional branch.
|
||||
bool BranchesToLandingPad(const MachineBasicBlock *MBB) const;
|
||||
|
||||
/// CorrectExtraCFGEdges - Various pieces of code can cause excess edges in
|
||||
|
@ -449,24 +449,19 @@ void MachineBasicBlock::ReplaceUsesOfBlockWith(MachineBasicBlock *Old,
|
||||
addSuccessor(New);
|
||||
}
|
||||
|
||||
/// BranchesToLandingPad - The basic block branches only to a landing pad or to
|
||||
/// another basic block which branches only to a landing pad. No other
|
||||
/// instructions are present other than the unconditional branch.
|
||||
/// BranchesToLandingPad - The basic block is a landing pad or branches only to
|
||||
/// a landing pad. No other instructions are present other than the
|
||||
/// unconditional branch.
|
||||
bool
|
||||
MachineBasicBlock::BranchesToLandingPad(const MachineBasicBlock *MBB) const {
|
||||
SmallSet<const MachineBasicBlock*, 32> Visited;
|
||||
const MachineBasicBlock *CurMBB = MBB;
|
||||
|
||||
while (!Visited.count(CurMBB) && !CurMBB->isLandingPad()) {
|
||||
if (CurMBB->size() != 1 || CurMBB->succ_empty() || CurMBB->succ_size() != 1)
|
||||
while (!CurMBB->isLandingPad()) {
|
||||
if (CurMBB->succ_size() != 1)
|
||||
break;
|
||||
|
||||
const TargetInstrInfo *TII =
|
||||
CurMBB->getParent()->getTarget().getInstrInfo();
|
||||
if (!TII->isUnpredicatedTerminator(CurMBB->begin()))
|
||||
break;
|
||||
|
||||
Visited.insert(CurMBB);
|
||||
if (!Visited.insert(CurMBB)) break;
|
||||
CurMBB = *CurMBB->succ_begin();
|
||||
}
|
||||
|
||||
@ -516,8 +511,8 @@ bool MachineBasicBlock::CorrectExtraCFGEdges(MachineBasicBlock *DestA,
|
||||
} else if (MBB == DestB) {
|
||||
DestB = 0;
|
||||
++SI;
|
||||
} else if (BranchesToLandingPad(MBB) &&
|
||||
MBB != OrigDestA && MBB != OrigDestB) {
|
||||
} else if (MBB != OrigDestA && MBB != OrigDestB &&
|
||||
BranchesToLandingPad(MBB)) {
|
||||
++SI;
|
||||
} else {
|
||||
// Otherwise, this is a superfluous edge, remove it.
|
||||
|
Loading…
Reference in New Issue
Block a user