diff options
author | Alon Zakai <azakai@google.com> | 2019-05-28 10:58:14 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-28 10:58:14 -0700 |
commit | 4b223a33d9f44b99a783cb63329facea7edfb783 (patch) | |
tree | 05530ae1e9dc98acf18133c05ddfad1ba5826a1c /test/wasm2js/labels.2asm.js | |
parent | 899263882c48dba8e34717af1e28005f8888dca7 (diff) | |
download | binaryen-4b223a33d9f44b99a783cb63329facea7edfb783.tar.gz binaryen-4b223a33d9f44b99a783cb63329facea7edfb783.tar.bz2 binaryen-4b223a33d9f44b99a783cb63329facea7edfb783.zip |
wasm2js: Switch optimizations (#2141)
This pattern-matches towers of blocks + a br_table into a JS switch. This is much smaller in code size and also avoids heavy nesting that can exceed the recursion limits of JS parsers.
This is not enough yet, because it pattern-matches very specifically. In reality, switches can look slightly different. Followup PRs will extend this. For now, this passes the test suite (what passed before - not including the massive-switch tests) + fuzzing so it's a good start.
Diffstat (limited to 'test/wasm2js/labels.2asm.js')
-rw-r--r-- | test/wasm2js/labels.2asm.js | 89 |
1 files changed, 37 insertions, 52 deletions
diff --git a/test/wasm2js/labels.2asm.js b/test/wasm2js/labels.2asm.js index c4a93491c..fa0bd0a22 100644 --- a/test/wasm2js/labels.2asm.js +++ b/test/wasm2js/labels.2asm.js @@ -167,54 +167,39 @@ function asmFunc(global, env, buffer) { function $8($0_1) { $0_1 = $0_1 | 0; - var $2_2 = 0, $3_2 = 0; + var $2_1 = 0, $3_1 = 0; ret : { exit : { $0_2 : { - default_ : { - $3_1 : { - $2_1 : { - $1_1 : { - switch ($0_1 | 0) { - case 0: - break $0_2; - case 1: - break $1_1; - case 2: - break $2_1; - case 3: - break $3_1; - default: - break default_; - }; - } - } - $2_2 = 2; - break exit; - } - $3_2 = 3; + switch ($0_1 | 0) { + case 1: + case 2: + $2_1 = 2; + break exit; + case 3: + $3_1 = 3; break ret; - } + default: + case 0: + break $0_2; + }; } - $2_2 = 5; + $2_1 = 5; } - $3_2 = Math_imul(10, $2_2); + $3_1 = Math_imul(10, $2_1); } - return $3_2 | 0; + return $3_1 | 0; } function $9($0_1) { $0_1 = $0_1 | 0; $1_1 : { - $0_2 : { - switch ($0_1 | 0) { - case 0: - break $0_2; - default: - break $1_1; - }; - } - return 0 | 0; + switch ($0_1 | 0) { + case 0: + return 0 | 0; + default: + break $1_1; + }; } return 2 | 0; } @@ -251,41 +236,41 @@ function asmFunc(global, env, buffer) { } function $11() { - var $2_2 = 0, $0_1 = 0; + var $2_1 = 0, $0_1 = 0; l0 : { l1 : { $0_1 = 1; break l1; } - $2_2 = $0_1; + $2_1 = $0_1; if (1) { break l0 } - $2_2 = 1; + $2_1 = 1; } - return $2_2 | 0; + return $2_1 | 0; } function $12() { - var $2_2 = 0, $0_1 = 0; + var $2_1 = 0, $0_1 = 0; l0 : { l1 : { $0_1 = 1; break l1; } - $2_2 = $0_1; + $2_1 = $0_1; break l0; } - return $2_2 | 0; + return $2_1 | 0; } function $13() { - var i1 = 0, $7_1 = 0, $3_2 = 0; + var i1 = 0, $7_1 = 0, $3_1 = 0; l0 : { i1 = 1; - $3_2 = i1; + $3_1 = i1; i1 = 2; - $7_1 = $3_2; + $7_1 = $3_1; if (i1) { break l0 } @@ -295,16 +280,16 @@ function asmFunc(global, env, buffer) { } function $14() { - var $2_2 = 0, $0_1 = 0, $3_2 = 0; + var $2_1 = 0, $0_1 = 0, $3_1 = 0; l0 : { l1 : { $0_1 = 1; break l1; } - $2_2 = $0_1; + $2_1 = $0_1; break l0; } - return $2_2 | 0; + return $2_1 | 0; } function $15() { @@ -317,15 +302,15 @@ function asmFunc(global, env, buffer) { } function $16() { - var $1_2 = 0, $2_2 = 0; + var $1_2 = 0, $2_1 = 0; l1 : { $1_2 = 2; l113 : { - $2_2 = 3; + $2_1 = 3; break l113; } } - return $1_2 + $2_2 | 0 | 0; + return $1_2 + $2_1 | 0 | 0; } var FUNCTION_TABLE = []; |