diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/js-optimizer.js | 10 | ||||
-rw-r--r-- | tools/test-js-optimizer-t2-output.js | 30 | ||||
-rw-r--r-- | tools/test-js-optimizer-t2c-output.js | 5 | ||||
-rw-r--r-- | tools/test-js-optimizer-t2c.js | 1 |
4 files changed, 27 insertions, 19 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index a7381fd9..48139e82 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -451,11 +451,11 @@ function optimizeShiftsInternal(ast, conservative) { // work perfectly is with parameters, but inlining can fix even that if (data.replaceOriginal) { assert(0); - data.benefit = totalTimesShifted - ((data.uses-totalTimesShifted) + data.defs + (data.param ? 1 : 0)); + //data.benefit = totalTimesShifted - ((data.uses-totalTimesShifted) + data.defs + (data.param ? 1 : 0)); } else { // We keep the original around, so there is some additional cost for each def, but none for unshifted uses - if (data.defs == 1) { // bad 11 12 ok - data.benefit = totalTimesShifted - 11; + if (data.defs == 1) { + data.benefit = totalTimesShifted - 2*(data.defs + (data.param ? 1 : 0)); } } if (conservative) data.benefit = 0; @@ -591,7 +591,7 @@ function optimizeShiftsInternal(ast, conservative) { }); // Before recombining, do some additional optimizations traverse(fun, function(node, type) { - if (type == 'binary' && node[1] == '>>' && node[2][0] == 'num' && node[3][0] == 'num' && node[3][0] <= MAX_SHIFTS) { + if (type == 'binary' && node[1] == '>>' && node[2][0] == 'num' && node[3][0] == 'num' && node[3][1] <= MAX_SHIFTS) { var subNode = node[2]; var shifts = node[3][1]; var result = subNode[1] / Math.pow(2, shifts); @@ -684,7 +684,7 @@ function optimizeShiftsInternal(ast, conservative) { // so it might take more space, but normally at most one more digit). var added = false; for (i = 0; i < addedItems.length; i++) { - if (addedItems[i][0] == 'binary' && addedItems[i][1] == '>>' && addedItems[i][3][0] == 'num' && addedItems[i][3][0] <= MAX_SHIFTS) { + if (addedItems[i][0] == 'binary' && addedItems[i][1] == '>>' && addedItems[i][3][0] == 'num' && addedItems[i][3][1] <= MAX_SHIFTS) { addedItems[i] = ['binary', '>>', ['binary', '+', addedItems[i][2], ['num', num << addedItems[i][3][1]]], addedItems[i][3]]; added = true; } diff --git a/tools/test-js-optimizer-t2-output.js b/tools/test-js-optimizer-t2-output.js index 9e237a30..51e2af77 100644 --- a/tools/test-js-optimizer-t2-output.js +++ b/tools/test-js-optimizer-t2-output.js @@ -1,22 +1,28 @@ function shifty($id) { - var $id$s2 = $id >> 2; - q(HEAP32[$id$s2]); - q(HEAP32[$id$s2 + 10]); - q(HEAP32[$id$s2 + 20]); - q(HEAP32[(unknown1 + unknown2 >> 2) + $id$s2]); - q(HEAP32[(unknown1 + unknown2 >> 2) + $id$s2]); + var $tp$s2; + var $parameters_addr$s2; + var $wavelet38$s2; + var _dwt_norms_real$s2; + var _idents$s2; + var $id3$s3; + var $id2$s1; + q(HEAP32[$id >> 2]); + q(HEAP32[$id + 40 >> 2]); + q(HEAP32[$id + 80 >> 2]); + q(HEAP32[unknown1 + unknown2 + $id >> 2]); + q(HEAP32[unknown1 + $id + unknown2 >> 2]); var localUnchanged1 = get(1), localUnchanged2 = get(1); - q(HEAP32[(localUnchanged1 + localUnchanged2 >> 2) + $id$s2]); + q(HEAP32[localUnchanged1 + $id + localUnchanged2 >> 2]); q($id >> _something_); $id = q(".."); - $id$s2 = $id >> 2; q($id << _somethingElse_); pause(-1); var $id2; - $id2 = get(54) >> 1; - q(HEAP32[$id2]); - q(HEAP32[$id2 + 20]); - q(HEAP32[$id2 + 40]); + $id2 = get(54); + $id2$s1 = $id2 >> 1; + q(HEAP32[$id2$s1]); + q(HEAP32[$id2$s1 + 20]); + q(HEAP32[$id2$s1 + 40]); var $id3 = get(74), $id3$s3 = $id3 >> 3; q(HEAP32[$id3$s3]); q(HEAP32[$id3$s3 + 5]); diff --git a/tools/test-js-optimizer-t2c-output.js b/tools/test-js-optimizer-t2c-output.js index 25bb6108..ee81b62f 100644 --- a/tools/test-js-optimizer-t2c-output.js +++ b/tools/test-js-optimizer-t2c-output.js @@ -5,9 +5,10 @@ function shifty() { var $ead_192394b = HEAP32[($26 << 16 >> 16 << 2) + $pCur_addr + 116]; $pPage2 = HEAP32[($26 << 16 >> 16) + $pCur_addr + 116]; var $ead_192394b = HEAP32[($26 << 16 >> 16) + $pCur_addr + 116]; + q(4); q($13 + 8 >> 2); - q(28 + $13 >> 2); - q(60 + $13 >> 2); + q($13 + 28 >> 2); + q($13 + 60 >> 2); q($13 + $15 + 12 >> 2); q(HEAPF32[$output + ($j37 << 4) + 4 >> 2]); q($13 + 13 << 2); diff --git a/tools/test-js-optimizer-t2c.js b/tools/test-js-optimizer-t2c.js index c5e76b63..e820548c 100644 --- a/tools/test-js-optimizer-t2c.js +++ b/tools/test-js-optimizer-t2c.js @@ -6,6 +6,7 @@ function shifty() { $pPage2 = HEAP32[$pCur_addr + 116 + ($26 << 16 >> 16)]; var $ead_192394b = HEAP32[$pCur_addr + 116 + ($26 << 16 >> 16)]; // We prefer to do additions then shifts, so the shift happens last, because the shift output is known to be 32-bit. So these should not change + q(16 >> 2); q($13 + 8 >> 2); q(28 + $13 >> 2); q(48 + $13 + 12 >> 2); |