summaryrefslogtreecommitdiff
path: root/src/passes/SimplifyLocals.cpp
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-04-07 17:54:02 -0700
committerAlon Zakai <alonzakai@gmail.com>2016-04-07 17:54:02 -0700
commit0d267afdf948de326055e58a94e5f48d9310a52a (patch)
tree0234141cfa340ebd5ba2a263d025d837a98ab992 /src/passes/SimplifyLocals.cpp
parent24b0cf11a4b2482ceae7d9e64af576ce2f472479 (diff)
downloadbinaryen-0d267afdf948de326055e58a94e5f48d9310a52a.tar.gz
binaryen-0d267afdf948de326055e58a94e5f48d9310a52a.tar.bz2
binaryen-0d267afdf948de326055e58a94e5f48d9310a52a.zip
derecurse blocks helper, and use it in SimplifyLocals
Diffstat (limited to 'src/passes/SimplifyLocals.cpp')
-rw-r--r--src/passes/SimplifyLocals.cpp14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/passes/SimplifyLocals.cpp b/src/passes/SimplifyLocals.cpp
index 98806410f..5c7b7475a 100644
--- a/src/passes/SimplifyLocals.cpp
+++ b/src/passes/SimplifyLocals.cpp
@@ -45,16 +45,14 @@ struct SimplifyLocals : public WalkerPass<FastExecutionWalker<SimplifyLocals>> {
void visitBlock(Block *curr) {
// note locals, we can sink them from here TODO sink from elsewhere?
- ExpressionList& list = curr->list;
- for (size_t z = 0; z < list.size(); z++) {
- walk(list[z]);
- auto* item = list[z];
- if (item->is<SetLocal>()) {
- Name name = item->cast<SetLocal>()->name;
+ derecurseBlocks(curr, [&](Block* block) {}, [&](Block* block, Expression*& child) {
+ walk(child);
+ if (child->is<SetLocal>()) {
+ Name name = child->cast<SetLocal>()->name;
assert(sinkables.count(name) == 0);
- sinkables.emplace(std::make_pair(name, SinkableInfo(&list[z])));
+ sinkables.emplace(std::make_pair(name, SinkableInfo(&child)));
}
- }
+ }, [&](Block* block) {});
}
void visitGetLocal(GetLocal *curr) {