diff options
author | Alon Zakai <alonzakai@gmail.com> | 2017-07-17 10:23:42 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2017-07-17 10:23:42 -0700 |
commit | d1b598c542d174bd9a55d0edcdfaf27948a140dd (patch) | |
tree | 811c11bed57c8f9ba2d36bb1d34dbb85300cbbac | |
parent | a2e170294c03d5fe0d91e2797d96acdb95b1d37c (diff) | |
download | binaryen-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.cpp | 6 |
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; } } |