summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/Threading.cpp
diff options
context:
space:
mode:
authorNAKAMURA Takumi <geek4civic@gmail.com>2014-06-24 13:36:31 +0000
committerNAKAMURA Takumi <geek4civic@gmail.com>2014-06-24 13:36:31 +0000
commit104e5f67e2c3b714607baa435f8bf8c72e0ba443 (patch)
tree7609436df5288e94ca0aced7f594c04674cbcec4 /llvm/lib/Support/Threading.cpp
parentf59b3c1d90dc651ca2162df3f6e3e02f053a2539 (diff)
downloadbcm5719-llvm-104e5f67e2c3b714607baa435f8bf8c72e0ba443.tar.gz
bcm5719-llvm-104e5f67e2c3b714607baa435f8bf8c72e0ba443.zip
Revert r211287, "Remove support for LLVM runtime multi-threading."
libclang still requires it on cygming, lack of incomplete <mutex>. llvm-svn: 211592
Diffstat (limited to 'llvm/lib/Support/Threading.cpp')
-rw-r--r--llvm/lib/Support/Threading.cpp29
1 files changed, 26 insertions, 3 deletions
diff --git a/llvm/lib/Support/Threading.cpp b/llvm/lib/Support/Threading.cpp
index ca7f3f64aa3..2358dde0e6c 100644
--- a/llvm/lib/Support/Threading.cpp
+++ b/llvm/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>
OpenPOWER on IntegriCloud