diff options
Diffstat (limited to 'src/passes/pass.cpp')
-rw-r--r-- | src/passes/pass.cpp | 25 |
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; |