summaryrefslogtreecommitdiffstats
path: root/llvm/test/Analysis
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2010-06-29 00:50:39 +0000
committerDan Gohman <gohman@apple.com>2010-06-29 00:50:39 +0000
commit0824affeff262cf33685dd231e857360f366d327 (patch)
tree6284f1e6f2c3f8f997e1b689d5b8c5825d098df8 /llvm/test/Analysis
parentd6a091a4d4db147e4aecc610b1aa9b9cd2b1813d (diff)
downloadbcm5719-llvm-0824affeff262cf33685dd231e857360f366d327.tar.gz
bcm5719-llvm-0824affeff262cf33685dd231e857360f366d327.zip
Add an Intraprocedural form of BasicAliasAnalysis, which aims to
properly handles instructions and arguments defined in different functions, or across recursive function iterations. llvm-svn: 107109
Diffstat (limited to 'llvm/test/Analysis')
-rw-r--r--llvm/test/Analysis/BasicAA/interprocedural.ll42
1 files changed, 42 insertions, 0 deletions
diff --git a/llvm/test/Analysis/BasicAA/interprocedural.ll b/llvm/test/Analysis/BasicAA/interprocedural.ll
new file mode 100644
index 00000000000..2195716cdf8
--- /dev/null
+++ b/llvm/test/Analysis/BasicAA/interprocedural.ll
@@ -0,0 +1,42 @@
+; RUN: opt -interprocedural-basic-aa -interprocedural-aa-eval -print-all-alias-modref-info -disable-output < %s |& FileCheck %s
+
+; The noalias attribute is not safe in an interprocedural context.
+; CHECK: MayAlias: i8* %p, i8* %q
+
+define void @t0(i8* noalias %p) {
+ store i8 0, i8* %p
+ ret void
+}
+define void @t1(i8* noalias %q) {
+ store i8 0, i8* %q
+ ret void
+}
+
+; An alloca can alias an argument in a different function.
+; CHECK: MayAlias: i32* %r, i32* %s
+
+define void @s0(i32* %r) {
+ store i32 0, i32* %r
+ ret void
+}
+
+define void @s1() {
+ %s = alloca i32, i32 10
+ store i32 0, i32* %s
+ call void @s0(i32* %s)
+ ret void
+}
+
+; An alloca can alias an argument in a recursive function.
+; CHECK: MayAlias: i64* %t, i64* %u
+; CHECK: MayAlias: i64* %u, i64* %v
+; CHECK: MayAlias: i64* %t, i64* %v
+
+define i64* @r0(i64* %u) {
+ %t = alloca i64, i32 10
+ %v = call i64* @r0(i64* %t)
+ store i64 0, i64* %t
+ store i64 0, i64* %u
+ store i64 0, i64* %v
+ ret i64* %t
+}
OpenPOWER on IntegriCloud