diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/asm2wasm.h | 1 | ||||
-rw-r--r-- | src/binaryen-shell.cpp | 1 | ||||
-rw-r--r-- | src/passes/SimplifyLocals.cpp | 1 |
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; |