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 /lib | |
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 'lib')
-rw-r--r-- | lib/IR/Core.cpp | 3 | ||||
-rw-r--r-- | lib/Support/Threading.cpp | 29 |
2 files changed, 28 insertions, 4 deletions
diff --git a/lib/IR/Core.cpp b/lib/IR/Core.cpp index 0cb781c2c6..2c49d5b949 100644 --- a/lib/IR/Core.cpp +++ b/lib/IR/Core.cpp @@ -2708,10 +2708,11 @@ void LLVMDisposePassManager(LLVMPassManagerRef PM) { /*===-- Threading ------------------------------------------------------===*/ LLVMBool LLVMStartMultithreaded() { - return LLVMIsMultithreaded(); + return llvm_start_multithreaded(); } void LLVMStopMultithreaded() { + llvm_stop_multithreaded(); } LLVMBool LLVMIsMultithreaded() { diff --git a/lib/Support/Threading.cpp b/lib/Support/Threading.cpp index ca7f3f64aa..2358dde0e6 100644 --- a/lib/Support/Threading.cpp +++ b/lib/Support/Threading.cpp @@ -7,8 +7,7 @@ // //===----------------------------------------------------------------------===// // -// This file defines helper functions for running LLVM in a multi-threaded -// environment. +// This file implements llvm_start_multithreaded() and friends. // //===----------------------------------------------------------------------===// @@ -20,14 +19,38 @@ using namespace llvm; -bool llvm::llvm_is_multithreaded() { +static bool multithreaded_mode = false; + +bool llvm::llvm_start_multithreaded() { #if LLVM_ENABLE_THREADS != 0 + assert(!multithreaded_mode && "Already multithreaded!"); + multithreaded_mode = true; + + // We fence here to ensure that all initialization is complete BEFORE we + // return from llvm_start_multithreaded(). + sys::MemoryFence(); return true; #else return false; #endif } +void llvm::llvm_stop_multithreaded() { +#if LLVM_ENABLE_THREADS != 0 + assert(multithreaded_mode && "Not currently multithreaded!"); + + // We fence here to insure that all threaded operations are complete BEFORE we + // return from llvm_stop_multithreaded(). + sys::MemoryFence(); + + multithreaded_mode = false; +#endif +} + +bool llvm::llvm_is_multithreaded() { + return multithreaded_mode; +} + #if LLVM_ENABLE_THREADS != 0 && defined(HAVE_PTHREAD_H) #include <pthread.h> |