summaryrefslogtreecommitdiff
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
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
-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;
}
}