diff options
-rw-r--r-- | tools/js-optimizer.js | 3 | ||||
-rw-r--r-- | tools/test-js-optimizer-t2-output.js | 3 | ||||
-rw-r--r-- | tools/test-js-optimizer-t2.js | 3 |
3 files changed, 8 insertions, 1 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index 7bb0b403..435a64de 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -497,7 +497,8 @@ function optimizeShifts(ast) { more = false; traverse(fun, function(node, type) { if (node[0] == 'binary' && node[1] in SIMPLE_SHIFTS && node[2][0] == 'binary' && node[2][1] in SIMPLE_SHIFTS && - node[3][0] == 'num' && node[2][3][0] == 'num') { // do not turn a << b << c into a << b + c; while logically identical, it is slower + node[3][0] == 'num' && node[2][3][0] == 'num' && // do not turn a << b << c into a << b + c; while logically identical, it is slower + Math.abs(node[3][1]) < 8 && Math.abs(node[2][3][1]) < 8) { // do not modify things like x << 24 >> 24 (which removes some bits) more = true; var combinedShift = '>>'; var sign1 = node[1] == '>>' ? 1 : -1; diff --git a/tools/test-js-optimizer-t2-output.js b/tools/test-js-optimizer-t2-output.js index 898d6633..bc47c9bb 100644 --- a/tools/test-js-optimizer-t2-output.js +++ b/tools/test-js-optimizer-t2-output.js @@ -70,5 +70,8 @@ function shifty($id) { HEAP32[$tp] = 5; HEAP32[HEAP[$tp]] = 5; HEAP32[HEAP[$tp] >> 2] = 5; + pause(7); + q(go()); + q(go() >> 8 << 8); } // EMSCRIPTEN_GENERATED_FUNCTIONS: ["shifty"] diff --git a/tools/test-js-optimizer-t2.js b/tools/test-js-optimizer-t2.js index 3afdbc3d..f9b5e10c 100644 --- a/tools/test-js-optimizer-t2.js +++ b/tools/test-js-optimizer-t2.js @@ -78,5 +78,8 @@ function shifty($id) { HEAP32[$tp >> 2] = 5; HEAP32[HEAP[$tp >> 2]] = 5; HEAP32[HEAP[$tp >> 2] >> 2] = 5; + pause(7); + q(go() >> 1 << 1); + q(go() >> 8 << 8); } // EMSCRIPTEN_GENERATED_FUNCTIONS: ["shifty"] |