diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/asm2wasm.h | 8 | ||||
-rw-r--r-- | src/binaryen-shell.cpp | 14 | ||||
-rw-r--r-- | src/pass.cpp | 10 | ||||
-rw-r--r-- | src/pass.h | 4 |
4 files changed, 21 insertions, 15 deletions
diff --git a/src/asm2wasm.h b/src/asm2wasm.h index a5a76b396..307f7a38e 100644 --- a/src/asm2wasm.h +++ b/src/asm2wasm.h @@ -1713,13 +1713,7 @@ Function* Asm2WasmBuilder::processFunction(Ref ast) { void Asm2WasmBuilder::optimize() { PassRunner passRunner(&allocator); - passRunner.add("remove-unused-brs"); - passRunner.add("remove-unused-names"); - passRunner.add("merge-blocks"); - passRunner.add("optimize-instructions"); - passRunner.add("simplify-locals"); - passRunner.add("reorder-locals"); - passRunner.add("vacuum"); + passRunner.addDefaultOptimizationPasses(); if (maxGlobal < 1024) { passRunner.add("post-emscripten"); } diff --git a/src/binaryen-shell.cpp b/src/binaryen-shell.cpp index dd0f0eeca..84b81963b 100644 --- a/src/binaryen-shell.cpp +++ b/src/binaryen-shell.cpp @@ -174,12 +174,6 @@ int main(int argc, const char* argv[]) { Name entry; std::vector<std::string> passes; - static const char* default_passes[] = {"remove-unused-brs", - "remove-unused-names", "merge-blocks", - "optimize-instructions", - "simplify-locals", "reorder-locals", - "vacuum"}; - Options options("binaryen-shell", "Execute .wast files"); options .add("--output", "-o", "Output file (stdout if not specified)", @@ -195,7 +189,7 @@ int main(int argc, const char* argv[]) { .add("", "-O", "execute default optimization passes", Options::Arguments::Zero, [&passes](Options*, const std::string&) { - for (const auto* p : default_passes) passes.push_back(p); + passes.push_back("O"); }) .add_positional("INFILE", Options::Arguments::One, [](Options* o, const std::string& argument) { @@ -234,7 +228,11 @@ int main(int argc, const char* argv[]) { if (options.debug) std::cerr << "running passes...\n"; PassRunner passRunner(&moreModuleAllocations); for (auto& passName : passes) { - passRunner.add(passName); + if (passName == "O") { + passRunner.addDefaultOptimizationPasses(); + } else { + passRunner.add(passName); + } } passRunner.run(&wasm); } diff --git a/src/pass.cpp b/src/pass.cpp index 432979413..a85643efa 100644 --- a/src/pass.cpp +++ b/src/pass.cpp @@ -53,6 +53,16 @@ std::string PassRegistry::getPassDescription(std::string name) { // PassRunner +void PassRunner::addDefaultOptimizationPasses() { + add("remove-unused-brs"); + add("remove-unused-names"); + add("merge-blocks"); + add("optimize-instructions"); + add("simplify-locals"); + add("reorder-locals"); + add("vacuum"); +} + void PassRunner::run(Module* module) { for (auto pass : passes) { currPass = pass; diff --git a/src/pass.h b/src/pass.h index f1f99e3aa..503c164f9 100644 --- a/src/pass.h +++ b/src/pass.h @@ -88,6 +88,10 @@ struct PassRunner { passes.push_back(new P(arg)); } + // Adds the default set of optimization passes; this is + // what -O does. + void addDefaultOptimizationPasses(); + void run(Module* module); // Get the last pass that was already executed of a certain type. |