[PATCH] D35161: [X86] Improve the unknown stepping support for Intel CPUs in getHostCPUName
Craig Topper via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 9 06:14:52 PDT 2017
craig.topper created this revision.
This patch improves our guessing of unknown Intel CPUs to support Goldmont and skylake-avx512.
https://reviews.llvm.org/D35161
Files:
lib/Support/Host.cpp
Index: lib/Support/Host.cpp
===================================================================
--- lib/Support/Host.cpp
+++ lib/Support/Host.cpp
@@ -364,7 +364,10 @@
FEATURE_AVX512SAVE,
FEATURE_MOVBE,
FEATURE_ADX,
- FEATURE_EM64T
+ FEATURE_EM64T,
+ FEATURE_AVX512VL,
+ FEATURE_CLFLUSHOPT,
+ FEATURE_SHA,
};
// The check below for i386 was copied from clang's cpuid.h (__get_cpuid_max).
@@ -721,8 +724,23 @@
default: // Unknown family 6 CPU, try to guess.
if (Features & (1 << FEATURE_AVX512)) {
- *Type = INTEL_XEONPHI; // knl
- *Subtype = INTEL_KNIGHTS_LANDING;
+ if (Features & (1 << FEATURE_AVX512VL)) {
+ *Type = INTEL_COREI7;
+ *Subtype = INTEL_COREI7_SKYLAKE_AVX512;
+ } else {
+ *Type = INTEL_XEONPHI; // knl
+ *Subtype = INTEL_KNIGHTS_LANDING;
+ }
+ break;
+ }
+ if (Features & (1 << FEATURE_CLFLUSHOPT)) {
+ if (Features & (1 << FEATURE_SHA)) {
+ *Type = INTEL_ATOM;
+ *Subtype = INTEL_ATOM_GOLDMONT;
+ } else {
+ *Type = INTEL_COREI7;
+ *Subtype = INTEL_COREI7_SKYLAKE;
+ }
break;
}
if (Features & (1 << FEATURE_ADX)) {
@@ -979,13 +997,19 @@
bool HasLeaf7 =
MaxLeaf >= 0x7 && !getX86CpuIDAndInfoEx(0x7, 0x0, &EAX, &EBX, &ECX, &EDX);
bool HasADX = HasLeaf7 && ((EBX >> 19) & 1);
+ bool HasCLFLUSHOPT = HasLeaf7 && ((EBX >> 23) & 1);
+ bool HasSHA = HasLeaf7 && ((EBX >> 29) & 1);
bool HasAVX2 = HasAVX && HasLeaf7 && (EBX & 0x20);
bool HasAVX512 = HasLeaf7 && HasAVX512Save && ((EBX >> 16) & 1);
+ bool HasAVX512VL = HasLeaf7 && HasAVX512Save && ((EBX >> 31) & 1);
Features |= (HasAVX << FEATURE_AVX);
Features |= (HasAVX2 << FEATURE_AVX2);
Features |= (HasAVX512 << FEATURE_AVX512);
Features |= (HasAVX512Save << FEATURE_AVX512SAVE);
Features |= (HasADX << FEATURE_ADX);
+ Features |= (HasAVX512VL << FEATURE_AVX512VL);
+ Features |= (HasCLFLUSHOPT << FEATURE_CLFLUSHOPT);
+ Features |= (HasSHA << FEATURE_SHA);
getX86CpuIDAndInfo(0x80000001, &EAX, &EBX, &ECX, &EDX);
Features |= (((EDX >> 29) & 0x1) << FEATURE_EM64T);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D35161.105722.patch
Type: text/x-patch
Size: 2179 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170709/7b6c8484/attachment-0001.bin>
More information about the llvm-commits
mailing list