From: Mehdi Amini Date: Wed, 19 Oct 2016 22:36:07 +0000 (+0000) Subject: Add computeHostNumPhysicalCores() implementation for Darwin X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=db46b7d217ed4462a4a02d0111e25593287dfcf1;p=platform%2Fupstream%2Fllvm.git Add computeHostNumPhysicalCores() implementation for Darwin Differential Revision: https://reviews.llvm.org/D25800 llvm-svn: 284656 --- diff --git a/llvm/lib/Support/Host.cpp b/llvm/lib/Support/Host.cpp index e4a9b50..dd19eee 100644 --- a/llvm/lib/Support/Host.cpp +++ b/llvm/lib/Support/Host.cpp @@ -1234,6 +1234,25 @@ static int computeHostNumPhysicalCores() { } return UniqueItems.size(); } +#elif defined(__APPLE__) && defined(__x86_64__) +#include +#include + +// Gets the number of *physical cores* on the machine. +static int computeHostNumPhysicalCores() { + uint32_t count; + size_t len = sizeof(count); + sysctlbyname("hw.physicalcpu", &count, &len, NULL, 0); + if (count < 1) { + int nm[2]; + nm[0] = CTL_HW; + nm[1] = HW_AVAILCPU; + sysctl(nm, 2, &count, &len, NULL, 0); + if (count < 1) + return -1; + } + return count; +} #else // On other systems, return -1 to indicate unknown. static int computeHostNumPhysicalCores() { return -1; } diff --git a/llvm/unittests/Support/Host.cpp b/llvm/unittests/Support/Host.cpp index 1fb0bc7..934a604 100644 --- a/llvm/unittests/Support/Host.cpp +++ b/llvm/unittests/Support/Host.cpp @@ -31,9 +31,10 @@ protected: Host.setTriple(Triple::normalize(sys::getProcessTriple())); // Initially this is only testing detection of the number of - // physical cores, which is currently only supported for - // x86_64 Linux. + // physical cores, which is currently only supported/tested for + // x86_64 Linux and Darwin. SupportedArchAndOSs.push_back(std::make_pair(Triple::x86_64, Triple::Linux)); + SupportedArchAndOSs.push_back(std::make_pair(Triple::x86_64, Triple::Darwin)); } };