Fix PR13967.
authorJakub Staszak <kubastaszak@gmail.com>
Wed, 3 Oct 2012 23:59:47 +0000 (23:59 +0000)
committerJakub Staszak <kubastaszak@gmail.com>
Wed, 3 Oct 2012 23:59:47 +0000 (23:59 +0000)
llvm-svn: 165187

llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
llvm/test/Transforms/IndVarSimplify/crash.ll

index c933a17..23d0bb5 100644 (file)
@@ -1262,7 +1262,10 @@ static bool needsLFTR(Loop *L, DominatorTree *DT) {
     return true;
 
   // Do LFTR if the exit condition's IV is *not* a simple counter.
-  Value *IncV = Phi->getIncomingValueForBlock(L->getLoopLatch());
+  int Idx = Phi->getBasicBlockIndex(L->getLoopLatch());
+  if (Idx < 0)
+    return true;
+  Value *IncV = Phi->getIncomingValue(Idx);
   return Phi != getLoopPhiForCounter(IncV, L, DT);
 }
 
index 3335be7..62af42b 100644 (file)
@@ -87,3 +87,29 @@ entry:
 main.f.exit:                                      ; preds = %"3.i"
   unreachable
 }
+
+
+; PR13967
+
+define void @f() nounwind ssp {
+bb:
+  br label %bb4
+
+bb4:
+  %tmp = phi i64 [ %tmp5, %bb7 ], [ undef, %bb ]
+  %tmp5 = add nsw i64 %tmp, 1
+  %extract.t1 = trunc i64 %tmp5 to i32
+  br i1 false, label %bb6, label %bb7
+
+bb6:
+  br label %bb7
+
+bb7:
+  %.off0 = phi i32 [ undef, %bb6 ], [ %extract.t1, %bb4 ]
+  %tmp8 = icmp eq i32 %.off0, 0
+  br i1 %tmp8, label %bb9, label %bb4
+
+bb9:
+  ret void
+}
+