mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
Fix broken logic in DominatorTreeBase::Split. Part of PR4238.
llvm-svn: 72231
This commit is contained in:
parent
36eff96b0f
commit
b32b64b5b4
@ -251,49 +251,16 @@ protected:
|
||||
|
||||
assert(!PredBlocks.empty() && "No predblocks??");
|
||||
|
||||
// The newly inserted basic block will dominate existing basic blocks iff the
|
||||
// PredBlocks dominate all of the non-pred blocks. If all predblocks dominate
|
||||
// the non-pred blocks, then they all must be the same block!
|
||||
//
|
||||
bool NewBBDominatesNewBBSucc = true;
|
||||
{
|
||||
typename GraphT::NodeType* OnePred = PredBlocks[0];
|
||||
size_t i = 1, e = PredBlocks.size();
|
||||
for (i = 1; !DT.isReachableFromEntry(OnePred); ++i) {
|
||||
assert(i != e && "Didn't find reachable pred?");
|
||||
OnePred = PredBlocks[i];
|
||||
for (typename GraphTraits<Inverse<N> >::ChildIteratorType PI =
|
||||
GraphTraits<Inverse<N> >::child_begin(NewBBSucc),
|
||||
E = GraphTraits<Inverse<N> >::child_end(NewBBSucc); PI != E; ++PI)
|
||||
if (*PI != NewBB && !DT.dominates(NewBBSucc, *PI) &&
|
||||
DT.isReachableFromEntry(*PI)) {
|
||||
NewBBDominatesNewBBSucc = false;
|
||||
break;
|
||||
}
|
||||
|
||||
for (; i != e; ++i)
|
||||
if (PredBlocks[i] != OnePred && DT.isReachableFromEntry(OnePred)) {
|
||||
NewBBDominatesNewBBSucc = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (NewBBDominatesNewBBSucc)
|
||||
for (typename GraphTraits<Inverse<N> >::ChildIteratorType PI =
|
||||
GraphTraits<Inverse<N> >::child_begin(NewBBSucc),
|
||||
E = GraphTraits<Inverse<N> >::child_end(NewBBSucc); PI != E; ++PI)
|
||||
if (*PI != NewBB && !DT.dominates(NewBBSucc, *PI)) {
|
||||
NewBBDominatesNewBBSucc = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// The other scenario where the new block can dominate its successors are when
|
||||
// all predecessors of NewBBSucc that are not NewBB are dominated by NewBBSucc
|
||||
// already.
|
||||
if (!NewBBDominatesNewBBSucc) {
|
||||
NewBBDominatesNewBBSucc = true;
|
||||
for (typename GraphTraits<Inverse<N> >::ChildIteratorType PI =
|
||||
GraphTraits<Inverse<N> >::child_begin(NewBBSucc),
|
||||
E = GraphTraits<Inverse<N> >::child_end(NewBBSucc); PI != E; ++PI)
|
||||
if (*PI != NewBB && !DT.dominates(NewBBSucc, *PI)) {
|
||||
NewBBDominatesNewBBSucc = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Find NewBB's immediate dominator and create new dominator tree node for
|
||||
// NewBB.
|
||||
NodeT *NewBBIDom = 0;
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: llvm-as < %s | llc -f -o /dev/null
|
||||
; RUN: llvm-as < %s | llc -f -o /dev/null -verify-dom-info
|
||||
%llvm.dbg.anchor.type = type { i32, i32 }
|
||||
%llvm.dbg.basictype.type = type { i32, { }*, i8*, { }*, i32, i64, i64, i64, i32, i32, i8*, i8* }
|
||||
%llvm.dbg.compile_unit.type = type { i32, { }*, i32, i8*, i8*, i8* }
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: llvm-as < %s | opt -lcssa -disable-output
|
||||
; RUN: llvm-as < %s | opt -lcssa -disable-output -verify-dom-info
|
||||
; PR977
|
||||
; END.
|
||||
declare i32 @opost_block()
|
||||
|
Loading…
Reference in New Issue
Block a user