Fix bug: IndVarsSimplify/2003-09-23-NotAtTop.ll
authorChris Lattner <sabre@nondot.org>
Tue, 23 Sep 2003 20:26:48 +0000 (20:26 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 23 Sep 2003 20:26:48 +0000 (20:26 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8689 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/IndVarSimplify.cpp

index 814f452497ed3d9267952d21d351603a5fbf3995..33c8c700e609457956ebe68454552606d90726d4 100644 (file)
@@ -76,8 +76,8 @@ static bool TransformLoop(LoopInfo *Loops, Loop *Loop) {
   // indvar.  If we don't have one, add one now...
   if (!Canonical) {
     // Create the PHI node for the new induction variable, and insert the phi
-    // node at the end of the other phi nodes...
-    PHINode *PN = new PHINode(Type::UIntTy, "cann-indvar", AfterPHIIt);
+    // node at the start of the PHI nodes...
+    PHINode *PN = new PHINode(Type::UIntTy, "cann-indvar", Header->begin());
 
     // Create the increment instruction to add one to the counter...
     Instruction *Add = BinaryOperator::create(Instruction::Add, PN,
@@ -108,6 +108,12 @@ static bool TransformLoop(LoopInfo *Loops, Loop *Loop) {
     Canonical = &IndVars.back();
     ++NumInserted;
     Changed = true;
+  } else {
+    // If we have a canonical induction variable, make sure that it is the first
+    // one in the basic block.
+    if (&Header->front() != Canonical->Phi)
+      Header->getInstList().splice(Header->begin(), Header->getInstList(),
+                                   Canonical->Phi);
   }
 
   DEBUG(std::cerr << "Induction variables:\n");