summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2017-07-17 10:23:42 -0700
committerAlon Zakai <alonzakai@gmail.com>2017-07-17 10:23:42 -0700
commitd1b598c542d174bd9a55d0edcdfaf27948a140dd (patch)
tree811c11bed57c8f9ba2d36bb1d34dbb85300cbbac /src
parenta2e170294c03d5fe0d91e2797d96acdb95b1d37c (diff)
downloadbinaryen-d1b598c542d174bd9a55d0edcdfaf27948a140dd.tar.gz
binaryen-d1b598c542d174bd9a55d0edcdfaf27948a140dd.tar.bz2
binaryen-d1b598c542d174bd9a55d0edcdfaf27948a140dd.zip
add missing finalizations in removeUnusedBrs, when we change an if side and its outer block, we need to finalize the if first and then the block containing it
Diffstat (limited to 'src')
-rw-r--r--src/passes/RemoveUnusedBrs.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/passes/RemoveUnusedBrs.cpp b/src/passes/RemoveUnusedBrs.cpp
index 3ab0371ed..9fed3e4a5 100644
--- a/src/passes/RemoveUnusedBrs.cpp
+++ b/src/passes/RemoveUnusedBrs.cpp
@@ -226,6 +226,8 @@ struct RemoveUnusedBrs : public WalkerPass<PostWalker<RemoveUnusedBrs>> {
// we need the ifTrue to break, so it cannot reach the code we want to move
if (ExpressionAnalyzer::obviouslyDoesNotFlowOut(iff->ifTrue)) {
iff->ifFalse = builder.stealSlice(block, i + 1, list.size());
+ iff->finalize();
+ block->finalize();
return true;
}
} else {
@@ -262,9 +264,13 @@ struct RemoveUnusedBrs : public WalkerPass<PostWalker<RemoveUnusedBrs>> {
if (ExpressionAnalyzer::obviouslyDoesNotFlowOut(iff->ifTrue)) {
iff->ifFalse = blockifyMerge(iff->ifFalse, builder.stealSlice(block, i + 1, list.size()));
+ iff->finalize();
+ block->finalize();
return true;
} else if (ExpressionAnalyzer::obviouslyDoesNotFlowOut(iff->ifFalse)) {
iff->ifTrue = blockifyMerge(iff->ifTrue, builder.stealSlice(block, i + 1, list.size()));
+ iff->finalize();
+ block->finalize();
return true;
}
}