diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-07-08 16:27:18 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-07-08 16:27:18 -0700 |
commit | c041a3f9c492ea2be306b749027712b5701351e1 (patch) | |
tree | 180286650bd2f355823c4c94e7778902c773225f /tools/js-optimizer.js | |
parent | cc89726efd272f4d47a25c2204cd635163c8522a (diff) |
read results from outlined code
Diffstat (limited to 'tools/js-optimizer.js')
-rw-r--r-- | tools/js-optimizer.js | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index d81ae381..ff39373a 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -2973,7 +2973,7 @@ function outline(ast) { var writes = {}; var appearances = {}; - traverse(func, function(node, type) { + traverse(ast, function(node, type) { if (type == 'assign' && node[2][0] == 'name') { var name = node[2][1]; if (name in asmData.vars || name in asmData.params) { @@ -3004,14 +3004,17 @@ function outline(ast) { printErr(' do outline ' + [func[1], level, 'range:', start, end, 'of', stats.length]); var code = stats.slice(start, end+1); var varInfo = analyzeVariables(func, asmData, code); - var spills = []; + var reps = []; for (var v in varInfo.reads) { if (v != 'sp') { - spills.push(['stat', ['assign', true,['sub', ['name', getAsmType(asmData, v) == ASM_INT ? 'HEAP32' : 'HEAPF32'], ['binary', '>>', ['binary', '+', ['name', 'sp'], ['num', asmData.stackPos[v]]], ['num', '2']]], ['name', v]]]); + reps.push(['stat', ['assign', true, ['sub', ['name', getAsmType(asmData, v) == ASM_INT ? 'HEAP32' : 'HEAPF32'], ['binary', '>>', ['binary', '+', ['name', 'sp'], ['num', asmData.stackPos[v]]], ['num', '2']]], ['name', v]]]); } } - var callCode = ['stat', ['call', ['name', 'outlinedCode'], [['name', 'sp']]]]; - stats.splice.apply(stats, [start, end-start+1].concat(spills).concat([callCode])); + reps.push(['stat', ['call', ['name', 'outlinedCode'], [['name', 'sp']]]]); + for (var v in varInfo.writes) { + reps.push(['stat', ['assign', true, ['name', v], ['sub', ['name', getAsmType(asmData, v) == ASM_INT ? 'HEAP32' : 'HEAPF32'], ['binary', '>>', ['binary', '+', ['name', 'sp'], ['num', asmData.stackPos[v]]], ['num', '2']]]]]); + } + stats.splice.apply(stats, [start, end-start+1].concat(reps)); return [emptyNode()]; } |