summaryrefslogtreecommitdiff
path: root/src/passes/pass.cpp
diff options
context:
space:
mode:
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;