aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-02-02 15:29:48 -0800
committerAlon Zakai <alonzakai@gmail.com>2013-02-02 15:29:48 -0800
commitdb152b921d818b1e2f1ad2c4a17dc936a2e92c6b (patch)
treedbde3df8f953fdc91dd086453a7a4a888efd63bd
parent73313a7ef6ab384a3130e50f4904b8ae232cf4a5 (diff)
eliminate into labels
-rw-r--r--tools/eliminator/asm-eliminator-test-output.js8
-rw-r--r--tools/eliminator/asm-eliminator-test.js13
-rw-r--r--tools/eliminator/eliminator-test-output.js78
-rw-r--r--tools/js-optimizer.js2
4 files changed, 47 insertions, 54 deletions
diff --git a/tools/eliminator/asm-eliminator-test-output.js b/tools/eliminator/asm-eliminator-test-output.js
index 3170bd9c..4cf15c62 100644
--- a/tools/eliminator/asm-eliminator-test-output.js
+++ b/tools/eliminator/asm-eliminator-test-output.js
@@ -100,4 +100,12 @@ function exc($this) {
___cxa_call_unexpected($8$0);
}
}
+function label() {
+ if (f()) {
+ g();
+ }
+ L100 : if (h()) {
+ i();
+ }
+}
diff --git a/tools/eliminator/asm-eliminator-test.js b/tools/eliminator/asm-eliminator-test.js
index ce34a7a6..d2c0507c 100644
--- a/tools/eliminator/asm-eliminator-test.js
+++ b/tools/eliminator/asm-eliminator-test.js
@@ -130,5 +130,16 @@ function exc($this) {
___cxa_call_unexpected($9);
}
}
-// EMSCRIPTEN_GENERATED_FUNCTIONS: ["asm", "__Z11printResultPiS_j", "_segment_holding", "__ZN5identC2EiPKcPci", "_vec2Length", "exc"]
+function label() {
+ var $1 = 0, $2 = 0;
+ $1 = f();
+ if ($1) {
+ g();
+ }
+ $2 = h();
+ L100: if ($2) {
+ i();
+ }
+}
+// EMSCRIPTEN_GENERATED_FUNCTIONS: ["asm", "__Z11printResultPiS_j", "_segment_holding", "__ZN5identC2EiPKcPci", "_vec2Length", "exc", "label"]
diff --git a/tools/eliminator/eliminator-test-output.js b/tools/eliminator/eliminator-test-output.js
index a005a0a5..32b7ddcf 100644
--- a/tools/eliminator/eliminator-test-output.js
+++ b/tools/eliminator/eliminator-test-output.js
@@ -242,9 +242,8 @@ function _inflate($strm, $flush) {
STACKTOP += 4;
var __label__;
var $hbuf = __stackBase__;
- var $cmp = ($strm | 0) == 0;
$_$2 : do {
- if ($cmp) {
+ if (($strm | 0) == 0) {
var $retval_0 = -2;
} else {
var $0 = HEAPU32[($strm + 28 | 0) >> 2];
@@ -1129,9 +1128,8 @@ function _inflate($strm, $flush) {
var $hold_23 = $hold_24 >>> 3;
var $bits_23 = $bits_24 - 3 | 0;
}
- var $cmp850111 = $122 >>> 0 < 19;
$_$131 : do {
- if ($cmp850111) {
+ if ($122 >>> 0 < 19) {
var $126 = $122;
while (1) {
var $126;
@@ -2880,9 +2878,8 @@ function _inflate($strm, $flush) {
}
function _malloc($bytes) {
var __label__;
- var $1 = $bytes >>> 0 < 245;
$_$2 : do {
- if ($1) {
+ if ($bytes >>> 0 < 245) {
if ($bytes >>> 0 < 11) {
var $8 = 16;
} else {
@@ -3102,9 +3099,8 @@ function _malloc($bytes) {
}
} while (0);
var $R_1_i;
- var $232 = ($198 | 0) == 0;
$_$62 : do {
- if (!$232) {
+ if (!(($198 | 0) == 0)) {
var $234 = $v_0_i + 28 | 0;
var $236 = __gm_ + 304 + (HEAP32[$234 >> 2] << 2) | 0;
do {
@@ -3245,9 +3241,8 @@ function _malloc($bytes) {
} while (0);
var $idx_0_i;
var $376 = HEAPU32[(__gm_ + 304 + ($idx_0_i << 2) | 0) >> 2];
- var $377 = ($376 | 0) == 0;
$_$110 : do {
- if ($377) {
+ if (($376 | 0) == 0) {
var $v_2_i = 0;
var $rsize_2_i = $346;
var $t_1_i = 0;
@@ -3329,9 +3324,8 @@ function _malloc($bytes) {
var $t_2_ph_i = $t_1_i;
}
var $t_2_ph_i;
- var $438 = ($t_2_ph_i | 0) == 0;
$_$125 : do {
- if ($438) {
+ if (($t_2_ph_i | 0) == 0) {
var $rsize_3_lcssa_i = $rsize_2_i;
var $v_3_lcssa_i = $v_2_i;
} else {
@@ -3442,9 +3436,8 @@ function _malloc($bytes) {
}
} while (0);
var $R_1_i19;
- var $499 = ($465 | 0) == 0;
$_$151 : do {
- if (!$499) {
+ if (!(($465 | 0) == 0)) {
var $501 = $v_3_lcssa_i + 28 | 0;
var $503 = __gm_ + 304 + (HEAP32[$501 >> 2] << 2) | 0;
do {
@@ -3496,9 +3489,8 @@ function _malloc($bytes) {
}
}
} while (0);
- var $557 = $rsize_3_lcssa_i >>> 0 < 16;
$_$179 : do {
- if ($557) {
+ if ($rsize_3_lcssa_i >>> 0 < 16) {
var $559 = $rsize_3_lcssa_i + $342 | 0;
HEAP32[($v_3_lcssa_i + 4 | 0) >> 2] = $559 | 3;
var $563 = $456 + ($559 + 4 | 0) | 0;
@@ -3669,13 +3661,11 @@ function _malloc($bytes) {
}
}
} while (0);
- var $765 = (HEAP32[(__gm_ + 440 | 0) >> 2] & 4 | 0) == 0;
$_$234 : do {
- if ($765) {
+ if ((HEAP32[(__gm_ + 440 | 0) >> 2] & 4 | 0) == 0) {
var $767 = HEAP32[(__gm_ + 24 | 0) >> 2];
- var $768 = ($767 | 0) == 0;
$_$236 : do {
- if (!$768) {
+ if (!(($767 | 0) == 0)) {
var $770 = $767;
var $sp_0_i_i = __gm_ + 444 | 0;
while (1) {
@@ -3846,9 +3836,8 @@ function _malloc($bytes) {
HEAP32[(__gm_ + 436 | 0) >> 2] = $871;
}
var $876 = HEAPU32[(__gm_ + 24 | 0) >> 2];
- var $877 = ($876 | 0) == 0;
$_$275 : do {
- if ($877) {
+ if (($876 | 0) == 0) {
var $879 = HEAPU32[(__gm_ + 16 | 0) >> 2];
if (($879 | 0) == 0 | $tbase_243_i >>> 0 < $879 >>> 0) {
HEAP32[(__gm_ + 16 | 0) >> 2] = $tbase_243_i;
@@ -3970,9 +3959,8 @@ function _malloc($bytes) {
var $998 = $997;
var $999 = ($992 - ($tbase_243_i + $981 | 0) | 0) - $nb_0 | 0;
HEAP32[($tbase_243_i + ($981 + 4 | 0) | 0) >> 2] = $nb_0 | 3;
- var $1004 = ($993 | 0) == (HEAP32[(__gm_ + 24 | 0) >> 2] | 0);
$_$314 : do {
- if ($1004) {
+ if (($993 | 0) == (HEAP32[(__gm_ + 24 | 0) >> 2] | 0)) {
var $1007 = HEAP32[(__gm_ + 12 | 0) >> 2] + $999 | 0;
HEAP32[(__gm_ + 12 | 0) >> 2] = $1007;
HEAP32[(__gm_ + 24 | 0) >> 2] = $998;
@@ -3990,9 +3978,8 @@ function _malloc($bytes) {
if (($1025 & 3 | 0) == 1) {
var $1029 = $1025 & -8;
var $1030 = $1025 >>> 3;
- var $1031 = $1025 >>> 0 < 256;
$_$322 : do {
- if ($1031) {
+ if ($1025 >>> 0 < 256) {
var $1035 = HEAPU32[($tbase_243_i + (($991 | 8) + $tsize_242_i | 0) | 0) >> 2];
var $1038 = HEAPU32[($tbase_243_i + (($tsize_242_i + 12 | 0) + $991 | 0) | 0) >> 2];
if (($1035 | 0) == ($1038 | 0)) {
@@ -4327,9 +4314,8 @@ function _malloc($bytes) {
HEAP32[(__gm_ + 452 | 0) >> 2] = $1337;
var $1360 = $1336 + 28 | 0;
HEAP32[$1360 >> 2] = 7;
- var $1362 = ($1336 + 32 | 0) >>> 0 < $1322 >>> 0;
$_$426 : do {
- if ($1362) {
+ if (($1336 + 32 | 0) >>> 0 < $1322 >>> 0) {
var $1363 = $1360;
while (1) {
var $1363;
@@ -4507,9 +4493,8 @@ function _malloc($bytes) {
}
function _mallocNoU($bytes) {
var __label__;
- var $1 = $bytes >>> 0 < 245;
$_$2 : do {
- if ($1) {
+ if ($bytes >>> 0 < 245) {
if ($bytes >>> 0 < 11) {
var $8 = 16;
} else {
@@ -4729,9 +4714,8 @@ function _mallocNoU($bytes) {
}
} while (0);
var $R_1_i;
- var $232 = ($198 | 0) == 0;
$_$62 : do {
- if (!$232) {
+ if (!(($198 | 0) == 0)) {
var $234 = $v_0_i + 28 | 0;
var $236 = __gm_ + 304 + (HEAP32[$234 >> 2] << 2) | 0;
do {
@@ -4872,9 +4856,8 @@ function _mallocNoU($bytes) {
} while (0);
var $idx_0_i;
var $376 = HEAP32[(__gm_ + 304 + ($idx_0_i << 2) | 0) >> 2];
- var $377 = ($376 | 0) == 0;
$_$110 : do {
- if ($377) {
+ if (($376 | 0) == 0) {
var $v_2_i = 0;
var $rsize_2_i = $346;
var $t_1_i = 0;
@@ -4956,9 +4939,8 @@ function _mallocNoU($bytes) {
var $t_2_ph_i = $t_1_i;
}
var $t_2_ph_i;
- var $438 = ($t_2_ph_i | 0) == 0;
$_$125 : do {
- if ($438) {
+ if (($t_2_ph_i | 0) == 0) {
var $rsize_3_lcssa_i = $rsize_2_i;
var $v_3_lcssa_i = $v_2_i;
} else {
@@ -5069,9 +5051,8 @@ function _mallocNoU($bytes) {
}
} while (0);
var $R_1_i19;
- var $499 = ($465 | 0) == 0;
$_$151 : do {
- if (!$499) {
+ if (!(($465 | 0) == 0)) {
var $501 = $v_3_lcssa_i + 28 | 0;
var $503 = __gm_ + 304 + (HEAP32[$501 >> 2] << 2) | 0;
do {
@@ -5123,9 +5104,8 @@ function _mallocNoU($bytes) {
}
}
} while (0);
- var $557 = $rsize_3_lcssa_i >>> 0 < 16;
$_$179 : do {
- if ($557) {
+ if ($rsize_3_lcssa_i >>> 0 < 16) {
var $559 = $rsize_3_lcssa_i + $342 | 0;
HEAP32[($v_3_lcssa_i + 4 | 0) >> 2] = $559 | 3;
var $563 = $456 + ($559 + 4 | 0) | 0;
@@ -5296,13 +5276,11 @@ function _mallocNoU($bytes) {
}
}
} while (0);
- var $765 = (HEAP32[(__gm_ + 440 | 0) >> 2] & 4 | 0) == 0;
$_$234 : do {
- if ($765) {
+ if ((HEAP32[(__gm_ + 440 | 0) >> 2] & 4 | 0) == 0) {
var $767 = HEAP32[(__gm_ + 24 | 0) >> 2];
- var $768 = ($767 | 0) == 0;
$_$236 : do {
- if (!$768) {
+ if (!(($767 | 0) == 0)) {
var $770 = $767;
var $sp_0_i_i = __gm_ + 444 | 0;
while (1) {
@@ -5473,9 +5451,8 @@ function _mallocNoU($bytes) {
HEAP32[(__gm_ + 436 | 0) >> 2] = $871;
}
var $876 = HEAP32[(__gm_ + 24 | 0) >> 2];
- var $877 = ($876 | 0) == 0;
$_$275 : do {
- if ($877) {
+ if (($876 | 0) == 0) {
var $879 = HEAP32[(__gm_ + 16 | 0) >> 2];
if (($879 | 0) == 0 | $tbase_243_i >>> 0 < $879 >>> 0) {
HEAP32[(__gm_ + 16 | 0) >> 2] = $tbase_243_i;
@@ -5597,9 +5574,8 @@ function _mallocNoU($bytes) {
var $998 = $997;
var $999 = ($992 - ($tbase_243_i + $981 | 0) | 0) - $nb_0 | 0;
HEAP32[($tbase_243_i + ($981 + 4 | 0) | 0) >> 2] = $nb_0 | 3;
- var $1004 = ($993 | 0) == (HEAP32[(__gm_ + 24 | 0) >> 2] | 0);
$_$314 : do {
- if ($1004) {
+ if (($993 | 0) == (HEAP32[(__gm_ + 24 | 0) >> 2] | 0)) {
var $1007 = HEAP32[(__gm_ + 12 | 0) >> 2] + $999 | 0;
HEAP32[(__gm_ + 12 | 0) >> 2] = $1007;
HEAP32[(__gm_ + 24 | 0) >> 2] = $998;
@@ -5617,9 +5593,8 @@ function _mallocNoU($bytes) {
if (($1025 & 3 | 0) == 1) {
var $1029 = $1025 & -8;
var $1030 = $1025 >>> 3;
- var $1031 = $1025 >>> 0 < 256;
$_$322 : do {
- if ($1031) {
+ if ($1025 >>> 0 < 256) {
var $1035 = HEAP32[($tbase_243_i + (($991 | 8) + $tsize_242_i | 0) | 0) >> 2];
var $1038 = HEAP32[($tbase_243_i + (($tsize_242_i + 12 | 0) + $991 | 0) | 0) >> 2];
if (($1035 | 0) == ($1038 | 0)) {
@@ -5954,9 +5929,8 @@ function _mallocNoU($bytes) {
HEAP32[(__gm_ + 452 | 0) >> 2] = $1337;
var $1360 = $1336 + 28 | 0;
HEAP32[$1360 >> 2] = 7;
- var $1362 = ($1336 + 32 | 0) >>> 0 < $1322 >>> 0;
$_$426 : do {
- if ($1362) {
+ if (($1336 + 32 | 0) >>> 0 < $1322 >>> 0) {
var $1363 = $1360;
while (1) {
var $1363;
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index 12754bb2..634d7dda 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -1653,7 +1653,7 @@ function registerize(ast) {
// In memSafe mode, we are more careful and assume functions can replace HEAP and FUNCTION_TABLE, which
// can happen in ALLOW_MEMORY_GROWTH mode
-var ELIMINATION_SAFE_NODES = set('var', 'assign', 'call', 'if', 'toplevel', 'do', 'return'); // do is checked carefully, however
+var ELIMINATION_SAFE_NODES = set('var', 'assign', 'call', 'if', 'toplevel', 'do', 'return', 'label'); // do is checked carefully, however
var NODES_WITHOUT_ELIMINATION_SIDE_EFFECTS = set('name', 'num', 'string', 'binary', 'sub', 'unary-prefix');
var IGNORABLE_ELIMINATOR_SCAN_NODES = set('num', 'toplevel', 'string', 'break', 'continue', 'dot'); // dot can only be STRING_TABLE.*
var ABORTING_ELIMINATOR_SCAN_NODES = set('new', 'object', 'function', 'defun', 'switch', 'for', 'while', 'array', 'throw'); // we could handle some of these, TODO, but nontrivial (e.g. for while, the condition is hit multiple times after the body)