From 7ca9e24aa22bc57a4d37d3018cd02cf39cd9957a Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Tue, 20 Nov 2018 09:25:16 -0800 Subject: Switch optimizations in remove-unused-brs (#1753) * Switch optimizations in remove-unused-brs: thread switch jumps, and turn a switch with all identical targets into a br * refinalize in interm operations in remove-unused-brs, as we can be confused by it --- src/passes/SimplifyLocals.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/passes/SimplifyLocals.cpp') diff --git a/src/passes/SimplifyLocals.cpp b/src/passes/SimplifyLocals.cpp index aadf766ac..bf4eed24e 100644 --- a/src/passes/SimplifyLocals.cpp +++ b/src/passes/SimplifyLocals.cpp @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include "ir/equivalent_sets.h" @@ -128,10 +129,10 @@ struct SimplifyLocals : public WalkerPasscast()->ifFalse); // if-elses are handled by doNoteIfElse* methods } else if (curr->is()) { auto* sw = curr->cast(); - for (auto target : sw->targets) { + auto targets = BranchUtils::getUniqueTargets(sw); + for (auto target : targets) { self->unoptimizableBlocks.insert(target); } - self->unoptimizableBlocks.insert(sw->default_); // TODO: we could use this info to stop gathering data on these blocks } self->sinkables.clear(); -- cgit v1.2.3