diff options
author | Dan Gohman <gohman@apple.com> | 2010-06-29 00:50:39 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2010-06-29 00:50:39 +0000 |
commit | 0824affeff262cf33685dd231e857360f366d327 (patch) | |
tree | 6284f1e6f2c3f8f997e1b689d5b8c5825d098df8 /llvm/test/Analysis | |
parent | d6a091a4d4db147e4aecc610b1aa9b9cd2b1813d (diff) | |
download | bcm5719-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.ll | 42 |
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 +} |