mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-26 21:20:37 +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:
parent
6d0cc55ef3
commit
64cd658223
@ -610,6 +610,23 @@ void LoopUnswitch::UnswitchTrivialCondition(Loop *L, Value *Cond,
|
|||||||
DT->changeImmediateDominator(NewExit, OrigPH);
|
DT->changeImmediateDominator(NewExit, OrigPH);
|
||||||
DT->changeImmediateDominator(NewPH, 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);
|
LPM->deleteSimpleAnalysisValue(OrigPH->getTerminator(), L);
|
||||||
OrigPH->getTerminator()->eraseFromParent();
|
OrigPH->getTerminator()->eraseFromParent();
|
||||||
|
|
||||||
|
22
test/Transforms/LoopUnswitch/2008-06-17-DomFrontier.ll
Normal file
22
test/Transforms/LoopUnswitch/2008-06-17-DomFrontier.ll
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
; RUN: llvm-as < %s | opt -licm -loop-unswitch -disable-output
|
||||||
|
@g_56 = external global i16 ; <i16*> [#uses=2]
|
||||||
|
|
||||||
|
define i32 @func_67(i32 %p_68, i8 signext %p_69, i8 signext %p_71) nounwind {
|
||||||
|
entry:
|
||||||
|
br label %bb
|
||||||
|
bb: ; preds = %bb44, %entry
|
||||||
|
br label %bb3
|
||||||
|
bb3: ; preds = %bb36, %bb
|
||||||
|
%bothcond = or i1 false, false ; <i1> [#uses=1]
|
||||||
|
br i1 %bothcond, label %bb29, label %bb19
|
||||||
|
bb19: ; preds = %bb3
|
||||||
|
br i1 false, label %bb36, label %bb29
|
||||||
|
bb29: ; preds = %bb19, %bb3
|
||||||
|
ret i32 0
|
||||||
|
bb36: ; preds = %bb19
|
||||||
|
store i16 0, i16* @g_56, align 2
|
||||||
|
br i1 false, label %bb44, label %bb3
|
||||||
|
bb44: ; preds = %bb44, %bb36
|
||||||
|
%tmp46 = load i16* @g_56, align 2 ; <i16> [#uses=0]
|
||||||
|
br i1 false, label %bb, label %bb44
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user