aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2011-12-29 12:41:06 -0800
committerAlon Zakai <alonzakai@gmail.com>2011-12-29 12:41:06 -0800
commit85436a9cc37153035a069bfe8c2dedc18b262912 (patch)
tree5636805c9a0f45e27a711635268688e5ffc1b016
parentba798003e78b4c36f39586730304c6af8183ee89 (diff)
work harder to not modify original order of +,+,+ sets in optimizeShifts; improves speed in corrections benchmark
-rw-r--r--tools/js-optimizer.js9
-rw-r--r--tools/test-js-optimizer-t2-output.js8
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);