From c8a57dee5e9c99c51433f3d08da3edc2aadb0140 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Mon, 30 May 2016 12:08:17 -0700 Subject: add an option to run passes on individual functions, and to get default optimization passes suitable for that, or not. refactor visitFunction/Module for this. --- src/passes/pass.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/passes/pass.cpp') 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 P* PassRunner::getLast() { bool found = false; -- cgit v1.2.3