Switch Cranelift over to regalloc2. (#3989)
This PR switches Cranelift over to the new register allocator, regalloc2. See [this document](https://gist.github.com/cfallin/08553421a91f150254fe878f67301801) for a summary of the design changes. This switchover has implications for core VCode/MachInst types and the lowering pass. Overall, this change brings improvements to both compile time and speed of generated code (runtime), as reported in #3942: ``` Benchmark Compilation (wallclock) Execution (wallclock) blake3-scalar 25% faster 28% faster blake3-simd no diff no diff meshoptimizer 19% faster 17% faster pulldown-cmark 17% faster no diff bz2 15% faster no diff SpiderMonkey, 21% faster 2% faster fib(30) clang.wasm 42% faster N/A ```
This commit is contained in:
@@ -3,39 +3,6 @@ use crate::cdsl::settings::{SettingGroup, SettingGroupBuilder};
|
||||
pub(crate) fn define() -> SettingGroup {
|
||||
let mut settings = SettingGroupBuilder::new("shared");
|
||||
|
||||
settings.add_enum(
|
||||
"regalloc",
|
||||
"Register allocator to use with the MachInst backend.",
|
||||
r#"
|
||||
This selects the register allocator as an option among those offered by the `regalloc.rs`
|
||||
crate. Please report register allocation bugs to the maintainers of this crate whenever
|
||||
possible.
|
||||
|
||||
Note: this only applies to target that use the MachInst backend. As of 2020-04-17, this
|
||||
means the x86_64 backend doesn't use this yet.
|
||||
|
||||
Possible values:
|
||||
|
||||
- `backtracking` is a greedy, backtracking register allocator as implemented in
|
||||
Spidermonkey's optimizing tier IonMonkey. It may take more time to allocate registers, but
|
||||
it should generate better code in general, resulting in better throughput of generated
|
||||
code.
|
||||
- `backtracking_checked` is the backtracking allocator with additional self checks that may
|
||||
take some time to run, and thus these checks are disabled by default.
|
||||
- `experimental_linear_scan` is an experimental linear scan allocator. It may take less
|
||||
time to allocate registers, but generated code's quality may be inferior. As of
|
||||
2020-04-17, it is still experimental and it should not be used in production settings.
|
||||
- `experimental_linear_scan_checked` is the linear scan allocator with additional self
|
||||
checks that may take some time to run, and thus these checks are disabled by default.
|
||||
"#,
|
||||
vec![
|
||||
"backtracking",
|
||||
"backtracking_checked",
|
||||
"experimental_linear_scan",
|
||||
"experimental_linear_scan_checked",
|
||||
],
|
||||
);
|
||||
|
||||
settings.add_enum(
|
||||
"opt_level",
|
||||
"Optimization level for generated code.",
|
||||
|
||||
Reference in New Issue
Block a user