summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/asm2wasm.h8
-rw-r--r--src/binaryen-shell.cpp14
-rw-r--r--src/pass.cpp10
-rw-r--r--src/pass.h4
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.