summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-01-09 10:07:43 -0800
committerAlon Zakai <alonzakai@gmail.com>2016-01-09 10:15:11 -0800
commitc32dc275c594f83e652d419a1452b65a3b628779 (patch)
treed156c58c3f3c21611bdb1ac2c2c7573c4d360610
parentc6cefdac99c511bdd05b68f8e2b53a0edb7ff815 (diff)
downloadbinaryen-c32dc275c594f83e652d419a1452b65a3b628779.tar.gz
binaryen-c32dc275c594f83e652d419a1452b65a3b628779.tar.bz2
binaryen-c32dc275c594f83e652d419a1452b65a3b628779.zip
use simplify-locals by default
-rwxr-xr-xbuild.sh3
-rw-r--r--src/asm2wasm.h1
-rw-r--r--src/binaryen-shell.cpp1
-rw-r--r--src/passes/SimplifyLocals.cpp1
-rw-r--r--test/emcc_O2_hello_world.fromasm1
-rw-r--r--test/emcc_hello_world.fromasm5
-rw-r--r--test/passes/O.txt1
-rw-r--r--test/two_sides.fromasm2
-rw-r--r--test/unit.fromasm1
9 files changed, 4 insertions, 12 deletions
diff --git a/build.sh b/build.sh
index 71c111c93..894875cd0 100755
--- a/build.sh
+++ b/build.sh
@@ -11,7 +11,6 @@ make -j
#echo "building s2wasm"
#g++ -O2 -std=c++11 src/s2wasm-main.cpp src/support/command-line.cpp src/support/file.cpp src/support/colors.cpp -Isrc/ -o bin/s2wasm
echo "building interpreter/js"
-em++ -std=c++11 src/wasm-js.cpp src/pass.cpp src/passes/MergeBlocks.cpp src/passes/RemoveUnusedBrs.cpp src/passes/RemoveUnusedNames.cpp src/passes/SimplifyLocals.cpp
- src/emscripten-optimizer/parser.cpp src/emscripten-optimizer/simple_ast.cpp src/emscripten-optimizer/optimizer-shared.cpp src/support/colors.cpp -Isrc/ -o bin/wasm.js -s MODULARIZE=1 -s 'EXPORT_NAME="WasmJS"' --memory-init-file 0 -Oz -s ALLOW_MEMORY_GROWTH=1 -profiling -s DEMANGLE_SUPPORT=1 #-DWASM_JS_DEBUG -DWASM_INTERPRETER_DEBUG=2
+em++ -std=c++11 src/wasm-js.cpp src/pass.cpp src/passes/MergeBlocks.cpp src/passes/RemoveUnusedBrs.cpp src/passes/RemoveUnusedNames.cpp src/passes/SimplifyLocals.cpp src/emscripten-optimizer/parser.cpp src/emscripten-optimizer/simple_ast.cpp src/emscripten-optimizer/optimizer-shared.cpp src/support/colors.cpp -Isrc/ -o bin/wasm.js -s MODULARIZE=1 -s 'EXPORT_NAME="WasmJS"' --memory-init-file 0 -Oz -s ALLOW_MEMORY_GROWTH=1 -profiling -s DEMANGLE_SUPPORT=1 #-DWASM_JS_DEBUG -DWASM_INTERPRETER_DEBUG=2
cat src/js/wasm.js-post.js >> bin/wasm.js
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;
diff --git a/test/emcc_O2_hello_world.fromasm b/test/emcc_O2_hello_world.fromasm
index e056b0c05..ac4c031cc 100644
--- a/test/emcc_O2_hello_world.fromasm
+++ b/test/emcc_O2_hello_world.fromasm
@@ -7047,7 +7047,6 @@
(set_local $i13
(i32.const 0)
)
- (get_local $i13)
)
)
(func $_free (param $i1 i32)
diff --git a/test/emcc_hello_world.fromasm b/test/emcc_hello_world.fromasm
index 1ced56e05..3b0331011 100644
--- a/test/emcc_hello_world.fromasm
+++ b/test/emcc_hello_world.fromasm
@@ -553,7 +553,6 @@
(get_local $$e)
)
)
- (get_local $$call)
)
(func $_strerror (param $$e i32) (result i32)
(local $$0 i32)
@@ -4400,7 +4399,6 @@
(i32.const 0)
)
)
- (get_local $$cond)
)
(func $___syscall_ret (param $$r i32) (result i32)
(local $$call i32)
@@ -27059,7 +27057,6 @@
(set_local $$retval$0
(i32.const 0)
)
- (get_local $$retval$0)
)
)
(func $_free (param $$mem i32)
@@ -31321,7 +31318,6 @@
(get_local $$7$1)
)
)
- (get_local $$10$0)
)
(func $___remdi3 (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32)
(local $$rem i32)
@@ -31587,7 +31583,6 @@
(i32.const 0)
)
)
- (get_local $$1$0)
)
(func $___uremdi3 (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32)
(local $$rem i32)
diff --git a/test/passes/O.txt b/test/passes/O.txt
index e2555d435..dec081fd4 100644
--- a/test/passes/O.txt
+++ b/test/passes/O.txt
@@ -6792,7 +6792,6 @@
(set_local $i37
(i32.const 0)
)
- (get_local $i37)
)
)
(func $_printf_core (param $i50 i32) (param $i3 i32) (param $i51 i32) (param $i52 i32) (param $i53 i32) (result i32)
diff --git a/test/two_sides.fromasm b/test/two_sides.fromasm
index aff27f665..a9b154e61 100644
--- a/test/two_sides.fromasm
+++ b/test/two_sides.fromasm
@@ -39,7 +39,6 @@
(get_local $d6)
)
)
- (get_local $i5)
)
(block
(set_local $d6
@@ -71,7 +70,6 @@
(get_local $d6)
)
)
- (get_local $i5)
)
)
)
diff --git a/test/unit.fromasm b/test/unit.fromasm
index 0eb3bcce4..98978436c 100644
--- a/test/unit.fromasm
+++ b/test/unit.fromasm
@@ -263,7 +263,6 @@
(i32.const -1)
)
)
- (get_local $x)
)
(func $fr (param $x f32)
(local $y f32)