mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-24 08:24:33 +00:00
Preserve dominance frontier while trivially unswitching loop.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52438 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -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();
|
||||
|
||||
|
Reference in New Issue
Block a user