[X86] Add initial skeleton support for knm cpu
authorCraig Topper <craig.topper@intel.com>
Fri, 13 Oct 2017 18:10:17 +0000 (18:10 +0000)
committerCraig Topper <craig.topper@intel.com>
Fri, 13 Oct 2017 18:10:17 +0000 (18:10 +0000)
This adds Intel's Knights Mill CPU to valid CPU names for the backend. For now its an alias of "knl", but ultimately we need to support AVX5124FMAPS and AVX5124VNNIW instruction sets for it.

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

llvm-svn: 315722

llvm/lib/Support/Host.cpp
llvm/lib/Target/X86/X86.td
llvm/test/CodeGen/X86/cpus.ll

index e5bd7e0e44ffa57b0265fbadcd9bec2da496683a..b1d5b44ebd0010dee7461c64d6209fe36ac0f693 100644 (file)
@@ -339,6 +339,7 @@ enum ProcessorTypes {
   AMD_BTVER1,
   AMD_BTVER2,
   AMDFAM17H,
+  INTEL_KNM,
   // Entries below this are not in libgcc/compiler-rt.
   INTEL_i386,
   INTEL_i486,
@@ -759,6 +760,9 @@ getIntelProcessorTypeAndSubtype(unsigned Family, unsigned Model,
     case 0x57:
       *Type = INTEL_KNL; // knl
       break;
+    case 0x85:
+      *Type = INTEL_KNM; // knm
+      break;
 
     default: // Unknown family 6 CPU, try to guess.
       if (Features & (1 << FEATURE_AVX512F)) {
@@ -1167,6 +1171,8 @@ StringRef sys::getHostCPUName() {
       return "goldmont";
     case INTEL_KNL:
       return "knl";
+    case INTEL_KNM:
+      return "knm";
     case INTEL_X86_64:
       return "x86-64";
     case INTEL_NOCONA:
index dbe3620ee8fc52c8fc43d98836bfb08f9e068d85..07e78adf9282a6bb1a057e49e68cba298e5b3f1a 100644 (file)
@@ -610,10 +610,7 @@ class SkylakeClientProc<string Name> : ProcModel<Name, SkylakeClientModel,
 ]>;
 def : SkylakeClientProc<"skylake">;
 
-// FIXME: define KNL model
-class KnightsLandingProc<string Name> : ProcModel<Name, HaswellModel,
-                                                  IVBFeatures.Value, [
-  ProcIntelKNL,                                                  
+def KNLFeatures : ProcessorFeatures<IVBFeatures.Value, [
   FeatureAVX512,
   FeatureERI,
   FeatureCDI,
@@ -625,12 +622,26 @@ class KnightsLandingProc<string Name> : ProcModel<Name, HaswellModel,
   FeatureLZCNT,
   FeatureBMI,
   FeatureBMI2,
-  FeatureFMA,
+  FeatureFMA
+]>;
+
+// FIXME: define KNL model
+class KnightsLandingProc<string Name> : ProcModel<Name, HaswellModel,
+                                                  KNLFeatures.Value, [
+  ProcIntelKNL,
   FeatureSlowTwoMemOps,
   FeatureFastPartialYMMorZMMWrite
 ]>;
 def : KnightsLandingProc<"knl">;
 
+class KnightsMillProc<string Name> : ProcModel<Name, HaswellModel,
+                                               KNLFeatures.Value, [
+  ProcIntelKNL,
+  FeatureSlowTwoMemOps,
+  FeatureFastPartialYMMorZMMWrite
+]>;
+def : KnightsMillProc<"knm">; // TODO Add AVX5124FMAPS/AVX5124VNNIW features
+
 def SKXFeatures : ProcessorFeatures<SKLFeatures.Value, [
   FeatureAVX512,
   FeatureCDI,
index bbd023316d6b033ba55b3f5a575bd0c2548f2740..6729ec05ed8f3007d973dbed67be3a01d4621259 100644 (file)
@@ -30,6 +30,7 @@
 ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=goldmont 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty
 ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=lakemont 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty
 ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=knl 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty
+; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=knm 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty
 ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=k8 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty
 ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=opteron 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty
 ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=athlon64 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty