34 lines
1.1 KiB
Plaintext
34 lines
1.1 KiB
Plaintext
# 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 |