Hi all, AVX10 has been published for one and half year and we have got many feedbacks on that, one of the feedback is on whether the alias option -mavx10.x should point to 256 or 512.
If you also pay attention to LLVM community, you might see this thread related to AVX10 options just sent out several hours ago: [X86][AVX10] Disable m[no-]avx10.1 and switch m[no-]avx10.2 to alias of 512 bit options https://github.com/llvm/llvm-project/pull/124511 In GCC, we will also do so. This RFC patch is slightly different with LLVM, just including: - Switch -m[no-]avx10.2 to alias of 512 bit options. - Change -mno-avx10.[1,2]-512 to disable both 256 and 512 instructions. This will also result in -mno-avx10.2 would still disable both 256 and 512 insts according to new alias point to 512. But not including disabling -m[no-]avx10.1, since I still want more input on how to handle that. We actually have three choices on that: a. Directly re-alias -m[no-]avx10.1 to -m[no-]avx10.1-512 GCC 15 and backport to GCC 14. b. Disable -m[no]-avx10.1 in GCC 15, and add it back with -m[no-]avx10.1-512 in the future. This is for in case if someone cross compile with different versions of GCC with -mavx10.1, it might get unexpected result sliently. c. Disable -m[no]-avx10.1 in GCC 15, and never add it back. Since the option has been 256 bit, changing them back and forth is messy. It might be the final chance we could change the alias option since real AVX10.1 hardware is coming soon. And it is only x86 specific, so it might still squeeze into GCC 15 at this time. I call this patch RFC patch since we also need to change the doc and testcases accordingly, which makes this patch incomplete. Discussion and input is welcomed on this topic. Thx, Haochen --- gcc/common/config/i386/i386-common.cc | 30 +++++++++++++-------------- gcc/common/config/i386/i386-isas.h | 2 +- gcc/config/i386/i386-options.cc | 2 +- gcc/config/i386/i386.opt | 4 ++-- gcc/doc/extend.texi | 8 ++++--- gcc/doc/sourcebuild.texi | 4 ++-- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/gcc/common/config/i386/i386-common.cc b/gcc/common/config/i386/i386-common.cc index 52ad1c5acd1..3891fca8ecb 100644 --- a/gcc/common/config/i386/i386-common.cc +++ b/gcc/common/config/i386/i386-common.cc @@ -325,14 +325,12 @@ along with GCC; see the file COPYING3. If not see #define OPTION_MASK_ISA2_APX_F_UNSET OPTION_MASK_ISA2_APX_F #define OPTION_MASK_ISA2_EVEX512_UNSET OPTION_MASK_ISA2_EVEX512 #define OPTION_MASK_ISA2_USER_MSR_UNSET OPTION_MASK_ISA2_USER_MSR -#define OPTION_MASK_ISA2_AVX10_1_256_UNSET \ - (OPTION_MASK_ISA2_AVX10_1_256 | OPTION_MASK_ISA2_AVX10_1_512_UNSET \ - | OPTION_MASK_ISA2_AVX10_2_256_UNSET) -#define OPTION_MASK_ISA2_AVX10_1_512_UNSET \ - (OPTION_MASK_ISA2_AVX10_1_512 | OPTION_MASK_ISA2_AVX10_2_512_UNSET) -#define OPTION_MASK_ISA2_AVX10_2_256_UNSET OPTION_MASK_ISA2_AVX10_2_256 -#define OPTION_MASK_ISA2_AVX10_2_512_UNSET \ - (OPTION_MASK_ISA2_AVX10_2_512 | OPTION_MASK_ISA2_AMX_AVX512_UNSET) +#define OPTION_MASK_ISA2_AVX10_1_UNSET \ + (OPTION_MASK_ISA2_AVX10_1_256 | OPTION_MASK_ISA2_AVX10_1_512 \ + | OPTION_MASK_ISA2_AVX10_2_UNSET) +#define OPTION_MASK_ISA2_AVX10_2_UNSET \ + (OPTION_MASK_ISA2_AVX10_2_256 | OPTION_MASK_ISA2_AVX10_2_512 \ + OPTION_MASK_ISA2_AMX_AVX512_UNSET) #define OPTION_MASK_ISA2_AMX_AVX512_UNSET OPTION_MASK_ISA2_AMX_AVX512 #define OPTION_MASK_ISA2_AMX_TF32_UNSET OPTION_MASK_ISA2_AMX_TF32 #define OPTION_MASK_ISA2_AMX_TRANSPOSE_UNSET OPTION_MASK_ISA2_AMX_TRANSPOSE @@ -1378,8 +1376,8 @@ ix86_handle_option (struct gcc_options *opts, } else { - opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX10_1_256_UNSET; - opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX10_1_256_UNSET; + opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX10_1_UNSET; + opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX10_1_UNSET; opts->x_ix86_no_avx10_1_explicit = 1; } return true; @@ -1394,8 +1392,8 @@ ix86_handle_option (struct gcc_options *opts, } else { - opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX10_1_512_UNSET; - opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX10_1_512_UNSET; + opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX10_1_UNSET; + opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX10_1_UNSET; opts->x_ix86_no_avx10_1_explicit = 1; } return true; @@ -1410,8 +1408,8 @@ ix86_handle_option (struct gcc_options *opts, } else { - opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX10_2_256_UNSET; - opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX10_2_256_UNSET; + opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX10_2_UNSET; + opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX10_2_UNSET; } return true; @@ -1425,8 +1423,8 @@ ix86_handle_option (struct gcc_options *opts, } else { - opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX10_2_512_UNSET; - opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX10_2_512_UNSET; + opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX10_2_UNSET; + opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX10_2_UNSET; } return true; diff --git a/gcc/common/config/i386/i386-isas.h b/gcc/common/config/i386/i386-isas.h index 8976b031807..ac3bb13e137 100644 --- a/gcc/common/config/i386/i386-isas.h +++ b/gcc/common/config/i386/i386-isas.h @@ -186,7 +186,7 @@ ISA_NAMES_TABLE_START ISA_NAMES_TABLE_ENTRY("avx10.1", FEATURE_AVX10_1_256, P_NONE, "-mavx10.1") ISA_NAMES_TABLE_ENTRY("avx10.1-256", FEATURE_AVX10_1_256, P_AVX10_1_256, "-mavx10.1-256") ISA_NAMES_TABLE_ENTRY("avx10.1-512", FEATURE_AVX10_1_512, P_AVX10_1_512, "-mavx10.1-512") - ISA_NAMES_TABLE_ENTRY("avx10.2", FEATURE_AVX10_2_256, P_NONE, "-mavx10.2") + ISA_NAMES_TABLE_ENTRY("avx10.2", FEATURE_AVX10_2_512, P_NONE, "-mavx10.2") ISA_NAMES_TABLE_ENTRY("avx10.2-256", FEATURE_AVX10_2_256, P_NONE, "-mavx10.2-256") ISA_NAMES_TABLE_ENTRY("avx10.2-512", FEATURE_AVX10_2_512, P_NONE, "-mavx10.2-512") ISA_NAMES_TABLE_ENTRY("amx-avx512", FEATURE_AMX_AVX512, P_NONE, diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc index 3467ab0bbeb..ab9b2a43f69 100644 --- a/gcc/config/i386/i386-options.cc +++ b/gcc/config/i386/i386-options.cc @@ -1137,7 +1137,7 @@ ix86_valid_target_attribute_inner_p (tree fndecl, tree args, char *p_strings[], IX86_ATTR_ISA ("avx10.1", OPT_mavx10_1_256), IX86_ATTR_ISA ("avx10.1-256", OPT_mavx10_1_256), IX86_ATTR_ISA ("avx10.1-512", OPT_mavx10_1_512), - IX86_ATTR_ISA ("avx10.2", OPT_mavx10_2_256), + IX86_ATTR_ISA ("avx10.2", OPT_mavx10_2_512), IX86_ATTR_ISA ("avx10.2-256", OPT_mavx10_2_256), IX86_ATTR_ISA ("avx10.2-512", OPT_mavx10_2_512), IX86_ATTR_ISA ("amx-avx512", OPT_mamx_avx512), diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt index 5c889b72cc5..3ba8fa76a27 100644 --- a/gcc/config/i386/i386.opt +++ b/gcc/config/i386/i386.opt @@ -1389,9 +1389,9 @@ Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX10.1-512 and AVX10.2-512 built-in functions and code generation. mavx10.2 -Target Alias(mavx10.2-256) +Target Alias(mavx10.2-512) Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, -AVX10.1 and AVX10.2 built-in functions and code generation. +AVX10.1-512 and AVX10.2-512 built-in functions and code generation. mamx-avx512 Target Mask(ISA2_AMX_AVX512) Var(ix86_isa_flags2) Save diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 2764597a479..6349b5a4874 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -7619,17 +7619,19 @@ Enable/disable the generation of the AVX10.1 512 bit instructions. @cindex @code{target("avx10.2")} function attribute, x86 @item avx10.2 @itemx no-avx10.2 -Enable/disable the generation of the AVX10.2 instructions. +Enable the generation of the AVX10.2-512 instructions. +Disable the generation of the AVX10.2 instructions. @cindex @code{target("avx10.2-256")} function attribute, x86 @item avx10.2-256 @itemx no-avx10.2-256 -Enable/disbale the generation of the AVX10.2 instructions. +Enable/disable the generation of the AVX10.2-256 instructions. @cindex @code{target("avx10.2-512")} function attribute, x86 @item avx10.2-512 @itemx no-avx10.2-512 -Enable/disable the generation of the AVX10.2 512 bit instructions. +Enable the generation of the AVX10.2-512 instructions. +Disable the generation of the AVX10.2 instructions. @cindex @code{target("amx-avx512")} function attribute, x86 @item amx-avx512 diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index 98ede70f23c..0f3ee941e07 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -2621,10 +2621,10 @@ Target supports the execution of @code{avx10.1} instructions. Target supports the execution of @code{avx10.1-512} instructions. @item avx10.2 -Target supports the execution of @code{avx10.2} instructions. +Target supports the execution of @code{avx10.2-512} instructions. @item avx10.2-256 -Target supports the execution of @code{avx10.2} instructions. +Target supports the execution of @code{avx10.2-256} instructions. @item avx10.2-512 Target supports the execution of @code{avx10.2-512} instructions. -- 2.31.1