diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/js-optimizer.js | 4 | ||||
-rw-r--r-- | tools/test-js-optimizer-asm-outline2-output.js | 356 |
2 files changed, 196 insertions, 164 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index 24166aa8..810edd46 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -3327,9 +3327,9 @@ function outline(ast) { // (but only if the total costs are not extravagant) var currSize = measureSize(stats); var outlinedSize = measureSize(ret); - if (canRestart && currSize > sizeToOutline && sum(ret.map(function(newFunc) { + if (canRestart && currSize > 1.2*sizeToOutline && sum(ret.map(function(newFunc) { return costs[newFunc[1]] || 0; - })) < 0.1*sizeToOutline) { + })) < 0.5*originalSize) { printErr('restarting ' + func[1] + ' since ' + [currSize, outlinedSize, originalSize] + ' in level ' + level); lastSize = currSize; i = stats.length; diff --git a/tools/test-js-optimizer-asm-outline2-output.js b/tools/test-js-optimizer-asm-outline2-output.js index 5c46243a..f3ab307d 100644 --- a/tools/test-js-optimizer-asm-outline2-output.js +++ b/tools/test-js-optimizer-asm-outline2-output.js @@ -21,7 +21,7 @@ function linear() { } function _free($mem) { $mem = $mem | 0; - var $5 = 0, $10 = 0, $16 = 0, $21 = 0, $25 = 0, $26 = 0, $psize_0 = 0, $p_0 = 0, $189 = 0, $194 = 0, $204 = 0, $psize_1 = 0, $390 = 0, $396 = 0, $404 = 0, $_pre_phi = 0, $F16_0 = 0, $414 = 0, $415 = 0, $428 = 0, $436 = 0, $I18_0 = 0, $443 = 0, $447 = 0, $448 = 0, $463 = 0, $T_0 = 0, $K19_0 = 0, $472 = 0, $473 = 0, $486 = 0, $487 = 0, $489 = 0, $501 = 0, $sp_0_in_i = 0, $sp_0_i = 0, label = 0, sp = 0; + var $5 = 0, $10 = 0, $16 = 0, $21 = 0, $25 = 0, $26 = 0, $psize_0 = 0, $p_0 = 0, $189 = 0, $194 = 0, sp = 0; sp = STACKTOP; if (($mem | 0) == 0) { STACKTOP = sp; @@ -85,169 +85,19 @@ function _free($mem) { if (($194 & 1 | 0) == 0) { _abort(); } - do { - if (($194 & 2 | 0) == 0) { - if (($16 | 0) == (HEAP32[26] | 0)) { - $204 = (HEAP32[23] | 0) + $psize_0 | 0; - HEAP32[23] = $204; - HEAP32[26] = $p_0; - HEAP32[$p_0 + 4 >> 2] = $204 | 1; - if (($p_0 | 0) == (HEAP32[25] | 0)) { - HEAP32[25] = 0; - HEAP32[22] = 0; - } - if ($204 >>> 0 <= (HEAP32[27] | 0) >>> 0) { - return; - } - _sys_trim(0) | 0; - return; - } - HEAP32[sp + 632 >> 2] = 0; - HEAP32[sp + 640 >> 2] = 0; - HEAP32[sp + 24 >> 2] = $16; - HEAP32[sp + 208 >> 2] = $psize_0; - HEAP32[sp + 216 >> 2] = $p_0; - HEAP32[sp + 224 >> 2] = $189; - HEAP32[sp + 232 >> 2] = $194; - HEAP32[sp + 0 >> 2] = $mem; - HEAP32[sp + 16 >> 2] = $10; - HEAP32[sp + 416 >> 2] = $psize_1; - _free$0(sp); - $psize_1 = HEAP32[sp + 416 >> 2] | 0; - if ((HEAP32[sp + 632 >> 2] | 0) == 5) { - return; - } - if ((HEAP32[sp + 632 >> 2] | 0) == 1) { - break; - } - } else { - HEAP32[($mem + (($10 & -8) - 4) | 0) >> 2] = $194 & -2; - HEAP32[$p_0 + 4 >> 2] = $psize_0 | 1; - HEAP32[$189 + $psize_0 >> 2] = $psize_0; - $psize_1 = $psize_0; - } - } while (0); - $390 = $psize_1 >>> 3; - if ($psize_1 >>> 0 < 256) { - $396 = HEAP32[20] | 0; - do { - if (($396 & 1 << $390 | 0) == 0) { - HEAP32[20] = $396 | 1 << $390; - $F16_0 = 120 + ($390 << 1 << 2) | 0; - $_pre_phi = 120 + (($390 << 1) + 2 << 2) | 0; - } else { - $404 = HEAP32[(120 + (($390 << 1) + 2 << 2) | 0) >> 2] | 0; - if ($404 >>> 0 >= (HEAP32[24] | 0) >>> 0) { - $F16_0 = $404; - $_pre_phi = 120 + (($390 << 1) + 2 << 2) | 0; - break; - } - _abort(); - } - } while (0); - HEAP32[$_pre_phi >> 2] = $p_0; - HEAP32[$F16_0 + 12 >> 2] = $p_0; - HEAP32[$p_0 + 8 >> 2] = $F16_0; - HEAP32[$p_0 + 12 >> 2] = 120 + ($390 << 1 << 2) | 0; - return; - } - $414 = $p_0; - $415 = $psize_1 >>> 8; - do { - if (($415 | 0) == 0) { - $I18_0 = 0; - } else { - if ($psize_1 >>> 0 > 16777215) { - $I18_0 = 31; - break; - } - $428 = $415 << (($415 + 1048320 | 0) >>> 16 & 8) << ((($415 << (($415 + 1048320 | 0) >>> 16 & 8)) + 520192 | 0) >>> 16 & 4); - $436 = 14 - ((($415 << (($415 + 1048320 | 0) >>> 16 & 8)) + 520192 | 0) >>> 16 & 4 | ($415 + 1048320 | 0) >>> 16 & 8 | ($428 + 245760 | 0) >>> 16 & 2) + ($428 << (($428 + 245760 | 0) >>> 16 & 2) >>> 15) | 0; - $I18_0 = $psize_1 >>> (($436 + 7 | 0) >>> 0) & 1 | $436 << 1; - } - } while (0); - $443 = 384 + ($I18_0 << 2) | 0; - HEAP32[$p_0 + 28 >> 2] = $I18_0; - HEAP32[$p_0 + 20 >> 2] = 0; - HEAP32[$p_0 + 16 >> 2] = 0; - $447 = HEAP32[21] | 0; - $448 = 1 << $I18_0; - do { - if (($447 & $448 | 0) == 0) { - HEAP32[21] = $447 | $448; - HEAP32[$443 >> 2] = $414; - HEAP32[$p_0 + 24 >> 2] = $443; - HEAP32[$p_0 + 12 >> 2] = $p_0; - HEAP32[$p_0 + 8 >> 2] = $p_0; - } else { - if (($I18_0 | 0) == 31) { - $463 = 0; - } else { - $463 = 25 - ($I18_0 >>> 1) | 0; - } - $K19_0 = $psize_1 << $463; - $T_0 = HEAP32[$443 >> 2] | 0; - while (1) { - if ((HEAP32[$T_0 + 4 >> 2] & -8 | 0) == ($psize_1 | 0)) { - break; - } - $472 = $T_0 + 16 + ($K19_0 >>> 31 << 2) | 0; - $473 = HEAP32[$472 >> 2] | 0; - if (($473 | 0) == 0) { - label = 569; - break; - } else { - $K19_0 = $K19_0 << 1; - $T_0 = $473; - } - } - if ((label | 0) == 569) { - if ($472 >>> 0 < (HEAP32[24] | 0) >>> 0) { - _abort(); - } else { - HEAP32[$472 >> 2] = $414; - HEAP32[$p_0 + 24 >> 2] = $T_0; - HEAP32[$p_0 + 12 >> 2] = $p_0; - HEAP32[$p_0 + 8 >> 2] = $p_0; - break; - } - } - $486 = $T_0 + 8 | 0; - $487 = HEAP32[$486 >> 2] | 0; - $489 = HEAP32[24] | 0; - if ($T_0 >>> 0 < $489 >>> 0) { - _abort(); - } - if ($487 >>> 0 < $489 >>> 0) { - _abort(); - } else { - HEAP32[$487 + 12 >> 2] = $414; - HEAP32[$486 >> 2] = $414; - HEAP32[$p_0 + 8 >> 2] = $487; - HEAP32[$p_0 + 12 >> 2] = $T_0; - HEAP32[$p_0 + 24 >> 2] = 0; - break; - } - } - } while (0); - $501 = (HEAP32[28] | 0) - 1 | 0; - HEAP32[28] = $501; - if (($501 | 0) == 0) { - $sp_0_in_i = 536; - } else { + HEAP32[sp + 632 >> 2] = 0; + HEAP32[sp + 640 >> 2] = 0; + HEAP32[sp + 232 >> 2] = $194; + HEAP32[sp + 24 >> 2] = $16; + HEAP32[sp + 208 >> 2] = $psize_0; + HEAP32[sp + 216 >> 2] = $p_0; + HEAP32[sp + 224 >> 2] = $189; + HEAP32[sp + 0 >> 2] = $mem; + HEAP32[sp + 16 >> 2] = $10; + _free$2(sp); + if ((HEAP32[sp + 632 >> 2] | 0) == 5) { return; } - while (1) { - $sp_0_i = HEAP32[$sp_0_in_i >> 2] | 0; - if (($sp_0_i | 0) == 0) { - break; - } else { - $sp_0_in_i = $sp_0_i + 8 | 0; - } - } - HEAP32[28] = -1; - STACKTOP = sp; - return; } function linear$0(sp) { sp = sp | 0; @@ -671,4 +521,186 @@ function _free$1(sp) { HEAP32[sp + 216 >> 2] = $p_0; HEAP32[sp + 208 >> 2] = $psize_0; } +function _free$2(sp) { + sp = sp | 0; + var $194 = 0, $16 = 0, $204 = 0, $psize_0 = 0, $p_0 = 0, $189 = 0, $mem = 0, $10 = 0, $psize_1 = 0, $390 = 0, $396 = 0, $F16_0 = 0, $_pre_phi = 0, $404 = 0, $414 = 0, $415 = 0, $I18_0 = 0, $428 = 0, $436 = 0, $443 = 0, $447 = 0, $448 = 0, $463 = 0, $K19_0 = 0, $T_0 = 0, $472 = 0, $473 = 0, label = 0, $486 = 0, $487 = 0, $489 = 0, $501 = 0, $sp_0_in_i = 0, $sp_0_i = 0; + $10 = HEAP32[sp + 16 >> 2] | 0; + $mem = HEAP32[sp + 0 >> 2] | 0; + $189 = HEAP32[sp + 224 >> 2] | 0; + $p_0 = HEAP32[sp + 216 >> 2] | 0; + $psize_0 = HEAP32[sp + 208 >> 2] | 0; + $16 = HEAP32[sp + 24 >> 2] | 0; + $194 = HEAP32[sp + 232 >> 2] | 0; + OL : do { + do { + if (($194 & 2 | 0) == 0) { + if (($16 | 0) == (HEAP32[26] | 0)) { + $204 = (HEAP32[23] | 0) + $psize_0 | 0; + HEAP32[23] = $204; + HEAP32[26] = $p_0; + HEAP32[$p_0 + 4 >> 2] = $204 | 1; + if (($p_0 | 0) == (HEAP32[25] | 0)) { + HEAP32[25] = 0; + HEAP32[22] = 0; + } + if ($204 >>> 0 <= (HEAP32[27] | 0) >>> 0) { + HEAP32[sp + 632 >> 2] = 5; + break OL; + } + _sys_trim(0) | 0; + HEAP32[sp + 632 >> 2] = 5; + break OL; + } + HEAP32[sp + 632 >> 2] = 0; + HEAP32[sp + 640 >> 2] = 0; + HEAP32[sp + 24 >> 2] = $16; + HEAP32[sp + 208 >> 2] = $psize_0; + HEAP32[sp + 216 >> 2] = $p_0; + HEAP32[sp + 224 >> 2] = $189; + HEAP32[sp + 232 >> 2] = $194; + HEAP32[sp + 0 >> 2] = $mem; + HEAP32[sp + 16 >> 2] = $10; + HEAP32[sp + 416 >> 2] = $psize_1; + _free$0(sp); + $psize_1 = HEAP32[sp + 416 >> 2] | 0; + if ((HEAP32[sp + 632 >> 2] | 0) == 5) { + HEAP32[sp + 632 >> 2] = 5; + break OL; + } + if ((HEAP32[sp + 632 >> 2] | 0) == 1) { + break; + } + } else { + HEAP32[($mem + (($10 & -8) - 4) | 0) >> 2] = $194 & -2; + HEAP32[$p_0 + 4 >> 2] = $psize_0 | 1; + HEAP32[$189 + $psize_0 >> 2] = $psize_0; + $psize_1 = $psize_0; + } + } while (0); + $390 = $psize_1 >>> 3; + if ($psize_1 >>> 0 < 256) { + $396 = HEAP32[20] | 0; + do { + if (($396 & 1 << $390 | 0) == 0) { + HEAP32[20] = $396 | 1 << $390; + $F16_0 = 120 + ($390 << 1 << 2) | 0; + $_pre_phi = 120 + (($390 << 1) + 2 << 2) | 0; + } else { + $404 = HEAP32[(120 + (($390 << 1) + 2 << 2) | 0) >> 2] | 0; + if ($404 >>> 0 >= (HEAP32[24] | 0) >>> 0) { + $F16_0 = $404; + $_pre_phi = 120 + (($390 << 1) + 2 << 2) | 0; + break; + } + _abort(); + } + } while (0); + HEAP32[$_pre_phi >> 2] = $p_0; + HEAP32[$F16_0 + 12 >> 2] = $p_0; + HEAP32[$p_0 + 8 >> 2] = $F16_0; + HEAP32[$p_0 + 12 >> 2] = 120 + ($390 << 1 << 2) | 0; + HEAP32[sp + 632 >> 2] = 5; + break OL; + } + $414 = $p_0; + $415 = $psize_1 >>> 8; + do { + if (($415 | 0) == 0) { + $I18_0 = 0; + } else { + if ($psize_1 >>> 0 > 16777215) { + $I18_0 = 31; + break; + } + $428 = $415 << (($415 + 1048320 | 0) >>> 16 & 8) << ((($415 << (($415 + 1048320 | 0) >>> 16 & 8)) + 520192 | 0) >>> 16 & 4); + $436 = 14 - ((($415 << (($415 + 1048320 | 0) >>> 16 & 8)) + 520192 | 0) >>> 16 & 4 | ($415 + 1048320 | 0) >>> 16 & 8 | ($428 + 245760 | 0) >>> 16 & 2) + ($428 << (($428 + 245760 | 0) >>> 16 & 2) >>> 15) | 0; + $I18_0 = $psize_1 >>> (($436 + 7 | 0) >>> 0) & 1 | $436 << 1; + } + } while (0); + $443 = 384 + ($I18_0 << 2) | 0; + HEAP32[$p_0 + 28 >> 2] = $I18_0; + HEAP32[$p_0 + 20 >> 2] = 0; + HEAP32[$p_0 + 16 >> 2] = 0; + $447 = HEAP32[21] | 0; + $448 = 1 << $I18_0; + do { + if (($447 & $448 | 0) == 0) { + HEAP32[21] = $447 | $448; + HEAP32[$443 >> 2] = $414; + HEAP32[$p_0 + 24 >> 2] = $443; + HEAP32[$p_0 + 12 >> 2] = $p_0; + HEAP32[$p_0 + 8 >> 2] = $p_0; + } else { + if (($I18_0 | 0) == 31) { + $463 = 0; + } else { + $463 = 25 - ($I18_0 >>> 1) | 0; + } + $K19_0 = $psize_1 << $463; + $T_0 = HEAP32[$443 >> 2] | 0; + while (1) { + if ((HEAP32[$T_0 + 4 >> 2] & -8 | 0) == ($psize_1 | 0)) { + break; + } + $472 = $T_0 + 16 + ($K19_0 >>> 31 << 2) | 0; + $473 = HEAP32[$472 >> 2] | 0; + if (($473 | 0) == 0) { + label = 569; + break; + } else { + $K19_0 = $K19_0 << 1; + $T_0 = $473; + } + } + if ((label | 0) == 569) { + if ($472 >>> 0 < (HEAP32[24] | 0) >>> 0) { + _abort(); + } else { + HEAP32[$472 >> 2] = $414; + HEAP32[$p_0 + 24 >> 2] = $T_0; + HEAP32[$p_0 + 12 >> 2] = $p_0; + HEAP32[$p_0 + 8 >> 2] = $p_0; + break; + } + } + $486 = $T_0 + 8 | 0; + $487 = HEAP32[$486 >> 2] | 0; + $489 = HEAP32[24] | 0; + if ($T_0 >>> 0 < $489 >>> 0) { + _abort(); + } + if ($487 >>> 0 < $489 >>> 0) { + _abort(); + } else { + HEAP32[$487 + 12 >> 2] = $414; + HEAP32[$486 >> 2] = $414; + HEAP32[$p_0 + 8 >> 2] = $487; + HEAP32[$p_0 + 12 >> 2] = $T_0; + HEAP32[$p_0 + 24 >> 2] = 0; + break; + } + } + } while (0); + $501 = (HEAP32[28] | 0) - 1 | 0; + HEAP32[28] = $501; + if (($501 | 0) == 0) { + $sp_0_in_i = 536; + } else { + HEAP32[sp + 632 >> 2] = 5; + break OL; + } + while (1) { + $sp_0_i = HEAP32[$sp_0_in_i >> 2] | 0; + if (($sp_0_i | 0) == 0) { + break; + } else { + $sp_0_in_i = $sp_0_i + 8 | 0; + } + } + HEAP32[28] = -1; + STACKTOP = sp; + HEAP32[sp + 632 >> 2] = 5; + break OL; + } while (0); +} |