summaryrefslogtreecommitdiff
path: root/lib/Support
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
commitcdde33ebaad211e1ce0fc22b53bbccff8bb3c1a4 (patch)
tree95d91245366b3a7cc446072a43fd365ba07f7da1 /lib/Support
parent90be077d09df2f577448105c6dfd6ef78c4e6b6f (diff)
downloadllvm-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/Support')
-rw-r--r--lib/Support/Threading.cpp29
1 files changed, 26 insertions, 3 deletions
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>