From cc193a49fa612142fdea016ed8fe8a527be7c835 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Sat, 5 Aug 2017 11:53:48 -0700 Subject: don't turn untaken br_ifs into ifs in remove-unused-brs --- src/passes/RemoveUnusedBrs.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/passes/RemoveUnusedBrs.cpp b/src/passes/RemoveUnusedBrs.cpp index 9fed3e4a5..8994c7fe2 100644 --- a/src/passes/RemoveUnusedBrs.cpp +++ b/src/passes/RemoveUnusedBrs.cpp @@ -481,7 +481,9 @@ struct RemoveUnusedBrs : public WalkerPass> { // format. We need to flip the condition, which at worst adds 1. if (curr->name.is()) { auto* br = list[0]->dynCast(); - if (br && br->condition && br->name == curr->name) { + // we seek a regular br_if; if the type is unreachable that means it is not + // actually taken, so ignore + if (br && br->condition && br->name == curr->name && br->type != unreachable) { assert(!br->value); // can't, it would be dropped or last in the block if (BranchUtils::BranchSeeker::countNamed(curr, curr->name) == 1) { // no other breaks to that name, so we can do this -- cgit v1.2.3