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
This commit is contained in:
Ramkumar Ramachandra 2015-02-09 23:00:40 +00:00
parent 99cc7e5307
commit 69a5c89128
2 changed files with 17 additions and 13 deletions

View File

@ -952,18 +952,7 @@ static Value *ReplaceWithStatepoint(const CallSite &CS, /* to replace */
Instruction *gc_result = nullptr;
std::vector<Type *> 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<Value *> args;

View File

@ -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.