From 1ff61385c8feb655a1e70cc67999680cc93f0f67 Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Thu, 2 Aug 2007 15:25:57 +0000 Subject: 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, again git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40737 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/Dominators.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'lib/VMCore') diff --git a/lib/VMCore/Dominators.cpp b/lib/VMCore/Dominators.cpp index 9b5ee1b..91b422c 100644 --- a/lib/VMCore/Dominators.cpp +++ b/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()); -- cgit v1.1