diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/CoalesceLocals.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/passes/CoalesceLocals.cpp b/src/passes/CoalesceLocals.cpp index fb81a5981..b36542a97 100644 --- a/src/passes/CoalesceLocals.cpp +++ b/src/passes/CoalesceLocals.cpp @@ -168,9 +168,13 @@ struct CoalesceLocals : public WalkerPass<CFGWalker<CoalesceLocals, Visitor<Coal static void doVisitSetLocal(CoalesceLocals* self, Expression** currp) { auto* curr = (*currp)->cast<SetLocal>(); - // if in unreachable code, ignore + // if in unreachable code, we don't need the tee (but might need the value, if it has side effects) if (!self->currBasicBlock) { - *currp = Builder(*self->getModule()).replaceWithIdenticalType(curr); + if (curr->isTee()) { + *currp = curr->value; + } else { + *currp = Builder(*self->getModule()).makeDrop(curr->value); + } return; } self->currBasicBlock->contents.actions.emplace_back(Action::Set, curr->index, currp); |