From deafefabae915cf20884fd829d2542f9626786e8 Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Thu, 4 Sep 2008 22:43:59 +0000 Subject: 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 --- lib/Transforms/Scalar/LoopUnswitch.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'lib/Transforms') diff --git a/lib/Transforms/Scalar/LoopUnswitch.cpp b/lib/Transforms/Scalar/LoopUnswitch.cpp index 691a67a427..1c4bba295b 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; } -- cgit v1.2.3