Skip to content

Commit

Permalink
Revert D38481 due to missing cmake check for CPU_COUNT
Browse files Browse the repository at this point in the history
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:

llvm-svn: 314922
  • Loading branch information
Daniel Neilson committed Oct 4, 2017
1 parent 9edbe11 commit bef94bc
Show file tree
Hide file tree
Showing 8 changed files with 8 additions and 35 deletions.
1 change: 0 additions & 1 deletion llvm/cmake/config-ix.cmake
Expand Up @@ -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)
Expand Down
3 changes: 0 additions & 3 deletions llvm/include/llvm/Config/config.h.cmake
Expand Up @@ -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}

Expand Down
4 changes: 2 additions & 2 deletions llvm/include/llvm/Support/ThreadPool.h
Expand Up @@ -38,8 +38,8 @@ class ThreadPool {
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
Expand Down
8 changes: 0 additions & 8 deletions llvm/include/llvm/Support/Threading.h
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions llvm/lib/Support/Parallel.cpp
Expand Up @@ -9,7 +9,6 @@

#include "llvm/Support/Parallel.h"
#include "llvm/Config/llvm-config.h"
#include "llvm/Support/Threading.h"

#include <atomic>
#include <stack>
Expand Down Expand Up @@ -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.
Expand Down
5 changes: 2 additions & 3 deletions llvm/lib/Support/ThreadPool.cpp
Expand Up @@ -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) {
Expand Down
14 changes: 0 additions & 14 deletions llvm/lib/Support/Threading.cpp
Expand Up @@ -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; }
Expand All @@ -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"
Expand Down
4 changes: 2 additions & 2 deletions llvm/tools/llvm-profdata/llvm-profdata.cpp
Expand Up @@ -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;
Expand Down

0 comments on commit bef94bc

Please sign in to comment.