160 lines
6.3 KiB
Diff
160 lines
6.3 KiB
Diff
|
|
From 8db0f3cd29bd7f937ffa01dd1100360fbbf5b6f4 Mon Sep 17 00:00:00 2001
|
|||
|
|
From: liuhongt <hongtao.liu@intel.com>
|
|||
|
|
Date: Tue, 22 Aug 2023 18:18:31 +0800
|
|||
|
|
Subject: [PATCH 30/32] Fix target_clone ("arch=graniterapids-d")
|
|||
|
|
|
|||
|
|
Both "graniterapid-d" and "graniterapids" are attached with
|
|||
|
|
PROCESSOR_GRANITERAPID in processor_alias_table but mapped to
|
|||
|
|
different __cpu_subtype in get_intel_cpu.
|
|||
|
|
|
|||
|
|
And get_builtin_code_for_version will try to match the first
|
|||
|
|
PROCESSOR_GRANITERAPIDS in processor_alias_table which maps to
|
|||
|
|
"granitepraids" here.
|
|||
|
|
|
|||
|
|
861 else if (new_target->arch_specified && new_target->arch > 0)
|
|||
|
|
1862 for (i = 0; i < pta_size; i++)
|
|||
|
|
1863 if (processor_alias_table[i].processor == new_target->arch)
|
|||
|
|
1864 {
|
|||
|
|
1865 const pta *arch_info = &processor_alias_table[i];
|
|||
|
|
1866 switch (arch_info->priority)
|
|||
|
|
1867 {
|
|||
|
|
1868 default:
|
|||
|
|
1869 arg_str = arch_info->name;
|
|||
|
|
|
|||
|
|
This mismatch makes dispatch_function_versions check the preidcate
|
|||
|
|
of__builtin_cpu_is ("graniterapids") for "graniterapids-d" and causes
|
|||
|
|
the issue.
|
|||
|
|
The patch explicitly adds PROCESSOR_GRANITERAPIDS_D to make a distinction.
|
|||
|
|
|
|||
|
|
For "alderlake","raptorlake", "meteorlake" they share same isa, cost,
|
|||
|
|
tuning, and mapped to the same __cpu_type/__cpu_subtype in
|
|||
|
|
get_intel_cpu, so no need to add PROCESSOR_RAPTORLAKE and others.
|
|||
|
|
|
|||
|
|
gcc/ChangeLog:
|
|||
|
|
|
|||
|
|
* common/config/i386/i386-common.cc (processor_names): Add new
|
|||
|
|
member graniterapids-s.
|
|||
|
|
* config/i386/i386-options.cc (processor_alias_table): Update
|
|||
|
|
table with and PROCESSOR_GRANITERAPIDS_D.
|
|||
|
|
(m_GRANITERAPID_D): New macro.
|
|||
|
|
(m_CORE_AVX512): Add m_GRANITERAPIDS_D.
|
|||
|
|
(processor_cost_table): Add icelake_cost for
|
|||
|
|
PROCESSOR_GRANITERAPIDS_D.
|
|||
|
|
* config/i386/i386.h (enum processor_type): Add new member
|
|||
|
|
PROCESSOR_GRANITERAPIDS_D.
|
|||
|
|
* config/i386/i386-c.cc (ix86_target_macros_internal): Handle
|
|||
|
|
PROCESSOR_GRANITERAPIDS_D
|
|||
|
|
---
|
|||
|
|
gcc/common/config/i386/i386-common.cc | 6 ++++--
|
|||
|
|
gcc/config/i386/i386-c.cc | 8 ++++++++
|
|||
|
|
gcc/config/i386/i386-options.cc | 4 +++-
|
|||
|
|
gcc/config/i386/i386.h | 3 ++-
|
|||
|
|
4 files changed, 17 insertions(+), 4 deletions(-)
|
|||
|
|
|
|||
|
|
diff --git a/gcc/common/config/i386/i386-common.cc b/gcc/common/config/i386/i386-common.cc
|
|||
|
|
index 28f468f48..bec6801ce 100644
|
|||
|
|
--- a/gcc/common/config/i386/i386-common.cc
|
|||
|
|
+++ b/gcc/common/config/i386/i386-common.cc
|
|||
|
|
@@ -1873,6 +1873,7 @@ const char *const processor_names[] =
|
|||
|
|
"alderlake",
|
|||
|
|
"rocketlake",
|
|||
|
|
"graniterapids",
|
|||
|
|
+ "graniterapids-d",
|
|||
|
|
"intel",
|
|||
|
|
"geode",
|
|||
|
|
"k6",
|
|||
|
|
@@ -1993,8 +1994,9 @@ const pta processor_alias_table[] =
|
|||
|
|
M_CPU_SUBTYPE (INTEL_COREI7_ALDERLAKE), P_PROC_AVX2},
|
|||
|
|
{"graniterapids", PROCESSOR_GRANITERAPIDS, CPU_HASWELL, PTA_GRANITERAPIDS,
|
|||
|
|
M_CPU_SUBTYPE (INTEL_COREI7_GRANITERAPIDS), P_PROC_AVX512F},
|
|||
|
|
- {"graniterapids-d", PROCESSOR_GRANITERAPIDS, CPU_HASWELL, PTA_GRANITERAPIDS_D,
|
|||
|
|
- M_CPU_SUBTYPE (INTEL_COREI7_GRANITERAPIDS_D), P_PROC_AVX512F},
|
|||
|
|
+ {"graniterapids-d", PROCESSOR_GRANITERAPIDS_D, CPU_HASWELL,
|
|||
|
|
+ PTA_GRANITERAPIDS_D, M_CPU_SUBTYPE (INTEL_COREI7_GRANITERAPIDS_D),
|
|||
|
|
+ P_PROC_AVX512F},
|
|||
|
|
{"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/config/i386/i386-c.cc b/gcc/config/i386/i386-c.cc
|
|||
|
|
index 5e0ac278c..49f0db2b8 100644
|
|||
|
|
--- a/gcc/config/i386/i386-c.cc
|
|||
|
|
+++ b/gcc/config/i386/i386-c.cc
|
|||
|
|
@@ -246,6 +246,10 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag,
|
|||
|
|
def_or_undef (parse_in, "__graniterapids");
|
|||
|
|
def_or_undef (parse_in, "__graniterapids__");
|
|||
|
|
break;
|
|||
|
|
+ case PROCESSOR_GRANITERAPIDS_D:
|
|||
|
|
+ def_or_undef (parse_in, "__graniterapids_d");
|
|||
|
|
+ def_or_undef (parse_in, "__graniterapids_d__");
|
|||
|
|
+ break;
|
|||
|
|
case PROCESSOR_ALDERLAKE:
|
|||
|
|
def_or_undef (parse_in, "__alderlake");
|
|||
|
|
def_or_undef (parse_in, "__alderlake__");
|
|||
|
|
@@ -254,6 +258,7 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag,
|
|||
|
|
def_or_undef (parse_in, "__rocketlake");
|
|||
|
|
def_or_undef (parse_in, "__rocketlake__");
|
|||
|
|
break;
|
|||
|
|
+
|
|||
|
|
/* use PROCESSOR_max to not set/unset the arch macro. */
|
|||
|
|
case PROCESSOR_max:
|
|||
|
|
break;
|
|||
|
|
@@ -426,6 +431,9 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag,
|
|||
|
|
case PROCESSOR_GRANITERAPIDS:
|
|||
|
|
def_or_undef (parse_in, "__tune_graniterapids__");
|
|||
|
|
break;
|
|||
|
|
+ case PROCESSOR_GRANITERAPIDS_D:
|
|||
|
|
+ def_or_undef (parse_in, "__tune_graniterapids_d__");
|
|||
|
|
+ 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 7efd25084..86932d719 100644
|
|||
|
|
--- a/gcc/config/i386/i386-options.cc
|
|||
|
|
+++ b/gcc/config/i386/i386-options.cc
|
|||
|
|
@@ -128,10 +128,11 @@ along with GCC; see the file COPYING3. If not see
|
|||
|
|
#define m_ALDERLAKE (HOST_WIDE_INT_1U<<PROCESSOR_ALDERLAKE)
|
|||
|
|
#define m_ROCKETLAKE (HOST_WIDE_INT_1U<<PROCESSOR_ROCKETLAKE)
|
|||
|
|
#define m_GRANITERAPIDS (HOST_WIDE_INT_1U<<PROCESSOR_GRANITERAPIDS)
|
|||
|
|
+#define m_GRANITERAPIDS_D (HOST_WIDE_INT_1U<<PROCESSOR_GRANITERAPIDS_D)
|
|||
|
|
#define m_CORE_AVX512 (m_SKYLAKE_AVX512 | m_CANNONLAKE \
|
|||
|
|
| m_ICELAKE_CLIENT | m_ICELAKE_SERVER | m_CASCADELAKE \
|
|||
|
|
| m_TIGERLAKE | m_COOPERLAKE | m_SAPPHIRERAPIDS \
|
|||
|
|
- | m_ROCKETLAKE | m_GRANITERAPIDS)
|
|||
|
|
+ | m_ROCKETLAKE | m_GRANITERAPIDS | m_GRANITERAPIDS_D)
|
|||
|
|
#define m_CORE_AVX2 (m_HASWELL | m_SKYLAKE | m_CORE_AVX512)
|
|||
|
|
#define m_CORE_ALL (m_CORE2 | m_NEHALEM | m_SANDYBRIDGE | m_CORE_AVX2)
|
|||
|
|
#define m_GOLDMONT (HOST_WIDE_INT_1U<<PROCESSOR_GOLDMONT)
|
|||
|
|
@@ -764,6 +765,7 @@ static const struct processor_costs *processor_cost_table[] =
|
|||
|
|
&alderlake_cost,
|
|||
|
|
&icelake_cost,
|
|||
|
|
&icelake_cost,
|
|||
|
|
+ &icelake_cost,
|
|||
|
|
&intel_cost,
|
|||
|
|
&geode_cost,
|
|||
|
|
&k6_cost,
|
|||
|
|
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
|
|||
|
|
index eda3e5e5b..5052f878d 100644
|
|||
|
|
--- a/gcc/config/i386/i386.h
|
|||
|
|
+++ b/gcc/config/i386/i386.h
|
|||
|
|
@@ -2216,7 +2216,7 @@ extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER];
|
|||
|
|
#define DEFAULT_LARGE_SECTION_THRESHOLD 65536
|
|||
|
|
|
|||
|
|
/* Which processor to tune code generation for. These must be in sync
|
|||
|
|
- with processor_target_table in i386.cc. */
|
|||
|
|
+ with processor_cost_table in i386-options.cc. */
|
|||
|
|
|
|||
|
|
enum processor_type
|
|||
|
|
{
|
|||
|
|
@@ -2251,6 +2251,7 @@ enum processor_type
|
|||
|
|
PROCESSOR_ALDERLAKE,
|
|||
|
|
PROCESSOR_ROCKETLAKE,
|
|||
|
|
PROCESSOR_GRANITERAPIDS,
|
|||
|
|
+ PROCESSOR_GRANITERAPIDS_D,
|
|||
|
|
PROCESSOR_INTEL,
|
|||
|
|
PROCESSOR_GEODE,
|
|||
|
|
PROCESSOR_K6,
|
|||
|
|
--
|
|||
|
|
2.28.0.windows.1
|
|||
|
|
|