summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
diff options
context:
space:
mode:
authorDerek Schuff <dschuff@google.com>2016-08-18 15:27:25 +0000
committerDerek Schuff <dschuff@google.com>2016-08-18 15:27:25 +0000
commitccdceda1282fa48f304e0cd0c1b6f6861be7dcd3 (patch)
tree3fa7cd28e40ef1908073833b2025ee80cf0c33e6 /llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
parent1d0560b14dc214d108072057dfe7ab5d79bd7e67 (diff)
downloadbcm5719-llvm-ccdceda1282fa48f304e0cd0c1b6f6861be7dcd3.tar.gz
bcm5719-llvm-ccdceda1282fa48f304e0cd0c1b6f6861be7dcd3.zip
[WebAssembly] Refactor WebAssemblyLowerEmscriptenException pass for setjmp/longjmp
This patch changes the code structure of WebAssemblyLowerEmscriptenException pass to support both exception handling and setjmp/longjmp. It also changes the name of the pass and the source file. 1. Change the file/pass name to WebAssemblyLowerEmscriptenExceptions -> WebAssemblyLowerEmscriptenEHSjLj to make it clear that it supports both EH and SjLj 2. List function / global variable names at the top so they can be changed easily 3. Some cosmetic changes Patch by Heejin Ahn Differential Revision: https://reviews.llvm.org/D23588 llvm-svn: 279075
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp')
-rw-r--r--llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp15
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();
}
OpenPOWER on IntegriCloud