diff options
author | Gabor Buella <gabor.buella@intel.com> | 2018-04-16 07:47:35 +0000 |
---|---|---|
committer | Gabor Buella <gabor.buella@intel.com> | 2018-04-16 07:47:35 +0000 |
commit | 8f1646b579c4ab68c663c92e480b4a10d9c4d70e (patch) | |
tree | 70a64eb3efa9598f12de5f2e84b4bf14616027d3 | |
parent | f836af869deeef065f0bc0217c9f313c8642c9b4 (diff) | |
download | bcm5719-llvm-8f1646b579c4ab68c663c92e480b4a10d9c4d70e.tar.gz bcm5719-llvm-8f1646b579c4ab68c663c92e480b4a10d9c4d70e.zip |
[X86] Introduce archs: goldmont-plus & tremont
Using Goldmont's cost tables for these two upcoming
atom archs.
Reviewers: craig.topper
Reviewed By: craig.topper
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D45612
llvm-svn: 330109
-rw-r--r-- | llvm/include/llvm/Support/X86TargetParser.def | 2 | ||||
-rw-r--r-- | llvm/lib/Support/Host.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86.td | 48 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86Subtarget.h | 8 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/cpus.ll | 2 |
5 files changed, 50 insertions, 14 deletions
diff --git a/llvm/include/llvm/Support/X86TargetParser.def b/llvm/include/llvm/Support/X86TargetParser.def index 5c8c576b102..e4af0657a35 100644 --- a/llvm/include/llvm/Support/X86TargetParser.def +++ b/llvm/include/llvm/Support/X86TargetParser.def @@ -65,6 +65,8 @@ X86_CPU_TYPE ("athlon-xp", AMD_ATHLON_XP) X86_CPU_TYPE ("k8", AMD_K8) X86_CPU_TYPE ("k8-sse3", AMD_K8SSE3) X86_CPU_TYPE ("goldmont", INTEL_GOLDMONT) +X86_CPU_TYPE ("goldmont-plus", INTEL_GOLDMONT_PLUS) +X86_CPU_TYPE ("tremont", INTEL_TREMONT) #undef X86_CPU_TYPE_COMPAT_WITH_ALIAS #undef X86_CPU_TYPE_COMPAT #undef X86_CPU_TYPE diff --git a/llvm/lib/Support/Host.cpp b/llvm/lib/Support/Host.cpp index 4df1102cf26..3337d8adb37 100644 --- a/llvm/lib/Support/Host.cpp +++ b/llvm/lib/Support/Host.cpp @@ -651,9 +651,11 @@ getIntelProcessorTypeAndSubtype(unsigned Family, unsigned Model, // Goldmont: case 0x5c: // Apollo Lake case 0x5f: // Denverton - case 0x7a: // Gemini Lake *Type = X86::INTEL_GOLDMONT; break; // "goldmont" + case 0x7a: + *Type = X86::INTEL_GOLDMONT_PLUS; + break; case 0x57: *Type = X86::INTEL_KNL; // knl break; diff --git a/llvm/lib/Target/X86/X86.td b/llvm/lib/Target/X86/X86.td index 10e8e136270..aa1470ebf51 100644 --- a/llvm/lib/Target/X86/X86.td +++ b/llvm/lib/Target/X86/X86.td @@ -413,6 +413,10 @@ def ProcIntelSLM : SubtargetFeature<"slm", "X86ProcFamily", "IntelSLM", "Intel Silvermont processors">; def ProcIntelGLM : SubtargetFeature<"glm", "X86ProcFamily", "IntelGLM", "Intel Goldmont processors">; +def ProcIntelGLP : SubtargetFeature<"glp", "X86ProcFamily", "IntelGLP", + "Intel Goldmont Plus processors">; +def ProcIntelTRM : SubtargetFeature<"tremont", "X86ProcFamily", "IntelTRM", + "Intel Tremont processors">; def ProcIntelHSW : SubtargetFeature<"haswell", "X86ProcFamily", "IntelHaswell", "Intel Haswell processors">; def ProcIntelBDW : SubtargetFeature<"broadwell", "X86ProcFamily", @@ -564,8 +568,17 @@ class SilvermontProc<string Name> : ProcessorModel<Name, SLMModel, [ def : SilvermontProc<"silvermont">; def : SilvermontProc<"slm">; // Legacy alias. -class GoldmontProc<string Name> : ProcessorModel<Name, SLMModel, [ - ProcIntelGLM, +class ProcessorFeatures<list<SubtargetFeature> Inherited, + list<SubtargetFeature> NewFeatures> { + list<SubtargetFeature> Value = !listconcat(Inherited, NewFeatures); +} + +class ProcModel<string Name, SchedMachineModel Model, + list<SubtargetFeature> ProcFeatures, + list<SubtargetFeature> OtherFeatures> : + ProcessorModel<Name, Model, !listconcat(ProcFeatures, OtherFeatures)>; + +def GLMFeatures : ProcessorFeatures<[], [ FeatureX87, FeatureMMX, FeatureSSE42, @@ -592,8 +605,29 @@ class GoldmontProc<string Name> : ProcessorModel<Name, SLMModel, [ FeatureCLFLUSHOPT, FeatureFSGSBase ]>; + +class GoldmontProc<string Name> : ProcModel<Name, SLMModel, + GLMFeatures.Value, [ ProcIntelGLM ]>; def : GoldmontProc<"goldmont">; +class GoldmontPlusProc<string Name> : ProcModel<Name, SLMModel, + GLMFeatures.Value, [ + ProcIntelGLP, + FeatureRDPID, + FeatureSGX +]>; +def : GoldmontPlusProc<"goldmont-plus">; + +class TremontProc<string Name> : ProcModel<Name, SLMModel, + GLMFeatures.Value, [ + ProcIntelTRM, + FeatureCLDEMOTE, + FeatureGFNI, + FeatureRDPID, + FeatureSGX +]>; +def : TremontProc<"tremont">; + // "Arrandale" along with corei3 and corei5 class NehalemProc<string Name> : ProcessorModel<Name, SandyBridgeModel, [ FeatureX87, @@ -626,16 +660,6 @@ class WestmereProc<string Name> : ProcessorModel<Name, SandyBridgeModel, [ ]>; def : WestmereProc<"westmere">; -class ProcessorFeatures<list<SubtargetFeature> Inherited, - list<SubtargetFeature> NewFeatures> { - list<SubtargetFeature> Value = !listconcat(Inherited, NewFeatures); -} - -class ProcModel<string Name, SchedMachineModel Model, - list<SubtargetFeature> ProcFeatures, - list<SubtargetFeature> OtherFeatures> : - ProcessorModel<Name, Model, !listconcat(ProcFeatures, OtherFeatures)>; - // SSE is not listed here since llvm treats AVX as a reimplementation of SSE, // rather than a superset. def SNBFeatures : ProcessorFeatures<[], [ diff --git a/llvm/lib/Target/X86/X86Subtarget.h b/llvm/lib/Target/X86/X86Subtarget.h index 894aef20e0e..4665e2ddf18 100644 --- a/llvm/lib/Target/X86/X86Subtarget.h +++ b/llvm/lib/Target/X86/X86Subtarget.h @@ -56,6 +56,8 @@ public: IntelAtom, IntelSLM, IntelGLM, + IntelGLP, + IntelTRM, IntelHaswell, IntelBroadwell, IntelSkylake, @@ -660,7 +662,11 @@ public: /// TODO: to be removed later and replaced with suitable properties bool isAtom() const { return X86ProcFamily == IntelAtom; } bool isSLM() const { return X86ProcFamily == IntelSLM; } - bool isGLM() const { return X86ProcFamily == IntelGLM; } + bool isGLM() const { + return X86ProcFamily == IntelGLM || + X86ProcFamily == IntelGLP || + X86ProcFamily == IntelTRM; + } bool useSoftFloat() const { return UseSoftFloat; } /// Use mfence if we have SSE2 or we're on x86-64 (even if we asked for diff --git a/llvm/test/CodeGen/X86/cpus.ll b/llvm/test/CodeGen/X86/cpus.ll index c01868a937b..c1e783a0019 100644 --- a/llvm/test/CodeGen/X86/cpus.ll +++ b/llvm/test/CodeGen/X86/cpus.ll @@ -53,6 +53,8 @@ ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=silvermont 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=slm 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty ; 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=goldmont-plus 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty +; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=tremont 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 |