From 787a713bb2121c141c560a643d88ecfa2060e612 Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Wed, 8 Aug 2007 21:39:47 +0000 Subject: [PATCH] Preserve dom info while processing one iteration loop. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40947 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/LoopIndexSplit.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/Transforms/Scalar/LoopIndexSplit.cpp b/lib/Transforms/Scalar/LoopIndexSplit.cpp index 1d110e17438..76878274ee8 100644 --- a/lib/Transforms/Scalar/LoopIndexSplit.cpp +++ b/lib/Transforms/Scalar/LoopIndexSplit.cpp @@ -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 @@ namespace { AU.addPreserved(); AU.addRequiredID(LoopSimplifyID); AU.addPreservedID(LoopSimplifyID); + AU.addPreserved(); + AU.addPreserved(); } private: @@ -314,6 +317,20 @@ bool LoopIndexSplit::processOneIterationLoop(SplitInfo &SD, LPPassManager &LPM) } 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::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; } -- 2.34.1