Remove unnecessary caching of the TargetMachine on NVPTXFrameLowering.
[oota-llvm.git] / lib / Support / Threading.cpp
index 838a71b789d9ee4594c7dd89715100c7efca8b01..2358dde0e6c5e3c703334dbc1a83ff8b2ac360f3 100644 (file)
@@ -7,8 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 //
-// This file implements helper functions for running LLVM in a multi-threaded
-// environment.
+// This file implements llvm_start_multithreaded() and friends.
 //
 //===----------------------------------------------------------------------===//
 
 
 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>