aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Neilson <dneilson@azul.com>2017-10-04 18:19:03 +0000
committerDaniel Neilson <dneilson@azul.com>2017-10-04 18:19:03 +0000
commit9f2abf5c52f8c333eabf98410d72b8fc97b994af (patch)
tree0599de606679c459d85f0c79011eb61d6f69f3eb
parentd57faf858c7cd7dbf406051fc822a2a66c4cd120 (diff)
Revert D38481 due to missing cmake check for CPU_COUNT
Summary: This reverts D38481. The change breaks systems with older versions of glibc. It injects a use of CPU_COUNT() from sched.h without checking to ensure that the function exists first. Reviewers: Subscribers: git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@314922 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--cmake/config-ix.cmake1
-rw-r--r--include/llvm/Config/config.h.cmake3
-rw-r--r--include/llvm/Support/ThreadPool.h4
-rw-r--r--include/llvm/Support/Threading.h8
-rw-r--r--lib/Support/Parallel.cpp4
-rw-r--r--lib/Support/ThreadPool.cpp5
-rw-r--r--lib/Support/Threading.cpp14
-rw-r--r--tools/llvm-profdata/llvm-profdata.cpp4
8 files changed, 8 insertions, 35 deletions
diff --git a/cmake/config-ix.cmake b/cmake/config-ix.cmake
index c89e46227c5..a1a16b99eb1 100644
--- a/cmake/config-ix.cmake
+++ b/cmake/config-ix.cmake
@@ -269,7 +269,6 @@ if( LLVM_USING_GLIBC )
add_definitions( -D_GNU_SOURCE )
endif()
# This check requires _GNU_SOURCE
-check_library_exists(c sched_getaffinity "" HAVE_SCHED_GETAFFINITY)
if(HAVE_LIBPTHREAD)
check_library_exists(pthread pthread_getname_np "" HAVE_PTHREAD_GETNAME_NP)
check_library_exists(pthread pthread_setname_np "" HAVE_PTHREAD_SETNAME_NP)
diff --git a/include/llvm/Config/config.h.cmake b/include/llvm/Config/config.h.cmake
index f3506de015b..d0d1e0985cc 100644
--- a/include/llvm/Config/config.h.cmake
+++ b/include/llvm/Config/config.h.cmake
@@ -185,9 +185,6 @@
/* Define to 1 if you have the `setenv' function. */
#cmakedefine HAVE_SETENV ${HAVE_SETENV}
-/* Define to 1 if you have the `sched_getaffinity' function. */
-#cmakedefine HAVE_SCHED_GETAFFINITY ${HAVE_SCHED_GETAFFINITY}
-
/* Define to 1 if you have the `setrlimit' function. */
#cmakedefine HAVE_SETRLIMIT ${HAVE_SETRLIMIT}
diff --git a/include/llvm/Support/ThreadPool.h b/include/llvm/Support/ThreadPool.h
index fb825590051..9ada946c6da 100644
--- a/include/llvm/Support/ThreadPool.h
+++ b/include/llvm/Support/ThreadPool.h
@@ -38,8 +38,8 @@ public:
using TaskTy = std::function<void()>;
using PackagedTaskTy = std::packaged_task<void()>;
- /// Construct a pool with the number of threads found by
- /// hardware_concurrency().
+ /// Construct a pool with the number of core available on the system (or
+ /// whatever the value returned by std::thread::hardware_concurrency() is).
ThreadPool();
/// Construct a pool of \p ThreadCount threads
diff --git a/include/llvm/Support/Threading.h b/include/llvm/Support/Threading.h
index 6d813bccb93..03963a24c10 100644
--- a/include/llvm/Support/Threading.h
+++ b/include/llvm/Support/Threading.h
@@ -131,14 +131,6 @@ void llvm_execute_on_thread(void (*UserFn)(void *), void *UserData,
/// Returns 1 when LLVM is configured with LLVM_ENABLE_THREADS=OFF
unsigned heavyweight_hardware_concurrency();
- /// Get the number of threads that the current program can execute
- /// concurrently. On some systems std::thread::hardware_concurrency() returns
- /// the total number of cores, without taking affinity into consideration.
- /// Returns 1 when LLVM is configured with LLVM_ENABLE_THREADS=OFF.
- /// Fallback to std::thread::hardware_concurrency() if sched_getaffinity is
- /// not available.
- unsigned hardware_concurrency();
-
/// \brief Return the current thread id, as used in various OS system calls.
/// Note that not all platforms guarantee that the value returned will be
/// unique across the entire system, so portable code should not assume
diff --git a/lib/Support/Parallel.cpp b/lib/Support/Parallel.cpp
index 010e42916f9..ab2cfdebf07 100644
--- a/lib/Support/Parallel.cpp
+++ b/lib/Support/Parallel.cpp
@@ -9,7 +9,6 @@
#include "llvm/Support/Parallel.h"
#include "llvm/Config/llvm-config.h"
-#include "llvm/Support/Threading.h"
#include <atomic>
#include <stack>
@@ -71,7 +70,8 @@ Executor *Executor::getDefaultExecutor() {
/// in filo order.
class ThreadPoolExecutor : public Executor {
public:
- explicit ThreadPoolExecutor(unsigned ThreadCount = hardware_concurrency())
+ explicit ThreadPoolExecutor(
+ unsigned ThreadCount = std::thread::hardware_concurrency())
: Done(ThreadCount) {
// Spawn all but one of the threads in another thread as spawning threads
// can take a while.
diff --git a/lib/Support/ThreadPool.cpp b/lib/Support/ThreadPool.cpp
index f1b5bdf40c3..22b7550d497 100644
--- a/lib/Support/ThreadPool.cpp
+++ b/lib/Support/ThreadPool.cpp
@@ -14,15 +14,14 @@
#include "llvm/Support/ThreadPool.h"
#include "llvm/Config/llvm-config.h"
-#include "llvm/Support/Threading.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
#if LLVM_ENABLE_THREADS
-// Default to hardware_concurrency
-ThreadPool::ThreadPool() : ThreadPool(hardware_concurrency()) {}
+// Default to std::thread::hardware_concurrency
+ThreadPool::ThreadPool() : ThreadPool(std::thread::hardware_concurrency()) {}
ThreadPool::ThreadPool(unsigned ThreadCount)
: ActiveThreads(0), EnableFlag(true) {
diff --git a/lib/Support/Threading.cpp b/lib/Support/Threading.cpp
index b3579b57548..6a10b988d46 100644
--- a/lib/Support/Threading.cpp
+++ b/lib/Support/Threading.cpp
@@ -47,8 +47,6 @@ void llvm::llvm_execute_on_thread(void (*Fn)(void *), void *UserData,
unsigned llvm::heavyweight_hardware_concurrency() { return 1; }
-unsigned llvm::hardware_concurrency() { return 1; }
-
uint64_t llvm::get_threadid() { return 0; }
uint32_t llvm::get_max_thread_name_length() { return 0; }
@@ -73,18 +71,6 @@ unsigned llvm::heavyweight_hardware_concurrency() {
return NumPhysical;
}
-unsigned llvm::hardware_concurrency() {
-#ifdef HAVE_SCHED_GETAFFINITY
- cpu_set_t Set;
- if (sched_getaffinity(0, sizeof(Set), &Set))
- return CPU_COUNT(&Set);
-#endif
- // Guard against std::thread::hardware_concurrency() returning 0.
- if (unsigned Val = std::thread::hardware_concurrency())
- return Val;
- return 1;
-}
-
// Include the platform-specific parts of this class.
#ifdef LLVM_ON_UNIX
#include "Unix/Threading.inc"
diff --git a/tools/llvm-profdata/llvm-profdata.cpp b/tools/llvm-profdata/llvm-profdata.cpp
index 8e21a7a9b4f..eee242107da 100644
--- a/tools/llvm-profdata/llvm-profdata.cpp
+++ b/tools/llvm-profdata/llvm-profdata.cpp
@@ -211,8 +211,8 @@ static void mergeInstrProfile(const WeightedFileVector &Inputs,
// If NumThreads is not specified, auto-detect a good default.
if (NumThreads == 0)
- NumThreads =
- std::min(hardware_concurrency(), unsigned((Inputs.size() + 1) / 2));
+ NumThreads = std::max(1U, std::min(std::thread::hardware_concurrency(),
+ unsigned(Inputs.size() / 2)));
// Initialize the writer contexts.
SmallVector<std::unique_ptr<WriterContext>, 4> Contexts;