summaryrefslogtreecommitdiffstats
path: root/llvm/test/Analysis/GlobalsModRef
diff options
context:
space:
mode:
authorJames Molloy <james.molloy@arm.com>2015-10-13 10:43:33 +0000
committerJames Molloy <james.molloy@arm.com>2015-10-13 10:43:33 +0000
commit860507f8380fe704aa512b7221a4b7e2bb925a70 (patch)
tree4eb8846640a068c88173eec25e514a7c15574600 /llvm/test/Analysis/GlobalsModRef
parent71aa9c74a76edb2b874a6aeae288195226b886cb (diff)
downloadbcm5719-llvm-860507f8380fe704aa512b7221a4b7e2bb925a70.tar.gz
bcm5719-llvm-860507f8380fe704aa512b7221a4b7e2bb925a70.zip
[GlobalsAA] Don't assume anything about functions that may be overridden
Weak linkage and friends allow a symbol to be overriden outside the code generator's model, so GlobalsAA shouldn't assume that anything it can compute about such a symbol is valid. llvm-svn: 250156
Diffstat (limited to 'llvm/test/Analysis/GlobalsModRef')
-rw-r--r--llvm/test/Analysis/GlobalsModRef/weak-interposition.ll24
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/test/Analysis/GlobalsModRef/weak-interposition.ll b/llvm/test/Analysis/GlobalsModRef/weak-interposition.ll
new file mode 100644
index 00000000000..091aa74d521
--- /dev/null
+++ b/llvm/test/Analysis/GlobalsModRef/weak-interposition.ll
@@ -0,0 +1,24 @@
+; RUN: opt -S -O1 -enable-non-lto-gmr=true < %s | FileCheck %s
+
+@a = common global i32 0, align 4
+
+; @hook_me is weak, so GMR must not eliminate the reload of @a in @f,
+; even though @hook_me doesn't mod or ref @a.
+
+; Function Attrs: nounwind ssp uwtable
+define weak i32 @hook_me() {
+ ret i32 0
+}
+
+; Function Attrs: nounwind ssp uwtable
+define i32 @f() {
+ %1 = alloca i32, align 4
+ store i32 4, i32* @a, align 4
+ %2 = call i32 @hook_me()
+ ; CHECK: load i32, i32* @a, align 4
+ %3 = load i32, i32* @a, align 4
+ %4 = add nsw i32 %3, %2
+ store i32 %4, i32* @a, align 4
+ %5 = load i32, i32* %1
+ ret i32 %5
+}
OpenPOWER on IntegriCloud