diff options
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp index 32154af3c1c..83ef03a8c75 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp @@ -29,10 +29,20 @@ using namespace llvm; #define DEBUG_TYPE "wasm" +// Emscripten's asm.js-style exception handling +static cl::opt<bool> EnableEmExceptionHandling( + "wasm-em-exception-handling", + cl::desc("WebAssembly Emscripten-style exception 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( + *PassRegistry::getPassRegistry()); } //===----------------------------------------------------------------------===// @@ -149,6 +159,10 @@ void WebAssemblyPassConfig::addIRPasses() { if (getOptLevel() != CodeGenOpt::None) addPass(createWebAssemblyOptimizeReturned()); + // Handle exceptions. + if (EnableEmExceptionHandling) + addPass(createWebAssemblyLowerEmscriptenExceptions()); + TargetPassConfig::addIRPasses(); } |