diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/PostEmscripten.cpp | 18 | ||||
-rw-r--r-- | src/wasm/wasm-emscripten.cpp | 9 |
2 files changed, 19 insertions, 8 deletions
diff --git a/src/passes/PostEmscripten.cpp b/src/passes/PostEmscripten.cpp index 2397284c3..aa6c90977 100644 --- a/src/passes/PostEmscripten.cpp +++ b/src/passes/PostEmscripten.cpp @@ -130,6 +130,9 @@ struct PostEmscripten : public Pass { } } + // Optimize imports + optimizeImports(runner, module); + // Optimize calls OptimizeCalls().run(runner, module); @@ -137,6 +140,21 @@ struct PostEmscripten : public Pass { optimizeExceptions(runner, module); } + void optimizeImports(PassRunner* runner, Module* module) { + // Calling emscripten_longjmp_jmpbuf is the same as emscripten_longjmp. + Name EMSCRIPTEN_LONGJMP("emscripten_longjmp"); + Name EMSCRIPTEN_LONGJMP_JMPBUF("emscripten_longjmp_jmpbuf"); + ImportInfo info(*module); + auto* emscripten_longjmp = + info.getImportedFunction(ENV, EMSCRIPTEN_LONGJMP); + auto* emscripten_longjmp_jmpbuf = + info.getImportedFunction(ENV, EMSCRIPTEN_LONGJMP_JMPBUF); + if (emscripten_longjmp && emscripten_longjmp_jmpbuf) { + // Both exist, so it is worth renaming so that we have only one. + emscripten_longjmp_jmpbuf->base = EMSCRIPTEN_LONGJMP; + } + } + // Optimize exceptions (and setjmp) by removing unnecessary invoke* calls. // An invoke is a call to JS with a function pointer; JS does a try-catch // and calls the pointer, catching and reporting any error. If we know no diff --git a/src/wasm/wasm-emscripten.cpp b/src/wasm/wasm-emscripten.cpp index c287087c9..e41d0df48 100644 --- a/src/wasm/wasm-emscripten.cpp +++ b/src/wasm/wasm-emscripten.cpp @@ -633,19 +633,12 @@ struct FixInvokeFunctionNamesWalker getSig(sigWoOrigFunc.results, sigWoOrigFunc.params)); } - Name fixEmEHSjLjNames(const Name& name, Signature sig) { - if (name == "emscripten_longjmp_jmpbuf") { - return "emscripten_longjmp"; - } - return fixEmExceptionInvoke(name, sig); - } - void visitFunction(Function* curr) { if (!curr->imported()) { return; } - Name newname = fixEmEHSjLjNames(curr->base, curr->sig); + Name newname = fixEmExceptionInvoke(curr->base, curr->sig); if (newname == curr->base) { return; } |