Remove the 'N' modifier from llvm-ar.
[oota-llvm.git] / test / Transforms / GVN / pre-load.ll
index 2e9c247bc60abadbc5d7ab5e5723946239050662..bf4add42e80b6c0614f14baa5847791f3399c705 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: opt < %s -gvn -enable-load-pre -S | FileCheck %s
+; RUN: opt < %s -basicaa -gvn -enable-load-pre -S | FileCheck %s
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
 
 define i32 @test1(i32* %p, i1 %C) {
@@ -320,6 +320,7 @@ return:
 ;      G[j] = G[j] + G[j+1] + G[j-1];
 ;}
 
+; PR5501
 define void @test10(i32 %N, double* nocapture %G) nounwind ssp {
 entry:
   %0 = add i32 %N, -1
@@ -361,3 +362,30 @@ bb:
 return:
   ret void
 }
+
+; Test critical edge splitting.
+define i32 @test11(i32* %p, i1 %C, i32 %N) {
+; CHECK: @test11
+block1:
+        br i1 %C, label %block2, label %block3
+
+block2:
+ %cond = icmp sgt i32 %N, 1
+ br i1 %cond, label %block4, label %block5
+; CHECK: load i32* %p
+; CHECK-NEXT: br label %block4
+
+block3:
+  store i32 0, i32* %p
+  br label %block4
+
+block4:
+  %PRE = load i32* %p
+  br label %block5
+
+block5:
+  %ret = phi i32 [ 0, %block2 ], [ %PRE, %block4 ]
+  ret i32 %ret
+; CHECK: block4:
+; CHECK-NEXT: phi i32
+}