aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-07-20 22:43:01 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-07-20 22:43:01 -0700
commit66171f5e8831142fb77e5b47181e1ea8b6c3b9fa (patch)
treeaadae41da8d9883b75d3b5bb8b92358753bae1e9
parentf099024dcd6a05e2cb74d21d6cd871ed10a81983 (diff)
simplify heuristics for restarting in outliner
-rwxr-xr-xtests/runner.py4
-rw-r--r--tools/js-optimizer.js10
2 files changed, 6 insertions, 8 deletions
diff --git a/tests/runner.py b/tests/runner.py
index c04ced48..89515e88 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -10855,7 +10855,7 @@ f.close()
if size > 100: ret[curr] = size
return ret
- for outlining_limit in [1000, 5000, 0]:
+ for outlining_limit in [2000, 5000, 0]:
Popen([PYTHON, EMCC, src] + libs + ['-o', 'test.js', '-O2', '-g3', '-s', 'OUTLINING_LIMIT=%d' % outlining_limit] + args).communicate()
assert os.path.exists('test.js')
for engine in JS_ENGINES:
@@ -10871,7 +10871,7 @@ f.close()
test('zlib', path_from_root('tests', 'zlib', 'example.c'),
self.get_library('zlib', os.path.join('libz.a'), make_args=['libz.a']),
open(path_from_root('tests', 'zlib', 'ref.txt'), 'r').read(),
- { 1000: (300, 500), 5000: (800, 1100), 0: (1500, 1800) },
+ { 2000: (300, 500), 5000: (800, 1100), 0: (1500, 1800) },
args=['-I' + path_from_root('tests', 'zlib')], suffix='c')
def test_symlink(self):
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index 75ffe33e..87851b1b 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -3313,8 +3313,8 @@ function outline(ast) {
function outlineStatements(func, asmData, stats, maxSize) {
level++;
printErr('outlineStatements: ' + [func[1], level, measureSize(func)]);
- var originalSize = measureSize(stats);
- if (originalSize < sizeToOutline) { level--; return }
+ var lastSize = measureSize(stats);
+ if (lastSize < sizeToOutline) { level--; return }
var ret = [];
var sizeSeen = 0;
var end = stats.length-1;
@@ -3328,10 +3328,8 @@ function outline(ast) {
// (but only if the total costs are not extravagant)
var currSize = measureSize(stats);
var outlinedSize = measureSize(ret);
- if (canRestart && currSize > 1.2*sizeToOutline && sum(ret.map(function(newFunc) {
- return costs[newFunc[1]] || 0;
- })) < 0.5*originalSize) {
- printErr('restarting ' + func[1] + ' since ' + [currSize, outlinedSize, originalSize] + ' in level ' + level);
+ if (canRestart && currSize > 1.2*sizeToOutline && lastSize - currSize >= 0.75*sizeToOutline) {
+ printErr('restarting ' + func[1] + ' since ' + [currSize, outlinedSize, lastSize] + ' in level ' + level);
lastSize = currSize;
i = stats.length;
end = stats.length-1;