summaryrefslogtreecommitdiff
path: root/0282-Fix-target_clone-arch-graniterapids-d.patch
diff options
context:
space:
mode:
Diffstat (limited to '0282-Fix-target_clone-arch-graniterapids-d.patch')
-rw-r--r--0282-Fix-target_clone-arch-graniterapids-d.patch159
1 files changed, 159 insertions, 0 deletions
diff --git a/0282-Fix-target_clone-arch-graniterapids-d.patch b/0282-Fix-target_clone-arch-graniterapids-d.patch
new file mode 100644
index 0000000..54abd2e
--- /dev/null
+++ b/0282-Fix-target_clone-arch-graniterapids-d.patch
@@ -0,0 +1,159 @@
+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 28/28] 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.31.1
+