Skip to content

Commit 379d949

Browse files
authored
Run binaryen wasm-opt on wasm backend output (#6029)
* closure fixes for wasm backend * run binaryen wasm-opt on wasm backend output by default, when optimizing
1 parent 878c415 commit 379d949

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

emcc.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,8 +707,10 @@ def detect_fixed_language_mode(args):
707707
'BINARYEN_MEM_MAX': 'WASM_MEM_MAX',
708708
# TODO: change most (all?) other BINARYEN* names to WASM*
709709
}
710+
settings_key_changes = set()
710711
def setting_sub(s):
711712
key, rest = s.split('=', 1)
713+
settings_key_changes.add(key)
712714
return '='.join([settings_aliases.get(key, key), rest])
713715
settings_changes = list(map(setting_sub, settings_changes))
714716

@@ -1172,6 +1174,12 @@ def check(input_file):
11721174
options.js_opts = None
11731175
shared.Settings.BINARYEN = shared.Settings.WASM = 1
11741176

1177+
# wasm backend output can benefit from the binaryen optimizer (in asm2wasm,
1178+
# we run the optimizer during asm2wasm itself). use it, if not overridden
1179+
if 'BINARYEN_PASSES' not in settings_key_changes:
1180+
if options.opt_level > 0 or options.shrink_level > 0:
1181+
shared.Settings.BINARYEN_PASSES = shared.Building.opt_level_to_str(options.opt_level, options.shrink_level)
1182+
11751183
# to bootstrap struct_info, we need binaryen
11761184
os.environ['EMCC_WASM_BACKEND_BINARYEN'] = '1'
11771185

emscripten.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1782,7 +1782,7 @@ def emscript_wasm_backend(infile, settings, outfile, libraries=None, compiler_en
17821782
receiving = create_receiving_wasm(exported_implemented_functions, settings)
17831783

17841784
# finalize
1785-
module = create_module_wasm(sending, receiving, invoke_funcs, settings)
1785+
module = create_module_wasm(sending, receiving, invoke_funcs, exported_implemented_functions, settings)
17861786

17871787
write_output_file(outfile, post, module)
17881788
module = None
@@ -1948,7 +1948,7 @@ def create_receiving_wasm(exported_implemented_functions, settings):
19481948
return receiving
19491949

19501950

1951-
def create_module_wasm(sending, receiving, invoke_funcs, settings):
1951+
def create_module_wasm(sending, receiving, invoke_funcs, exported_implemented_functions, settings):
19521952
access_quote = access_quoter(settings)
19531953
invoke_wrappers = create_invoke_wrappers(invoke_funcs)
19541954

@@ -1983,10 +1983,11 @@ def create_module_wasm(sending, receiving, invoke_funcs, settings):
19831983
var establishStackSpace = Module['establishStackSpace'];
19841984
''' % shared.Settings.GLOBAL_BASE)
19851985

1986-
module.append('''
1987-
var setTempRet0 = Module['setTempRet0'];
1988-
var getTempRet0 = Module['getTempRet0'];
1989-
''')
1986+
# some runtime functionality may not have been generated in
1987+
# the wasm; provide a JS shim for it
1988+
for name in ['setTempRet0', 'getTempRet0', 'stackSave', 'stackRestore', 'stackAlloc']:
1989+
if name not in exported_implemented_functions:
1990+
module.append('var %s;\n' % name)
19901991

19911992
module.append(invoke_wrappers)
19921993
return module

0 commit comments

Comments
 (0)