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