summaryrefslogtreecommitdiffstats
path: root/llvm/test/Analysis/GlobalsModRef
diff options
context:
space:
mode:
authorAlina Sbirlea <asbirlea@google.com>2019-10-31 12:35:46 -0700
committerAlina Sbirlea <asbirlea@google.com>2019-11-12 14:24:56 -0800
commitdb69f1b22951ce49bda8e492ec8e6f60d9721668 (patch)
treeb482fd995ea8f251d95a372afa8680be84eea6dd /llvm/test/Analysis/GlobalsModRef
parenta247bd1f274e49ea83b2ad39c6ff062753e9e779 (diff)
downloadbcm5719-llvm-db69f1b22951ce49bda8e492ec8e6f60d9721668.tar.gz
bcm5719-llvm-db69f1b22951ce49bda8e492ec8e6f60d9721668.zip
[GlobalsAA] Restrict ModRef result if any internal method has its address taken.
Summary: If there are any internal methods whose address was taken, conclude there is nothing known in relation of any other internal method and a global. Reviewers: nlopes, sanjoy.google Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D69690
Diffstat (limited to 'llvm/test/Analysis/GlobalsModRef')
-rw-r--r--llvm/test/Analysis/GlobalsModRef/intrinsic_addressnottaken1.ll44
-rw-r--r--llvm/test/Analysis/GlobalsModRef/intrinsic_addressnottaken2.ll50
-rw-r--r--llvm/test/Analysis/GlobalsModRef/intrinsic_addresstaken.ll53
3 files changed, 147 insertions, 0 deletions
diff --git a/llvm/test/Analysis/GlobalsModRef/intrinsic_addressnottaken1.ll b/llvm/test/Analysis/GlobalsModRef/intrinsic_addressnottaken1.ll
new file mode 100644
index 00000000000..934534b5b60
--- /dev/null
+++ b/llvm/test/Analysis/GlobalsModRef/intrinsic_addressnottaken1.ll
@@ -0,0 +1,44 @@
+; RUN: opt -globals-aa -gvn -S < %s | FileCheck %s
+
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+@deallocCalled = internal global i8 0, align 1
+
+; CHECK-LABEL: @main()
+define dso_local i32 @main() {
+entry:
+ %tmp0 = call i8* @llvm.objc.autoreleasePoolPush() #1
+ %tmp6 = load i8, i8* @deallocCalled, align 1
+ %tobool = icmp ne i8 %tmp6, 0
+ br i1 %tobool, label %if.else, label %if.end
+
+if.else: ; preds = %entry
+ call void @__assert_fail() #0
+ unreachable
+
+; CHECK-LABEL: if.end:
+; CHECK-NEXT: call void @llvm.objc.autoreleasePoolPop
+; CHECK-NOT: load i8, i8* @deallocCalled
+if.end: ; preds = %entry
+ call void @llvm.objc.autoreleasePoolPop(i8* %tmp0)
+ %tmp7 = load i8, i8* @deallocCalled, align 1
+ %tobool3 = icmp ne i8 %tmp7, 0
+ br i1 %tobool3, label %if.end6, label %if.else5
+
+if.else5: ; preds = %if.end
+ call void @__assert_fail() #0
+ unreachable
+
+if.end6: ; preds = %if.end
+ store i8 0, i8* @deallocCalled, align 1
+ ret i32 0
+}
+
+declare i8* @llvm.objc.autoreleasePoolPush() #1
+declare void @llvm.objc.autoreleasePoolPop(i8*) #1
+declare dso_local void @__assert_fail() #0
+
+attributes #0 = { noreturn nounwind }
+attributes #1 = { nounwind }
+
diff --git a/llvm/test/Analysis/GlobalsModRef/intrinsic_addressnottaken2.ll b/llvm/test/Analysis/GlobalsModRef/intrinsic_addressnottaken2.ll
new file mode 100644
index 00000000000..d9874d7140d
--- /dev/null
+++ b/llvm/test/Analysis/GlobalsModRef/intrinsic_addressnottaken2.ll
@@ -0,0 +1,50 @@
+; RUN: opt -globals-aa -gvn -S < %s | FileCheck %s
+
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+@deallocCalled = internal global i8 0, align 1
+
+define internal i8* @_i_Associated__dealloc() {
+entry:
+ store i8 1, i8* @deallocCalled, align 1
+ ret i8* null
+}
+
+; CHECK-LABEL: @main()
+define dso_local i32 @main() {
+entry:
+ %tmp0 = call i8* @llvm.objc.autoreleasePoolPush() #1
+ %tmp6 = load i8, i8* @deallocCalled, align 1
+ %tobool = icmp ne i8 %tmp6, 0
+ br i1 %tobool, label %if.else, label %if.end
+
+if.else: ; preds = %entry
+ call void @__assert_fail() #0
+ unreachable
+
+; CHECK-LABEL: if.end:
+; CHECK-NEXT: call void @llvm.objc.autoreleasePoolPop
+; CHECK-NOT: load i8, i8* @deallocCalled
+if.end: ; preds = %entry
+ call void @llvm.objc.autoreleasePoolPop(i8* %tmp0)
+ %tmp7 = load i8, i8* @deallocCalled, align 1
+ %tobool3 = icmp ne i8 %tmp7, 0
+ br i1 %tobool3, label %if.end6, label %if.else5
+
+if.else5: ; preds = %if.end
+ call void @__assert_fail() #0
+ unreachable
+
+if.end6: ; preds = %if.end
+ store i8 0, i8* @deallocCalled, align 1
+ ret i32 0
+}
+
+declare i8* @llvm.objc.autoreleasePoolPush() #1
+declare void @llvm.objc.autoreleasePoolPop(i8*) #1
+declare dso_local void @__assert_fail() #0
+
+attributes #0 = { noreturn nounwind }
+attributes #1 = { nounwind }
+
diff --git a/llvm/test/Analysis/GlobalsModRef/intrinsic_addresstaken.ll b/llvm/test/Analysis/GlobalsModRef/intrinsic_addresstaken.ll
new file mode 100644
index 00000000000..18cf7c2341f
--- /dev/null
+++ b/llvm/test/Analysis/GlobalsModRef/intrinsic_addresstaken.ll
@@ -0,0 +1,53 @@
+; RUN: opt -globals-aa -gvn -S < %s | FileCheck %s
+
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+@deallocCalled = internal global i8 0, align 1
+@.objc_method_list = internal global { i8* ()* } { i8* ()* @_i_Associated__dealloc }, align 8
+@._OBJC_CLASS_Associated = global { i8* } { i8* bitcast ({ i8* ()* }* @.objc_method_list to i8*) }, align 8
+@._OBJC_INIT_CLASS_Associated = global { i8* }* @._OBJC_CLASS_Associated
+@llvm.used = appending global [1 x i8*] [i8* bitcast ({ i8* }** @._OBJC_INIT_CLASS_Associated to i8*)]
+
+define internal i8* @_i_Associated__dealloc() {
+entry:
+ store i8 1, i8* @deallocCalled, align 1
+ ret i8* null
+}
+
+; CHECK-LABEL: @main()
+define dso_local i32 @main() {
+entry:
+ %tmp0 = call i8* @llvm.objc.autoreleasePoolPush() #1
+ %tmp6 = load i8, i8* @deallocCalled, align 1
+ %tobool = icmp ne i8 %tmp6, 0
+ br i1 %tobool, label %if.else, label %if.end
+
+if.else: ; preds = %entry
+ call void @__assert_fail() #0
+ unreachable
+
+; CHECK-LABEL: if.end:
+; CHECK-NEXT: call void @llvm.objc.autoreleasePoolPop
+; CHECK-NEXT: load i8, i8* @deallocCalled
+if.end: ; preds = %entry
+ call void @llvm.objc.autoreleasePoolPop(i8* %tmp0)
+ %tmp7 = load i8, i8* @deallocCalled, align 1
+ %tobool3 = icmp ne i8 %tmp7, 0
+ br i1 %tobool3, label %if.end6, label %if.else5
+
+if.else5: ; preds = %if.end
+ call void @__assert_fail() #0
+ unreachable
+
+if.end6: ; preds = %if.end
+ store i8 0, i8* @deallocCalled, align 1
+ ret i32 0
+}
+
+declare i8* @llvm.objc.autoreleasePoolPush() #1
+declare void @llvm.objc.autoreleasePoolPop(i8*) #1
+declare dso_local void @__assert_fail() #0
+
+attributes #0 = { noreturn nounwind }
+attributes #1 = { nounwind }
OpenPOWER on IntegriCloud