diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-01-08 15:11:34 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-01-08 15:11:34 -0800 |
commit | 02910f3defc1be94ee1d4af6d43ec05b1c37d18d (patch) | |
tree | 9b128fe5a1aa8334561018ede7d1694f00f23b58 /src | |
parent | 382ea607d99c73a6e893f4f92b0b63bde698e487 (diff) | |
download | binaryen-02910f3defc1be94ee1d4af6d43ec05b1c37d18d.tar.gz binaryen-02910f3defc1be94ee1d4af6d43ec05b1c37d18d.tar.bz2 binaryen-02910f3defc1be94ee1d4af6d43ec05b1c37d18d.zip |
RemoveUnneededBrs: remove all code in a block after a break
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/RemoveUnusedBrs.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/passes/RemoveUnusedBrs.cpp b/src/passes/RemoveUnusedBrs.cpp index a89c69312..395b0f1ba 100644 --- a/src/passes/RemoveUnusedBrs.cpp +++ b/src/passes/RemoveUnusedBrs.cpp @@ -66,6 +66,13 @@ struct RemoveUnusedBrs : public Pass { void visitBlock(Block *curr) override { if (curr->name.isNull()) return; if (curr->list.size() == 0) return; + // preparation - remove all code after a break, since it can't execute, and it might confuse us (we look at the last) + for (size_t i = 0; i < curr->list.size()-1; i++) { + if (curr->list[i]->is<Break>()) { + curr->list.resize(i+1); + break; + } + } Expression* last = curr->list.back(); if (Break* br = last->dyn_cast<Break>()) { if (br->condition) return; |