Implement `sys::getHostCPUName()` for Darwin ARM

Summary: Currently there is no implementation of `sys::getHostCPUName()` for Darwin ARM targets. This patch makes it so that LLVM running on ARM makes reasonable guesses about the CPU features of the host CPU.

Reviewers: t.p.northover, lhames, efriedma

Reviewed By: efriedma

Subscribers: rjmccall, efriedma, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D69597
This commit is contained in:
Chris Bieneman 2019-10-30 12:50:04 -07:00
parent bcbb121ff6
commit 34688fafea
1 changed files with 28 additions and 1 deletions

View File

@ -35,7 +35,7 @@
#ifdef _MSC_VER
#include <intrin.h>
#endif
#if defined(__APPLE__) && (defined(__ppc__) || defined(__powerpc__))
#if defined(__APPLE__) && (!defined(__x86_64__))
#include <mach/host_info.h>
#include <mach/mach.h>
#include <mach/mach_host.h>
@ -1220,6 +1220,33 @@ StringRef sys::getHostCPUName() {
StringRef Content = P ? P->getBuffer() : "";
return detail::getHostCPUNameForS390x(Content);
}
#elif defined(__APPLE__) && defined(__aarch64__)
StringRef sys::getHostCPUName() {
return "cyclone";
}
#elif defined(__APPLE__) && defined(__arm__)
StringRef sys::getHostCPUName() {
host_basic_info_data_t hostInfo;
mach_msg_type_number_t infoCount;
infoCount = HOST_BASIC_INFO_COUNT;
mach_port_t hostPort = mach_host_self();
host_info(hostPort, HOST_BASIC_INFO, (host_info_t)&hostInfo,
&infoCount);
mach_port_deallocate(mach_task_self(), hostPort);
if (hostInfo.cpu_type != CPU_TYPE_ARM) {
assert(false && "CPUType not equal to ARM should not be possible on ARM");
return "generic";
}
switch (hostInfo.cpu_subtype) {
case CPU_SUBTYPE_ARM_V7S:
return "swift";
default:;
}
return "generic";
}
#else
StringRef sys::getHostCPUName() { return "generic"; }
#endif