New testcase for size tracking brokenness
authorChris Lattner <sabre@nondot.org>
Wed, 26 Feb 2003 21:39:52 +0000 (21:39 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 26 Feb 2003 21:39:52 +0000 (21:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5644 91177308-0d34-0410-b5e6-96231b3b80d8

test/Analysis/BasicAA/2003-02-26-AccessSizeTest.ll [new file with mode: 0644]
test/Analysis/BasicAA/featuretest.ll
test/Transforms/BasicAA/2003-02-26-AccessSizeTest.ll [new file with mode: 0644]
test/Transforms/BasicAA/featuretest.ll

diff --git a/test/Analysis/BasicAA/2003-02-26-AccessSizeTest.ll b/test/Analysis/BasicAA/2003-02-26-AccessSizeTest.ll
new file mode 100644 (file)
index 0000000..f1458ce
--- /dev/null
@@ -0,0 +1,18 @@
+; This testcase makes sure that size is taken to account when alias analysis 
+; is performed.  It is not legal to delete the second load instruction because
+; the value computed by the first load instruction is changed by the store.
+
+; RUN: as < %s | opt -load-vn -gcse -instcombine | dis | grep DONOTREMOVE
+
+int %test() {
+       %A = alloca int
+       store int 0, int* %A
+        %X = load int* %A
+        %B = cast int* %A to sbyte*
+        %C = getelementptr sbyte* %B, long 1
+       store sbyte 1, sbyte* %C    ; Aliases %A
+        %Y.DONOTREMOVE = load int* %A
+       %Z = sub int %X, %Y.DONOTREMOVE
+        ret int %Z
+}
+
index cd57ef1a79ae1039f228d8fba3e5483cf278de14..385144d173b65efb026964c7a73cac6ee7f3a804 100644 (file)
@@ -62,3 +62,11 @@ int %gep_distance_test2({int,int}* %A, long %distance) {
         %r = sub int %REMOVEu, %REMOVEv
         ret int %r
 }
+
+int %foo(int * %A) {
+       %X = load int* %A
+       %B = cast int* %A to sbyte*
+       %C = getelementptr sbyte* %B, long 4
+       %Y = load sbyte* %C
+       ret int 8
+}
diff --git a/test/Transforms/BasicAA/2003-02-26-AccessSizeTest.ll b/test/Transforms/BasicAA/2003-02-26-AccessSizeTest.ll
new file mode 100644 (file)
index 0000000..f1458ce
--- /dev/null
@@ -0,0 +1,18 @@
+; This testcase makes sure that size is taken to account when alias analysis 
+; is performed.  It is not legal to delete the second load instruction because
+; the value computed by the first load instruction is changed by the store.
+
+; RUN: as < %s | opt -load-vn -gcse -instcombine | dis | grep DONOTREMOVE
+
+int %test() {
+       %A = alloca int
+       store int 0, int* %A
+        %X = load int* %A
+        %B = cast int* %A to sbyte*
+        %C = getelementptr sbyte* %B, long 1
+       store sbyte 1, sbyte* %C    ; Aliases %A
+        %Y.DONOTREMOVE = load int* %A
+       %Z = sub int %X, %Y.DONOTREMOVE
+        ret int %Z
+}
+
index cd57ef1a79ae1039f228d8fba3e5483cf278de14..385144d173b65efb026964c7a73cac6ee7f3a804 100644 (file)
@@ -62,3 +62,11 @@ int %gep_distance_test2({int,int}* %A, long %distance) {
         %r = sub int %REMOVEu, %REMOVEv
         ret int %r
 }
+
+int %foo(int * %A) {
+       %X = load int* %A
+       %B = cast int* %A to sbyte*
+       %C = getelementptr sbyte* %B, long 4
+       %Y = load sbyte* %C
+       ret int 8
+}