Add computeHostNumPhysicalCores() implementation for Darwin

Differential Revision: https://reviews.llvm.org/D25800

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@284656 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Mehdi Amini 2016-10-19 22:36:07 +00:00
parent cc8ca50286
commit 2bd75068e1
2 changed files with 22 additions and 2 deletions

View File

@ -1234,6 +1234,25 @@ static int computeHostNumPhysicalCores() {
}
return UniqueItems.size();
}
#elif defined(__APPLE__) && defined(__x86_64__)
#include <sys/param.h>
#include <sys/sysctl.h>
// 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; }

View File

@ -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));
}
};