diff options
| author | Eli Bendersky <eliben@chromium.org> | 2013-05-28 11:23:28 -0700 |
|---|---|---|
| committer | Eli Bendersky <eliben@chromium.org> | 2013-05-28 11:23:28 -0700 |
| commit | ffc13bcb40d4257202295fc0ffe25b38bdf64263 (patch) | |
| tree | e3269675fec1127c195d6b3c248a6a47376b32f0 /include | |
| parent | a7b1caf4ea69d2cc6ff207fcef7085494bbc686a (diff) | |
Add two passes that implement conversions from PNaCl's specific intrinsics
to external function calls during the translation stage (llc).
One of the passes is a ModulePass that adds the appropriate function
declarations to the module. The other is a FunctionPass that performs the
actual call replacement. This split exists because of bitcode streaming.
Initially the passes handle the llvm.nacl.{set|long}jmp intrinsics. In the
future they may handle additional intrinsics that are part of the PNaCl
stable bitcode ABI.
This CL also removes the previous approach to handling this conversion
(in SelectionDAGBuilder.cpp). That ended up not working - more details in
issue 3429.
BUG=https://code.google.com/p/nativeclient/issues/detail?id=3429
R=mseaborn@chromium.org
Review URL: https://codereview.chromium.org/16047002
Diffstat (limited to 'include')
| -rw-r--r-- | include/llvm/InitializePasses.h | 2 | ||||
| -rw-r--r-- | include/llvm/Transforms/NaCl.h | 2 |
2 files changed, 4 insertions, 0 deletions
diff --git a/include/llvm/InitializePasses.h b/include/llvm/InitializePasses.h index b55970ad84..a55ea5ce1e 100644 --- a/include/llvm/InitializePasses.h +++ b/include/llvm/InitializePasses.h @@ -277,6 +277,7 @@ void initializeLoopVectorizePass(PassRegistry&); void initializeBBVectorizePass(PassRegistry&); void initializeMachineFunctionPrinterPassPass(PassRegistry&); // @LOCALMOD-BEGIN +void initializeAddPNaClExternalDeclsPass(PassRegistry&); void initializeExpandByValPass(PassRegistry&); void initializeExpandConstantExprPass(PassRegistry&); void initializeExpandCtorsPass(PassRegistry&); @@ -294,6 +295,7 @@ void initializePNaClABIVerifyFunctionsPass(PassRegistry&); void initializePromoteIntegersPass(PassRegistry&); void initializeReplacePtrsWithIntsPass(PassRegistry&); void initializeResolveAliasesPass(PassRegistry&); +void initializeResolvePNaClIntrinsicsPass(PassRegistry&); void initializeRewritePNaClLibraryCallsPass(PassRegistry&); void initializeStripMetadataPass(PassRegistry&); // @LOCALMOD-END diff --git a/include/llvm/Transforms/NaCl.h b/include/llvm/Transforms/NaCl.h index 3b9ce35dc8..f42336fc67 100644 --- a/include/llvm/Transforms/NaCl.h +++ b/include/llvm/Transforms/NaCl.h @@ -20,6 +20,7 @@ class PassManager; class Use; class Value; +ModulePass *createAddPNaClExternalDeclsPass(); ModulePass *createExpandByValPass(); FunctionPass *createExpandConstantExprPass(); ModulePass *createExpandCtorsPass(); @@ -33,6 +34,7 @@ ModulePass *createGlobalCleanupPass(); FunctionPass *createPromoteIntegersPass(); ModulePass *createReplacePtrsWithIntsPass(); ModulePass *createResolveAliasesPass(); +FunctionPass *createResolvePNaClIntrinsicsPass(); ModulePass *createRewritePNaClLibraryCallsPass(); ModulePass *createStripMetadataPass(); FunctionPass *createInsertDivideCheckPass(); |
