From: Peter Collingbourne Date: Mon, 31 Aug 2015 00:09:01 +0000 (+0000) Subject: Support: Support LLVM_ENABLE_THREADS=0 in llvm/Support/thread.h. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=ae55d356be840aab2898f47a9c704e7a542f76c2;p=oota-llvm.git 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@246402 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Support/thread.h b/include/llvm/Support/thread.h index b61177d5989..2d1f1b3a3ec 100644 --- a/include/llvm/Support/thread.h +++ b/include/llvm/Support/thread.h @@ -8,13 +8,19 @@ //===----------------------------------------------------------------------===// // // This header is a wrapper for 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 + explicit thread(Function &&f, Args &&... args) { + f(std::forward(args)...); + } + thread(const thread &) = delete; + + void join() {} +}; + +} + +#endif // LLVM_ENABLE_THREADS + #endif diff --git a/lib/CodeGen/ParallelCG.cpp b/lib/CodeGen/ParallelCG.cpp index 3e6a71d602b..748d3883ea1 100644 --- a/lib/CodeGen/ParallelCG.cpp +++ b/lib/CodeGen/ParallelCG.cpp @@ -56,7 +56,7 @@ llvm::splitCodeGen(std::unique_ptr M, return M; } - std::vector Threads; + std::vector Threads; SplitModule(std::move(M), OSs.size(), [&](std::unique_ptr 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 M, std::move(BC)); }); - for (std::thread &T : Threads) + for (thread &T : Threads) T.join(); return {};