Used in production? Probably not yet. But likely tested in production on a small %. They’ve gotten practiced at using the Shopify Rails monolith as the biggest test suite and regression tests for Rails and Ruby.
How big is the lifetime holes thing in practice? On loops the contiguous-interval model spills way more than it should. Wondering if that alone explains most of the YJIT gap.
I’ve always wondered about linear scan vs SSA based spilling & regalloc, like libfirm & qbe use:
‘Register spilling and live-range splitting for SSA-form programs’ and ‘Preference-Guided Register Assignment’
It’s much cleaner to code, since you don’t need to generate live ranges explicitly, and can break it up in two passes. Linear scan creates new inactive /active intervals, while the ssa form allocators just reuse the ssa graph. I’ve never benchmarked them back to back though.