summaryrefslogtreecommitdiffstats
path: root/llvm/lib/VMCore/Dominators.cpp
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2007-08-01 22:23:50 +0000
committerDevang Patel <dpatel@apple.com>2007-08-01 22:23:50 +0000
commit561b0c29a395dff62cdaf0be8aa5c2b550116490 (patch)
treef0b562e43695bc2ddc8f0fa6ae48b975621072c5 /llvm/lib/VMCore/Dominators.cpp
parent7886467b352759c5d34fb210106e738b735da9c0 (diff)
downloadbcm5719-llvm-561b0c29a395dff62cdaf0be8aa5c2b550116490.tar.gz
bcm5719-llvm-561b0c29a395dff62cdaf0be8aa5c2b550116490.zip
Update dominator info for the middle blocks created while spliting
exit edge to preserve LCSSA. Fix dominance frontier update during loop unswitch. This fixes PR 1589. llvm-svn: 40695
Diffstat (limited to 'llvm/lib/VMCore/Dominators.cpp')
-rw-r--r--llvm/lib/VMCore/Dominators.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/llvm/lib/VMCore/Dominators.cpp b/llvm/lib/VMCore/Dominators.cpp
index 9b5ee1bb40c..91b422c7044 100644
--- a/llvm/lib/VMCore/Dominators.cpp
+++ b/llvm/lib/VMCore/Dominators.cpp
@@ -627,6 +627,15 @@ void DominanceFrontier::splitBlock(BasicBlock *NewBB) {
if (!DT.dominates(NewBB, NewBBSucc))
NewBBDominatesNewBBSucc = false;
+ // NewBBSucc inherites original NewBB frontier.
+ DominanceFrontier::iterator NewBBI = find(NewBB);
+ if (NewBBI != end()) {
+ DominanceFrontier::DomSetType NewBBSet = NewBBI->second;
+ DominanceFrontier::DomSetType NewBBSuccSet;
+ NewBBSuccSet.insert(NewBBSet.begin(), NewBBSet.end());
+ addBasicBlock(NewBBSucc, NewBBSuccSet);
+ }
+
// If NewBB dominates NewBBSucc, then DF(NewBB) is now going to be the
// DF(PredBlocks[0]) without the stuff that the new block does not dominate
// a predecessor of.
@@ -648,7 +657,6 @@ void DominanceFrontier::splitBlock(BasicBlock *NewBB) {
++SetI;
}
- DominanceFrontier::iterator NewBBI = find(NewBB);
if (NewBBI != end()) {
DominanceFrontier::DomSetType NewBBSet = NewBBI->second;
NewBBSet.insert(Set.begin(), Set.end());
OpenPOWER on IntegriCloud