diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-07-20 22:43:01 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-07-20 22:43:01 -0700 |
commit | 66171f5e8831142fb77e5b47181e1ea8b6c3b9fa (patch) | |
tree | aadae41da8d9883b75d3b5bb8b92358753bae1e9 | |
parent | f099024dcd6a05e2cb74d21d6cd871ed10a81983 (diff) |
simplify heuristics for restarting in outliner
-rwxr-xr-x | tests/runner.py | 4 | ||||
-rw-r--r-- | tools/js-optimizer.js | 10 |
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; |