From: Devang Patel Date: Thu, 4 Sep 2008 22:43:59 +0000 (+0000) Subject: A loop may be unswitched multiple times. Reconstruct dom info. at the end. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=deafefabae915cf20884fd829d2542f9626786e8;p=oota-llvm.git A loop may be unswitched multiple times. Reconstruct dom info. at the end. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55806 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/LoopUnswitch.cpp b/lib/Transforms/Scalar/LoopUnswitch.cpp index 691a67a4275..1c4bba295bd 100644 --- a/lib/Transforms/Scalar/LoopUnswitch.cpp +++ b/lib/Transforms/Scalar/LoopUnswitch.cpp @@ -190,6 +190,7 @@ bool LoopUnswitch::runOnLoop(Loop *L, LPPassManager &LPM_Ref) { DF = getAnalysisToUpdate(); DT = getAnalysisToUpdate(); currentLoop = L; + Function *F = currentLoop->getHeader()->getParent(); bool Changed = false; do { assert(currentLoop->isLCSSAForm()); @@ -197,6 +198,13 @@ bool LoopUnswitch::runOnLoop(Loop *L, LPPassManager &LPM_Ref) { Changed |= processCurrentLoop(); } while(redoLoop); + if (Changed) { + // FIXME: Reconstruct dom info, because it is not preserved properly. + if (DT) + DT->runOnFunction(*F); + if (DF) + DF->runOnFunction(*F); + } return Changed; } @@ -450,11 +458,6 @@ bool LoopUnswitch::UnswitchIfProfitable(Value *LoopCond, Constant *Val){ UnswitchNontrivialCondition(LoopCond, Val, currentLoop); } - // FIXME: Reconstruct dom info, because it is not preserved properly. - if (DT) - DT->runOnFunction(*F); - if (DF) - DF->runOnFunction(*F); return true; }