A new register allocator for ZJIT
3 days ago
- #register allocation
- #ZJIT
- #compiler optimization
- A new register allocator has been implemented for ZJIT.
- Register allocators decide where to store values, with preference for registers over memory.
- ZJIT uses a linear scan register allocator based on Christian Wimmer's paper for SSA form.
- SSA form ensures each variable is assigned only once, aiding in tracking lifetimes.
- Lifetimes indicate when values are alive, determining register allocation and spill decisions.
- Interference graphs help identify overlapping lifetimes but can be resource-intensive.
- Linear scan allocates registers by iterating over live ranges, freeing registers at end.
- Global allocation spans entire functions, improving efficiency over local block-based methods.
- ZJIT's new global register allocator supports method inlining and easier basic block manipulation.
- Future improvements include handling lifetime holes to optimize register reuse.