Author: dpatel Date: Wed Aug 8 16:39:47 2007 New Revision: 40947 URL: http://llvm.org/viewvc/llvm-project?rev=40947&view=rev Log: Preserve dom info while processing one iteration loop.
Modified: llvm/trunk/lib/Transforms/Scalar/LoopIndexSplit.cpp Modified: llvm/trunk/lib/Transforms/Scalar/LoopIndexSplit.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopIndexSplit.cpp?rev=40947&r1=40946&r2=40947&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/LoopIndexSplit.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/LoopIndexSplit.cpp Wed Aug 8 16:39:47 2007 @@ -17,6 +17,7 @@ #include "llvm/Function.h" #include "llvm/Analysis/LoopPass.h" #include "llvm/Analysis/ScalarEvolutionExpander.h" +#include "llvm/Analysis/Dominators.h" #include "llvm/Support/Compiler.h" #include "llvm/ADT/Statistic.h" @@ -43,6 +44,8 @@ AU.addPreserved<LoopInfo>(); AU.addRequiredID(LoopSimplifyID); AU.addPreservedID(LoopSimplifyID); + AU.addPreserved<DominatorTree>(); + AU.addPreserved<DominanceFrontier>(); } private: @@ -314,6 +317,20 @@ } LPM.deleteLoopFromQueue(L); + + // Update Dominator Info. + // Only CFG change done is to remove Latch to Header edge. This + // does not change dominator tree because Latch did not dominate + // Header. + if (DominanceFrontier *DF = getAnalysisToUpdate<DominanceFrontier>()) { + DominanceFrontier::iterator HeaderDF = DF->find(Header); + if (HeaderDF != DF->end()) + DF->removeFromFrontier(HeaderDF, Header); + + DominanceFrontier::iterator LatchDF = DF->find(Latch); + if (LatchDF != DF->end()) + DF->removeFromFrontier(LatchDF, Header); + } return true; } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits