On Sat, Dec 20, 2025 at 6:22 AM Jakub Jelinek <[email protected]> wrote:
>
> Hi!
>
> This PR is about -mavx10.2 -mno-avx512vl ICE on some builtin.
> Though, because -mavx10.2 implies -mavx512vl (among many others), the
> pattern is right and doesn't need to care about such weird cases.
>
> What is wrong is the handling of -mno-avx512vl and various other options,
> that should unset -mavx10.1 and that should unset -mavx10.2, but it doesn't.
>
> I went through various ISAs which 10.1 or 10.2 implies, looking for the
> ISA{,2}_*_SET and corresponding ISA{,2}_*_UNSET macros and their use or lack
> thereof.
> Here is what I found.
> OPTION_MASK_ISA_AVX512FP16_UNSET has been incorrectly defined (avx512fp16
> implies avx512bw, not the other way around), but fortunately wasn't used.
> And then various ISAs implied by -mavx10.1 (except for -mavx512f which was
> correct) missed clearing -mavx10.{1,2} on -mno-* handling.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
Ok.
>
> As mentioned in the PR, it would be really nice to add some verification of
> the set and unset macros to verify consistency.
>
> 2025-12-19  Jakub Jelinek  <[email protected]>
>
>         PR target/123216
>         * common/config/i386/i386-common.cc 
> (OPTION_MASK_ISA_AVX512FP16_UNSET):
>         Remove unused macro.
>         (OPTION_MASK_ISA2_AVX512FP16_UNSET, OPTION_MASK_ISA2_AVX512BF16_UNSET,
>         OPTION_MASK_ISA2_AVX512BW_UNSET): Or in 
> OPTION_MASK_ISA2_AVX10_1_UNSET.
>         (OPTION_MASK_ISA2_AVX512CD_UNSET, OPTION_MASK_ISA2_AVX512DQ_UNSET,
>         OPTION_MASK_ISA2_AVX512VL_UNSET, OPTION_MASK_ISA2_AVX512IFMA_UNSET,
>         OPTION_MASK_ISA2_AVX512VNNI_UNSET,
>         OPTION_MASK_ISA2_AVX512VPOPCNTDQ_UNSET,
>         OPTION_MASK_ISA2_AVX512VBMI_UNSET, OPTION_MASK_ISA2_AVX512VBMI2_UNSET,
>         OPTION_MASK_ISA2_AVX512BITALG_UNSET): Define.
>         (ix86_handle_option): For
>         -mno-avx512{cd,dq,vl,ifma,vnni,vpopcntdq,vbmi,vbmi2,bitalg} also 
> remove
>         corresponding OPTION_MASK_ISA2_AVX512*_UNSET from ix86_isa_flags2
>         and add it to ix86_isa_flags2_explicit.
>
> --- gcc/common/config/i386/i386-common.cc.jj    2025-12-17 09:11:52.464564720 
> +0100
> +++ gcc/common/config/i386/i386-common.cc       2025-12-19 14:09:05.371330759 
> +0100
> @@ -266,13 +266,14 @@ along with GCC; see the file COPYING3.
>  #define OPTION_MASK_ISA2_AVXIFMA_UNSET OPTION_MASK_ISA2_AVXIFMA
>  #define OPTION_MASK_ISA_AVX512VBMI_UNSET OPTION_MASK_ISA_AVX512VBMI
>  #define OPTION_MASK_ISA_AVX512VBMI2_UNSET OPTION_MASK_ISA_AVX512VBMI2
> -#define OPTION_MASK_ISA_AVX512FP16_UNSET OPTION_MASK_ISA_AVX512BW_UNSET
> -#define OPTION_MASK_ISA2_AVX512FP16_UNSET OPTION_MASK_ISA2_AVX512FP16
> +#define OPTION_MASK_ISA2_AVX512FP16_UNSET \
> +  (OPTION_MASK_ISA2_AVX512FP16 | OPTION_MASK_ISA2_AVX10_1_UNSET)
>  #define OPTION_MASK_ISA_AVX512VNNI_UNSET OPTION_MASK_ISA_AVX512VNNI
>  #define OPTION_MASK_ISA2_AVXVNNI_UNSET OPTION_MASK_ISA2_AVXVNNI
>  #define OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET OPTION_MASK_ISA_AVX512VPOPCNTDQ
>  #define OPTION_MASK_ISA_AVX512BITALG_UNSET OPTION_MASK_ISA_AVX512BITALG
> -#define OPTION_MASK_ISA2_AVX512BF16_UNSET OPTION_MASK_ISA2_AVX512BF16
> +#define OPTION_MASK_ISA2_AVX512BF16_UNSET \
> +  (OPTION_MASK_ISA2_AVX512BF16 | OPTION_MASK_ISA2_AVX10_1_UNSET)
>  #define OPTION_MASK_ISA_RTM_UNSET OPTION_MASK_ISA_RTM
>  #define OPTION_MASK_ISA_PRFCHW_UNSET OPTION_MASK_ISA_PRFCHW
>  #define OPTION_MASK_ISA_RDSEED_UNSET OPTION_MASK_ISA_RDSEED
> @@ -396,7 +397,17 @@ along with GCC; see the file COPYING3.
>  #define OPTION_MASK_ISA2_AVX512BW_UNSET \
>    (OPTION_MASK_ISA2_AVX512BF16_UNSET \
>      | OPTION_MASK_ISA2_AVX512FP16_UNSET \
> +    | OPTION_MASK_ISA2_AVX10_1_UNSET \
>      | OPTION_MASK_ISA2_AVX512BMM_UNSET)
> +#define OPTION_MASK_ISA2_AVX512CD_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
> +#define OPTION_MASK_ISA2_AVX512DQ_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
> +#define OPTION_MASK_ISA2_AVX512VL_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
> +#define OPTION_MASK_ISA2_AVX512IFMA_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
> +#define OPTION_MASK_ISA2_AVX512VNNI_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
> +#define OPTION_MASK_ISA2_AVX512VPOPCNTDQ_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
> +#define OPTION_MASK_ISA2_AVX512VBMI_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
> +#define OPTION_MASK_ISA2_AVX512VBMI2_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
> +#define OPTION_MASK_ISA2_AVX512BITALG_UNSET OPTION_MASK_ISA2_AVX10_1_UNSET
>
>  /* Set 1 << value as value of -malign-FLAG option.  */
>
> @@ -648,6 +659,8 @@ ix86_handle_option (struct gcc_options *
>         {
>           opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512CD_UNSET;
>           opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512CD_UNSET;
> +         opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512CD_UNSET;
> +         opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512CD_UNSET;
>         }
>        return true;
>
> @@ -866,6 +879,9 @@ ix86_handle_option (struct gcc_options *
>         {
>           opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VBMI2_UNSET;
>           opts->x_ix86_isa_flags_explicit |= 
> OPTION_MASK_ISA_AVX512VBMI2_UNSET;
> +         opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512VBMI2_UNSET;
> +         opts->x_ix86_isa_flags2_explicit
> +           |= OPTION_MASK_ISA2_AVX512VBMI2_UNSET;
>         }
>        return true;
>
> @@ -894,6 +910,9 @@ ix86_handle_option (struct gcc_options *
>         {
>           opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VNNI_UNSET;
>           opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VNNI_UNSET;
> +         opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512VNNI_UNSET;
> +         opts->x_ix86_isa_flags2_explicit
> +           |= OPTION_MASK_ISA2_AVX512VNNI_UNSET;
>         }
>        return true;
>
> @@ -909,6 +928,9 @@ ix86_handle_option (struct gcc_options *
>           opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET;
>           opts->x_ix86_isa_flags_explicit
>             |= OPTION_MASK_ISA_AVX512VPOPCNTDQ_UNSET;
> +         opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512VPOPCNTDQ_UNSET;
> +         opts->x_ix86_isa_flags2_explicit
> +           |= OPTION_MASK_ISA2_AVX512VPOPCNTDQ_UNSET;
>         }
>        return true;
>
> @@ -923,6 +945,9 @@ ix86_handle_option (struct gcc_options *
>           opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512BITALG_UNSET;
>           opts->x_ix86_isa_flags_explicit
>                 |= OPTION_MASK_ISA_AVX512BITALG_UNSET;
> +         opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512BITALG_UNSET;
> +         opts->x_ix86_isa_flags2_explicit
> +           |= OPTION_MASK_ISA2_AVX512BITALG_UNSET;
>         }
>        return true;
>
> @@ -1020,6 +1045,8 @@ ix86_handle_option (struct gcc_options *
>         {
>           opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512DQ_UNSET;
>           opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512DQ_UNSET;
> +         opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512DQ_UNSET;
> +         opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512DQ_UNSET;
>         }
>        return true;
>
> @@ -1048,6 +1075,8 @@ ix86_handle_option (struct gcc_options *
>         {
>           opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VL_UNSET;
>           opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VL_UNSET;
> +         opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512VL_UNSET;
> +         opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AVX512VL_UNSET;
>         }
>        return true;
>
> @@ -1061,6 +1090,9 @@ ix86_handle_option (struct gcc_options *
>         {
>           opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512IFMA_UNSET;
>           opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512IFMA_UNSET;
> +         opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512IFMA_UNSET;
> +         opts->x_ix86_isa_flags2_explicit
> +           |= OPTION_MASK_ISA2_AVX512IFMA_UNSET;
>         }
>        return true;
>
> @@ -1074,6 +1106,9 @@ ix86_handle_option (struct gcc_options *
>         {
>           opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX512VBMI_UNSET;
>           opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512VBMI_UNSET;
> +         opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AVX512VBMI_UNSET;
> +         opts->x_ix86_isa_flags2_explicit
> +           |= OPTION_MASK_ISA2_AVX512VBMI_UNSET;
>         }
>        return true;
>
>
>         Jakub
>


-- 
BR,
Hongtao

Reply via email to