Early this week, I was able to submit the majority of the changes to support Statepoints in LLVM. Before anyone gets too excited, let me note a few things:
- This is the less interesting part of our GC work. The more interesting parts of late safepoint insertion have not landed yet and are likely a few months out. Statepoints is about providing a robust implementation for generating stack maps for a relocating garbage collector, not about inserting the actual safepoints.
- The implementation is fairly robust, but is not yet really burnt in. If you want to start playing with it, feel free, but expect to run into some bugs and have to submit some patches. The good news is that those patches will go directly to llvm-commits and we’ll be reviewing them there. No more of this weird split public/private branch stuff. Yeah!
- There’s lots of tuning work to be done. I’ve started filing bugs to track some of these items, but there’s a lot more to be filed. In particular, there’s lots of room to tweak semantics to make statepoints less invasive for non-relocating GCs.
- The current interface for frontends is somewhat rough. I’m in the process of working on a patch to add IRBuilder routines, but that hasn’t landed yet. Similarly, there’s no in tree parser for the StackMap section. (Patches for usability issues are extremely welcome!)