Browse Source

Cranelift: add a config option for alias analysis and redundant-load elimination. (#4349)

This allows for experiments as in here [1] and also generally gives an
option to anyone who is concerned that the extra optimization may be
counterproductive or take too much time. The optimization remains
enabled by default.

[1]
https://github.com/bytecodealliance/wasmtime/pull/4163#issuecomment-1169303683
pull/4352/head
Chris Fallin 2 years ago
committed by GitHub
parent
commit
2034c8aa45
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      cranelift/codegen/meta/src/shared/settings.rs
  2. 2
      cranelift/codegen/src/context.rs
  3. 1
      cranelift/codegen/src/settings.rs
  4. 1
      crates/wasmtime/src/engine.rs

10
cranelift/codegen/meta/src/shared/settings.rs

@ -31,6 +31,16 @@ pub(crate) fn define() -> SettingGroup {
vec!["none", "speed", "speed_and_size"],
);
settings.add_bool(
"enable_alias_analysis",
"Do redundant-load optimizations with alias analysis.",
r#"
This enables the use of a simple alias analysis to optimize away redundant loads.
Only effective when `opt_level` is `speed` or `speed_and_size`.
"#,
true,
);
settings.add_bool(
"enable_verifier",
"Run the Cranelift IR verifier at strategic times during compilation.",

2
cranelift/codegen/src/context.rs

@ -163,7 +163,7 @@ impl Context {
self.remove_constant_phis(isa)?;
if opt_level != OptLevel::None {
if opt_level != OptLevel::None && isa.flags().enable_alias_analysis() {
self.replace_redundant_loads()?;
self.simple_gvn(isa)?;
}

1
cranelift/codegen/src/settings.rs

@ -516,6 +516,7 @@ libcall_call_conv = "isa_default"
baldrdash_prologue_words = 0
probestack_size_log2 = 12
regalloc_checker = false
enable_alias_analysis = true
enable_verifier = true
is_pic = false
use_colocated_libcalls = false

1
crates/wasmtime/src/engine.rs

@ -384,6 +384,7 @@ impl Engine {
| "machine_code_cfg_info"
| "tls_model" // wasmtime doesn't use tls right now
| "opt_level" // opt level doesn't change semantics
| "enable_alias_analysis" // alias analysis-based opts don't change semantics
| "probestack_func_adjusts_sp" // probestack above asserted disabled
| "probestack_size_log2" // probestack above asserted disabled
| "regalloc" // shouldn't change semantics

Loading…
Cancel
Save