summaryrefslogtreecommitdiff
path: root/src/passes/param-utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/param-utils.cpp')
-rw-r--r--src/passes/param-utils.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/passes/param-utils.cpp b/src/passes/param-utils.cpp
index f54f91bd9..a600e1928 100644
--- a/src/passes/param-utils.cpp
+++ b/src/passes/param-utils.cpp
@@ -286,18 +286,21 @@ SortedVector applyConstantValues(const std::vector<Function*>& funcs,
void localizeCallsTo(const std::unordered_set<Name>& callTargets,
Module& wasm,
- PassRunner* runner) {
+ PassRunner* runner,
+ std::function<void(Function*)> onChange) {
struct LocalizerPass : public WalkerPass<PostWalker<LocalizerPass>> {
bool isFunctionParallel() override { return true; }
std::unique_ptr<Pass> create() override {
- return std::make_unique<LocalizerPass>(callTargets);
+ return std::make_unique<LocalizerPass>(callTargets, onChange);
}
const std::unordered_set<Name>& callTargets;
+ std::function<void(Function*)> onChange;
- LocalizerPass(const std::unordered_set<Name>& callTargets)
- : callTargets(callTargets) {}
+ LocalizerPass(const std::unordered_set<Name>& callTargets,
+ std::function<void(Function*)> onChange)
+ : callTargets(callTargets), onChange(onChange) {}
void visitCall(Call* curr) {
if (!callTargets.count(curr->target)) {
@@ -310,6 +313,7 @@ void localizeCallsTo(const std::unordered_set<Name>& callTargets,
if (replacement != curr) {
replaceCurrent(replacement);
optimized = true;
+ onChange(getFunction());
}
}
@@ -323,7 +327,7 @@ void localizeCallsTo(const std::unordered_set<Name>& callTargets,
}
};
- LocalizerPass(callTargets).run(runner, &wasm);
+ LocalizerPass(callTargets, onChange).run(runner, &wasm);
}
void localizeCallsTo(const std::unordered_set<HeapType>& callTargets,