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
|
||
|