summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2014-06-16 22:49:41 +0000
committerZachary Turner <zturner@google.com>2014-06-16 22:49:41 +0000
commit5ea46694d0b48eebcf04d9e1fc0dac6382356f32 (patch)
tree686459ef65febf5538b05e7f68c26f04c6a5d7c8 /include
parent298ff80849de645ab7afb92004759350309de400 (diff)
downloadllvm-5ea46694d0b48eebcf04d9e1fc0dac6382356f32.tar.gz
llvm-5ea46694d0b48eebcf04d9e1fc0dac6382356f32.tar.bz2
llvm-5ea46694d0b48eebcf04d9e1fc0dac6382356f32.tar.xz
Revert r211066, 211067, 211068, 211069, 211070.
These were committed accidentally from the wrong branch before having a review sign-off. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211072 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm-c/Core.h13
-rw-r--r--include/llvm/Support/ManagedStatic.h3
-rw-r--r--include/llvm/Support/Mutex.h4
-rw-r--r--include/llvm/Support/Threading.h31
4 files changed, 37 insertions, 14 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/Mutex.h b/include/llvm/Support/Mutex.h
index 2f3201a201..496a4381f3 100644
--- a/include/llvm/Support/Mutex.h
+++ b/include/llvm/Support/Mutex.h
@@ -15,13 +15,11 @@
#define LLVM_SUPPORT_MUTEX_H
#include "llvm/Support/Compiler.h"
+#include "llvm/Support/Threading.h"
#include <cassert>
namespace llvm
{
- // Forward declare.
- bool llvm_is_multithreaded();
-
namespace sys
{
/// @brief Platform agnostic Mutex class.
diff --git a/include/llvm/Support/Threading.h b/include/llvm/Support/Threading.h
index 8f87cbc7f4..a7e8774558 100644
--- a/include/llvm/Support/Threading.h
+++ b/include/llvm/Support/Threading.h
@@ -7,21 +7,40 @@
//
//===----------------------------------------------------------------------===//
//
-// This file defines helper functions for running LLVM in a multi-threaded
-// environment.
+// TThis file defines llvm_start_multithreaded() and friends.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_SUPPORT_THREADING_H
#define LLVM_SUPPORT_THREADING_H
-#include "llvm/Support/Mutex.h"
-
namespace llvm {
- /// llvm_is_multithreaded - returns true if LLVM is compiled with support
- /// for multiple threads, 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();
+ /// acquire_global_lock - Acquire the global lock. This is a no-op if called
+ /// before llvm_start_multithreaded().
+ void llvm_acquire_global_lock();
+
+ /// release_global_lock - Release the global lock. This is a no-op if called
+ /// before llvm_start_multithreaded().
+ void llvm_release_global_lock();
+
/// llvm_execute_on_thread - Execute the given \p UserFn on a separate
/// thread, passing it the provided \p UserData.
///