diff options
author | Alon Zakai <alonzakai@gmail.com> | 2011-12-31 09:25:40 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2011-12-31 09:25:40 -0800 |
commit | 8f4be2eb565c5c612d065973f9eca6f47835efe5 (patch) | |
tree | 2537d717770b982af5a758416e521066a601b580 /tools/js-optimizer.js | |
parent | 8268b5a015dff2d73c2e1e9a25ea68fd0b0bdc92 (diff) |
fix shift optimizer bugs
Diffstat (limited to 'tools/js-optimizer.js')
-rw-r--r-- | tools/js-optimizer.js | 10 |
1 files changed, 5 insertions, 5 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; } |