On Mon, Mar 31, 2025 at 9:52 PM Richard Biener <rguent...@suse.de> wrote:
>
> On Mon, 31 Mar 2025, Jakub Jelinek wrote:
>
> > On Mon, Mar 31, 2025 at 03:33:34PM +0200, Richard Biener wrote:
> > > On Mon, 31 Mar 2025, Jakub Jelinek wrote:
> > >
> > > > On Mon, Mar 31, 2025 at 03:12:56PM +0200, Richard Biener wrote:
> > > > > The following fixes ix86_handle_option to properly handle -mno-sse4
> > > > > which is always handled as -msse4 with value unset.  I've verified
> > > > > no other OPT_mno_* is left around.
> > > > >
> > > > > Bootstrap and regtest running on x86_64-unknown-linux-gnu.
> > > > >
> > > > > This error goes back quite some time, I'm not sure how prevalent
> > > > > the use of -mno-sse4 is.  In fact I have no idea why we have
> > > > > OPT_mno_sse4 at all...
> > > >
> > > > That is because SSE4 is SSE4.1 + SSE4.2.
> > > > So for -msse4 we want it to act as -msse4.2 and for -mno-sse4
> > > > to act as -mno-sse4.1
> > >
> > > Yes, but it seems ix86_handle_option handles this via
> > > OPTION_MASK_ISA_SSE4_SET vs. ~OPTION_MASK_ISA_SSE4_UNSET.  So the
> > > question is what the -mno-sse4 options entry does.  I'll note
> >
> > But
> > i386-common.cc:#define OPTION_MASK_ISA_SSE4_SET OPTION_MASK_ISA_SSE4_2_SET
> > i386-common.cc:#define OPTION_MASK_ISA_SSE4_UNSET 
> > OPTION_MASK_ISA_SSE4_1_UNSET
> > i386-common.cc:#define OPTION_MASK_ISA2_SSE4_UNSET 
> > OPTION_MASK_ISA2_SSE4_1_UNSET
> > which is exactly what it wants.
> >
> > > that ix86_handle_option also unsets flags in ix86_isa_flags2
> > > with -mno-sse4 but the mno-sse4 options entry does not indicate
> > > that.
> >
> > It does, that is the
> >   opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_SSE4_UNSET;
> >   opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_SSE4_UNSET;
> > There is no OPTION_MASK_ISA2_SSE4_SET (like there is no
> > OPTION_MASK_ISA2_SSE{,[234],4_{1,2}}_SET, that isn't needed because
> > all the requirements of SSE4 still fit into ix86_isa_flags.
>
> Yes, all I say is that ix86_handle_option looks OK, I'm not sure
> why we need the
>
> mno-sse4
> Target RejectNegative InverseMask(ISA_SSE4_1) Var(ix86_isa_flags) Save
> Do not support SSE4.1 and SSE4.2 built-in functions and code generation.
>
> options entry.  Or whether that means ix86_valid_target_attribute_inner_p
> should have created OPT_mno_sse4 from -mno-sse4.  At least, having
> both i386.opt entries looks like unnecessary complication to me.
>
> And maybe I broke -mno-sse4 on the command-line with my change.  Indeed
>
> > ./xgcc -B. t.c -mno-sse4
>
> hits the code with OPT_mno_sse4.  I'll update the patch to leave
> the old OPT_mno_sse4 handling in place.  The other option is
> to fixup ix86_valid_target_attribute_inner_p to when finding
> -mno-sse4 to exactly special case that and use OPT_mno_sse4?
I guess
1) removing RejectNegative in msse4 entry
2) removing mno-sse4 entry in i386.opt
3) Adjust code in ix86_handle_option(what your patch did)
Should fix all the isse?
>
> Again, I don't really understand why it was done in this complicated
> way.  At least there seems to be some test coverage.
>
>
> Richard.
>

>Changing ix86_valid_target_attribute_inner_p might be even better because
>OPT_msse4 is RejectNegative option, so !value for it looks weird.
msse4 is defined as ix86_opt_isa in ix86_valid_target_attribute_inner_p

1055    IX86_ATTR_ISA ("sse4",      OPT_msse4),

and would be handled in ix86_handle_option

1282      else if (type == ix86_opt_isa)
1283        {
1284          struct cl_decoded_option decoded;
1285
1286          generate_option (opt, NULL, opt_set_p, CL_TARGET,
&decoded);
1287          ix86_handle_option (opts, opts_set,
1288                              &decoded, input_location);
1289        }

So I think it's already correct here.

-- 
BR,
Hongtao

Reply via email to