aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/Utils/LoopSimplify.cpp
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2010-09-14 20:57:16 +0000
committerBill Wendling <isanbard@gmail.com>2010-09-14 20:57:16 +0000
commit02bf305a3f5879eddcb4bd1f3917e021349fc0c0 (patch)
tree03e7439a09990043bd9ca2e9d07d0cf2444704f2 /lib/Transforms/Utils/LoopSimplify.cpp
parent732d1a4c8fad859775572b07ec2fbc4812d98fd8 (diff)
Approved by Chris:
$ svn merge -c 113057 https://llvm.org/svn/llvm-project/llvm/trunk --- Merging r113057 into '.': A test/Transforms/LoopSimplify/preserve-scev.ll U lib/Transforms/Utils/LoopSimplify.cpp git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113851 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils/LoopSimplify.cpp')
-rw-r--r--lib/Transforms/Utils/LoopSimplify.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/Transforms/Utils/LoopSimplify.cpp b/lib/Transforms/Utils/LoopSimplify.cpp
index 2f0a175d5c..b3c4801a4f 100644
--- a/lib/Transforms/Utils/LoopSimplify.cpp
+++ b/lib/Transforms/Utils/LoopSimplify.cpp
@@ -46,6 +46,7 @@
#include "llvm/LLVMContext.h"
#include "llvm/Type.h"
#include "llvm/Analysis/AliasAnalysis.h"
+#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Analysis/Dominators.h"
#include "llvm/Analysis/LoopPass.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
@@ -71,6 +72,7 @@ namespace {
AliasAnalysis *AA;
LoopInfo *LI;
DominatorTree *DT;
+ ScalarEvolution *SE;
Loop *L;
virtual bool runOnLoop(Loop *L, LPPassManager &LPM);
@@ -83,7 +85,7 @@ namespace {
AU.addPreserved<LoopInfo>();
AU.addPreserved<AliasAnalysis>();
- AU.addPreserved("scalar-evolution");
+ AU.addPreserved<ScalarEvolution>();
AU.addPreservedID(BreakCriticalEdgesID); // No critical edges added.
AU.addPreserved<DominanceFrontier>();
AU.addPreservedID(LCSSAID);
@@ -121,6 +123,7 @@ bool LoopSimplify::runOnLoop(Loop *l, LPPassManager &LPM) {
LI = &getAnalysis<LoopInfo>();
AA = getAnalysisIfAvailable<AliasAnalysis>();
DT = &getAnalysis<DominatorTree>();
+ SE = getAnalysisIfAvailable<ScalarEvolution>();
Changed |= ProcessLoop(L, LPM);
@@ -532,6 +535,12 @@ Loop *LoopSimplify::SeparateNestedLoop(Loop *L, LPPassManager &LPM) {
DEBUG(dbgs() << "LoopSimplify: Splitting out a new outer loop\n");
+ // If ScalarEvolution is around and knows anything about values in
+ // this loop, tell it to forget them, because we're about to
+ // substantially change it.
+ if (SE)
+ SE->forgetLoop(L);
+
BasicBlock *Header = L->getHeader();
BasicBlock *NewBB = SplitBlockPredecessors(Header, &OuterLoopPreds[0],
OuterLoopPreds.size(),