[gcc r17-1486] i386: Add FMV support for avx10.2 and apxf
Hongyu Wang
hongyuw@gcc.gnu.org
Thu Jun 11 02:08:49 GMT 2026
https://gcc.gnu.org/g:e935b1e43469dd33d9c242b81c4f1822fc398b16
commit r17-1486-ge935b1e43469dd33d9c242b81c4f1822fc398b16
Author: Hongyu Wang <hongyu.wang@intel.com>
Date: Wed Jun 3 07:51:11 2026 +0530
i386: Add FMV support for avx10.2 and apxf
Add function multiversioning priority for avx10.2 and apxf features,
and add P_PROC_AVX10_2 for processors that support these, like
diamondrapids and novalake.
The priority order is:
P_AVX10_1 < P_PROC_AVX10_1 < P_AVX10_2 < P_APX_F < P_PROC_AVX10_2
gcc/ChangeLog:
* common/config/i386/i386-cpuinfo.h (enum feature_priority):
Add P_AVX10_2, P_APX_F, P_PROC_AVX10_2.
* common/config/i386/i386-isas.h: Set P_AVX10_2 for avx10.2
and P_APX_F for apxf.
* common/config/i386/i386-common.cc (processor_alias_table):
Use P_PROC_AVX10_2 for diamondrapids and novalake.
gcc/testsuite/ChangeLog:
* gcc.target/i386/mvc18.c: New test for target_clones with
avx10.2, apxf, and arch=diamondrapids/novalake.
Diff:
---
gcc/common/config/i386/i386-common.cc | 4 ++--
gcc/common/config/i386/i386-cpuinfo.h | 3 +++
gcc/common/config/i386/i386-isas.h | 4 ++--
gcc/testsuite/gcc.target/i386/mvc18.c | 16 ++++++++++++++++
4 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/gcc/common/config/i386/i386-common.cc b/gcc/common/config/i386/i386-common.cc
index 1dd9819c3091..395dc5acd60a 100644
--- a/gcc/common/config/i386/i386-common.cc
+++ b/gcc/common/config/i386/i386-common.cc
@@ -2327,11 +2327,11 @@ const pta processor_alias_table[] =
{"pantherlake", PROCESSOR_PANTHERLAKE, CPU_HASWELL, PTA_PANTHERLAKE,
M_CPU_SUBTYPE (INTEL_COREI7_PANTHERLAKE), P_PROC_AVX2},
{"diamondrapids", PROCESSOR_DIAMONDRAPIDS, CPU_HASWELL, PTA_DIAMONDRAPIDS,
- M_CPU_SUBTYPE (INTEL_COREI7_DIAMONDRAPIDS), P_PROC_AVX10_1},
+ M_CPU_SUBTYPE (INTEL_COREI7_DIAMONDRAPIDS), P_PROC_AVX10_2},
{"wildcatlake", PROCESSOR_PANTHERLAKE, CPU_HASWELL, PTA_PANTHERLAKE,
M_CPU_SUBTYPE (INTEL_COREI7_PANTHERLAKE), P_PROC_AVX2},
{"novalake", PROCESSOR_NOVALAKE, CPU_HASWELL, PTA_NOVALAKE,
- M_CPU_SUBTYPE (INTEL_COREI7_NOVALAKE), P_PROC_AVX10_1},
+ M_CPU_SUBTYPE (INTEL_COREI7_NOVALAKE), P_PROC_AVX10_2},
{"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 5407d9d9ebaf..098f81274ade 100644
--- a/gcc/common/config/i386/i386-cpuinfo.h
+++ b/gcc/common/config/i386/i386-cpuinfo.h
@@ -157,6 +157,9 @@ enum feature_priority
P_X86_64_V4,
P_AVX10_1 = 34,
P_PROC_AVX10_1,
+ P_AVX10_2,
+ P_APX_F,
+ P_PROC_AVX10_2,
P_PROC_DYNAMIC
};
diff --git a/gcc/common/config/i386/i386-isas.h b/gcc/common/config/i386/i386-isas.h
index a6a736e99833..62973b15f0f6 100644
--- a/gcc/common/config/i386/i386-isas.h
+++ b/gcc/common/config/i386/i386-isas.h
@@ -181,10 +181,10 @@ ISA_NAMES_TABLE_START
ISA_NAMES_TABLE_ENTRY("sm3", FEATURE_SM3, P_NONE, "-msm3")
ISA_NAMES_TABLE_ENTRY("sha512", FEATURE_SHA512, P_NONE, "-msha512")
ISA_NAMES_TABLE_ENTRY("sm4", FEATURE_SM4, P_NONE, "-msm4")
- ISA_NAMES_TABLE_ENTRY("apxf", FEATURE_APX_F, P_NONE, "-mapxf")
+ ISA_NAMES_TABLE_ENTRY("apxf", FEATURE_APX_F, P_APX_F, "-mapxf")
ISA_NAMES_TABLE_ENTRY("usermsr", FEATURE_USER_MSR, P_NONE, "-musermsr")
ISA_NAMES_TABLE_ENTRY("avx10.1", FEATURE_AVX10_1, P_AVX10_1, "-mavx10.1")
- ISA_NAMES_TABLE_ENTRY("avx10.2", FEATURE_AVX10_2, P_NONE, "-mavx10.2")
+ ISA_NAMES_TABLE_ENTRY("avx10.2", FEATURE_AVX10_2, P_AVX10_2, "-mavx10.2")
ISA_NAMES_TABLE_ENTRY("amx-avx512", FEATURE_AMX_AVX512, P_NONE,
"-mamx-avx512")
ISA_NAMES_TABLE_ENTRY("amx-tf32", FEATURE_AMX_TF32, P_NONE, "-mamx-tf32")
diff --git a/gcc/testsuite/gcc.target/i386/mvc18.c b/gcc/testsuite/gcc.target/i386/mvc18.c
new file mode 100644
index 000000000000..0d78381677bc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/mvc18.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-require-ifunc "" } */
+
+/* { dg-final { scan-assembler "foo\.avx10_2\[,@\]" } } */
+/* { dg-final { scan-assembler "foo\.apxf\[,@\]" } } */
+/* { dg-final { scan-assembler "foo\.arch_diamondrapids\[,@\]" } } */
+/* { dg-final { scan-assembler "foo\.arch_novalake\[,@\]" } } */
+
+__attribute__((target_clones("avx10.2","apxf","arch=diamondrapids",
+ "arch=novalake","default")))
+int foo ();
+
+int main()
+{
+ return foo();
+}
More information about the Gcc-cvs
mailing list