summaryrefslogtreecommitdiff
path: root/src/passes/opt-utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/opt-utils.h')
-rw-r--r--src/passes/opt-utils.h29
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