mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 11:02:59 +02:00
PlaceSafepoints: modernize gc.result.* -> gc.result
Differential Revision: http://reviews.llvm.org/D7516 llvm-svn: 228625
This commit is contained in:
parent
95f6ff35e1
commit
054737a0c9
@ -952,18 +952,7 @@ static Value *ReplaceWithStatepoint(const CallSite &CS, /* to replace */
|
|||||||
Instruction *gc_result = nullptr;
|
Instruction *gc_result = nullptr;
|
||||||
std::vector<Type *> types; // one per 'any' type
|
std::vector<Type *> types; // one per 'any' type
|
||||||
types.push_back(CS.getType()); // result type
|
types.push_back(CS.getType()); // result type
|
||||||
auto get_gc_result_id = [&](Type &Ty) {
|
Intrinsic::ID Id = Intrinsic::experimental_gc_result;
|
||||||
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());
|
|
||||||
Value *gc_result_func = Intrinsic::getDeclaration(M, Id, types);
|
Value *gc_result_func = Intrinsic::getDeclaration(M, Id, types);
|
||||||
|
|
||||||
std::vector<Value *> args;
|
std::vector<Value *> args;
|
||||||
|
@ -51,11 +51,26 @@ entry:
|
|||||||
br label %other
|
br label %other
|
||||||
other:
|
other:
|
||||||
; CHECK-LABEL: other
|
; CHECK-LABEL: other
|
||||||
; CHECK: statepoint
|
; CHECK: statepoint
|
||||||
|
; CHECK-NOT: gc.result
|
||||||
call void @foo()
|
call void @foo()
|
||||||
ret void
|
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
|
; This function is inlined when inserting a poll. To avoid recursive
|
||||||
; issues, make sure we don't place safepoints in it.
|
; issues, make sure we don't place safepoints in it.
|
||||||
|
Loading…
Reference in New Issue
Block a user