aboutsummaryrefslogtreecommitdiff
path: root/llvm
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2015-07-02 02:03:58 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2015-07-02 02:03:58 +0000
commit7869d4b8461ee91b5ac62f965b41fd64e0d9fcec (patch)
tree1ff3d4673cdfebd20dedcede53ac3229a079ed88 /llvm
parent581f438f4c8d100fe864ecf71c48a60699e9c095 (diff)
downloadllvm-7869d4b8461ee91b5ac62f965b41fd64e0d9fcec.zip
llvm-7869d4b8461ee91b5ac62f965b41fd64e0d9fcec.tar.gz
llvm-7869d4b8461ee91b5ac62f965b41fd64e0d9fcec.tar.bz2
[LazyCallGraph] Port test case from r240039 to LCG.
Summary: r240039 adds a test case to check that CallGraph does the right thing with respect to non-leaf intrinsics like statepoint and patchpoint. This ports the same test case to LazyCallGraph. LazyCallGraph already does the right thing with respect to escaping function pointers so there is no need to change any code. Reviewers: chandlerc Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D10582 llvm-svn: 241226
Diffstat (limited to 'llvm')
-rw-r--r--llvm/test/Analysis/LazyCallGraph/non-leaf-intrinsics.ll26
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/test/Analysis/LazyCallGraph/non-leaf-intrinsics.ll b/llvm/test/Analysis/LazyCallGraph/non-leaf-intrinsics.ll
new file mode 100644
index 0000000..01782e0
--- /dev/null
+++ b/llvm/test/Analysis/LazyCallGraph/non-leaf-intrinsics.ll
@@ -0,0 +1,26 @@
+; RUN: opt -S -disable-output -passes=print-cg < %s 2>&1 | FileCheck %s
+
+declare void @llvm.experimental.patchpoint.void(i64, i32, i8*, i32, ...)
+declare i32 @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...)
+
+define private void @f() {
+ ret void
+}
+
+define void @calls_statepoint(i8 addrspace(1)* %arg) gc "statepoint-example" {
+; CHECK: Call edges in function: calls_statepoint
+; CHECK-NEXT: -> f
+entry:
+ %cast = bitcast i8 addrspace(1)* %arg to i64 addrspace(1)*
+ %safepoint_token = call i32 (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* @f, i32 0, i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 10, i32 0, i8 addrspace(1)* %arg, i64 addrspace(1)* %cast, i8 addrspace(1)* %arg, i8 addrspace(1)* %arg)
+ ret void
+}
+
+define void @calls_patchpoint() {
+; CHECK: Call edges in function: calls_patchpoint
+; CHECK-NEXT: -> f
+entry:
+ %c = bitcast void()* @f to i8*
+ tail call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 1, i32 15, i8* %c, i32 0, i16 65535, i16 -1, i32 65536, i32 2000000000, i32 2147483647, i32 -1, i32 4294967295, i32 4294967296, i64 2147483648, i64 4294967295, i64 4294967296, i64 -1)
+ ret void
+}