This is an automatically reduced test case that crashed in GVN, at some
[oota-llvm.git] / test / Transforms / LoopStrengthReduce / related_indvars.ll
index e3317169257fcd65e825752ac64739b0aa220125..12942bf10a5a53031730238f314b646a01fdb1f6 100644 (file)
@@ -1,29 +1,27 @@
-; RUN: llvm-as < %s | opt -loop-reduce | llvm-dis | grep phi | wc -l | grep 1
+; RUN: opt < %s -loop-reduce -S | grep phi | count 1
 
 ; This should only result in one PHI node!
-; XFAIL: *
 
 ; void foo(double *D, double *E, double F) {
 ;   while (D != E)
 ;     *D++ = F;
 ; }
 
-void %foo(double* %D, double* %E, double %F) {
+define void @foo(double* %D, double* %E, double %F) nounwind {
 entry:
-       %tmp.24 = seteq double* %D, %E          ; <bool> [#uses=1]
-       br bool %tmp.24, label %return, label %no_exit
-
+       %tmp.24 = icmp eq double* %D, %E                ; <i1> [#uses=1]
+       br i1 %tmp.24, label %return, label %no_exit
 no_exit:               ; preds = %no_exit, %entry
-       %indvar = phi uint [ 0, %entry ], [ %indvar.next, %no_exit ]            ; <uint> [#uses=3]
-       %D_addr.0.0.rec = cast uint %indvar to int              ; <int> [#uses=1]
-       %D_addr.0.0 = getelementptr double* %D, uint %indvar            ; <double*> [#uses=1]
-       %inc.rec = add int %D_addr.0.0.rec, 1           ; <int> [#uses=1]
-       %inc = getelementptr double* %D, int %inc.rec           ; <double*> [#uses=1]
+       %indvar = phi i32 [ 0, %entry ], [ %indvar.next, %no_exit ]             ; <i32> [#uses=2]
+       %D_addr.0.0.rec = bitcast i32 %indvar to i32            ; <i32> [#uses=2]
+       %D_addr.0.0 = getelementptr double* %D, i32 %D_addr.0.0.rec             ; <double*> [#uses=1]
+       %inc.rec = add i32 %D_addr.0.0.rec, 1           ; <i32> [#uses=1]
+       %inc = getelementptr double* %D, i32 %inc.rec           ; <double*> [#uses=1]
        store double %F, double* %D_addr.0.0
-       %tmp.2 = seteq double* %inc, %E         ; <bool> [#uses=1]
-       %indvar.next = add uint %indvar, 1              ; <uint> [#uses=1]
-       br bool %tmp.2, label %return, label %no_exit
-
+       %tmp.2 = icmp eq double* %inc, %E               ; <i1> [#uses=1]
+       %indvar.next = add i32 %indvar, 1               ; <i32> [#uses=1]
+       br i1 %tmp.2, label %return, label %no_exit
 return:                ; preds = %no_exit, %entry
        ret void
 }
+