[llvm] r314922 - Revert D38481 due to missing cmake check for CPU_COUNT

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 4 13:33:18 PDT 2017


I don't think we should, but I will not push for it.

Cheers,
Rafael

Rui Ueyama <ruiu at google.com> writes:

> The version Serguei Katkov reported on the mailing list that he couldn't
> build LLVM with is glibc 2.5, which was released in September 2006. I
> wonder if we really want to support a 11-year old system to (not use but)
> build LLVM.
>
> On Wed, Oct 4, 2017 at 11:43 AM, Rafael Avila de Espindola via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
>
>> BTW, can you confirm that CPU_COUNT is really not available at all? I
>> see that it was added to glibc in
>>
>> commit b4afdd0651ac787cb19423835a95d1972cb49d24
>> Author: Ulrich Drepper <drepper at redhat.com>
>> Date:   Wed Apr 4 18:51:36 2007 +0000
>>
>> Cheers,
>> Rafael
>>
>> Daniel Neilson via llvm-commits <llvm-commits at lists.llvm.org> writes:
>>
>> > Author: dneilson
>> > Date: Wed Oct  4 11:19:03 2017
>> > New Revision: 314922
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=314922&view=rev
>> > Log:
>> > 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:
>> >
>> > Modified:
>> >     llvm/trunk/cmake/config-ix.cmake
>> >     llvm/trunk/include/llvm/Config/config.h.cmake
>> >     llvm/trunk/include/llvm/Support/ThreadPool.h
>> >     llvm/trunk/include/llvm/Support/Threading.h
>> >     llvm/trunk/lib/Support/Parallel.cpp
>> >     llvm/trunk/lib/Support/ThreadPool.cpp
>> >     llvm/trunk/lib/Support/Threading.cpp
>> >     llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp
>> >
>> > Modified: llvm/trunk/cmake/config-ix.cmake
>> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/
>> config-ix.cmake?rev=314922&r1=314921&r2=314922&view=diff
>> > ============================================================
>> ==================
>> > --- llvm/trunk/cmake/config-ix.cmake (original)
>> > +++ llvm/trunk/cmake/config-ix.cmake Wed Oct  4 11:19:03 2017
>> > @@ -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)
>> >
>> > Modified: llvm/trunk/include/llvm/Config/config.h.cmake
>> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
>> llvm/Config/config.h.cmake?rev=314922&r1=314921&r2=314922&view=diff
>> > ============================================================
>> ==================
>> > --- llvm/trunk/include/llvm/Config/config.h.cmake (original)
>> > +++ llvm/trunk/include/llvm/Config/config.h.cmake Wed Oct  4 11:19:03
>> 2017
>> > @@ -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}
>> >
>> >
>> > Modified: llvm/trunk/include/llvm/Support/ThreadPool.h
>> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
>> llvm/Support/ThreadPool.h?rev=314922&r1=314921&r2=314922&view=diff
>> > ============================================================
>> ==================
>> > --- llvm/trunk/include/llvm/Support/ThreadPool.h (original)
>> > +++ llvm/trunk/include/llvm/Support/ThreadPool.h Wed Oct  4 11:19:03
>> 2017
>> > @@ -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
>> >
>> > Modified: llvm/trunk/include/llvm/Support/Threading.h
>> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
>> llvm/Support/Threading.h?rev=314922&r1=314921&r2=314922&view=diff
>> > ============================================================
>> ==================
>> > --- llvm/trunk/include/llvm/Support/Threading.h (original)
>> > +++ llvm/trunk/include/llvm/Support/Threading.h Wed Oct  4 11:19:03 2017
>> > @@ -131,14 +131,6 @@ void llvm_execute_on_thread(void (*UserF
>> >    /// 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
>> >
>> > Modified: llvm/trunk/lib/Support/Parallel.cpp
>> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> Support/Parallel.cpp?rev=314922&r1=314921&r2=314922&view=diff
>> > ============================================================
>> ==================
>> > --- llvm/trunk/lib/Support/Parallel.cpp (original)
>> > +++ llvm/trunk/lib/Support/Parallel.cpp Wed Oct  4 11:19:03 2017
>> > @@ -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.
>> >
>> > Modified: llvm/trunk/lib/Support/ThreadPool.cpp
>> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> Support/ThreadPool.cpp?rev=314922&r1=314921&r2=314922&view=diff
>> > ============================================================
>> ==================
>> > --- llvm/trunk/lib/Support/ThreadPool.cpp (original)
>> > +++ llvm/trunk/lib/Support/ThreadPool.cpp Wed Oct  4 11:19:03 2017
>> > @@ -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) {
>> >
>> > Modified: llvm/trunk/lib/Support/Threading.cpp
>> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> Support/Threading.cpp?rev=314922&r1=314921&r2=314922&view=diff
>> > ============================================================
>> ==================
>> > --- llvm/trunk/lib/Support/Threading.cpp (original)
>> > +++ llvm/trunk/lib/Support/Threading.cpp Wed Oct  4 11:19:03 2017
>> > @@ -47,8 +47,6 @@ void llvm::llvm_execute_on_thread(void (
>> >
>> >  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_conc
>> >    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"
>> >
>> > Modified: llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp
>> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-
>> profdata/llvm-profdata.cpp?rev=314922&r1=314921&r2=314922&view=diff
>> > ============================================================
>> ==================
>> > --- llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp (original)
>> > +++ llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp Wed Oct  4
>> 11:19:03 2017
>> > @@ -211,8 +211,8 @@ static void mergeInstrProfile(const Weig
>> >
>> >    // 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;
>> >
>> >
>> > _______________________________________________
>> > llvm-commits mailing list
>> > llvm-commits at lists.llvm.org
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>


More information about the llvm-commits mailing list