From: Pengfei Wang Date: Fri, 7 Jun 2019 08:31:35 +0000 (+0000) Subject: [X86] -march=cooperlake (llvm) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=22eaa500e4319a5a5576e0a7f0c6ed2304e8a61e;p=llvm [X86] -march=cooperlake (llvm) Support intel -march=cooperlake in llvm Patch by Shengchen Kan (skan) Differential Revision: https://reviews.llvm.org/D62836 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362776 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Support/X86TargetParser.def b/include/llvm/Support/X86TargetParser.def index 27adbfe1c83..1749be3b3ae 100644 --- a/include/llvm/Support/X86TargetParser.def +++ b/include/llvm/Support/X86TargetParser.def @@ -111,6 +111,7 @@ X86_CPU_SUBTYPE ("k6", AMDPENTIUM_K6) X86_CPU_SUBTYPE ("k6-2", AMDPENTIUM_K62) X86_CPU_SUBTYPE ("k6-3", AMDPENTIUM_K63) X86_CPU_SUBTYPE ("geode", AMDPENTIUM_GEODE) +X86_CPU_SUBTYPE ("cooperlake", INTEL_COREI7_COOPERLAKE) #undef X86_CPU_SUBTYPE_COMPAT #undef X86_CPU_SUBTYPE @@ -165,5 +166,6 @@ X86_FEATURE (65, FEATURE_ADX) X86_FEATURE (66, FEATURE_EM64T) X86_FEATURE (67, FEATURE_CLFLUSHOPT) X86_FEATURE (68, FEATURE_SHA) +X86_FEATURE (69, FEATURE_AVX512BF16) #undef X86_FEATURE_COMPAT #undef X86_FEATURE diff --git a/lib/Support/Host.cpp b/lib/Support/Host.cpp index 221a0af76d1..df2d4dcca2a 100644 --- a/lib/Support/Host.cpp +++ b/lib/Support/Host.cpp @@ -672,7 +672,9 @@ getIntelProcessorTypeAndSubtype(unsigned Family, unsigned Model, // Skylake Xeon: case 0x55: *Type = X86::INTEL_COREI7; - if (Features2 & (1 << (X86::FEATURE_AVX512VNNI - 32))) + if (Features3 & (1 << (X86::FEATURE_AVX512BF16 - 64))) + *Subtype = X86::INTEL_COREI7_COOPERLAKE; // "cooperlake" + else if (Features2 & (1 << (X86::FEATURE_AVX512VNNI - 32))) *Subtype = X86::INTEL_COREI7_CASCADELAKE; // "cascadelake" else *Subtype = X86::INTEL_COREI7_SKYLAKE_AVX512; // "skylake-avx512" @@ -748,6 +750,12 @@ getIntelProcessorTypeAndSubtype(unsigned Family, unsigned Model, break; } + if (Features3 & (1 << (X86::FEATURE_AVX512BF16 - 64))) { + *Type = X86::INTEL_COREI7; + *Subtype = X86::INTEL_COREI7_COOPERLAKE; + break; + } + if (Features2 & (1 << (X86::FEATURE_AVX512VNNI - 32))) { *Type = X86::INTEL_COREI7; *Subtype = X86::INTEL_COREI7_CASCADELAKE; diff --git a/lib/Target/X86/X86.td b/lib/Target/X86/X86.td index 52d90d711c0..3112f00c91f 100644 --- a/lib/Target/X86/X86.td +++ b/lib/Target/X86/X86.td @@ -616,6 +616,15 @@ def ProcessorFeatures { list CLXFeatures = !listconcat(CLXInheritableFeatures, CLXSpecificFeatures); + // Cooperlake + list CPXAdditionalFeatures = [FeatureBF16]; + list CPXSpecificFeatures = [FeatureHasFastGather, + FeaturePOPCNTFalseDeps]; + list CPXInheritableFeatures = + !listconcat(CLXInheritableFeatures, CPXAdditionalFeatures); + list CPXFeatures = + !listconcat(CPXInheritableFeatures, CPXSpecificFeatures); + // Cannonlake list CNLAdditionalFeatures = [FeatureAVX512, FeatureCDI, @@ -1076,6 +1085,8 @@ foreach P = ["skylake-avx512", "skx"] in { def : ProcessorModel<"cascadelake", SkylakeServerModel, ProcessorFeatures.CLXFeatures>; +def : ProcessorModel<"cooperlake", SkylakeServerModel, + ProcessorFeatures.CPXFeatures>; def : ProcessorModel<"cannonlake", SkylakeServerModel, ProcessorFeatures.CNLFeatures>; def : ProcessorModel<"icelake-client", SkylakeServerModel, diff --git a/test/CodeGen/X86/cpus-intel.ll b/test/CodeGen/X86/cpus-intel.ll index 6eb2138444b..1177ebcecc3 100644 --- a/test/CodeGen/X86/cpus-intel.ll +++ b/test/CodeGen/X86/cpus-intel.ll @@ -35,6 +35,7 @@ ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=skylake-avx512 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=skx 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=cascadelake 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty +; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=cooperlake 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=cannonlake 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=icelake-client 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty ; RUN: llc < %s -o /dev/null -mtriple=x86_64-unknown-unknown -mcpu=icelake-server 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ERROR --allow-empty