From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7888) id 023EE3857B93; Wed, 18 Oct 2023 06:41:49 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 023EE3857B93 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1697611309; bh=WswjJqy16lHTD1fhmKVeOMUJUSDXKeb3w0ZY5Qb17RI=; h=From:To:Subject:Date:From; b=PqVxfAL17K99me8CpfettgIKmA9vvyoDxoanMtBY6NFSbCJwjS4uHeBlvdp3rHhtR dLKFdNAJs5fFAekpnoVD8nvRb5u5KJFJOCFjiJncL+8alUw+uPNGIb0mrCfOZHr+2K g8PXibpdn3AnEQjUozyCUVmKPnaanDNDQF4goBWc= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Haochen Jiang To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-4704] Initial Panther Lake Support X-Act-Checkin: gcc X-Git-Author: Haochen Jiang X-Git-Refname: refs/heads/master X-Git-Oldrev: 2aa97c0da4a62d3cf41942e8803d049dee4fcf13 X-Git-Newrev: f019251ac9be017aaf3c58f87f43d88b974d21cf Message-Id: <20231018064149.023EE3857B93@sourceware.org> Date: Wed, 18 Oct 2023 06:41:49 +0000 (GMT) List-Id: https://gcc.gnu.org/g:f019251ac9be017aaf3c58f87f43d88b974d21cf commit r14-4704-gf019251ac9be017aaf3c58f87f43d88b974d21cf Author: Haochen Jiang Date: Wed Oct 18 14:40:45 2023 +0800 Initial Panther Lake Support gcc/ChangeLog: * common/config/i386/cpuinfo.h (get_intel_cpu): Add Panther Lake. * common/config/i386/i386-common.cc (processor_name): Ditto. (processor_alias_table): Ditto. * common/config/i386/i386-cpuinfo.h (enum processor_types): Add INTEL_PANTHERLAKE. * config.gcc: Add -march=pantherlake. * config/i386/driver-i386.cc (host_detect_local_cpu): Refactor the if clause. Handle pantherlake. * config/i386/i386-c.cc (ix86_target_macros_internal): Handle pantherlake. * config/i386/i386-options.cc (processor_cost_table): Ditto. (m_PANTHERLAKE): New. (m_CORE_HYBRID): Add pantherlake. * config/i386/i386.h (enum processor_type): Ditto. * doc/extend.texi: Ditto. * doc/invoke.texi: Ditto. gcc/testsuite/ChangeLog: * g++.target/i386/mv16.C: Ditto. * gcc.target/i386/funcspec-56.inc: Handle new march. Diff: --- gcc/common/config/i386/cpuinfo.h | 8 +++ gcc/common/config/i386/i386-common.cc | 3 + gcc/common/config/i386/i386-cpuinfo.h | 1 + gcc/config.gcc | 2 +- gcc/config/i386/driver-i386.cc | 92 ++++++++++++++------------- gcc/config/i386/i386-c.cc | 7 ++ gcc/config/i386/i386-options.cc | 5 +- gcc/config/i386/i386.h | 2 + gcc/doc/extend.texi | 3 + gcc/doc/invoke.texi | 9 +++ gcc/testsuite/g++.target/i386/mv16.C | 6 ++ gcc/testsuite/gcc.target/i386/funcspec-56.inc | 1 + 12 files changed, 94 insertions(+), 45 deletions(-) diff --git a/gcc/common/config/i386/cpuinfo.h b/gcc/common/config/i386/cpuinfo.h index 5cfbcf0e1bcd..f7218887c0ff 100644 --- a/gcc/common/config/i386/cpuinfo.h +++ b/gcc/common/config/i386/cpuinfo.h @@ -614,6 +614,14 @@ get_intel_cpu (struct __processor_model *cpu_model, CHECK___builtin_cpu_is ("clearwaterforest"); cpu_model->__cpu_type = INTEL_CLEARWATERFOREST; break; + case 0xcc: + /* Panther Lake. */ + cpu = "pantherlake"; + CHECK___builtin_cpu_is ("corei7"); + CHECK___builtin_cpu_is ("pantherlake"); + cpu_model->__cpu_type = INTEL_COREI7; + cpu_model->__cpu_subtype = INTEL_COREI7_PANTHERLAKE; + break; case 0x17: case 0x1d: /* Penryn. */ diff --git a/gcc/common/config/i386/i386-common.cc b/gcc/common/config/i386/i386-common.cc index 903034d2afd5..79b1b35ad6c8 100644 --- a/gcc/common/config/i386/i386-common.cc +++ b/gcc/common/config/i386/i386-common.cc @@ -2095,6 +2095,7 @@ const char *const processor_names[] = "graniterapids-d", "arrowlake", "arrowlake-s", + "pantherlake", "intel", "lujiazui", "geode", @@ -2227,6 +2228,8 @@ const pta processor_alias_table[] = M_CPU_SUBTYPE (INTEL_COREI7_ARROWLAKE_S), P_PROC_AVX2}, {"lunarlake", PROCESSOR_ARROWLAKE_S, CPU_HASWELL, PTA_ARROWLAKE_S, M_CPU_SUBTYPE (INTEL_COREI7_ARROWLAKE_S), P_PROC_AVX2}, + {"pantherlake", PROCESSOR_PANTHERLAKE, CPU_HASWELL, PTA_PANTHERLAKE, + M_CPU_SUBTYPE (INTEL_COREI7_PANTHERLAKE), P_PROC_AVX2}, {"bonnell", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL, M_CPU_TYPE (INTEL_BONNELL), P_PROC_SSSE3}, {"atom", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL, diff --git a/gcc/common/config/i386/i386-cpuinfo.h b/gcc/common/config/i386/i386-cpuinfo.h index 44db6a070762..533b7481c161 100644 --- a/gcc/common/config/i386/i386-cpuinfo.h +++ b/gcc/common/config/i386/i386-cpuinfo.h @@ -102,6 +102,7 @@ enum processor_subtypes INTEL_COREI7_GRANITERAPIDS_D, INTEL_COREI7_ARROWLAKE, INTEL_COREI7_ARROWLAKE_S, + INTEL_COREI7_PANTHERLAKE, CPU_SUBTYPE_MAX }; diff --git a/gcc/config.gcc b/gcc/config.gcc index 2d045d6d00f3..37311fcd0750 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -708,7 +708,7 @@ skylake goldmont goldmont-plus tremont cascadelake tigerlake cooperlake \ sapphirerapids alderlake rocketlake eden-x2 nano nano-1000 nano-2000 nano-3000 \ nano-x2 eden-x4 nano-x4 lujiazui x86-64 x86-64-v2 x86-64-v3 x86-64-v4 \ sierraforest graniterapids graniterapids-d grandridge arrowlake arrowlake-s \ -clearwaterforest native" +clearwaterforest pantherlake native" # Additional x86 processors supported by --with-cpu=. Each processor # MUST be separated by exactly one space. diff --git a/gcc/config/i386/driver-i386.cc b/gcc/config/i386/driver-i386.cc index 23fcff324f96..a9e54ef82b5b 100644 --- a/gcc/config/i386/driver-i386.cc +++ b/gcc/config/i386/driver-i386.cc @@ -589,26 +589,14 @@ const char *host_detect_local_cpu (int argc, const char **argv) if (arch) { /* This is unknown family 0x6 CPU. */ - if (has_feature (FEATURE_AVX)) + if (has_feature (FEATURE_AVX512F)) { - /* Assume Clearwater Forest. */ - if (has_feature (FEATURE_USER_MSR)) - cpu = "clearwaterforest"; - /* Assume Arrow Lake S. */ - else if (has_feature (FEATURE_SM3)) - cpu = "arrowlake-s"; - /* Assume Grand Ridge. */ - else if (has_feature (FEATURE_RAOINT)) - cpu = "grandridge"; /* Assume Granite Rapids D. */ - else if (has_feature (FEATURE_AMX_COMPLEX)) + if (has_feature (FEATURE_AMX_COMPLEX)) cpu = "graniterapids-d"; /* Assume Granite Rapids. */ else if (has_feature (FEATURE_AMX_FP16)) cpu = "graniterapids"; - /* Assume Sierra Forest. */ - else if (has_feature (FEATURE_AVXVNNIINT8)) - cpu = "sierraforest"; /* Assume Tiger Lake */ else if (has_feature (FEATURE_AVX512VP2INTERSECT)) cpu = "tigerlake"; @@ -621,36 +609,54 @@ const char *host_detect_local_cpu (int argc, const char **argv) /* Assume Ice Lake Server. */ else if (has_feature (FEATURE_WBNOINVD)) cpu = "icelake-server"; - /* Assume Ice Lake. */ - else if (has_feature (FEATURE_AVX512BITALG)) - cpu = "icelake-client"; - /* Assume Cannon Lake. */ - else if (has_feature (FEATURE_AVX512VBMI)) - cpu = "cannonlake"; - /* Assume Knights Mill. */ - else if (has_feature (FEATURE_AVX5124VNNIW)) - cpu = "knm"; - /* Assume Knights Landing. */ - else if (has_feature (FEATURE_AVX512ER)) - cpu = "knl"; - /* Assume Skylake with AVX-512. */ - else if (has_feature (FEATURE_AVX512F)) - cpu = "skylake-avx512"; - /* Assume Alder Lake */ - else if (has_feature (FEATURE_SERIALIZE)) + /* Assume Ice Lake. */ + else if (has_feature (FEATURE_AVX512BITALG)) + cpu = "icelake-client"; + /* Assume Cannon Lake. */ + else if (has_feature (FEATURE_AVX512VBMI)) + cpu = "cannonlake"; + /* Assume Knights Mill. */ + else if (has_feature (FEATURE_AVX5124VNNIW)) + cpu = "knm"; + /* Assume Knights Landing. */ + else if (has_feature (FEATURE_AVX512ER)) + cpu = "knl"; + /* Assume Skylake with AVX-512. */ + else + cpu = "skylake-avx512"; + } + else if (has_feature (FEATURE_AVX)) + { + /* Assume Panther Lake. */ + if (has_feature (FEATURE_PREFETCHI)) + cpu = "pantherlake"; + /* Assume Clearwater Forest. */ + else if (has_feature (FEATURE_USER_MSR)) + cpu = "clearwaterforest"; + /* Assume Arrow Lake S. */ + else if (has_feature (FEATURE_SM3)) + cpu = "arrowlake-s"; + /* Assume Grand Ridge. */ + else if (has_feature (FEATURE_RAOINT)) + cpu = "grandridge"; + /* Assume Sierra Forest. */ + else if (has_feature (FEATURE_AVXVNNIINT8)) + cpu = "sierraforest"; + /* Assume Alder Lake. */ + else if (has_feature (FEATURE_SERIALIZE)) cpu = "alderlake"; - /* Assume Skylake. */ - else if (has_feature (FEATURE_CLFLUSHOPT)) - cpu = "skylake"; - /* Assume Broadwell. */ - else if (has_feature (FEATURE_ADX)) - cpu = "broadwell"; - else if (has_feature (FEATURE_AVX2)) - /* Assume Haswell. */ - cpu = "haswell"; - else - /* Assume Sandy Bridge. */ - cpu = "sandybridge"; + /* Assume Skylake. */ + else if (has_feature (FEATURE_CLFLUSHOPT)) + cpu = "skylake"; + /* Assume Broadwell. */ + else if (has_feature (FEATURE_ADX)) + cpu = "broadwell"; + /* Assume Haswell. */ + else if (has_feature (FEATURE_AVX2)) + cpu = "haswell"; + /* Assume Sandy Bridge. */ + else + cpu = "sandybridge"; } else if (has_feature (FEATURE_SSE4_2)) { diff --git a/gcc/config/i386/i386-c.cc b/gcc/config/i386/i386-c.cc index 7ac95a923be9..ebe6a63ed41c 100644 --- a/gcc/config/i386/i386-c.cc +++ b/gcc/config/i386/i386-c.cc @@ -282,6 +282,10 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag, def_or_undef (parse_in, "__arrowlake_s"); def_or_undef (parse_in, "__arrowlake_s__"); break; + case PROCESSOR_PANTHERLAKE: + def_or_undef (parse_in, "__pantherlake"); + def_or_undef (parse_in, "__pantherlake__"); + break; /* use PROCESSOR_max to not set/unset the arch macro. */ case PROCESSOR_max: @@ -476,6 +480,9 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag, case PROCESSOR_ARROWLAKE_S: def_or_undef (parse_in, "__tune_arrowlake_s__"); break; + case PROCESSOR_PANTHERLAKE: + def_or_undef (parse_in, "__tune_pantherlake__"); + break; case PROCESSOR_INTEL: case PROCESSOR_GENERIC: break; diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc index 952cfe54da07..3a03de5ceca7 100644 --- a/gcc/config/i386/i386-options.cc +++ b/gcc/config/i386/i386-options.cc @@ -142,8 +142,10 @@ along with GCC; see the file COPYING3. If not see #define m_ARROWLAKE (HOST_WIDE_INT_1U<