summaryrefslogtreecommitdiff
path: root/src/passes/pass.cpp
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-06-02 20:20:23 -0700
committerAlon Zakai <alonzakai@gmail.com>2016-06-02 20:20:23 -0700
commitf64e1852dc065c17d7c78b43a7cfb7fbe64e3cb4 (patch)
tree571bf874365e41a50976da0d15604e5d6f1edebb /src/passes/pass.cpp
parentb37bd96ea3345cf7015e9e925e0d33524cd1c3db (diff)
parente4a81f9ea487441e0c01f399d15026672fdeadf9 (diff)
downloadbinaryen-f64e1852dc065c17d7c78b43a7cfb7fbe64e3cb4.tar.gz
binaryen-f64e1852dc065c17d7c78b43a7cfb7fbe64e3cb4.tar.bz2
binaryen-f64e1852dc065c17d7c78b43a7cfb7fbe64e3cb4.zip
Merge pull request #560 from WebAssembly/func-running
Option to optimize while building modules
Diffstat (limited to 'src/passes/pass.cpp')
-rw-r--r--src/passes/pass.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp
index ca9f477a3..e5bbf5866 100644
--- a/src/passes/pass.cpp
+++ b/src/passes/pass.cpp
@@ -74,6 +74,25 @@ void PassRunner::addDefaultOptimizationPasses() {
add("duplicate-function-elimination"); // optimizations show more functions as duplicate
}
+void PassRunner::addDefaultFunctionOptimizationPasses() {
+ add("dce");
+ add("remove-unused-brs");
+ add("remove-unused-names");
+ add("optimize-instructions");
+ add("simplify-locals");
+ add("vacuum"); // previous pass creates garbage
+ add("coalesce-locals");
+ add("vacuum"); // previous pass creates garbage
+ add("reorder-locals");
+ add("merge-blocks");
+ add("optimize-instructions");
+ add("vacuum"); // should not be needed, last few passes do not create garbage, but just to be safe
+}
+
+void PassRunner::addDefaultGlobalOptimizationPasses() {
+ add("duplicate-function-elimination");
+}
+
void PassRunner::run() {
std::chrono::high_resolution_clock::time_point beforeEverything;
size_t padding = 0;
@@ -108,6 +127,12 @@ void PassRunner::run() {
}
}
+void PassRunner::runFunction(Function* func) {
+ for (auto pass : passes) {
+ pass->runFunction(this, wasm, func);
+ }
+}
+
template<class P>
P* PassRunner::getLast() {
bool found = false;