mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 04:38:24 +00:00
Don't try to move a MBB into the fall-through position if it's a landing pad or
branches only to a landing pad. Without this check, the compiler would go into an infinite loop because the branch to a landing pad is an "abnormal" edge which wasn't being taken into account. This is the meat of that fix: if (!PrevBB.canFallThrough() && !MBB->BranchesToLandingPad(MBB)) { The other stuff is simplification of the "branches to a landing pad" code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91161 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -457,16 +457,9 @@ 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)
|
||||
break;
|
||||
|
||||
const TargetInstrInfo *TII =
|
||||
CurMBB->getParent()->getTarget().getInstrInfo();
|
||||
if (!TII->isUnpredicatedTerminator(CurMBB->begin()))
|
||||
break;
|
||||
|
||||
Visited.insert(CurMBB);
|
||||
while (!CurMBB->isLandingPad()) {
|
||||
if (CurMBB->succ_size() != 1) break;
|
||||
if (!Visited.insert(CurMBB)) break;
|
||||
CurMBB = *CurMBB->succ_begin();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user