diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/pass.cpp | 6 | ||||
-rw-r--r-- | src/tools/optimization-options.h | 13 | ||||
-rw-r--r-- | src/tools/wasm-reduce.cpp | 1 |
3 files changed, 17 insertions, 3 deletions
diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp index 2f917d779..c0354524d 100644 --- a/src/passes/pass.cpp +++ b/src/passes/pass.cpp @@ -132,6 +132,12 @@ void PassRunner::addDefaultOptimizationPasses() { } void PassRunner::addDefaultFunctionOptimizationPasses() { + // if we are willing to work very very hard, flatten the IR and do opts + // that depend on flat IR + if (options.optimizeLevel >= 4) { + add("flatten"); + add("local-cse"); + } if (!options.debugInfo) { // debug info must be preserved, do not dce it add("dce"); } diff --git a/src/tools/optimization-options.h b/src/tools/optimization-options.h index 9fbba88cb..abe3bcd6d 100644 --- a/src/tools/optimization-options.h +++ b/src/tools/optimization-options.h @@ -42,27 +42,34 @@ struct OptimizationOptions : public Options { passOptions.optimizeLevel = 0; passOptions.shrinkLevel = 0; }) - .add("", "-O1", "execute -O1 optimization passes", + .add("", "-O1", "execute -O1 optimization passes (quick&useful opts, useful for iteration builds)", Options::Arguments::Zero, [this](Options*, const std::string&) { passOptions.optimizeLevel = 1; passOptions.shrinkLevel = 0; passes.push_back(DEFAULT_OPT_PASSES); }) - .add("", "-O2", "execute -O2 optimization passes", + .add("", "-O2", "execute -O2 optimization passes (most opts, generally gets most perf)", Options::Arguments::Zero, [this](Options*, const std::string&) { passOptions.optimizeLevel = 2; passOptions.shrinkLevel = 0; passes.push_back(DEFAULT_OPT_PASSES); }) - .add("", "-O3", "execute -O3 optimization passes", + .add("", "-O3", "execute -O3 optimization passes (spends potentially a lot of time optimizing)", Options::Arguments::Zero, [this](Options*, const std::string&) { passOptions.optimizeLevel = 3; passOptions.shrinkLevel = 0; passes.push_back(DEFAULT_OPT_PASSES); }) + .add("", "-O4", "execute -O4 optimization passes (also flatten the IR, which can take a lot more time and memory, but is useful on more nested / complex / less-optimized input)", + Options::Arguments::Zero, + [this](Options*, const std::string&) { + passOptions.optimizeLevel = 4; + passOptions.shrinkLevel = 0; + passes.push_back(DEFAULT_OPT_PASSES); + }) .add("", "-Os", "execute default optimization passes, focusing on code size", Options::Arguments::Zero, [this](Options*, const std::string&) { diff --git a/src/tools/wasm-reduce.cpp b/src/tools/wasm-reduce.cpp index 6b19e6216..f31c11edd 100644 --- a/src/tools/wasm-reduce.cpp +++ b/src/tools/wasm-reduce.cpp @@ -236,6 +236,7 @@ struct Reducer : public WalkerPass<PostWalker<Reducer, UnifiedExpressionVisitor< "-O1", "-O2", "-O3", + "-O4", "--flatten -Os", "--flatten -O3", "--flatten --local-cse -Os", |