[LLVMdev] Code for late safepoint placement available

Philip Reames listmail at philipreames.com
Wed Jun 4 09:35:51 PDT 2014


As I've mentioned on the mailing list a couple of times over the last 
few months, we've been working on an approach for supporting precise 
fully relocating garbage collection in LLVM.  I am happy to announce 
that we now have a version of the code available for public view and 
discussion.

https://github.com/AzulSystems/llvm-late-safepoint-placement 
<https://github.com/AzulSystems/llvm-late-safepoint-placement>

Our goal is to eventually see this merged into the LLVM tree. There's a 
fair amount of cleanup that needs to happen before that point, but we 
are actively working towards that eventual goal.

Please note that there are a couple of known issues with the current 
version (see the README).  This is best considered a proof of concept 
implementation and is not yet ready for production use.  We will be 
addressing the remaining issues over the next few weeks and will be 
sharing updates as they occur.

In the meantime, I'd like to get the discussion started on how these 
changes will eventually land in tree.  Part of the reason for sharing 
the code in an early state is to be able to build a history of working 
in the open, and to to able to merge minor fixes into the main LLVM 
repository before trying to upstream the core changes.  We are aware 
this is a fairly major change set and are happy to work within the 
community process in that regard.

I've included a list of specific questions I know we'd like to get 
feedback on, but general comments or questions are also very welcome.

Open Topics:

  * How should we factor the core GC support for review?  Our current
    intent is to separate logically distinct pieces, and share each
    layer one at a time.  (e.g. first infrastructure enhancements, then
    intrinsics and codegen support, then verifiers, then safepoint
    insertion passes)  Is this the right approach?
  * How configurable does the GC support need to be for inclusion in
    LLVM?  Currently, we expect the frontend to mark GC pointers using
    address spaces.  Do we need to support alternate mechanisms?  If so,
    what interface should this take?
  * How should we approach removing the existing partial support for
    garbage collection? (gcroot)  Do we want to support both going
    forward?  Do we need to provide a forward migration path in
    bitcode?  Given the usage is generally though MCJIT, we would prefer
    we simply deprecate the existing gcroot support and target it for
    complete removal a couple of releases down the road..
  * What programmatic interface should we present at the IR level and
    where should it live?  We're moving towards a CallSite like
    interface for statepoints, gc_relocates, and gc_results call sites. 
    Is this the right approach?  If so, should it live in the IR
    subtree, or Support?  (Note: The current code is only about 40%
    migrated to the new interface.)
  * To support invokable calls with safepoints, we need to make the
    statepoint intrinsic invokable.  This is new for intrinsics in
    LLVM.  Is there any reason that InvokeInst must be a subclass of
    CallInst? (rather than a view over either calls or invokes like
    CallSite)  Would changes to support invokable intrinsics be accepted
    upstream?  Alternate approaches are welcome.
  * Is the concept of an abstract VM state something LLVM should know
    about?  If so, how should it be represented?  We're actively
    exploring this topic, but don't have strong opinions on the topic yet.
  * Our statepoint shares a lot in the way of implementation and
    semantics with patchpoint and stackmap.  Is it better to submit new
    intrinsics, or try to identify a single intrinsic which could
    represent both?  Our current feeling is to keep them separate
    semantically, but share implementation where possible.


Yours,
Philip (& team)

p.s. Sanjoy, one of my co-workers,  will be helping to answer questions 
as they arise.

p.p.s. For those wondering why the current gcroot mechanism isn't 
sufficient, I covered that in a previous blog post:
[1] http://www.philipreames.com/Blog/2014/02/21/why-not-use-gcroot/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140604/133471aa/attachment.html>


More information about the llvm-dev mailing list