Handle multiple induction variables.
This fixes PR714.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42309 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Scalar/LoopIndexSplit.cpp b/lib/Transforms/Scalar/LoopIndexSplit.cpp
index 6582f36..5064063 100644
--- a/lib/Transforms/Scalar/LoopIndexSplit.cpp
+++ b/lib/Transforms/Scalar/LoopIndexSplit.cpp
@@ -676,7 +676,7 @@
       continue;
 
     // Check if I is induction variable increment instruction.
-    if (!IndVarIncrement && I->getOpcode() == Instruction::Add) {
+    if (I->getOpcode() == Instruction::Add) {
 
       Value *Op0 = I->getOperand(0);
       Value *Op1 = I->getOperand(1);
@@ -685,16 +685,23 @@
 
       if ((PN = dyn_cast<PHINode>(Op0))) {
         if ((CI = dyn_cast<ConstantInt>(Op1)))
-          IndVarIncrement = I;
+          if (CI->isOne()) {
+            if (!IndVarIncrement && PN == IndVar)
+              IndVarIncrement = I;
+            // else this is another loop induction variable
+            continue;
+          }
       } else 
         if ((PN = dyn_cast<PHINode>(Op1))) {
           if ((CI = dyn_cast<ConstantInt>(Op0)))
-            IndVarIncrement = I;
+            if (CI->isOne()) {
+              if (!IndVarIncrement && PN == IndVar)
+                IndVarIncrement = I;
+              // else this is another loop induction variable
+              continue;
+            }
       }
-          
-      if (IndVarIncrement && PN == IndVar && CI->isOne())
-        continue;
-    }
+    } 
 
     // I is an Exit condition if next instruction is block terminator.
     // Exit condition is OK if it compares loop invariant exit value,