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 /src | |
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
Diffstat (limited to 'src')
-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; } } |