mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-02 21:17:17 +00:00
PR4317: Handle splits where the new block is unreachable correctly in
DominatorTreeBase::Split. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72810 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -270,12 +270,17 @@ protected:
|
|||||||
NewBBIDom = PredBlocks[i];
|
NewBBIDom = PredBlocks[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
assert(i != PredBlocks.size() && "No reachable preds?");
|
|
||||||
|
// It's possible that none of the predecessors of NewBB are reachable;
|
||||||
|
// in that case, NewBB itself is unreachable, so nothing needs to be
|
||||||
|
// changed.
|
||||||
|
if (!NewBBIDom)
|
||||||
|
return;
|
||||||
|
|
||||||
for (i = i + 1; i < PredBlocks.size(); ++i) {
|
for (i = i + 1; i < PredBlocks.size(); ++i) {
|
||||||
if (DT.isReachableFromEntry(PredBlocks[i]))
|
if (DT.isReachableFromEntry(PredBlocks[i]))
|
||||||
NewBBIDom = DT.findNearestCommonDominator(NewBBIDom, PredBlocks[i]);
|
NewBBIDom = DT.findNearestCommonDominator(NewBBIDom, PredBlocks[i]);
|
||||||
}
|
}
|
||||||
assert(NewBBIDom && "No immediate dominator found??");
|
|
||||||
|
|
||||||
// Create the new dominator tree node... and set the idom of NewBB.
|
// Create the new dominator tree node... and set the idom of NewBB.
|
||||||
DomTreeNodeBase<NodeT> *NewBBNode = DT.addNewBlock(NewBB, NewBBIDom);
|
DomTreeNodeBase<NodeT> *NewBBNode = DT.addNewBlock(NewBB, NewBBIDom);
|
||||||
|
15
test/CodeGen/Generic/2009-06-03-UnreachableSplitPad.ll
Normal file
15
test/CodeGen/Generic/2009-06-03-UnreachableSplitPad.ll
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
; RUN: llvm-as < %s | llc
|
||||||
|
; PR4317
|
||||||
|
|
||||||
|
declare i32 @b()
|
||||||
|
|
||||||
|
define void @a() {
|
||||||
|
entry:
|
||||||
|
ret void
|
||||||
|
|
||||||
|
dummy:
|
||||||
|
invoke i32 @b() to label %reg unwind label %reg
|
||||||
|
|
||||||
|
reg:
|
||||||
|
ret void
|
||||||
|
}
|
Reference in New Issue
Block a user