From e6fe67b2fb48b1f0f3c1ac8c1ce01e67c1f0bb1d Mon Sep 17 00:00:00 2001
From: Dan Gohman <gohman@apple.com>
Date: Sun, 27 Sep 2009 15:37:03 +0000
Subject: [PATCH] Tell ScalarEvolution to forget everything it knows about a
 loop before rotating the loop, since loop rotation is a very significant
 change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82901 91177308-0d34-0410-b5e6-96231b3b80d8
---
 lib/Transforms/Scalar/LoopRotation.cpp | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/lib/Transforms/Scalar/LoopRotation.cpp b/lib/Transforms/Scalar/LoopRotation.cpp
index 34ba48c6b05..70c69bb1dae 100644
--- a/lib/Transforms/Scalar/LoopRotation.cpp
+++ b/lib/Transforms/Scalar/LoopRotation.cpp
@@ -177,6 +177,11 @@ bool LoopRotate::rotateLoop(Loop *Lp, LPPassManager &LPM) {
 
   // Now, this loop is suitable for rotation.
 
+  // Anything ScalarEvolution may know about this loop or the PHI nodes
+  // in its header will soon be invalidated.
+  if (ScalarEvolution *SE = getAnalysisIfAvailable<ScalarEvolution>())
+    SE->forgetLoopBackedgeTakenCount(L);
+
   // Find new Loop header. NewHeader is a Header's one and only successor
   // that is inside loop.  Header's other successor is outside the
   // loop.  Otherwise loop is not suitable for rotation.