From 69a5c89128e330be035162ce4aeec2c52a7dcb94 Mon Sep 17 00:00:00 2001 From: Ramkumar Ramachandra Date: Mon, 9 Feb 2015 23:00:40 +0000 Subject: [PATCH] PlaceSafepoints: modernize gc.result.* -> gc.result Differential Revision: http://reviews.llvm.org/D7516 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228625 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/PlaceSafepoints.cpp | 13 +------------ test/Transforms/PlaceSafepoints/basic.ll | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/lib/Transforms/Scalar/PlaceSafepoints.cpp b/lib/Transforms/Scalar/PlaceSafepoints.cpp index 490a67cd0e4..517c4c95aa7 100644 --- a/lib/Transforms/Scalar/PlaceSafepoints.cpp +++ b/lib/Transforms/Scalar/PlaceSafepoints.cpp @@ -952,18 +952,7 @@ static Value *ReplaceWithStatepoint(const CallSite &CS, /* to replace */ Instruction *gc_result = nullptr; std::vector types; // one per 'any' type types.push_back(CS.getType()); // result type - auto get_gc_result_id = [&](Type &Ty) { - if (Ty.isIntegerTy()) { - return Intrinsic::experimental_gc_result_int; - } else if (Ty.isFloatingPointTy()) { - return Intrinsic::experimental_gc_result_float; - } else if (Ty.isPointerTy()) { - return Intrinsic::experimental_gc_result_ptr; - } else { - llvm_unreachable("non java type encountered"); - } - }; - Intrinsic::ID Id = get_gc_result_id(*CS.getType()); + Intrinsic::ID Id = Intrinsic::experimental_gc_result; Value *gc_result_func = Intrinsic::getDeclaration(M, Id, types); std::vector args; diff --git a/test/Transforms/PlaceSafepoints/basic.ll b/test/Transforms/PlaceSafepoints/basic.ll index a21066a5157..e9f24a5c86f 100644 --- a/test/Transforms/PlaceSafepoints/basic.ll +++ b/test/Transforms/PlaceSafepoints/basic.ll @@ -51,11 +51,26 @@ entry: br label %other other: ; CHECK-LABEL: other -; CHECK: statepoint +; CHECK: statepoint +; CHECK-NOT: gc.result call void @foo() ret void } +declare zeroext i1 @i1_return_i1(i1) + +define i1 @test_call_with_result() gc "statepoint-example" { +; CHECK-LABEL: test_call_with_result +; This is checking that a statepoint_poll + statepoint + result is +; inserted for a function that takes 1 argument. +; CHECK: gc.statepoint.p0f_isVoidf +; CHECK: gc.statepoint.p0f_i1i1f +; CHECK: (i1 (i1)* @i1_return_i1, i32 1, i32 0, i1 false, i32 0) +; CHECK: gc.result.i1 +entry: + %call1 = tail call i1 (i1)* @i1_return_i1(i1 false) + ret i1 %call1 +} ; This function is inlined when inserting a poll. To avoid recursive ; issues, make sure we don't place safepoints in it. -- 2.34.1