diff options
-rwxr-xr-x | tests/runner.py | 10 | ||||
-rw-r--r-- | tools/js-optimizer.js | 3 | ||||
-rw-r--r-- | tools/test-js-optimizer-asm-outline1-output.js | 91 | ||||
-rw-r--r-- | tools/test-js-optimizer-asm-outline2-output.js | 414 | ||||
-rw-r--r-- | tools/test-js-optimizer-asm-outline3-output.js | 28 | ||||
-rw-r--r-- | tools/test-js-optimizer-asm-outline3.js | 30 |
6 files changed, 291 insertions, 285 deletions
diff --git a/tests/runner.py b/tests/runner.py index 6fd26a55..a3183b76 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -11085,10 +11085,10 @@ f.close() self.get_library('zlib', os.path.join('libz.a'), make_args=['libz.a']), open(path_from_root('tests', 'zlib', 'ref.txt'), 'r').read(), { - 100: (270, 280), - 250: (330, 360), - 500: (320, 350), - 1000: (440, 480), + 100: (190, 210), + 250: (300, 330), + 500: (250, 310), + 1000: (330, 400), 2000: (450, 500), 5000: (800, 1100), 0: (1500, 1800) @@ -11849,6 +11849,8 @@ f.close() ['asm', 'outline']), (path_from_root('tools', 'test-js-optimizer-asm-outline2.js'), open(path_from_root('tools', 'test-js-optimizer-asm-outline2-output.js')).read(), ['asm', 'outline']), + (path_from_root('tools', 'test-js-optimizer-asm-outline3.js'), open(path_from_root('tools', 'test-js-optimizer-asm-outline3-output.js')).read(), + ['asm', 'outline']), ]: print input output = Popen(listify(NODE_JS) + [path_from_root('tools', 'js-optimizer.js'), input] + passes, stdin=PIPE, stdout=PIPE).communicate()[0] diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index cd6db6a4..2f11fcab 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -2873,6 +2873,7 @@ function outline(ast) { defs[name] = node; } else { if (name in asmData.params) { + assignments[name] = (assignments[name] || 1) + 1; // init to 1 for initial parameter assignment considered[name] = true; // this parameter is not ssa, it must be in a hand-optimized function, so it is not trivial } } @@ -3535,7 +3536,7 @@ function outline(ast) { var size = measureSize(func); if (size >= sizeToOutline) { printErr('trying to reduce the size of ' + func[1] + ' which is ' + size + ' (>= ' + sizeToOutline + ')'); - //aggressiveVariableElimination(func, asmData); // TODO: debug it, it does the wrong thing on hand-written memset + aggressiveVariableElimination(func, asmData); flatten(func, asmData); analyzeFunction(func, asmData); var stats = getStatements(func); diff --git a/tools/test-js-optimizer-asm-outline1-output.js b/tools/test-js-optimizer-asm-outline1-output.js index 9c6aa7c8..65fbd6a5 100644 --- a/tools/test-js-optimizer-asm-outline1-output.js +++ b/tools/test-js-optimizer-asm-outline1-output.js @@ -167,22 +167,18 @@ function mix() { function vars(x, y) { x = x | 0; y = +y; - var a = 0, b = +0, sp = 0; + var sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 152 | 0; - HEAP32[sp + 48 >> 2] = 0; - HEAP32[sp + 52 >> 2] = 0; - HEAP32[sp + 24 >> 2] = a; + HEAP32[sp + 32 >> 2] = 0; + HEAP32[sp + 36 >> 2] = 0; HEAP32[sp + 8 >> 2] = x; HEAPF32[sp + 16 >> 2] = y; - HEAPF32[sp + 32 >> 2] = b; vars$1(sp); - a = HEAP32[sp + 24 >> 2] | 0; - b = +HEAPF32[sp + 32 >> 2]; - HEAP32[sp + 40 >> 2] = 0; - HEAP32[sp + 44 >> 2] = 0; - HEAPF32[sp + 32 >> 2] = b; - HEAP32[sp + 24 >> 2] = a; + HEAP32[sp + 24 >> 2] = 0; + HEAP32[sp + 28 >> 2] = 0; + HEAP32[sp + 8 >> 2] = x; + HEAPF32[sp + 16 >> 2] = y; vars$0(sp); STACKTOP = sp; } @@ -208,23 +204,21 @@ function vars2(x, y) { function vars3(x, y) { x = x | 0; y = +y; - var a = 0, b = +0, sp = 0; + var a = 0, sp = 0; sp = STACKTOP; - STACKTOP = STACKTOP + 168 | 0; - a = x + y; - HEAP32[sp + 48 >> 2] = 0; - HEAP32[sp + 52 >> 2] = 0; - HEAPF32[sp + 32 >> 2] = b; - HEAPF32[sp + 16 >> 2] = y; - HEAP32[sp + 8 >> 2] = x; + STACKTOP = STACKTOP + 160 | 0; + HEAP32[sp + 40 >> 2] = 0; + HEAP32[sp + 44 >> 2] = 0; HEAP32[sp + 24 >> 2] = a; + HEAP32[sp + 8 >> 2] = x; + HEAPF32[sp + 16 >> 2] = y; vars3$1(sp); - b = +HEAPF32[sp + 32 >> 2]; a = HEAP32[sp + 24 >> 2] | 0; - HEAP32[sp + 40 >> 2] = 0; - HEAP32[sp + 44 >> 2] = 0; + HEAP32[sp + 32 >> 2] = 0; + HEAP32[sp + 36 >> 2] = 0; HEAP32[sp + 24 >> 2] = a; - HEAPF32[sp + 32 >> 2] = b; + HEAPF32[sp + 16 >> 2] = y; + HEAP32[sp + 8 >> 2] = x; vars3$0(sp); a = HEAP32[sp + 24 >> 2] | 0; STACKTOP = sp; @@ -477,29 +471,23 @@ function mix$1(sp) { } function vars$0(sp) { sp = sp | 0; - var b = +0, a = 0; - a = HEAP32[sp + 24 >> 2] | 0; - b = +HEAPF32[sp + 32 >> 2]; - c(4 + b); - c(5 + a); - c(6 + b); - c(7 + a); - c(8 + b); + var x = 0, y = +0; + y = +HEAPF32[sp + 16 >> 2]; + x = HEAP32[sp + 8 >> 2] | 0; + c(5 + (x + y)); + c(6 + y * x); + c(7 + (x + y)); + c(8 + y * x); } function vars$1(sp) { sp = sp | 0; - var a = 0, x = 0, y = +0, b = +0; - b = +HEAPF32[sp + 32 >> 2]; + var x = 0, y = +0; y = +HEAPF32[sp + 16 >> 2]; x = HEAP32[sp + 8 >> 2] | 0; - a = HEAP32[sp + 24 >> 2] | 0; - a = x + y; - b = y * x; - c(1 + a); - c(2 + b); - c(3 + a); - HEAP32[sp + 24 >> 2] = a; - HEAPF32[sp + 32 >> 2] = b; + c(1 + (x + y)); + c(2 + y * x); + c(3 + (x + y)); + c(4 + y * x); } function vars2$0(sp) { sp = sp | 0; @@ -515,27 +503,26 @@ function vars2$0(sp) { } function vars3$0(sp) { sp = sp | 0; - var a = 0, b = +0; - b = +HEAPF32[sp + 32 >> 2]; + var a = 0, y = +0, x = 0; + x = HEAP32[sp + 8 >> 2] | 0; + y = +HEAPF32[sp + 16 >> 2]; a = HEAP32[sp + 24 >> 2] | 0; - a = c(4 + b); + a = c(4 + y * x); a = c(5 + a); - a = c(6 + b); + a = c(6 + y * x); a = c(7 + a); HEAP32[sp + 24 >> 2] = a; } function vars3$1(sp) { sp = sp | 0; - var b = +0, y = +0, x = 0, a = 0; - a = HEAP32[sp + 24 >> 2] | 0; - x = HEAP32[sp + 8 >> 2] | 0; + var a = 0, x = 0, y = +0; y = +HEAPF32[sp + 16 >> 2]; - b = +HEAPF32[sp + 32 >> 2]; - b = y * x; + x = HEAP32[sp + 8 >> 2] | 0; + a = HEAP32[sp + 24 >> 2] | 0; + a = x + y; a = c(1 + a); - a = c(2 + b); + a = c(2 + y * x); a = c(3 + a); - HEAPF32[sp + 32 >> 2] = b; HEAP32[sp + 24 >> 2] = a; } function vars4$0(sp) { diff --git a/tools/test-js-optimizer-asm-outline2-output.js b/tools/test-js-optimizer-asm-outline2-output.js index 44a4e8dd..abff54cb 100644 --- a/tools/test-js-optimizer-asm-outline2-output.js +++ b/tools/test-js-optimizer-asm-outline2-output.js @@ -21,49 +21,52 @@ function linear() { } function _free($mem) { $mem = $mem | 0; - var $3 = 0, $4 = 0, $5 = 0, $10 = 0, $11 = 0, $14 = 0, $15 = 0, $16 = 0, $21 = 0, $psize_0 = 0, $p_0 = 0, $189 = 0, $193 = 0, $194 = 0, sp = 0, helper$0 = 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, helper$0 = 0; sp = STACKTOP; if (($mem | 0) == 0) { STACKTOP = sp; return; } - $3 = $mem - 8 | 0; - $4 = $3; $5 = HEAP32[24] | 0; - if ($3 >>> 0 < $5 >>> 0) { + if (($mem - 8 | 0) >>> 0 < $5 >>> 0) { _abort(); } $10 = HEAP32[$mem - 4 >> 2] | 0; - $11 = $10 & 3; - if (($11 | 0) == 1) { + if (($10 & 3 | 0) == 1) { _abort(); } - $14 = $10 & -8; - $15 = $mem + ($14 - 8) | 0; - $16 = $15; + $16 = $mem + (($10 & -8) - 8) | 0; L621 : do { helper$0 = 1; if (helper$0 ? ($10 & 1 | 0) == 0 : 0) { helper$0 = 0; - $21 = HEAP32[$3 >> 2] | 0; - HEAP32[sp + 952 >> 2] = 0; - HEAP32[sp + 956 >> 2] = 0; - HEAP32[sp + 48 >> 2] = $11; - HEAP32[sp + 80 >> 2] = $21; + $21 = HEAP32[($mem - 8 | 0) >> 2] | 0; + if (($10 & 3 | 0) == 0) { + return; + } + $25 = $mem + (-8 - $21 | 0) | 0; + $26 = $21 + ($10 & -8) | 0; + if (($mem + (-8 - $21 | 0) | 0) >>> 0 < $5 >>> 0) { + _abort(); + } + HEAP32[sp + 672 >> 2] = 0; + HEAP32[sp + 676 >> 2] = 0; + HEAP32[sp + 48 >> 2] = $25; HEAP32[sp + 8 >> 2] = $mem; - HEAP32[sp + 56 >> 2] = $14; - HEAP32[sp + 32 >> 2] = $5; - HEAP32[sp + 64 >> 2] = $15; - HEAP32[sp + 360 >> 2] = $p_0; - HEAP32[sp + 352 >> 2] = $psize_0; + HEAP32[sp + 24 >> 2] = $10; + HEAP32[sp + 56 >> 2] = $26; + HEAP32[sp + 40 >> 2] = $21; + HEAP32[sp + 16 >> 2] = $5; + HEAP32[sp + 224 >> 2] = $p_0; + HEAP32[sp + 216 >> 2] = $psize_0; _free$1(sp); - $p_0 = HEAP32[sp + 360 >> 2] | 0; - $psize_0 = HEAP32[sp + 352 >> 2] | 0; - tempValue = HEAP32[sp + 952 >> 2] | 0; - tempInt = HEAP32[sp + 956 >> 2] | 0; - tempDouble = +HEAPF32[sp + 956 >> 2]; - HEAP32[sp + 952 >> 2] = 0; - HEAP32[sp + 956 >> 2] = 0; + $p_0 = HEAP32[sp + 224 >> 2] | 0; + $psize_0 = HEAP32[sp + 216 >> 2] | 0; + tempValue = HEAP32[sp + 672 >> 2] | 0; + tempInt = HEAP32[sp + 676 >> 2] | 0; + tempDouble = +HEAPF32[sp + 676 >> 2]; + HEAP32[sp + 672 >> 2] = 0; + HEAP32[sp + 676 >> 2] = 0; if ((tempValue | 0) == 5) { return; } @@ -81,36 +84,33 @@ function _free($mem) { } if (helper$0) { helper$0 = 0; - $p_0 = $4; - $psize_0 = $14; + $p_0 = $mem - 8 | 0; + $psize_0 = $10 & -8; } } while (0); $189 = $p_0; - if ($189 >>> 0 >= $15 >>> 0) { + if ($189 >>> 0 >= ($mem + (($10 & -8) - 8) | 0) >>> 0) { _abort(); } - $193 = $mem + ($14 - 4) | 0; - $194 = HEAP32[$193 >> 2] | 0; + $194 = HEAP32[($mem + (($10 & -8) - 4) | 0) >> 2] | 0; if (($194 & 1 | 0) == 0) { _abort(); } - HEAP32[sp + 960 >> 2] = 0; - HEAP32[sp + 964 >> 2] = 0; - HEAP32[sp + 384 >> 2] = $194; - HEAP32[sp + 72 >> 2] = $16; - HEAP32[sp + 352 >> 2] = $psize_0; - HEAP32[sp + 360 >> 2] = $p_0; - HEAP32[sp + 368 >> 2] = $189; + HEAP32[sp + 680 >> 2] = 0; + HEAP32[sp + 684 >> 2] = 0; + HEAP32[sp + 240 >> 2] = $194; + HEAP32[sp + 32 >> 2] = $16; + HEAP32[sp + 216 >> 2] = $psize_0; + HEAP32[sp + 224 >> 2] = $p_0; + HEAP32[sp + 232 >> 2] = $189; HEAP32[sp + 8 >> 2] = $mem; - HEAP32[sp + 56 >> 2] = $14; - HEAP32[sp + 64 >> 2] = $15; - HEAP32[sp + 376 >> 2] = $193; + HEAP32[sp + 24 >> 2] = $10; _free$2(sp); - tempValue = HEAP32[sp + 960 >> 2] | 0; - tempInt = HEAP32[sp + 964 >> 2] | 0; - tempDouble = +HEAPF32[sp + 964 >> 2]; - HEAP32[sp + 960 >> 2] = 0; - HEAP32[sp + 964 >> 2] = 0; + tempValue = HEAP32[sp + 680 >> 2] | 0; + tempInt = HEAP32[sp + 684 >> 2] | 0; + tempDouble = +HEAPF32[sp + 684 >> 2]; + HEAP32[sp + 680 >> 2] = 0; + HEAP32[sp + 684 >> 2] = 0; if ((tempValue | 0) == 5) { return; } @@ -149,54 +149,34 @@ function linear$1(sp) { } function _free$0(sp) { sp = sp | 0; - var $16 = 0, $204 = 0, $psize_0 = 0, $p_0 = 0, $220 = 0, $189 = 0, $227 = 0, $194 = 0, $228 = 0, helper$2 = 0, $233 = 0, $mem = 0, $14 = 0, $236 = 0, $239 = 0, $_pre_phi305 = 0, $262 = 0, $267 = 0, $15 = 0, $270 = 0, $273 = 0, $293 = 0, $294 = 0, $298 = 0, $299 = 0, $R7_1 = 0, $R7_0 = 0, $RP9_0 = 0, $301 = 0, $302 = 0, $305 = 0, $306 = 0, $278 = 0, $283 = 0, $287 = 0, $318 = 0, $320 = 0, $334 = 0, $351 = 0, $364 = 0, $psize_1 = 0; - $psize_1 = HEAP32[sp + 640 >> 2] | 0; - $15 = HEAP32[sp + 64 >> 2] | 0; - $14 = HEAP32[sp + 56 >> 2] | 0; + var $16 = 0, $220 = 0, $psize_0 = 0, $p_0 = 0, $189 = 0, $227 = 0, $194 = 0, helper$2 = 0, $233 = 0, $mem = 0, $10 = 0, $236 = 0, $_pre_phi305 = 0, $267 = 0, $270 = 0, $273 = 0, $294 = 0, $299 = 0, $R7_1 = 0, $R7_0 = 0, $RP9_0 = 0, $301 = 0, $302 = 0, $305 = 0, $306 = 0, $278 = 0, $320 = 0, $351 = 0, $364 = 0, $psize_1 = 0; + $psize_1 = HEAP32[sp + 424 >> 2] | 0; + $10 = HEAP32[sp + 24 >> 2] | 0; $mem = HEAP32[sp + 8 >> 2] | 0; - $194 = HEAP32[sp + 384 >> 2] | 0; - $189 = HEAP32[sp + 368 >> 2] | 0; - $p_0 = HEAP32[sp + 360 >> 2] | 0; - $psize_0 = HEAP32[sp + 352 >> 2] | 0; - $16 = HEAP32[sp + 72 >> 2] | 0; + $194 = HEAP32[sp + 240 >> 2] | 0; + $189 = HEAP32[sp + 232 >> 2] | 0; + $p_0 = HEAP32[sp + 224 >> 2] | 0; + $psize_0 = HEAP32[sp + 216 >> 2] | 0; + $16 = HEAP32[sp + 32 >> 2] | 0; OL : do { - 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 + 944 >> 2] = 5; - break OL; - } - _sys_trim(0) | 0; - HEAP32[sp + 944 >> 2] = 5; - break OL; - } if (($16 | 0) == (HEAP32[25] | 0)) { $220 = (HEAP32[22] | 0) + $psize_0 | 0; HEAP32[22] = $220; HEAP32[25] = $p_0; HEAP32[$p_0 + 4 >> 2] = $220 | 1; HEAP32[$189 + $220 >> 2] = $220; - HEAP32[sp + 944 >> 2] = 5; + HEAP32[sp + 664 >> 2] = 5; break OL; } $227 = ($194 & -8) + $psize_0 | 0; - $228 = $194 >>> 3; L726 : do { helper$2 = 1; if (helper$2 ? $194 >>> 0 < 256 : 0) { helper$2 = 0; - $233 = HEAP32[$mem + $14 >> 2] | 0; - $236 = HEAP32[$mem + ($14 | 4) >> 2] | 0; - $239 = 120 + ($228 << 1 << 2) | 0; + $233 = HEAP32[$mem + ($10 & -8) >> 2] | 0; + $236 = HEAP32[$mem + ($10 & -8 | 4) >> 2] | 0; do { - if (($233 | 0) != ($239 | 0)) { + if (($233 | 0) != (120 + ($194 >>> 3 << 1 << 2) | 0 | 0)) { if ($233 >>> 0 < (HEAP32[24] | 0) >>> 0) { _abort(); } @@ -207,19 +187,18 @@ function _free$0(sp) { } } while (0); if (($236 | 0) == ($233 | 0)) { - HEAP32[20] = HEAP32[20] & (1 << $228 ^ -1); + HEAP32[20] = HEAP32[20] & (1 << ($194 >>> 3) ^ -1); break; } do { - if (($236 | 0) == ($239 | 0)) { + if (($236 | 0) == (120 + ($194 >>> 3 << 1 << 2) | 0 | 0)) { $_pre_phi305 = $236 + 8 | 0; } else { if ($236 >>> 0 < (HEAP32[24] | 0) >>> 0) { _abort(); } - $262 = $236 + 8 | 0; - if ((HEAP32[$262 >> 2] | 0) == ($16 | 0)) { - $_pre_phi305 = $262; + if ((HEAP32[($236 + 8 | 0) >> 2] | 0) == ($16 | 0)) { + $_pre_phi305 = $236 + 8 | 0; break; } _abort(); @@ -230,26 +209,24 @@ function _free$0(sp) { } if (helper$2) { helper$2 = 0; - $267 = $15; - $270 = HEAP32[$mem + ($14 + 16) >> 2] | 0; - $273 = HEAP32[$mem + ($14 | 4) >> 2] | 0; + $267 = $mem + (($10 & -8) - 8) | 0; + $270 = HEAP32[$mem + (($10 & -8) + 16) >> 2] | 0; + $273 = HEAP32[$mem + ($10 & -8 | 4) >> 2] | 0; do { if (($273 | 0) == ($267 | 0)) { - $293 = $mem + ($14 + 12) | 0; - $294 = HEAP32[$293 >> 2] | 0; + $294 = HEAP32[($mem + (($10 & -8) + 12) | 0) >> 2] | 0; if (($294 | 0) == 0) { - $298 = $mem + ($14 + 8) | 0; - $299 = HEAP32[$298 >> 2] | 0; + $299 = HEAP32[($mem + (($10 & -8) + 8) | 0) >> 2] | 0; if (($299 | 0) == 0) { $R7_1 = 0; break; } else { $R7_0 = $299; - $RP9_0 = $298; + $RP9_0 = $mem + (($10 & -8) + 8) | 0; } } else { $R7_0 = $294; - $RP9_0 = $293; + $RP9_0 = $mem + (($10 & -8) + 12) | 0; } while (1) { $301 = $R7_0 + 20 | 0; @@ -276,18 +253,16 @@ function _free$0(sp) { break; } } else { - $278 = HEAP32[$mem + $14 >> 2] | 0; + $278 = HEAP32[$mem + ($10 & -8) >> 2] | 0; if ($278 >>> 0 < (HEAP32[24] | 0) >>> 0) { _abort(); } - $283 = $278 + 12 | 0; - if ((HEAP32[$283 >> 2] | 0) != ($267 | 0)) { + if ((HEAP32[($278 + 12 | 0) >> 2] | 0) != ($267 | 0)) { _abort(); } - $287 = $273 + 8 | 0; - if ((HEAP32[$287 >> 2] | 0) == ($267 | 0)) { - HEAP32[$283 >> 2] = $273; - HEAP32[$287 >> 2] = $278; + if ((HEAP32[($273 + 8 | 0) >> 2] | 0) == ($267 | 0)) { + HEAP32[($278 + 12 | 0) >> 2] = $273; + HEAP32[($273 + 8 | 0) >> 2] = $278; $R7_1 = $273; break; } else { @@ -298,23 +273,21 @@ function _free$0(sp) { if (($270 | 0) == 0) { break; } - $318 = $mem + ($14 + 20) | 0; - $320 = 384 + (HEAP32[$318 >> 2] << 2) | 0; + $320 = 384 + (HEAP32[($mem + (($10 & -8) + 20) | 0) >> 2] << 2) | 0; do { if (($267 | 0) == (HEAP32[$320 >> 2] | 0)) { HEAP32[$320 >> 2] = $R7_1; if (($R7_1 | 0) != 0) { break; } - HEAP32[21] = HEAP32[21] & (1 << HEAP32[$318 >> 2] ^ -1); + HEAP32[21] = HEAP32[21] & (1 << HEAP32[($mem + (($10 & -8) + 20) | 0) >> 2] ^ -1); break L726; } else { if ($270 >>> 0 < (HEAP32[24] | 0) >>> 0) { _abort(); } - $334 = $270 + 16 | 0; - if ((HEAP32[$334 >> 2] | 0) == ($267 | 0)) { - HEAP32[$334 >> 2] = $R7_1; + if ((HEAP32[($270 + 16 | 0) >> 2] | 0) == ($267 | 0)) { + HEAP32[($270 + 16 | 0) >> 2] = $R7_1; } else { HEAP32[$270 + 20 >> 2] = $R7_1; } @@ -327,7 +300,7 @@ function _free$0(sp) { _abort(); } HEAP32[$R7_1 + 24 >> 2] = $270; - $351 = HEAP32[$mem + ($14 + 8) >> 2] | 0; + $351 = HEAP32[$mem + (($10 & -8) + 8) >> 2] | 0; do { if (($351 | 0) != 0) { if ($351 >>> 0 < (HEAP32[24] | 0) >>> 0) { @@ -339,7 +312,7 @@ function _free$0(sp) { } } } while (0); - $364 = HEAP32[$mem + ($14 + 12) >> 2] | 0; + $364 = HEAP32[$mem + (($10 & -8) + 12) >> 2] | 0; if (($364 | 0) == 0) { break; } @@ -356,60 +329,46 @@ function _free$0(sp) { HEAP32[$189 + $227 >> 2] = $227; if (($p_0 | 0) != (HEAP32[25] | 0)) { $psize_1 = $227; - HEAP32[sp + 944 >> 2] = 1; + HEAP32[sp + 664 >> 2] = 1; break OL; } HEAP32[22] = $227; - HEAP32[sp + 944 >> 2] = 5; + HEAP32[sp + 664 >> 2] = 5; break OL; } while (0); - HEAP32[sp + 640 >> 2] = $psize_1; + HEAP32[sp + 424 >> 2] = $psize_1; } function _free$1(sp) { sp = sp | 0; - var $11 = 0, $_sum233 = 0, $21 = 0, $24 = 0, $mem = 0, $25 = 0, $26 = 0, $14 = 0, $5 = 0, $177 = 0, $15 = 0, $32 = 0, $37 = 0, $40 = 0, $43 = 0, $_pre_phi307 = 0, $64 = 0, $69 = 0, $72 = 0, $75 = 0, $94 = 0, $95 = 0, $99 = 0, $100 = 0, $R_1 = 0, $R_0 = 0, $RP_0 = 0, $102 = 0, $103 = 0, $106 = 0, $107 = 0, $80 = 0, $84 = 0, $88 = 0, $118 = 0, $120 = 0, $134 = 0, $151 = 0, $164 = 0, $p_0 = 0, $psize_0 = 0; - $psize_0 = HEAP32[sp + 352 >> 2] | 0; - $p_0 = HEAP32[sp + 360 >> 2] | 0; - $15 = HEAP32[sp + 64 >> 2] | 0; - $5 = HEAP32[sp + 32 >> 2] | 0; - $14 = HEAP32[sp + 56 >> 2] | 0; + var $25 = 0, $mem = 0, $10 = 0, $26 = 0, $21 = 0, $37 = 0, $40 = 0, $5 = 0, $_pre_phi307 = 0, $69 = 0, $72 = 0, $75 = 0, $95 = 0, $100 = 0, $R_1 = 0, $R_0 = 0, $RP_0 = 0, $102 = 0, $103 = 0, $106 = 0, $107 = 0, $80 = 0, $120 = 0, $151 = 0, $164 = 0, $p_0 = 0, $psize_0 = 0; + $psize_0 = HEAP32[sp + 216 >> 2] | 0; + $p_0 = HEAP32[sp + 224 >> 2] | 0; + $5 = HEAP32[sp + 16 >> 2] | 0; + $21 = HEAP32[sp + 40 >> 2] | 0; + $26 = HEAP32[sp + 56 >> 2] | 0; + $10 = HEAP32[sp + 24 >> 2] | 0; $mem = HEAP32[sp + 8 >> 2] | 0; - $21 = HEAP32[sp + 80 >> 2] | 0; - $11 = HEAP32[sp + 48 >> 2] | 0; + $25 = HEAP32[sp + 48 >> 2] | 0; OL : do { - if (($11 | 0) == 0) { - HEAP32[sp + 952 >> 2] = 5; - break OL; - } - $_sum233 = -8 - $21 | 0; - $24 = $mem + $_sum233 | 0; - $25 = $24; - $26 = $21 + $14 | 0; - if ($24 >>> 0 < $5 >>> 0) { - _abort(); - } if (($25 | 0) == (HEAP32[25] | 0)) { - $177 = $mem + ($14 - 4) | 0; - if ((HEAP32[$177 >> 2] & 3 | 0) != 3) { + if ((HEAP32[($mem + (($10 & -8) - 4) | 0) >> 2] & 3 | 0) != 3) { $p_0 = $25; $psize_0 = $26; - HEAP32[sp + 952 >> 2] = 1; + HEAP32[sp + 672 >> 2] = 1; break OL; } HEAP32[22] = $26; - HEAP32[$177 >> 2] = HEAP32[$177 >> 2] & -2; - HEAP32[$mem + ($_sum233 + 4) >> 2] = $26 | 1; - HEAP32[$15 >> 2] = $26; - HEAP32[sp + 952 >> 2] = 5; + HEAP32[($mem + (($10 & -8) - 4) | 0) >> 2] = HEAP32[($mem + (($10 & -8) - 4) | 0) >> 2] & -2; + HEAP32[$mem + ((-8 - $21 | 0) + 4) >> 2] = $26 | 1; + HEAP32[($mem + (($10 & -8) - 8) | 0) >> 2] = $26; + HEAP32[sp + 672 >> 2] = 5; break OL; } - $32 = $21 >>> 3; if ($21 >>> 0 < 256) { - $37 = HEAP32[$mem + ($_sum233 + 8) >> 2] | 0; - $40 = HEAP32[$mem + ($_sum233 + 12) >> 2] | 0; - $43 = 120 + ($32 << 1 << 2) | 0; + $37 = HEAP32[$mem + ((-8 - $21 | 0) + 8) >> 2] | 0; + $40 = HEAP32[$mem + ((-8 - $21 | 0) + 12) >> 2] | 0; do { - if (($37 | 0) != ($43 | 0)) { + if (($37 | 0) != (120 + ($21 >>> 3 << 1 << 2) | 0 | 0)) { if ($37 >>> 0 < $5 >>> 0) { _abort(); } @@ -420,22 +379,21 @@ function _free$1(sp) { } } while (0); if (($40 | 0) == ($37 | 0)) { - HEAP32[20] = HEAP32[20] & (1 << $32 ^ -1); + HEAP32[20] = HEAP32[20] & (1 << ($21 >>> 3) ^ -1); $p_0 = $25; $psize_0 = $26; - HEAP32[sp + 952 >> 2] = 1; + HEAP32[sp + 672 >> 2] = 1; break OL; } do { - if (($40 | 0) == ($43 | 0)) { + if (($40 | 0) == (120 + ($21 >>> 3 << 1 << 2) | 0 | 0)) { $_pre_phi307 = $40 + 8 | 0; } else { if ($40 >>> 0 < $5 >>> 0) { _abort(); } - $64 = $40 + 8 | 0; - if ((HEAP32[$64 >> 2] | 0) == ($25 | 0)) { - $_pre_phi307 = $64; + if ((HEAP32[($40 + 8 | 0) >> 2] | 0) == ($25 | 0)) { + $_pre_phi307 = $40 + 8 | 0; break; } _abort(); @@ -445,29 +403,27 @@ function _free$1(sp) { HEAP32[$_pre_phi307 >> 2] = $37; $p_0 = $25; $psize_0 = $26; - HEAP32[sp + 952 >> 2] = 1; + HEAP32[sp + 672 >> 2] = 1; break OL; } - $69 = $24; - $72 = HEAP32[$mem + ($_sum233 + 24) >> 2] | 0; - $75 = HEAP32[$mem + ($_sum233 + 12) >> 2] | 0; + $69 = $mem + (-8 - $21 | 0) | 0; + $72 = HEAP32[$mem + ((-8 - $21 | 0) + 24) >> 2] | 0; + $75 = HEAP32[$mem + ((-8 - $21 | 0) + 12) >> 2] | 0; do { if (($75 | 0) == ($69 | 0)) { - $94 = $mem + ($_sum233 + 20) | 0; - $95 = HEAP32[$94 >> 2] | 0; + $95 = HEAP32[($mem + ((-8 - $21 | 0) + 20) | 0) >> 2] | 0; if (($95 | 0) == 0) { - $99 = $mem + ($_sum233 + 16) | 0; - $100 = HEAP32[$99 >> 2] | 0; + $100 = HEAP32[($mem + ((-8 - $21 | 0) + 16) | 0) >> 2] | 0; if (($100 | 0) == 0) { $R_1 = 0; break; } else { $R_0 = $100; - $RP_0 = $99; + $RP_0 = $mem + ((-8 - $21 | 0) + 16) | 0; } } else { $R_0 = $95; - $RP_0 = $94; + $RP_0 = $mem + ((-8 - $21 | 0) + 20) | 0; } while (1) { $102 = $R_0 + 20 | 0; @@ -494,18 +450,16 @@ function _free$1(sp) { break; } } else { - $80 = HEAP32[$mem + ($_sum233 + 8) >> 2] | 0; + $80 = HEAP32[$mem + ((-8 - $21 | 0) + 8) >> 2] | 0; if ($80 >>> 0 < $5 >>> 0) { _abort(); } - $84 = $80 + 12 | 0; - if ((HEAP32[$84 >> 2] | 0) != ($69 | 0)) { + if ((HEAP32[($80 + 12 | 0) >> 2] | 0) != ($69 | 0)) { _abort(); } - $88 = $75 + 8 | 0; - if ((HEAP32[$88 >> 2] | 0) == ($69 | 0)) { - HEAP32[$84 >> 2] = $75; - HEAP32[$88 >> 2] = $80; + if ((HEAP32[($75 + 8 | 0) >> 2] | 0) == ($69 | 0)) { + HEAP32[($80 + 12 | 0) >> 2] = $75; + HEAP32[($75 + 8 | 0) >> 2] = $80; $R_1 = $75; break; } else { @@ -516,38 +470,36 @@ function _free$1(sp) { if (($72 | 0) == 0) { $p_0 = $25; $psize_0 = $26; - HEAP32[sp + 952 >> 2] = 1; + HEAP32[sp + 672 >> 2] = 1; break OL; } - $118 = $mem + ($_sum233 + 28) | 0; - $120 = 384 + (HEAP32[$118 >> 2] << 2) | 0; + $120 = 384 + (HEAP32[($mem + ((-8 - $21 | 0) + 28) | 0) >> 2] << 2) | 0; do { if (($69 | 0) == (HEAP32[$120 >> 2] | 0)) { HEAP32[$120 >> 2] = $R_1; if (($R_1 | 0) != 0) { break; } - HEAP32[21] = HEAP32[21] & (1 << HEAP32[$118 >> 2] ^ -1); + HEAP32[21] = HEAP32[21] & (1 << HEAP32[($mem + ((-8 - $21 | 0) + 28) | 0) >> 2] ^ -1); $p_0 = $25; $psize_0 = $26; - HEAP32[sp + 952 >> 2] = 2; - HEAP32[sp + 956 >> 2] = 2; + HEAP32[sp + 672 >> 2] = 2; + HEAP32[sp + 676 >> 2] = 2; break OL; } else { if ($72 >>> 0 < (HEAP32[24] | 0) >>> 0) { _abort(); } - $134 = $72 + 16 | 0; - if ((HEAP32[$134 >> 2] | 0) == ($69 | 0)) { - HEAP32[$134 >> 2] = $R_1; + if ((HEAP32[($72 + 16 | 0) >> 2] | 0) == ($69 | 0)) { + HEAP32[($72 + 16 | 0) >> 2] = $R_1; } else { HEAP32[$72 + 20 >> 2] = $R_1; } if (($R_1 | 0) == 0) { $p_0 = $25; $psize_0 = $26; - HEAP32[sp + 952 >> 2] = 2; - HEAP32[sp + 956 >> 2] = 2; + HEAP32[sp + 672 >> 2] = 2; + HEAP32[sp + 676 >> 2] = 2; break OL; } } @@ -556,7 +508,7 @@ function _free$1(sp) { _abort(); } HEAP32[$R_1 + 24 >> 2] = $72; - $151 = HEAP32[$mem + ($_sum233 + 16) >> 2] | 0; + $151 = HEAP32[$mem + ((-8 - $21 | 0) + 16) >> 2] | 0; do { if (($151 | 0) != 0) { if ($151 >>> 0 < (HEAP32[24] | 0) >>> 0) { @@ -568,11 +520,11 @@ function _free$1(sp) { } } } while (0); - $164 = HEAP32[$mem + ($_sum233 + 20) >> 2] | 0; + $164 = HEAP32[$mem + ((-8 - $21 | 0) + 20) >> 2] | 0; if (($164 | 0) == 0) { $p_0 = $25; $psize_0 = $26; - HEAP32[sp + 952 >> 2] = 1; + HEAP32[sp + 672 >> 2] = 1; break OL; } if ($164 >>> 0 < (HEAP32[24] | 0) >>> 0) { @@ -582,50 +534,64 @@ function _free$1(sp) { HEAP32[$164 + 24 >> 2] = $R_1; $p_0 = $25; $psize_0 = $26; - HEAP32[sp + 952 >> 2] = 1; + HEAP32[sp + 672 >> 2] = 1; break OL; } } while (0); - HEAP32[sp + 360 >> 2] = $p_0; - HEAP32[sp + 352 >> 2] = $psize_0; + HEAP32[sp + 224 >> 2] = $p_0; + HEAP32[sp + 216 >> 2] = $psize_0; } function _free$2(sp) { sp = sp | 0; - var helper$1 = 0, $194 = 0, $16 = 0, $psize_0 = 0, $p_0 = 0, $189 = 0, $mem = 0, $14 = 0, $15 = 0, $psize_1 = 0, $193 = 0, $390 = 0, $393 = 0, $395 = 0, $396 = 0, $397 = 0, $F16_0 = 0, $_pre_phi = 0, $403 = 0, $404 = 0, $414 = 0, $415 = 0, $I18_0 = 0, $422 = 0, $423 = 0, $426 = 0, $428 = 0, $431 = 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; - $193 = HEAP32[sp + 376 >> 2] | 0; - $15 = HEAP32[sp + 64 >> 2] | 0; - $14 = HEAP32[sp + 56 >> 2] | 0; + var helper$1 = 0, $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 + 24 >> 2] | 0; $mem = HEAP32[sp + 8 >> 2] | 0; - $189 = HEAP32[sp + 368 >> 2] | 0; - $p_0 = HEAP32[sp + 360 >> 2] | 0; - $psize_0 = HEAP32[sp + 352 >> 2] | 0; - $16 = HEAP32[sp + 72 >> 2] | 0; - $194 = HEAP32[sp + 384 >> 2] | 0; + $189 = HEAP32[sp + 232 >> 2] | 0; + $p_0 = HEAP32[sp + 224 >> 2] | 0; + $psize_0 = HEAP32[sp + 216 >> 2] | 0; + $16 = HEAP32[sp + 32 >> 2] | 0; + $194 = HEAP32[sp + 240 >> 2] | 0; OL : do { do { helper$1 = 1; if (helper$1 ? ($194 & 2 | 0) == 0 : 0) { helper$1 = 0; - HEAP32[sp + 944 >> 2] = 0; - HEAP32[sp + 948 >> 2] = 0; - HEAP32[sp + 72 >> 2] = $16; - HEAP32[sp + 352 >> 2] = $psize_0; - HEAP32[sp + 360 >> 2] = $p_0; - HEAP32[sp + 368 >> 2] = $189; - HEAP32[sp + 384 >> 2] = $194; + 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 + 680 >> 2] = 5; + break OL; + } + _sys_trim(0) | 0; + HEAP32[sp + 680 >> 2] = 5; + break OL; + } + HEAP32[sp + 664 >> 2] = 0; + HEAP32[sp + 668 >> 2] = 0; + HEAP32[sp + 32 >> 2] = $16; + HEAP32[sp + 216 >> 2] = $psize_0; + HEAP32[sp + 224 >> 2] = $p_0; + HEAP32[sp + 232 >> 2] = $189; + HEAP32[sp + 240 >> 2] = $194; HEAP32[sp + 8 >> 2] = $mem; - HEAP32[sp + 56 >> 2] = $14; - HEAP32[sp + 64 >> 2] = $15; - HEAP32[sp + 640 >> 2] = $psize_1; + HEAP32[sp + 24 >> 2] = $10; + HEAP32[sp + 424 >> 2] = $psize_1; _free$0(sp); - $psize_1 = HEAP32[sp + 640 >> 2] | 0; - tempValue = HEAP32[sp + 944 >> 2] | 0; - tempInt = HEAP32[sp + 948 >> 2] | 0; - tempDouble = +HEAPF32[sp + 948 >> 2]; - HEAP32[sp + 944 >> 2] = 0; - HEAP32[sp + 948 >> 2] = 0; + $psize_1 = HEAP32[sp + 424 >> 2] | 0; + tempValue = HEAP32[sp + 664 >> 2] | 0; + tempInt = HEAP32[sp + 668 >> 2] | 0; + tempDouble = +HEAPF32[sp + 668 >> 2]; + HEAP32[sp + 664 >> 2] = 0; + HEAP32[sp + 668 >> 2] = 0; if ((tempValue | 0) == 5) { - HEAP32[sp + 960 >> 2] = 5; + HEAP32[sp + 680 >> 2] = 5; break OL; } if ((tempValue | 0) == 1) { @@ -634,7 +600,7 @@ function _free$2(sp) { } if (helper$1) { helper$1 = 0; - HEAP32[$193 >> 2] = $194 & -2; + 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; @@ -642,21 +608,17 @@ function _free$2(sp) { } while (0); $390 = $psize_1 >>> 3; if ($psize_1 >>> 0 < 256) { - $393 = $390 << 1; - $395 = 120 + ($393 << 2) | 0; $396 = HEAP32[20] | 0; - $397 = 1 << $390; do { - if (($396 & $397 | 0) == 0) { - HEAP32[20] = $396 | $397; - $F16_0 = $395; - $_pre_phi = 120 + ($393 + 2 << 2) | 0; + 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 { - $403 = 120 + ($393 + 2 << 2) | 0; - $404 = HEAP32[$403 >> 2] | 0; + $404 = HEAP32[(120 + (($390 << 1) + 2 << 2) | 0) >> 2] | 0; if ($404 >>> 0 >= (HEAP32[24] | 0) >>> 0) { $F16_0 = $404; - $_pre_phi = $403; + $_pre_phi = 120 + (($390 << 1) + 2 << 2) | 0; break; } _abort(); @@ -665,8 +627,8 @@ function _free$2(sp) { 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] = $395; - HEAP32[sp + 960 >> 2] = 5; + HEAP32[$p_0 + 12 >> 2] = 120 + ($390 << 1 << 2) | 0; + HEAP32[sp + 680 >> 2] = 5; break OL; } $414 = $p_0; @@ -679,12 +641,8 @@ function _free$2(sp) { $I18_0 = 31; break; } - $422 = ($415 + 1048320 | 0) >>> 16 & 8; - $423 = $415 << $422; - $426 = ($423 + 520192 | 0) >>> 16 & 4; - $428 = $423 << $426; - $431 = ($428 + 245760 | 0) >>> 16 & 2; - $436 = 14 - ($426 | $422 | $431) + ($428 << $431 >>> 15) | 0; + $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); @@ -757,7 +715,7 @@ function _free$2(sp) { if (($501 | 0) == 0) { $sp_0_in_i = 536; } else { - HEAP32[sp + 960 >> 2] = 5; + HEAP32[sp + 680 >> 2] = 5; break OL; } while (1) { @@ -770,7 +728,7 @@ function _free$2(sp) { } HEAP32[28] = -1; STACKTOP = sp; - HEAP32[sp + 960 >> 2] = 5; + HEAP32[sp + 680 >> 2] = 5; break OL; } while (0); } diff --git a/tools/test-js-optimizer-asm-outline3-output.js b/tools/test-js-optimizer-asm-outline3-output.js new file mode 100644 index 00000000..5cc0f48d --- /dev/null +++ b/tools/test-js-optimizer-asm-outline3-output.js @@ -0,0 +1,28 @@ +function _memset(ptr, value, num) { + ptr = ptr | 0; + value = value | 0; + num = num | 0; + var stop = 0, value4 = 0, unaligned = 0; + stop = ptr + num | 0; + if ((num | 0) >= 20) { + value = value & 255; + unaligned = ptr & 3; + value4 = value | value << 8 | value << 16 | value << 24; + if (unaligned) { + unaligned = ptr + 4 - unaligned | 0; + while ((ptr | 0) < (unaligned | 0)) { + HEAP8[ptr] = value; + ptr = ptr + 1 | 0; + } + } + while ((ptr | 0) < (stop & ~3 | 0)) { + HEAP32[ptr >> 2] = value4; + ptr = ptr + 4 | 0; + } + } + while ((ptr | 0) < (stop | 0)) { + HEAP8[ptr] = value; + ptr = ptr + 1 | 0; + } +} |