diff options
author | Alon Zakai <alonzakai@gmail.com> | 2011-12-29 12:41:06 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2011-12-29 12:41:06 -0800 |
commit | 85436a9cc37153035a069bfe8c2dedc18b262912 (patch) | |
tree | 5636805c9a0f45e27a711635268688e5ffc1b016 | |
parent | ba798003e78b4c36f39586730304c6af8183ee89 (diff) |
work harder to not modify original order of +,+,+ sets in optimizeShifts; improves speed in corrections benchmark
-rw-r--r-- | tools/js-optimizer.js | 9 | ||||
-rw-r--r-- | tools/test-js-optimizer-t2-output.js | 8 |
2 files changed, 10 insertions, 7 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index 0de2c506..738ee7ee 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -569,13 +569,16 @@ function optimizeShifts(ast) { } } flatten(node); + var originalOrder = addedItems.slice(); function key(node) { // a unique value for all relevant shifts for recombining, non-unique for stuff we don't need to bother with + function originalOrderKey(item) { + return -originalOrder.indexOf(item); + } if (node[0] == 'binary' && node[1] in SIMPLE_SHIFTS) { if (node[3][0] == 'num' && node[3][1] >= 0 && node[3][1] <= 3) return 2*node[3][1] + (node[1] == '>>' ? 100 : 0); // 0-106 - return node[1] == '>>' ? 2000 : 1000; + return (node[1] == '>>' ? 20000 : 10000) + originalOrderKey(node); } - if (node[0] == 'num') return -1000; - return -1; + return -10000 + originalOrderKey(node); // Don't modify the original order if we don't modify anything } for (var i = 0; i < addedItems.length; i++) { if (addedItems[i][0] == 'string') return; // this node is not relevant for us diff --git a/tools/test-js-optimizer-t2-output.js b/tools/test-js-optimizer-t2-output.js index 30e706f9..dd2069fd 100644 --- a/tools/test-js-optimizer-t2-output.js +++ b/tools/test-js-optimizer-t2-output.js @@ -47,13 +47,13 @@ function shifty($id) { q(HEAPF32[(HEAP32[$wavelet38] >> 2) + ($k << 2) + 100]); pause(4); var $p = $k, $parameters_addr = get("burger") >> 2; - q(HEAP32[$parameters_addr + $p + 1406]); - q(HEAP32[$parameters_addr + $p + 1411]); - q(HEAP32[$parameters_addr + $p + 1416]); + q(HEAP32[$parameters_addr + 1406 + $p]); + q(HEAP32[$parameters_addr + 1411 + $p]); + q(HEAP32[$parameters_addr + 1416 + $p]); pause(5); var $res_spec242 = get($real), $cp = get("b"), $tileno = arguments[2]; while (get(1)) { - q(HEAP32[$parameters_addr + ($res_spec242 - 1) + 1406]); + q(HEAP32[$parameters_addr + 1406 + ($res_spec242 - 1)]); q(HEAP32[(HEAP32[($cp >> 2) + 27] >> 2) + $tileno * 1397 + 105]); } pause(6); |