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

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 4 11:52:50 PDT 2017


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171004/78d30e99/attachment.html>


More information about the llvm-commits mailing list