aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-01-15 20:40:28 -0800
committerAlon Zakai <alonzakai@gmail.com>2012-01-15 20:40:28 -0800
commit22dc3bb223334137a3b7c77906b8960a9197be7a (patch)
tree138a9818fd9883c7562e3c876c15f867ec28cdd3
parent4f92b887306ea9f722c555fa8405ff463ba8ffee (diff)
run multiple js optimizer passes in batches
-rwxr-xr-xemcc51
1 files changed, 32 insertions, 19 deletions
diff --git a/emcc b/emcc
index 090288b5..2a575559 100755
--- a/emcc
+++ b/emcc
@@ -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':