diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/opt-utils.h | 42 |
1 files changed, 18 insertions, 24 deletions
diff --git a/src/passes/opt-utils.h b/src/passes/opt-utils.h index e9141c4f1..93fac137f 100644 --- a/src/passes/opt-utils.h +++ b/src/passes/opt-utils.h @@ -17,6 +17,7 @@ #ifndef wasm_passes_opt_utils_h #define wasm_passes_opt_utils_h +#include <functional> #include <unordered_set> #include <pass.h> @@ -56,51 +57,44 @@ inline void optimizeAfterInlining(std::unordered_set<Function*>& funcs, struct CallTargetReplacer : public WalkerPass<PostWalker<CallTargetReplacer>> { bool isFunctionParallel() override { return true; } - CallTargetReplacer(std::map<Name, Name>* replacements) - : replacements(replacements) {} + using MaybeReplace = std::function<void(Name&)>; + + CallTargetReplacer(MaybeReplace maybeReplace) : maybeReplace(maybeReplace) {} CallTargetReplacer* create() override { - return new CallTargetReplacer(replacements); + return new CallTargetReplacer(maybeReplace); } - void visitCall(Call* curr) { - auto iter = replacements->find(curr->target); - if (iter != replacements->end()) { - curr->target = iter->second; - } - } + void visitCall(Call* curr) { maybeReplace(curr->target); } private: - std::map<Name, Name>* replacements; + MaybeReplace maybeReplace; }; inline void replaceFunctions(PassRunner* runner, Module& module, - std::map<Name, Name>& replacements) { + const std::map<Name, Name>& replacements) { + auto maybeReplace = [&](Name& name) { + auto iter = replacements.find(name); + if (iter != replacements.end()) { + name = iter->second; + } + }; // replace direct calls - CallTargetReplacer(&replacements).run(runner, &module); + CallTargetReplacer(maybeReplace).run(runner, &module); // replace in table for (auto& segment : module.table.segments) { for (auto& name : segment.data) { - auto iter = replacements.find(name); - if (iter != replacements.end()) { - name = iter->second; - } + maybeReplace(name); } } // replace in start if (module.start.is()) { - auto iter = replacements.find(module.start); - if (iter != replacements.end()) { - module.start = iter->second; - } + maybeReplace(module.start); } // replace in exports for (auto& exp : module.exports) { - auto iter = replacements.find(exp->value); - if (iter != replacements.end()) { - exp->value = iter->second; - } + maybeReplace(exp->value); } } |