diff options
author | Duncan Sands <baldrick@free.fr> | 2008-09-03 12:55:42 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2008-09-03 12:55:42 +0000 |
commit | 9a036b945c67aeb44093c6c515e4b85e21094335 (patch) | |
tree | 3534a544e2cd1aeebfa1bd18cb074c8f50d24788 /test/Analysis | |
parent | dced0a3f53f958063a7bba60398d684d27f6e70d (diff) | |
download | external_llvm-9a036b945c67aeb44093c6c515e4b85e21094335.zip external_llvm-9a036b945c67aeb44093c6c515e4b85e21094335.tar.gz external_llvm-9a036b945c67aeb44093c6c515e4b85e21094335.tar.bz2 |
Cleanup GlobalsModRef a bit. When analysing the
callgraph, when one member of a SCC calls another
then the analysis would drop to mod-ref because
there is (usually) no function info for the callee
yet; fix this. Teach the analysis about function
attributes, in particular the readonly attribute
(which requires being careful about globals).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55696 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Analysis')
-rw-r--r-- | test/Analysis/GlobalsModRef/2008-09-03-Mutual.ll | 11 | ||||
-rw-r--r-- | test/Analysis/GlobalsModRef/2008-09-03-ReadGlobals.ll | 18 | ||||
-rw-r--r-- | test/Analysis/GlobalsModRef/2008-09-03-ReadOnly.ll | 9 |
3 files changed, 38 insertions, 0 deletions
diff --git a/test/Analysis/GlobalsModRef/2008-09-03-Mutual.ll b/test/Analysis/GlobalsModRef/2008-09-03-Mutual.ll new file mode 100644 index 0000000..f6f47f9 --- /dev/null +++ b/test/Analysis/GlobalsModRef/2008-09-03-Mutual.ll @@ -0,0 +1,11 @@ +; RUN: llvm-as < %s | opt -globalsmodref-aa -markmodref | llvm-dis | grep readnone + +define i32 @a() { + %tmp = call i32 @b( ) ; <i32> [#uses=1] + ret i32 %tmp +} + +define i32 @b() { + %tmp = call i32 @a( ) ; <i32> [#uses=1] + ret i32 %tmp +} diff --git a/test/Analysis/GlobalsModRef/2008-09-03-ReadGlobals.ll b/test/Analysis/GlobalsModRef/2008-09-03-ReadGlobals.ll new file mode 100644 index 0000000..aba6082 --- /dev/null +++ b/test/Analysis/GlobalsModRef/2008-09-03-ReadGlobals.ll @@ -0,0 +1,18 @@ +; RUN: llvm-as < %s | opt -globalsmodref-aa -gvn | llvm-dis | grep call | count 2 + +@g = internal global i32 0 ; <i32*> [#uses=2] + +define i32 @r() { + %tmp = load i32* @g ; <i32> [#uses=1] + ret i32 %tmp +} + +define i32 @f() { +entry: + %tmp = call i32 @e( ) ; <i32> [#uses=1] + store i32 %tmp, i32* @g + %tmp2 = call i32 @e( ) ; <i32> [#uses=1] + ret i32 %tmp2 +} + +declare i32 @e() readonly ; might call @r diff --git a/test/Analysis/GlobalsModRef/2008-09-03-ReadOnly.ll b/test/Analysis/GlobalsModRef/2008-09-03-ReadOnly.ll new file mode 100644 index 0000000..de1666f --- /dev/null +++ b/test/Analysis/GlobalsModRef/2008-09-03-ReadOnly.ll @@ -0,0 +1,9 @@ +; RUN: llvm-as < %s | opt -globalsmodref-aa -markmodref | llvm-dis | grep readonly | count 2 + +define i32 @f() { +entry: + %tmp = call i32 @e( ) ; <i32> [#uses=1] + ret i32 %tmp +} + +declare i32 @e() readonly |