summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/asm2wasm.h1
-rw-r--r--src/binaryen-shell.cpp1
-rw-r--r--src/passes/SimplifyLocals.cpp1
3 files changed, 3 insertions, 0 deletions
diff --git a/src/asm2wasm.h b/src/asm2wasm.h
index 0320b7924..db7cc1ae0 100644
--- a/src/asm2wasm.h
+++ b/src/asm2wasm.h
@@ -1574,6 +1574,7 @@ void Asm2WasmBuilder::optimize() {
passRunner.add("remove-unused-brs");
passRunner.add("remove-unused-names");
passRunner.add("merge-blocks");
+ passRunner.add("simplify-locals");
passRunner.run(&wasm);
}
diff --git a/src/binaryen-shell.cpp b/src/binaryen-shell.cpp
index 95cf3abef..55beb6aa8 100644
--- a/src/binaryen-shell.cpp
+++ b/src/binaryen-shell.cpp
@@ -210,6 +210,7 @@ int main(int argc, char **argv) {
passes.push_back("remove-unused-brs");
passes.push_back("remove-unused-names");
passes.push_back("merge-blocks");
+ passes.push_back("simplify-locals");
} else {
// otherwise, assumed to be a pass
const char* name = curr + 1;
diff --git a/src/passes/SimplifyLocals.cpp b/src/passes/SimplifyLocals.cpp
index 232c5e2a9..b1adf5c26 100644
--- a/src/passes/SimplifyLocals.cpp
+++ b/src/passes/SimplifyLocals.cpp
@@ -26,6 +26,7 @@ namespace wasm {
struct SimplifyLocals : public Pass {
void visitBlock(Block *curr) override {
// look for pairs of setlocal-getlocal, which can be just a setlocal (since it returns a value)
+ if (curr->list.size() == 0) return;
for (size_t i = 0; i < curr->list.size() - 1; i++) {
auto set = curr->list[i]->dyn_cast<SetLocal>();
if (!set) continue;