summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2007-07-27 19:13:43 +0000
committerDevang Patel <dpatel@apple.com>2007-07-27 19:13:43 +0000
commit381a2a26e924d65da751317f014a0717db4bd877 (patch)
tree219dbecf4ce44a677721c9e67da6084a638d6f28 /llvm/lib
parente3206cb425eeab24e212b6ac8c64eba90d21b351 (diff)
downloadbcm5719-llvm-381a2a26e924d65da751317f014a0717db4bd877.tar.gz
bcm5719-llvm-381a2a26e924d65da751317f014a0717db4bd877.zip
Fix edge cases in handling basic block split.
llvm-svn: 40564
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/VMCore/Dominators.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/llvm/lib/VMCore/Dominators.cpp b/llvm/lib/VMCore/Dominators.cpp
index f8aef5dde2a..9b5ee1bb40c 100644
--- a/llvm/lib/VMCore/Dominators.cpp
+++ b/llvm/lib/VMCore/Dominators.cpp
@@ -616,7 +616,11 @@ void DominanceFrontier::splitBlock(BasicBlock *NewBB) {
PI != PE; ++PI)
PredBlocks.push_back(*PI);
- assert(!PredBlocks.empty() && "No predblocks??");
+ if (PredBlocks.empty())
+ // If NewBB does not have any predecessors then it is a entry block.
+ // In this case, NewBB and its successor NewBBSucc dominates all
+ // other blocks.
+ return;
DominatorTree &DT = getAnalysis<DominatorTree>();
bool NewBBDominatesNewBBSucc = true;
@@ -643,8 +647,13 @@ void DominanceFrontier::splitBlock(BasicBlock *NewBB) {
else
++SetI;
}
-
- addBasicBlock(NewBB, Set);
+
+ DominanceFrontier::iterator NewBBI = find(NewBB);
+ if (NewBBI != end()) {
+ DominanceFrontier::DomSetType NewBBSet = NewBBI->second;
+ NewBBSet.insert(Set.begin(), Set.end());
+ } else
+ addBasicBlock(NewBB, Set);
}
} else {
OpenPOWER on IntegriCloud