diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-01-15 20:40:28 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-01-15 20:40:28 -0800 |
commit | 22dc3bb223334137a3b7c77906b8960a9197be7a (patch) | |
tree | 138a9818fd9883c7562e3c876c15f867ec28cdd3 | |
parent | 4f92b887306ea9f722c555fa8405ff463ba8ffee (diff) |
run multiple js optimizer passes in batches
-rwxr-xr-x | emcc | 51 |
1 files changed, 32 insertions, 19 deletions
@@ -524,34 +524,47 @@ try: Popen(js_transform.split(' ') + [os.path.abspath(final)]).communicate() if DEBUG: save_intermediate('transformed') + # It is useful to run several js optimizer passes together, to save on unneeded unparsing/reparsing + js_optimizer_queue = [] + def flush_js_optimizer_queue(): + global final, js_optimizer_queue + if len(js_optimizer_queue) > 0: + if not DEBUG: + final = shared.Building.js_optimizer(final, js_optimizer_queue) + else: + for name in js_optimizer_queue: + print >> sys.stderr, 'emcc: applying js optimization pass:', name + final = shared.Building.js_optimizer(final, [name]) + save_intermediate(name) + js_optimizer_queue = [] + if opt_level >= 1: if DEBUG: print >> sys.stderr, 'emcc: running pre-closure post-opts' - final = shared.Building.js_optimizer(final, []) # Clean up the syntax a bit - if DEBUG: save_intermediate('pretty') + if DEBUG: + # Clean up the syntax a bit + final = shared.Building.js_optimizer(final, []) + if DEBUG: save_intermediate('pretty') if shared.Settings.RELOOP: - # js optimizer - final = shared.Building.js_optimizer(final, ['hoistMultiples']) - if DEBUG: save_intermediate('hoistMultiples') - final = shared.Building.js_optimizer(final, ['loopOptimizer']) - if DEBUG: save_intermediate('loopOptimizer') + js_optimizer_queue += ['hoistMultiples', 'loopOptimizer'] + + flush_js_optimizer_queue() # eliminator + if DEBUG: print >> sys.stderr, 'emcc: running variable eliminator' final = shared.Building.eliminator(final) if DEBUG: save_intermediate('eliminator') # js optimizer pre-pass - final = shared.Building.js_optimizer(final, 'simplifyExpressionsPre') - if DEBUG: save_intermediate('simplifyExpressionsPre') - final = shared.Building.js_optimizer(final, 'optimizeShiftsConservative') - if DEBUG: save_intermediate('optimizeShiftsConservative') - #final = shared.Building.js_optimizer(final, 'optimizeShiftsAggressive') - #if DEBUG: save_intermediate('optimizeShiftsAggressive') - #final = shared.Building.eliminator(final) # aggressive shifts optimization introduces some new variables, remove ones that we can - #if DEBUG: save_intermediate('eliminator') + js_optimizer_queue += ['simplifyExpressionsPre', 'optimizeShiftsConservative'] + ###js_optimizer_queue += ['optimizeShiftsAggressive'] + ###final = shared.Building.eliminator(final) # aggressive shifts optimization introduces some new variables, remove ones that we can + ###if DEBUG: save_intermediate('eliminator') if closure: + flush_js_optimizer_queue() + if DEBUG: print >> sys.stderr, 'emcc: running closure' final = shared.Building.closure_compiler(final) if DEBUG: save_intermediate('closure') @@ -559,12 +572,12 @@ try: if opt_level >= 1: # js optimizer post-pass if DEBUG: print >> sys.stderr, 'emcc: running post-closure post-opts' - final = shared.Building.js_optimizer(final, 'simplifyExpressionsPost') - if DEBUG: save_intermediate('simplifyExpressionsPost') + js_optimizer_queue += ['simplifyExpressionsPost'] if compress_whitespace: - final = shared.Building.js_optimizer(final, 'compress') - if DEBUG: save_intermediate('compress') + js_optimizer_queue += ['compress'] + + flush_js_optimizer_queue() # If we were asked to also generate HTML, do that if final_suffix == 'html': |