summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2008-06-18 02:16:38 +0000
committerDevang Patel <dpatel@apple.com>2008-06-18 02:16:38 +0000
commitcd6b6979453eeb783a4118e6c8e172db10a596b1 (patch)
tree43fc91ae46981ad69e84179f0746377299f72879 /llvm/lib/Transforms/Scalar/LoopUnswitch.cpp
parent772a008738efbedfc8e4a80711cd8bfa1a619774 (diff)
downloadbcm5719-llvm-cd6b6979453eeb783a4118e6c8e172db10a596b1.tar.gz
bcm5719-llvm-cd6b6979453eeb783a4118e6c8e172db10a596b1.zip
Preserve dominance frontier while trivially unswitching loop.
llvm-svn: 52438
Diffstat (limited to 'llvm/lib/Transforms/Scalar/LoopUnswitch.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/LoopUnswitch.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp b/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp
index e0fb4c614d9..955622e0256 100644
--- a/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp
@@ -610,6 +610,23 @@ void LoopUnswitch::UnswitchTrivialCondition(Loop *L, Value *Cond,
DT->changeImmediateDominator(NewExit, OrigPH);
DT->changeImmediateDominator(NewPH, OrigPH);
}
+
+ if (DF) {
+ // NewExit is now part of NewPH and Loop Header's dominance
+ // frontier.
+ DominanceFrontier::iterator DFI = DF->find(NewPH);
+ if (DFI != DF->end())
+ DF->addToFrontier(DFI, NewExit);
+ DFI = DF->find(L->getHeader());
+ DF->addToFrontier(DFI, NewExit);
+
+ // ExitBlock does not have successors then NewExit is part of
+ // its dominance frontier.
+ if (succ_begin(ExitBlock) == succ_end(ExitBlock)) {
+ DFI = DF->find(ExitBlock);
+ DF->addToFrontier(DFI, NewExit);
+ }
+ }
LPM->deleteSimpleAnalysisValue(OrigPH->getTerminator(), L);
OrigPH->getTerminator()->eraseFromParent();
OpenPOWER on IntegriCloud