InstCombine: Remove infinite loop caused by FoldOpIntoPhi
[oota-llvm.git] / test / Transforms / InstCombine / fold-phi.ll
index bd01d58aa586041e3357226a7ea090a8fad787f7..7954caf9754c5c763f5240ce3cf7a47c1b5235f6 100644 (file)
@@ -17,23 +17,30 @@ end:
   ret float %add5
 }
 
-; CHECK: fold_phi
-define float @fold_phi(float %a) nounwind {
+; CHECK-LABEL: @pr21377(
+define void @pr21377(i32, i32) {
 entry:
-  br label %for.body
+  br label %while.cond.i
 
-for.body:
-; CHECK: phi float
-; CHECK-NEXT: br i1 undef
-  %sum.057 = phi float [ 0.000000e+00, %entry ], [ %add5, %bb0 ]
-  %add5 = fadd float %sum.057, 1.0 ;; Should be moved to the latch!
-  br i1 undef, label %bb0, label %end
+while.cond.i:                                     ; preds = %while.end.i, %entry
+  %g.0.i = phi i64 [ 0, %entry ], [ %phitmp5.i, %while.end.i ]
+  br i1 undef, label %fn2.exit, label %while.body.i
 
-; CHECK: bb0:
-bb0:
-; CHECK: fadd float
-  br label %for.body
+while.body.i:                                     ; preds = %while.cond.i
+  %conv.i = zext i32 %0 to i64
+  %phitmp3.i = or i64 %g.0.i, %conv.i
+  br label %while.cond3.i
 
-end:
-  ret float %add5
+while.cond3.i:                                    ; preds = %while.cond3.i, %while.body.i
+  %g.1.i = phi i64 [ %phitmp3.i, %while.body.i ], [ 0, %while.cond3.i ]
+  br i1 undef, label %while.end.i, label %while.cond3.i
+
+while.end.i:                                      ; preds = %while.cond3.i
+  %conv.i.i = zext i32 %1 to i64
+  %or7.i = or i64 %g.1.i, %conv.i.i
+  %phitmp5.i = and i64 %or7.i, 4294967295
+  br label %while.cond.i
+
+fn2.exit:                                         ; preds = %while.cond.i
+  ret void
 }