Changes in computation of bundle priorities during review of the initial PR introduced a possible mis-ordering of priorities: inner-loop bundle use weights could exceed the weights of 1_000_000 and 2_000_000 used for minimal bundles without and with fixed uses (respectively). These two kinds of minimal bundle are meant to be the highest-priority bundles, evicting any other bundle they need to, because they can't be split further. This PR introduces two special bundle weights for these two kinds of bundles, and clamps all other bundle weights to just below them. Thanks to @Amanieu for reporting the issue! Fixes #19.
regalloc2: another register allocator
This is a register allocator that started life as, and is about 50% still, a port of IonMonkey's backtracking register allocator to Rust. In many regards, it has been generalized, optimized, and improved since the initial port, and now supports both SSA and non-SSA use-cases.
In addition, it contains substantial amounts of testing infrastructure (fuzzing harnesses and checkers) that does not exist in the original IonMonkey allocator.
See the design overview for (much!) more detail on how the allocator works.
License
This crate is licensed under the Apache 2.0 License with LLVM
Exception. This license text can be found in the file LICENSE.
Parts of the code are derived from regalloc.rs: in particular,
src/checker.rs and src/domtree.rs. This crate has the same license
as regalloc.rs, so the license on these files does not differ.