aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/js-optimizer.js10
-rw-r--r--tools/test-js-optimizer-t2-output.js30
-rw-r--r--tools/test-js-optimizer-t2c-output.js5
-rw-r--r--tools/test-js-optimizer-t2c.js1
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);