diff options
Diffstat (limited to 'tools/js-optimizer.js')
-rw-r--r-- | tools/js-optimizer.js | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index 2f6b2ff3..d58c8c6c 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -671,6 +671,18 @@ function optimizeShiftsInternal(ast, conservative) { } } } + /* XXX - theoretically useful optimization(s), but commented out as not helpful in practice + // Transform (x << 2) >> 2 into x & mask or something even simpler + if (type == 'binary' && node[1] == '>>' && node[3][0] == 'num' && + node[2][0] == 'binary' && node[2][1] == '<<' && node[2][3][0] == 'num' && node[3][1] == node[2][3][1]) { + var subNode = node[2]; + var shifts = node[3][1]; + var mask = ((0xffffffff << shifts) >>> shifts) | 0; + return ['binary', '&', subNode[2], ['num', mask]]; + //return ['binary', '|', subNode[2], ['num', 0]]; + //return subNode[2]; + } + */ }); // Re-combine remaining shifts, to undo the breaking up we did before. may require reordering inside +'s traverse(fun, function(node, type, stack) { @@ -1312,7 +1324,7 @@ function registerize(ast) { } getStatements(fun).unshift(['var', vars]); } - printErr(fun[1] + ': saved ' + saved + ' / ' + (saved + nextReg - 1) + ' vars through registerization'); // not totally accurate + //printErr(fun[1] + ': saved ' + saved + ' / ' + (saved + nextReg - 1) + ' vars through registerization'); // not totally accurate }); } |