summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/PostEmscripten.cpp18
-rw-r--r--src/wasm/wasm-emscripten.cpp9
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;
}