[llvm-dev] Q about PlaceSafepoints pass
Dmitry Olshansky via llvm-dev
llvm-dev at lists.llvm.org
Mon Sep 12 06:51:15 PDT 2016
Hello list,
I'm experimenting with proof of concept statepoint GC for LLVM and
currently trying to follow some guidelines of
http://llvm.org/docs/Statepoints.html
Namely applying PlaceSafepoints should introduce statepoint intrinsics at
the right spots in the IR. Following the given example
http://llvm.org/docs/Statepoints.html#placesafepoints I did:
dmitryolsh$ cat sp.ll
declare void @foo()
define void @test() gc "statepoint-example" {
call void @foo()
ret void
}
declare void @do_safepoint()
define void @gc.safepoint_poll() {
call void @do_safepoint()
ret void
}
#Applying the place-safepoints:
dmitryolsh$ opt -place-safepoints -S sp.ll
; ModuleID = 'sp.ll'
source_filename = "sp.ll"
declare void @foo()
define void @test() gc "statepoint-example" {
call void @do_safepoint()
call void @foo()
ret void
}
declare void @do_safepoint()
define void @gc.safepoint_poll() {
call void @do_safepoint()
ret void
}
This is compared to the expected output with intrinsics:
define void @test() gc "statepoint-example" {
%safepoint_token = call token (i64, i32, void ()*, i32, i32, ...)*
@llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2882400000, i32 0, void
()* @do_safepoint, i32 0, i32 0, i32 0, i32 0)
%safepoint_token1 = call token (i64, i32, void ()*, i32, i32, ...)*
@llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2882400000, i32 0, void
()* @foo, i32 0, i32 0, i32 0, i32 0)
ret void
}
So it doesn't quite work as advertised. Am I missing something obvious or
is it a bug in docs/pass ?
---
Dmitry Olshansky
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160912/18ab32e7/attachment-0001.html>
More information about the llvm-dev
mailing list