diff options
author | Alon Zakai <alonzakai@gmail.com> | 2018-11-20 09:25:16 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-20 09:25:16 -0800 |
commit | 7ca9e24aa22bc57a4d37d3018cd02cf39cd9957a (patch) | |
tree | 4290dc66afe4c20697186216d9911397bfa2e872 /src/passes/SimplifyLocals.cpp | |
parent | 801ff52bd0e7696ff105efd2a46932fa5f076708 (diff) | |
download | binaryen-7ca9e24aa22bc57a4d37d3018cd02cf39cd9957a.tar.gz binaryen-7ca9e24aa22bc57a4d37d3018cd02cf39cd9957a.tar.bz2 binaryen-7ca9e24aa22bc57a4d37d3018cd02cf39cd9957a.zip |
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
Diffstat (limited to 'src/passes/SimplifyLocals.cpp')
-rw-r--r-- | src/passes/SimplifyLocals.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
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 <wasm-builder.h> #include <wasm-traversal.h> #include <pass.h> +#include <ir/branch-utils.h> #include <ir/count.h> #include <ir/effects.h> #include "ir/equivalent_sets.h" @@ -128,10 +129,10 @@ struct SimplifyLocals : public WalkerPass<LinearExecutionWalker<SimplifyLocals<a assert(!curr->cast<If>()->ifFalse); // if-elses are handled by doNoteIfElse* methods } else if (curr->is<Switch>()) { auto* sw = curr->cast<Switch>(); - 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(); |