diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-04-07 17:54:02 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-04-07 17:54:02 -0700 |
commit | 0d267afdf948de326055e58a94e5f48d9310a52a (patch) | |
tree | 0234141cfa340ebd5ba2a263d025d837a98ab992 /src/passes/SimplifyLocals.cpp | |
parent | 24b0cf11a4b2482ceae7d9e64af576ce2f472479 (diff) | |
download | binaryen-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.cpp | 14 |
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) { |