Move the EliminateIVUsers call back out to its original location. Now that
authorDan Gohman <gohman@apple.com>
Mon, 12 Apr 2010 07:56:56 +0000 (07:56 +0000)
committerDan Gohman <gohman@apple.com>
Mon, 12 Apr 2010 07:56:56 +0000 (07:56 +0000)
a ScalarEvolution bug with overflow handling is fixed, the normal analysis
code will automatically decline to operate on the icmp instructions which
are responsible for the loop exit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101032 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/IndVarSimplify.cpp

index e6e0129fa447af64b7ee72f11b88eae3f3fee8d5..4f779050d91b111e6989e097578d94c6e072c6d6 100644 (file)
@@ -406,6 +406,9 @@ bool IndVarSimplify::runOnLoop(Loop *L, LPPassManager &LPM) {
   if (!isa<SCEVCouldNotCompute>(BackedgeTakenCount))
     RewriteLoopExitValues(L, Rewriter);
 
+  // Simplify ICmp IV users.
+  EliminateIVComparisons();
+
   // Compute the type of the largest recurrence expression, and decide whether
   // a canonical induction variable should be inserted.
   const Type *LargestType = 0;
@@ -471,19 +474,10 @@ bool IndVarSimplify::runOnLoop(Loop *L, LPPassManager &LPM) {
       ExitingBlock) {
     assert(NeedCannIV &&
            "LinearFunctionTestReplace requires a canonical induction variable");
-
     // Can't rewrite non-branch yet.
-    if (BranchInst *BI = dyn_cast<BranchInst>(ExitingBlock->getTerminator())) {
-      // Eliminate comparisons which are always true or always false, due to
-      // the known backedge-taken count. This may include comparisons which
-      // are currently controlling (part of) the loop exit, so we can only do
-      // it when we know we're going to insert our own loop exit code.
-      EliminateIVComparisons();
-
-      // Insert new loop exit code.
+    if (BranchInst *BI = dyn_cast<BranchInst>(ExitingBlock->getTerminator()))
       NewICmp = LinearFunctionTestReplace(L, BackedgeTakenCount, IndVar,
                                           ExitingBlock, BI, Rewriter);
-    }
   }
 
   // Rewrite IV-derived expressions. Clears the rewriter cache.