Add a testcase for non-local CSE of read-only calls.
authorOwen Anderson <resistor@mac.com>
Tue, 13 May 2008 08:17:44 +0000 (08:17 +0000)
committerOwen Anderson <resistor@mac.com>
Tue, 13 May 2008 08:17:44 +0000 (08:17 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51025 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/GVN/nonlocal-cse.ll [new file with mode: 0644]

diff --git a/test/Transforms/GVN/nonlocal-cse.ll b/test/Transforms/GVN/nonlocal-cse.ll
new file mode 100644 (file)
index 0000000..0d1c8a3
--- /dev/null
@@ -0,0 +1,49 @@
+; RUN: llvm-as < %s | opt -gvn | llvm-dis | grep strlen | count 2
+target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
+target triple = "i386-apple-darwin9"
+
+define i32 @test(i32 %g, i8* %P) nounwind  {
+entry:
+       %tmp2 = call i32 @strlen( i8* %P ) nounwind readonly            ; <i32> [#uses=1]
+       %tmp3 = icmp eq i32 %tmp2, 100          ; <i1> [#uses=1]
+       %tmp34 = zext i1 %tmp3 to i8            ; <i8> [#uses=1]
+       %toBool = icmp ne i8 %tmp34, 0          ; <i1> [#uses=1]
+       br i1 %toBool, label %bb, label %bb6
+
+bb:            ; preds = %entry
+       br label %bb27
+
+bb6:           ; preds = %entry
+       %tmp8 = add i32 %g, 42          ; <i32> [#uses=2]
+       %tmp10 = call i32 @strlen( i8* %P ) nounwind readonly           ; <i32> [#uses=1]
+       %tmp11 = icmp eq i32 %tmp10, 100                ; <i1> [#uses=1]
+       %tmp1112 = zext i1 %tmp11 to i8         ; <i8> [#uses=1]
+       %toBool13 = icmp ne i8 %tmp1112, 0              ; <i1> [#uses=1]
+       br i1 %toBool13, label %bb14, label %bb16
+
+bb14:          ; preds = %bb6
+       br label %bb27
+
+bb16:          ; preds = %bb6
+       %tmp18 = mul i32 %tmp8, 2               ; <i32> [#uses=1]
+       %tmp20 = call i32 @strlen( i8* %P ) nounwind readonly           ; <i32> [#uses=1]
+       %tmp21 = icmp eq i32 %tmp20, 100                ; <i1> [#uses=1]
+       %tmp2122 = zext i1 %tmp21 to i8         ; <i8> [#uses=1]
+       %toBool23 = icmp ne i8 %tmp2122, 0              ; <i1> [#uses=1]
+       br i1 %toBool23, label %bb24, label %bb26
+
+bb24:          ; preds = %bb16
+       br label %bb27
+
+bb26:          ; preds = %bb16
+       br label %bb27
+
+bb27:          ; preds = %bb26, %bb24, %bb14, %bb
+       %tmp.0 = phi i32 [ 11, %bb26 ], [ %tmp18, %bb24 ], [ %tmp8, %bb14 ], [ %g, %bb ]                ; <i32> [#uses=1]
+       br label %return
+
+return:                ; preds = %bb27
+       ret i32 %tmp.0
+}
+
+declare i32 @strlen(i8*) nounwind readonly