| # 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 |