<div dir="ltr">Hello list,<div><br></div><div>I'm experimenting with proof of concept statepoint GC for LLVM and currently trying to follow some guidelines of <a href="http://llvm.org/docs/Statepoints.html">http://llvm.org/docs/Statepoints.html</a></div><div><br></div><div>Namely applying PlaceSafepoints should introduce statepoint intrinsics at the right spots in the IR. Following the given example <a href="http://llvm.org/docs/Statepoints.html#placesafepoints">http://llvm.org/docs/Statepoints.html#placesafepoints</a> I did:</div><div><br></div><div>







<p class="gmail-p1"><span class="gmail-s1">dmitryolsh$ cat sp.ll</span></p>
<p class="gmail-p1"><span class="gmail-s1">declare void @foo()</span></p>
<p class="gmail-p1"><span class="gmail-s1">define void @test() gc "statepoint-example" {</span></p>
<p class="gmail-p1"><span class="gmail-s1">  call void @foo()</span></p>
<p class="gmail-p1"><span class="gmail-s1">  ret void</span></p>
<p class="gmail-p1"><span class="gmail-s1">}</span></p>
<p class="gmail-p1"><span class="gmail-s1">declare void @do_safepoint()</span></p>
<p class="gmail-p1"><span class="gmail-s1">define void @gc.safepoint_poll() {</span></p>
<p class="gmail-p1"><span class="gmail-s1">  call void @do_safepoint()</span></p>
<p class="gmail-p1"><span class="gmail-s1">  ret void</span></p>
<p class="gmail-p1"><span class="gmail-s1">}</span></p><p class="gmail-p1">#Applying the place-safepoints:</p><p class="gmail-p1"><span class="gmail-s1">dmitryolsh$ opt -place-safepoints -S  sp.ll </span></p><p class="gmail-p1"><span class="gmail-s1">; ModuleID = 'sp.ll'</span></p><p class="gmail-p1"><span class="gmail-s1">source_filename = "sp.ll"</span></p><p class="gmail-p2"><span class="gmail-s1"></span><br></p><p class="gmail-p1"><span class="gmail-s1">declare void @foo()</span></p><p class="gmail-p2"><span class="gmail-s1"></span><br></p><p class="gmail-p1"><span class="gmail-s1">define void @test() gc "statepoint-example" {</span></p><p class="gmail-p1"><span class="gmail-s1">  call void @do_safepoint()</span></p><p class="gmail-p1"><span class="gmail-s1">  call void @foo()</span></p><p class="gmail-p1"><span class="gmail-s1">  ret void</span></p><p class="gmail-p1"><span class="gmail-s1">}</span></p><p class="gmail-p1"><span class="gmail-s1">declare void @do_safepoint()</span></p><p class="gmail-p1"><span class="gmail-s1">define void @gc.safepoint_poll() {</span></p><p class="gmail-p1"><span class="gmail-s1">  call void @do_safepoint()</span></p><p class="gmail-p1"><span class="gmail-s1">  ret void</span></p><p class="gmail-p1">
























</p><p class="gmail-p1"><span class="gmail-s1">}</span></p><p class="gmail-p1">This is compared to the expected output with intrinsics:</p><p class="gmail-p1">define void @test() gc "statepoint-example" {</p><p class="gmail-p1">  %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)</p><p class="gmail-p1">  %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)</p><p class="gmail-p1">  ret void</p><p class="gmail-p1">}</p><p class="gmail-p1"><br></p><p class="gmail-p1">So it doesn't quite work as advertised. Am I missing something obvious or is it a bug in docs/pass ?</p><p class="gmail-p1"><br></p><p class="gmail-p1">---</p><p class="gmail-p1">Dmitry Olshansky</p></div></div>