Fix a case where we incorrectly returned hasComputableLoopEvolution for
authorChris Lattner <sabre@nondot.org>
Sat, 26 Feb 2005 18:40:02 +0000 (18:40 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 26 Feb 2005 18:40:02 +0000 (18:40 +0000)
a ternary commutative expr.  Remove FIXME that does not need to be fixed
(can't happen).

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

include/llvm/Analysis/ScalarEvolutionExpressions.h

index 8f113a4004081235365ce76f54b244bad6b28341..b632bc58eea5ed94684487daf40418e3a5f1c575 100644 (file)
@@ -197,10 +197,18 @@ namespace llvm {
       return true;
     }
 
+    // hasComputableLoopEvolution - Commutative expressions have computable loop
+    // evolutions iff they have at least one operand that varies with the loop,
+    // but that all varying operands are computable.
     virtual bool hasComputableLoopEvolution(const Loop *L) const {
+      bool HasVarying = false;
       for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
-        if (getOperand(i)->hasComputableLoopEvolution(L)) return true;
-      return false;
+        if (!getOperand(i)->isLoopInvariant(L))
+          if (getOperand(i)->hasComputableLoopEvolution(L))
+            HasVarying = true;
+          else
+            return false;
+      return HasVarying;
     }
 
     SCEVHandle replaceSymbolicValuesWithConcrete(const SCEVHandle &Sym,
@@ -382,8 +390,6 @@ namespace llvm {
 
     virtual bool hasComputableLoopEvolution(const Loop *QL) const {
       if (L == QL) return true;
-      /// FIXME: What if the start or step value a recurrence for the specified
-      /// loop?
       return false;
     }