diff options
author | NAKAMURA Takumi <geek4civic@gmail.com> | 2014-06-24 13:36:31 +0000 |
---|---|---|
committer | NAKAMURA Takumi <geek4civic@gmail.com> | 2014-06-24 13:36:31 +0000 |
commit | cdde33ebaad211e1ce0fc22b53bbccff8bb3c1a4 (patch) | |
tree | 95d91245366b3a7cc446072a43fd365ba07f7da1 /include | |
parent | 90be077d09df2f577448105c6dfd6ef78c4e6b6f (diff) | |
download | llvm-cdde33ebaad211e1ce0fc22b53bbccff8bb3c1a4.tar.gz llvm-cdde33ebaad211e1ce0fc22b53bbccff8bb3c1a4.tar.bz2 llvm-cdde33ebaad211e1ce0fc22b53bbccff8bb3c1a4.tar.xz |
Revert r211287, "Remove support for LLVM runtime multi-threading."
libclang still requires it on cygming, lack of incomplete <mutex>.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211592 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm-c/Core.h | 13 | ||||
-rw-r--r-- | include/llvm/Support/ManagedStatic.h | 3 | ||||
-rw-r--r-- | include/llvm/Support/Threading.h | 21 |
3 files changed, 28 insertions, 9 deletions
diff --git a/include/llvm-c/Core.h b/include/llvm-c/Core.h index 8693a3020a..0e78ed71fa 100644 --- a/include/llvm-c/Core.h +++ b/include/llvm-c/Core.h @@ -2848,13 +2848,16 @@ void LLVMDisposePassManager(LLVMPassManagerRef PM); * @{ */ -/** Deprecated: Multi-threading can only be enabled/disabled with the compile - time define LLVM_ENABLE_THREADS. This function always returns - LLVMIsMultithreaded(). */ +/** Allocate and initialize structures needed to make LLVM safe for + multithreading. The return value indicates whether multithreaded + initialization succeeded. Must be executed in isolation from all + other LLVM api calls. + @see llvm::llvm_start_multithreaded */ LLVMBool LLVMStartMultithreaded(void); -/** Deprecated: Multi-threading can only be enabled/disabled with the compile - time define LLVM_ENABLE_THREADS. */ +/** Deallocate structures necessary to make LLVM safe for multithreading. + Must be executed in isolation from all other LLVM api calls. + @see llvm::llvm_stop_multithreaded */ void LLVMStopMultithreaded(void); /** Check whether LLVM is executing in thread-safe mode or not. diff --git a/include/llvm/Support/ManagedStatic.h b/include/llvm/Support/ManagedStatic.h index d8fbfeb8e2..1bb8cea092 100644 --- a/include/llvm/Support/ManagedStatic.h +++ b/include/llvm/Support/ManagedStatic.h @@ -103,6 +103,9 @@ void llvm_shutdown(); /// llvm_shutdown() when it is destroyed. struct llvm_shutdown_obj { llvm_shutdown_obj() { } + explicit llvm_shutdown_obj(bool multithreaded) { + if (multithreaded) llvm_start_multithreaded(); + } ~llvm_shutdown_obj() { llvm_shutdown(); } }; diff --git a/include/llvm/Support/Threading.h b/include/llvm/Support/Threading.h index 7e8758407c..d84d118679 100644 --- a/include/llvm/Support/Threading.h +++ b/include/llvm/Support/Threading.h @@ -7,8 +7,7 @@ // //===----------------------------------------------------------------------===// // -// This file declares helper functions for running LLVM in a multi-threaded -// environment. +// TThis file defines llvm_start_multithreaded() and friends. // //===----------------------------------------------------------------------===// @@ -16,8 +15,22 @@ #define LLVM_SUPPORT_THREADING_H namespace llvm { - /// Returns true if LLVM is compiled with support for multi-threading, and - /// false otherwise. + /// llvm_start_multithreaded - Allocate and initialize structures needed to + /// make LLVM safe for multithreading. The return value indicates whether + /// multithreaded initialization succeeded. LLVM will still be operational + /// on "failed" return, and will still be safe for hosting threading + /// applications in the JIT, but will not be safe for concurrent calls to the + /// LLVM APIs. + /// THIS MUST EXECUTE IN ISOLATION FROM ALL OTHER LLVM API CALLS. + bool llvm_start_multithreaded(); + + /// llvm_stop_multithreaded - Deallocate structures necessary to make LLVM + /// safe for multithreading. + /// THIS MUST EXECUTE IN ISOLATION FROM ALL OTHER LLVM API CALLS. + void llvm_stop_multithreaded(); + + /// llvm_is_multithreaded - Check whether LLVM is executing in thread-safe + /// mode or not. bool llvm_is_multithreaded(); /// llvm_execute_on_thread - Execute the given \p UserFn on a separate |