From b211e9d70456b995996aa9c0d656650177590927 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Sat, 8 Oct 2016 12:09:53 -0700 Subject: track unreachable code in coalesce-locals, we know what is unreachable anyhow, and it just adds overhead to not ignore it --- src/passes/CoalesceLocals.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/passes/CoalesceLocals.cpp') 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 WalkerPasscast(); + // if in unreachable code, ignore + if (!self->currBasicBlock) { + ExpressionManipulator::convert(curr); + return; + } self->currBasicBlock->contents.actions.emplace_back(Action::Get, curr->index, currp); } static void doVisitSetLocal(CoalesceLocals* self, Expression** currp) { auto* curr = (*currp)->cast(); + // 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(); if (get) self->addCopy(curr->index, get->index); -- cgit v1.2.3