diff options
Diffstat (limited to 'src/passes/opt-utils.h')
-rw-r--r-- | src/passes/opt-utils.h | 29 |
1 files changed, 6 insertions, 23 deletions
diff --git a/src/passes/opt-utils.h b/src/passes/opt-utils.h index 1945167b0..7bb733b03 100644 --- a/src/passes/opt-utils.h +++ b/src/passes/opt-utils.h @@ -23,37 +23,21 @@ #include <ir/element-utils.h> #include <ir/module-utils.h> #include <pass.h> +#include <passes/pass-utils.h> #include <wasm.h> -namespace wasm { +namespace wasm::OptUtils { -namespace OptUtils { - -// Run useful optimizations after inlining new code into a set -// of functions. -inline void optimizeAfterInlining(const std::unordered_set<Function*>& funcs, +// Run useful optimizations after inlining new code into a set of functions. +inline void optimizeAfterInlining(const PassUtils::FuncSet& funcs, Module* module, PassRunner* parentRunner) { - // save the full list of functions on the side - std::vector<std::unique_ptr<Function>> all; - all.swap(module->functions); - module->updateFunctionsMap(); - for (auto& func : funcs) { - module->addFunction(func); - } - PassRunner runner(module, parentRunner->options); + PassUtils::FilteredPassRunner runner(module, funcs, parentRunner->options); runner.setIsNested(true); - runner.setValidateGlobally(false); // not a full valid module // this is especially useful after inlining runner.add("precompute-propagate"); runner.addDefaultFunctionOptimizationPasses(); // do all the usual stuff runner.run(); - // restore all the funcs - for (auto& func : module->functions) { - func.release(); - } - all.swap(module->functions); - module->updateFunctionsMap(); } struct FunctionRefReplacer @@ -102,7 +86,6 @@ inline void replaceFunctions(PassRunner* runner, } } -} // namespace OptUtils -} // namespace wasm +} // namespace wasm::OptUtils #endif // wasm_passes_opt_utils_h |