[RS4GC] Dont' propagate call attrs related to patchable statepoints

The `"statepoint-id"` and `"statepoint-num-patch-bytes"` attributes are
used solely to determine properties of the `gc.statepoint` being
created.  Once the `gc.statepoint` is in place, these should be removed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250491 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Sanjoy Das 2015-10-16 02:41:23 +00:00
parent 46bd4a4f91
commit b608bbef03
2 changed files with 51 additions and 0 deletions

View File

@ -1290,6 +1290,13 @@ static AttributeSet legalizeCallAttributes(AttributeSet AS) {
Attr.hasAttribute(Attribute::ReadOnly))
continue;
// These attributes control the generation of the gc.statepoint call /
// invoke itself; and once the gc.statepoint is in place, they're of no
// use.
if (Attr.hasAttribute("statepoint-num-patch-bytes") ||
Attr.hasAttribute("statepoint-id"))
continue;
Ret = Ret.addAttributes(
AS.getContext(), Index,
AttributeSet::get(AS.getContext(), Index, AttrBuilder(Attr)));

View File

@ -0,0 +1,44 @@
; RUN: opt -S -rewrite-statepoints-for-gc -rs4gc-use-deopt-bundles < %s | FileCheck %s
declare void @f()
declare i32 @personality_function()
define void @test_id() gc "statepoint-example" personality i32 ()* @personality_function {
; CHECK-LABEL: @test_id(
entry:
; CHECK-LABEL: entry:
; CHECK: invoke i32 (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 100, i32 0, void ()* @f
invoke void @f() "statepoint-id"="100" to label %normal_return unwind label %exceptional_return
normal_return:
ret void
exceptional_return:
%landing_pad4 = landingpad {i8*, i32} cleanup
ret void
}
define void @test_num_patch_bytes() gc "statepoint-example" personality i32 ()* @personality_function {
; CHECK-LABEL: @test_num_patch_bytes(
entry:
; CHECK-LABEL: entry:
; CHECK: invoke i32 (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2882400000, i32 99, void ()* @f,
invoke void @f() "statepoint-num-patch-bytes"="99" to label %normal_return unwind label %exceptional_return
normal_return:
ret void
exceptional_return:
%landing_pad4 = landingpad {i8*, i32} cleanup
ret void
}
declare void @do_safepoint()
define void @gc.safepoint_poll() {
entry:
call void @do_safepoint()
ret void
}
; CHECK-NOT: statepoint-id
; CHECK-NOT: statepoint-num-patch_bytes