diff options
-rw-r--r-- | tools/js-optimizer.js | 16 | ||||
-rw-r--r-- | tools/test-js-optimizer-regs-output.js | 40 | ||||
-rw-r--r-- | tools/test-js-optimizer-regs.js | 44 |
3 files changed, 92 insertions, 8 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index a354a236..57d62339 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -1226,7 +1226,7 @@ function registerize(ast, conservative) { // Remove all vars traverse(fun, function(node, type) { if (type == 'var') { - var vars = node[1]; + var vars = node[1].filter(function(varr) { return varr[1] }); if (vars.length > 1) { var ret = ['stat', []]; var curr = ret[1]; @@ -1237,18 +1237,22 @@ function registerize(ast, conservative) { } curr[2] = ['assign', true, ['name', vars[vars.length-1][0]], vars[vars.length-1][1]]; return ret; - } else { + } else if (vars.length == 1) { return ['assign', true, ['name', vars[0][0]], vars[0][1]]; + } else { + return emptyNode(); } } }); vacuum(fun); // Add vars at the beginning - var vars = []; - for (var i = 1; i < nextReg; i++) { - vars.push([fullNames[i]]); + if (nextReg > 1) { + var vars = []; + for (var i = 1; i < nextReg; i++) { + vars.push([fullNames[i]]); + } + getStatements(fun).unshift(['var', vars]); } - getStatements(fun).unshift(['var', vars]); }); } diff --git a/tools/test-js-optimizer-regs-output.js b/tools/test-js-optimizer-regs-output.js index 8e5d2e63..c0c6c923 100644 --- a/tools/test-js-optimizer-regs-output.js +++ b/tools/test-js-optimizer-regs-output.js @@ -24,4 +24,42 @@ function test() { r3 = f(), r1 = 100, r1 = 1e3, r1 = 1e5; f(r3()); } -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["test"] +function primes() { + var r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14; + r1 = 2; + r2 = 0; + $_$2 : while (1) { + r3 = r1 | 0; + r4 = _sqrtf(r3); + r5 = 2; + $_$4 : while (1) { + r6 = r5 | 0; + r7 = r6 < r4; + if (!r7) { + r8 = 1; + break $_$4; + } + r9 = (r1 | 0) % (r5 | 0); + r10 = (r9 | 0) == 0; + if (r10) { + r8 = 0; + break $_$4; + } + r11 = r5 + 1 | 0; + r5 = r11; + } + r12 = r8 + r2 | 0; + r13 = r1 + 1 | 0; + r14 = (r12 | 0) < 1e5; + if (r14) { + r1 = r13; + r2 = r12; + } else { + break $_$2; + } + } + r12 = _printf(STRING_TABLE.__str | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = r1, tempInt)); + return 1; + return null; +} +// EMSCRIPTEN_GENERATED_FUNCTIONS: ["test", "primes"] diff --git a/tools/test-js-optimizer-regs.js b/tools/test-js-optimizer-regs.js index 2be4ee6a..1dd7b9d3 100644 --- a/tools/test-js-optimizer-regs.js +++ b/tools/test-js-optimizer-regs.js @@ -23,4 +23,46 @@ function test() { var ck = f(), ck2 = 100, ck3 = 1000, ck4 = 100000; f(ck()); } -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["test"] +function primes() { + var __label__; + var $curri_01 = 2; + var $primes_02 = 0; + $_$2 : while (1) { + var $primes_02; + var $curri_01; + var $conv1 = $curri_01 | 0; + var $call = _sqrtf($conv1); + var $j_0 = 2; + $_$4 : while (1) { + var $j_0; + var $conv = $j_0 | 0; + var $cmp2 = $conv < $call; + if (!$cmp2) { + var $ok_0 = 1; + break $_$4; + } + var $rem = ($curri_01 | 0) % ($j_0 | 0); + var $cmp3 = ($rem | 0) == 0; + if ($cmp3) { + var $ok_0 = 0; + break $_$4; + } + var $inc = $j_0 + 1 | 0; + var $j_0 = $inc; + } + var $ok_0; + var $inc5_primes_0 = $ok_0 + $primes_02 | 0; + var $inc7 = $curri_01 + 1 | 0; + var $cmp = ($inc5_primes_0 | 0) < 1e5; + if ($cmp) { + var $curri_01 = $inc7; + var $primes_02 = $inc5_primes_0; + } else { + break $_$2; + } + } + var $call8 = _printf(STRING_TABLE.__str | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = $curri_01, tempInt)); + return 1; + return null; +} +// EMSCRIPTEN_GENERATED_FUNCTIONS: ["test", "primes"] |