diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-04-07 20:42:17 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-04-07 20:42:17 -0700 |
commit | 1b6a1099f857d70005380cb4f980c9defeba4b22 (patch) | |
tree | 62a83cdc122d8973980ae8f54a4e82d9db24d419 /src/passes/SimplifyLocals.cpp | |
parent | db3d83e79532cd48fbd852f7ab1370d0218dfe91 (diff) | |
download | binaryen-1b6a1099f857d70005380cb4f980c9defeba4b22.tar.gz binaryen-1b6a1099f857d70005380cb4f980c9defeba4b22.tar.bz2 binaryen-1b6a1099f857d70005380cb4f980c9defeba4b22.zip |
add missing checks on nested blocks in SimplifyExpressions
Diffstat (limited to 'src/passes/SimplifyLocals.cpp')
-rw-r--r-- | src/passes/SimplifyLocals.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/passes/SimplifyLocals.cpp b/src/passes/SimplifyLocals.cpp index 5368701d7..0d59b8759 100644 --- a/src/passes/SimplifyLocals.cpp +++ b/src/passes/SimplifyLocals.cpp @@ -45,14 +45,19 @@ struct SimplifyLocals : public WalkerPass<FastExecutionWalker<SimplifyLocals>> { void visitBlock(Block *curr) { // note locals, we can sink them from here TODO sink from elsewhere? - derecurseBlocks(curr, [&](Block* block) {}, [&](Block* block, Expression*& child) { + derecurseBlocks(curr, [&](Block* block) { + // curr was already checked by walk() + if (block != curr) checkPre(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(&child))); } - }, [&](Block* block) {}); + }, [&](Block* block) { + if (block != curr) checkPost(block); + }); } void visitGetLocal(GetLocal *curr) { |