[llvm] r246402 - Support: Support LLVM_ENABLE_THREADS=0 in llvm/Support/thread.h.

Peter Collingbourne via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 30 17:09:02 PDT 2015


Author: pcc
Date: Sun Aug 30 19:09:01 2015
New Revision: 246402

URL: http://llvm.org/viewvc/llvm-project?rev=246402&view=rev
Log:
Support: Support LLVM_ENABLE_THREADS=0 in llvm/Support/thread.h.

Specifically, the header now provides llvm::thread, which is either a
typedef of std::thread or a replacement that calls the function synchronously
depending on the value of LLVM_ENABLE_THREADS.

Modified:
    llvm/trunk/include/llvm/Support/thread.h
    llvm/trunk/lib/CodeGen/ParallelCG.cpp

Modified: llvm/trunk/include/llvm/Support/thread.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/thread.h?rev=246402&r1=246401&r2=246402&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/thread.h (original)
+++ llvm/trunk/include/llvm/Support/thread.h Sun Aug 30 19:09:01 2015
@@ -8,13 +8,19 @@
 //===----------------------------------------------------------------------===//
 //
 // This header is a wrapper for <thread> that works around problems with the
-// MSVC headers when exceptions are disabled.
+// MSVC headers when exceptions are disabled. It also provides llvm::thread,
+// which is either a typedef of std::thread or a replacement that calls the
+// function synchronously depending on the value of LLVM_ENABLE_THREADS.
 //
 //===----------------------------------------------------------------------===//
 
 #ifndef LLVM_SUPPORT_THREAD_H
 #define LLVM_SUPPORT_THREAD_H
 
+#include "llvm/Config/llvm-config.h"
+
+#if LLVM_ENABLE_THREADS
+
 #ifdef _MSC_VER
 // concrt.h depends on eh.h for __uncaught_exception declaration
 // even if we disable exceptions.
@@ -31,4 +37,28 @@
 #pragma warning(pop)
 #endif
 
+namespace llvm {
+typedef std::thread thread;
+}
+
+#else // !LLVM_ENABLE_THREADS
+
+namespace llvm {
+
+struct thread {
+  thread() {}
+  thread(thread &&other) {}
+  template <class Function, class... Args>
+  explicit thread(Function &&f, Args &&... args) {
+    f(std::forward<Args>(args)...);
+  }
+  thread(const thread &) = delete;
+
+  void join() {}
+};
+
+}
+
+#endif // LLVM_ENABLE_THREADS
+
 #endif

Modified: llvm/trunk/lib/CodeGen/ParallelCG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ParallelCG.cpp?rev=246402&r1=246401&r2=246402&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/ParallelCG.cpp (original)
+++ llvm/trunk/lib/CodeGen/ParallelCG.cpp Sun Aug 30 19:09:01 2015
@@ -56,7 +56,7 @@ llvm::splitCodeGen(std::unique_ptr<Modul
     return M;
   }
 
-  std::vector<std::thread> Threads;
+  std::vector<thread> Threads;
   SplitModule(std::move(M), OSs.size(), [&](std::unique_ptr<Module> MPart) {
     // We want to clone the module in a new context to multi-thread the codegen.
     // We do it by serializing partition modules to bitcode (while still on the
@@ -88,7 +88,7 @@ llvm::splitCodeGen(std::unique_ptr<Modul
         std::move(BC));
   });
 
-  for (std::thread &T : Threads)
+  for (thread &T : Threads)
     T.join();
 
   return {};




More information about the llvm-commits mailing list