[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