summaryrefslogtreecommitdiff
path: root/test/wasm2js/labels.2asm.js
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2019-05-28 10:58:14 -0700
committerGitHub <noreply@github.com>2019-05-28 10:58:14 -0700
commit4b223a33d9f44b99a783cb63329facea7edfb783 (patch)
tree05530ae1e9dc98acf18133c05ddfad1ba5826a1c /test/wasm2js/labels.2asm.js
parent899263882c48dba8e34717af1e28005f8888dca7 (diff)
downloadbinaryen-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.js89
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 = [];