Two testcases for invalid transformations that instcombine is doing
authorChris Lattner <sabre@nondot.org>
Mon, 20 Sep 2004 10:14:27 +0000 (10:14 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 20 Sep 2004 10:14:27 +0000 (10:14 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16446 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/InstCombine/2004-09-20-BadLoadCombine.llx [new file with mode: 0644]
test/Transforms/InstCombine/2004-09-20-BadLoadCombine2.llx [new file with mode: 0644]

diff --git a/test/Transforms/InstCombine/2004-09-20-BadLoadCombine.llx b/test/Transforms/InstCombine/2004-09-20-BadLoadCombine.llx
new file mode 100644 (file)
index 0000000..5960135
--- /dev/null
@@ -0,0 +1,20 @@
+; RUN: llvm-as < %s | opt -instcombine -mem2reg | llvm-dis | not grep 'int 1'
+
+; When propagating the load through the select, make sure that the load is
+; inserted where the original load was, not where the select is.  Not doing
+; so could produce incorrect results!
+
+implementation
+
+int %test(bool %C) {
+       %X = alloca int
+       %X2 = alloca int
+       store int 1, int* %X
+       store int 2, int* %X2
+
+        %Y = select bool %C, int* %X, int* %X2
+       store int 3, int* %X
+        %Z = load int* %Y
+        ret int %Z
+}
+
diff --git a/test/Transforms/InstCombine/2004-09-20-BadLoadCombine2.llx b/test/Transforms/InstCombine/2004-09-20-BadLoadCombine2.llx
new file mode 100644 (file)
index 0000000..297cf87
--- /dev/null
@@ -0,0 +1,24 @@
+; RUN: llvm-as < %s | opt -instcombine -mem2reg -simplifycfg | llvm-dis | \
+; RUN:   grep -v store | not grep 'int 1'
+
+; Test to make sure that instcombine does not accidentally propagate the load
+; into the PHI, which would break the program.
+
+int %test(bool %C) {
+entry:
+       %X = alloca int
+       %X2 = alloca int
+       store int 1, int* %X
+       store int 2, int* %X2
+        br bool %C, label %cond_true.i, label %cond_continue.i
+
+cond_true.i:
+        br label %cond_continue.i
+
+cond_continue.i:
+        %mem_tmp.i.0 = phi int* [ %X, %cond_true.i ], [ %X2, %entry ]
+       store int 3, int* %X
+        %tmp.3 = load int* %mem_tmp.i.0
+        ret int %tmp.3
+}
+