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
