summaryrefslogtreecommitdiff
path: root/src/passes/CoalesceLocals.cpp
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-10-09 11:23:19 -0700
committerGitHub <noreply@github.com>2016-10-09 11:23:19 -0700
commit2a8fea01444dac7d95eea64c2d49b86bb58713d3 (patch)
tree6f9bd56905f2c33e2bb4bcd0b7a6fffaa94a7696 /src/passes/CoalesceLocals.cpp
parent1b32ff705c52443fc855cdfce446dcff6bf7b85c (diff)
parent9cfbe71f45a1234737178eee514b003387ff35de (diff)
downloadbinaryen-2a8fea01444dac7d95eea64c2d49b86bb58713d3.tar.gz
binaryen-2a8fea01444dac7d95eea64c2d49b86bb58713d3.tar.bz2
binaryen-2a8fea01444dac7d95eea64c2d49b86bb58713d3.zip
Merge pull request #753 from WebAssembly/cfg-opts
Minor cfg-traversal opts
Diffstat (limited to 'src/passes/CoalesceLocals.cpp')
-rw-r--r--src/passes/CoalesceLocals.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/passes/CoalesceLocals.cpp b/src/passes/CoalesceLocals.cpp
index ba2c6dd81..2ff1dde37 100644
--- a/src/passes/CoalesceLocals.cpp
+++ b/src/passes/CoalesceLocals.cpp
@@ -169,13 +169,22 @@ struct CoalesceLocals : public WalkerPass<CFGWalker<CoalesceLocals, Visitor<Coal
static void doVisitGetLocal(CoalesceLocals* self, Expression** currp) {
auto* curr = (*currp)->cast<GetLocal>();
+ // if in unreachable code, ignore
+ if (!self->currBasicBlock) {
+ ExpressionManipulator::convert<GetLocal, Unreachable>(curr);
+ return;
+ }
self->currBasicBlock->contents.actions.emplace_back(Action::Get, curr->index, currp);
}
static void doVisitSetLocal(CoalesceLocals* self, Expression** currp) {
auto* curr = (*currp)->cast<SetLocal>();
+ // if in unreachable code, ignore
+ if (!self->currBasicBlock) {
+ ExpressionManipulator::nop(curr);
+ return;
+ }
self->currBasicBlock->contents.actions.emplace_back(Action::Set, curr->index, currp);
-
// if this is a copy, note it
auto* get = curr->value->dynCast<GetLocal>();
if (get) self->addCopy(curr->index, get->index);