It's not necessary to do rounding for alloca operations when the requested
alignment is equal to the stack alignment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40004 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/Analysis/BasicAA/gcsetest.ll b/test/Analysis/BasicAA/gcsetest.ll
new file mode 100644
index 0000000..cd1286f
--- /dev/null
+++ b/test/Analysis/BasicAA/gcsetest.ll
@@ -0,0 +1,46 @@
+; Test that GCSE uses basicaa to do alias analysis, which is capable of 
+; disambiguating some obvious cases.  All loads should be removable in 
+; this testcase.
+
+; RUN: llvm-upgrade < %s | llvm-as | opt -basicaa -load-vn -gcse -instcombine -dce | llvm-dis | not grep load
+
+%A = global int 7
+%B = global int 8
+implementation
+
+int %test() {
+	%A1 = load int* %A
+
+	store int 123, int* %B  ; Store cannot alias %A
+
+	%A2 = load int* %A
+	%X = sub int %A1, %A2
+	ret int %X
+}
+
+int %test2() {
+        %A1 = load int* %A
+        br label %Loop
+Loop:
+        %AP = phi int [0, %0], [%X, %Loop]
+        store int %AP, int* %B  ; Store cannot alias %A
+
+        %A2 = load int* %A
+        %X = sub int %A1, %A2
+        %c = seteq int %X, 0
+        br bool %c, label %out, label %Loop
+
+out:
+        ret int %X
+}
+
+declare void %external()
+
+int %test3() {
+	%X = alloca int
+	store int 7, int* %X
+	call void %external()
+	%V = load int* %X
+	ret int %V
+}
+