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
This commit is contained in:
Chris Fallin
2022-06-28 15:25:47 -07:00
committed by GitHub
parent c1b3962f7b
commit 2034c8aa45
4 changed files with 13 additions and 1 deletions

View File

@@ -31,6 +31,16 @@ pub(crate) fn define() -> SettingGroup {
vec!["none", "speed", "speed_and_size"], 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( settings.add_bool(
"enable_verifier", "enable_verifier",
"Run the Cranelift IR verifier at strategic times during compilation.", "Run the Cranelift IR verifier at strategic times during compilation.",

View File

@@ -163,7 +163,7 @@ impl Context {
self.remove_constant_phis(isa)?; 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.replace_redundant_loads()?;
self.simple_gvn(isa)?; self.simple_gvn(isa)?;
} }

View File

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

View File

@@ -384,6 +384,7 @@ impl Engine {
| "machine_code_cfg_info" | "machine_code_cfg_info"
| "tls_model" // wasmtime doesn't use tls right now | "tls_model" // wasmtime doesn't use tls right now
| "opt_level" // opt level doesn't change semantics | "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_func_adjusts_sp" // probestack above asserted disabled
| "probestack_size_log2" // probestack above asserted disabled | "probestack_size_log2" // probestack above asserted disabled
| "regalloc" // shouldn't change semantics | "regalloc" // shouldn't change semantics