diff options
author | Devang Patel <dpatel@apple.com> | 2008-06-18 02:16:38 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2008-06-18 02:16:38 +0000 |
commit | cd6b6979453eeb783a4118e6c8e172db10a596b1 (patch) | |
tree | 43fc91ae46981ad69e84179f0746377299f72879 /llvm/lib/Transforms/Scalar/LoopUnswitch.cpp | |
parent | 772a008738efbedfc8e4a80711cd8bfa1a619774 (diff) | |
download | bcm5719-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.cpp | 17 |
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(); |