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:
Eli Friedman 2009-06-03 21:42:06 +00:00
parent 77648cfd75
commit a8ba2c25e9
2 changed files with 22 additions and 2 deletions

View File

@ -270,12 +270,17 @@ protected:
NewBBIDom = PredBlocks[i];
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) {
if (DT.isReachableFromEntry(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.
DomTreeNodeBase<NodeT> *NewBBNode = DT.addNewBlock(NewBB, NewBBIDom);

View 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
}