blob: 3e430305065ec5e7e68982438c8c4fae05dd1e66 [file] [log] [blame] [edit]
# Features
- Large-input support (> 1M vregs, > 1M blocks)
- Two operand impls: u64-based and u32-based. Always accept
u64-based `Operand` publicly (do not expose this in interface).
- Trait to generalize over them and support both internally
(parameterize the whole allocator impl)
- On data-structure init, choose one or the other based on max vreg
index
- Update halfmove keys: u128 rather than u64
- Support allocation of register pairs (or overlapping registers generally)
- Rematerialization
- Stack-location constraints that place operands in user-defined stack
locations (distinct from SpillSlots) (e.g., stack args)
# Performance
- Investigate better register hinting
- Investigate more principled cost functions and split locations,
especially around loop nests
- Investigate ways to improve bundle-merging; e.g., merge moves before
other types of connections
- Add limited inter-block redundant-move elimination: propagate across
splits but not joins.
- Optimize allocations (some reports of 5-7% of time spent in allocator)
# Cleanup
- Remove support for non-SSA code once no longer necessary