diff options
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp index e442cb1cded..1d21f2b33fd 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp @@ -30,18 +30,24 @@ using namespace llvm; #define DEBUG_TYPE "wasm" // Emscripten's asm.js-style exception handling -static cl::opt<bool> EnableEmExceptionHandling( +static cl::opt<bool> EnableEmException( "enable-emscripten-cxx-exceptions", cl::desc("WebAssembly Emscripten-style exception handling"), cl::init(false)); +// Emscripten's asm.js-style setjmp/longjmp handling +static cl::opt<bool> EnableEmSjLj( + "enable-emscripten-sjlj", + cl::desc("WebAssembly Emscripten-style setjmp/longjmp handling"), + cl::init(false)); + extern "C" void LLVMInitializeWebAssemblyTarget() { // Register the target. RegisterTargetMachine<WebAssemblyTargetMachine> X(TheWebAssemblyTarget32); RegisterTargetMachine<WebAssemblyTargetMachine> Y(TheWebAssemblyTarget64); // Register exception handling pass to opt - initializeWebAssemblyLowerEmscriptenExceptionsPass( + initializeWebAssemblyLowerEmscriptenEHSjLjPass( *PassRegistry::getPassRegistry()); } @@ -160,8 +166,9 @@ void WebAssemblyPassConfig::addIRPasses() { addPass(createWebAssemblyOptimizeReturned()); // Handle exceptions. - if (EnableEmExceptionHandling) - addPass(createWebAssemblyLowerEmscriptenExceptions()); + if (EnableEmException || EnableEmSjLj) + addPass(createWebAssemblyLowerEmscriptenEHSjLj(EnableEmException, + EnableEmSjLj)); TargetPassConfig::addIRPasses(); } |