mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-12 13:48:45 +00:00
[Statepoints] Check for the "gc-leaf-function" attribute on call sites as well.
Reviewers: sanjoy, reames Subscribers: sanjoy, llvm-commits Differential Revision: http://reviews.llvm.org/D15900 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@256875 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d79ef021fe
commit
7b845c18db
@ -1553,8 +1553,8 @@ bool llvm::callsGCLeafFunction(ImmutableCallSite CS) {
|
||||
return true;
|
||||
|
||||
// Check if the function is specifically marked as a gc leaf function.
|
||||
//
|
||||
// TODO: we should be checking the attributes on the call site as well.
|
||||
if (CS.hasFnAttr("gc-leaf-function"))
|
||||
return true;
|
||||
if (const Function *F = CS.getCalledFunction())
|
||||
return F->hasFnAttribute("gc-leaf-function");
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
; RUN: opt %s -S -place-safepoints | FileCheck %s
|
||||
|
||||
declare void @foo() "gc-leaf-function"
|
||||
declare void @bar()
|
||||
|
||||
; Calls of functions with the "gc-leaf-function" attribute shouldn't be turned
|
||||
; into a safepoint. An entry safepoint should get inserted, though.
|
||||
@ -14,6 +15,16 @@ entry:
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @test_leaf_function_call() gc "statepoint-example" {
|
||||
; CHECK-LABEL: test_leaf_function_call
|
||||
; CHECK: gc.statepoint.p0f_isVoidf
|
||||
; CHECK-NOT: statepoint
|
||||
; CHECK-NOT: gc.result
|
||||
entry:
|
||||
call void @bar() "gc-leaf-function"
|
||||
ret void
|
||||
}
|
||||
|
||||
; This function is inlined when inserting a poll.
|
||||
declare void @do_safepoint()
|
||||
define void @gc.safepoint_poll() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user