diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-06-21 16:54:51 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-06-21 17:27:01 -0700 |
commit | b5fbaa0114212a9f9837958d6b9e62468b38b54f (patch) | |
tree | 56373a1eacce277589e4576547f2382d2296f8e8 | |
parent | df420614de18bf8fa8e45a88feabbecd3618b892 (diff) |
do not run addition optimization pass in asm; it just adds overhead, and minorly increases code size by changing addition order against the grain of operator precedence
-rw-r--r-- | tools/js-optimizer.js | 74 |
1 files changed, 38 insertions, 36 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index 8e9e229e..ae72437b 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -2626,48 +2626,50 @@ function eliminate(ast, memSafe) { } }); - // A class for optimizing expressions. We know that it is legitimate to collapse - // 5+7 in the generated code, as it will always be numerical, for example. XXX do we need this? here? - function ExpressionOptimizer(node) { - this.node = node; - - this.run = function() { - traverse(this.node, function(node, type) { - if (type === 'binary' && node[1] == '+') { - var names = []; - var num = 0; - var has_num = false; - var fail = false; - traverse(node, function(subNode, subType) { - if (subType === 'binary') { - if (subNode[1] != '+') { + if (!asm) { // TODO: deprecate in non-asm too + // A class for optimizing expressions. We know that it is legitimate to collapse + // 5+7 in the generated code, as it will always be numerical, for example. XXX do we need this? here? + function ExpressionOptimizer(node) { + this.node = node; + + this.run = function() { + traverse(this.node, function(node, type) { + if (type === 'binary' && node[1] == '+') { + var names = []; + var num = 0; + var has_num = false; + var fail = false; + traverse(node, function(subNode, subType) { + if (subType === 'binary') { + if (subNode[1] != '+') { + fail = true; + return false; + } + } else if (subType === 'name') { + names.push(subNode[1]); + return; + } else if (subType === 'num') { + num += subNode[1]; + has_num = true; + return; + } else { fail = true; return false; } - } else if (subType === 'name') { - names.push(subNode[1]); - return; - } else if (subType === 'num') { - num += subNode[1]; - has_num = true; - return; - } else { - fail = true; - return false; - } - }); - if (!fail && has_num) { - var ret = ['num', num]; - for (var i = 0; i < names.length; i++) { - ret = ['binary', '+', ['name', names[i]], ret]; + }); + if (!fail && has_num) { + var ret = ['num', num]; + for (var i = 0; i < names.length; i++) { + ret = ['binary', '+', ['name', names[i]], ret]; + } + return ret; } - return ret; } - } - }); - }; + }); + }; + } + new ExpressionOptimizer(ast).run(); } - new ExpressionOptimizer(ast).run(); } function eliminateMemSafe(ast) { |