summaryrefslogtreecommitdiff
path: root/src/passes/SimplifyLocals.cpp
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-04-07 20:42:17 -0700
committerAlon Zakai <alonzakai@gmail.com>2016-04-07 20:42:17 -0700
commit1b6a1099f857d70005380cb4f980c9defeba4b22 (patch)
tree62a83cdc122d8973980ae8f54a4e82d9db24d419 /src/passes/SimplifyLocals.cpp
parentdb3d83e79532cd48fbd852f7ab1370d0218dfe91 (diff)
downloadbinaryen-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.cpp9
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) {