[llvm-dev] Why is method call treated as a safe point for GC
David Chisnall via llvm-dev
llvm-dev at lists.llvm.org
Wed May 5 01:50:17 PDT 2021
Hi,
I believe this is to permit local reasoning. A method call is not
necessarily a real safe point, but if the callee reaches a safe point
then the entire stack must be treated as a safe point. Without this
assumption, you could reach a safe point in the current leaf function
but the caller would not be in a safe point and so your stack would be
in an inconsistent state.
In theory, you could make may-be-a-safepoint an attribute on methods and
avoid making the call site a safe point for cases where you can
statically prove that nothing reachable from the callee contains a safe
point.
In practice, if you have sufficient analysis to be able to guarantee
that the callee doesn't contain safe points (which also implies that it
has a sufficiently short execution time that the lack of safepoints will
not impact overall performance) then you probably want to inline it. At
this point, the method call no longer exists and so you don't have to
worry about it as a potential safe point.
David
On 05/05/2021 05:26, Kavindu Gimhan Zoysa via llvm-dev wrote:
> Hi all,
>
> In the LLVM GC framework, we are talking about the safe points which are
> used to run the GC. When selecting the safe points, methods call are
> considered as safe points. I cannot understand the reason to treat
> method calls as safe points. Can you explain the reason?
>
> Thank you,
> Kavindu
>
> Kavindu Gimhan Zoysa,
> BSc(Hons) | ENTC | UoM,
> SSE | WSO2
>
> GitHub <https://github.com/KavinduZoysa> LinkedIn
> <https://www.linkedin.com/in/kavindu-gimhan-zoysa-85939a122/> Medium
> <https://medium.com/@kavindugimhanzoysa>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
More information about the llvm-dev
mailing list