On Tue, Sep 4, 2018 at 4:28 PM, Jakub Jelinek <ja...@redhat.com> wrote: > Hi! > > The -mxsave{opt,s,c} options turn on automatically -mxsave option and > the patterns rely on TARGET_XSAVE{OPT,S,C} implying TARGET_XSAVE, > but if somebody uses e.g. -mxsave{opt,s,c} -mno-xsave (or something that > implies > -mno-xsave), TARGET_XSAVE{OPT,S,C} remains set and TARGET_XSAVE is clear. > > Fixed by making sure OPTION_MASK_ISA_XSAVE_UNSET unsets also xsave{s,c} > (xsaveopt was already there). > > This patch doesn't try to address PR87171, which I believe needs further > discussions and doesn't touch the same code anyway, so I think it should be > resolved independently. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk and > release branches? > > 2018-09-04 Jakub Jelinek <ja...@redhat.com> > > PR target/87198 > * common/config/i386/i386-common.c (OPTION_MASK_ISA_XSAVEOPT_SET, > OPTION_MASK_ISA_XSAVES_SET, OPTION_MASK_ISA_XSAVEC_SET): Use > OPTION_MASK_ISA_XSAVE_SET instead of OPTION_MASK_ISA_XSAVE. > (OPTION_MASK_ISA_XSAVE_UNSET): Add OPTION_MASK_ISA_XSAVES_UNSET > and OPTION_MASK_ISA_XSAVEC_UNSET. > > * gcc.target/i386/pr87198.c: New test.
OK. Thanks, Uros. > --- gcc/common/config/i386/i386-common.c.jj 2018-07-17 12:48:23.388587985 > +0200 > +++ gcc/common/config/i386/i386-common.c 2018-09-03 11:45:03.543653449 > +0200 > @@ -59,7 +59,7 @@ along with GCC; see the file COPYING3. > #define OPTION_MASK_ISA_FXSR_SET OPTION_MASK_ISA_FXSR > #define OPTION_MASK_ISA_XSAVE_SET OPTION_MASK_ISA_XSAVE > #define OPTION_MASK_ISA_XSAVEOPT_SET \ > - (OPTION_MASK_ISA_XSAVEOPT | OPTION_MASK_ISA_XSAVE) > + (OPTION_MASK_ISA_XSAVEOPT | OPTION_MASK_ISA_XSAVE_SET) > #define OPTION_MASK_ISA_AVX512F_SET \ > (OPTION_MASK_ISA_AVX512F | OPTION_MASK_ISA_AVX2_SET) > #define OPTION_MASK_ISA_AVX512CD_SET \ > @@ -95,9 +95,9 @@ along with GCC; see the file COPYING3. > #define OPTION_MASK_ISA_PREFETCHWT1_SET OPTION_MASK_ISA_PREFETCHWT1 > #define OPTION_MASK_ISA_CLFLUSHOPT_SET OPTION_MASK_ISA_CLFLUSHOPT > #define OPTION_MASK_ISA_XSAVES_SET \ > - (OPTION_MASK_ISA_XSAVES | OPTION_MASK_ISA_XSAVE) > + (OPTION_MASK_ISA_XSAVES | OPTION_MASK_ISA_XSAVE_SET) > #define OPTION_MASK_ISA_XSAVEC_SET \ > - (OPTION_MASK_ISA_XSAVEC | OPTION_MASK_ISA_XSAVE) > + (OPTION_MASK_ISA_XSAVEC | OPTION_MASK_ISA_XSAVE_SET) > #define OPTION_MASK_ISA_CLWB_SET OPTION_MASK_ISA_CLWB > > /* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same > @@ -185,7 +185,8 @@ along with GCC; see the file COPYING3. > #define OPTION_MASK_ISA_FMA_UNSET OPTION_MASK_ISA_FMA > #define OPTION_MASK_ISA_FXSR_UNSET OPTION_MASK_ISA_FXSR > #define OPTION_MASK_ISA_XSAVE_UNSET \ > - (OPTION_MASK_ISA_XSAVE | OPTION_MASK_ISA_XSAVEOPT_UNSET) > + (OPTION_MASK_ISA_XSAVE | OPTION_MASK_ISA_XSAVEOPT_UNSET \ > + | OPTION_MASK_ISA_XSAVES_UNSET | OPTION_MASK_ISA_XSAVEC_UNSET) > #define OPTION_MASK_ISA_XSAVEOPT_UNSET OPTION_MASK_ISA_XSAVEOPT > #define OPTION_MASK_ISA_AVX2_UNSET \ > (OPTION_MASK_ISA_AVX2 | OPTION_MASK_ISA_AVX512F_UNSET) > --- gcc/testsuite/gcc.target/i386/pr87198.c.jj 2018-09-03 12:07:48.277760935 > +0200 > +++ gcc/testsuite/gcc.target/i386/pr87198.c 2018-09-03 12:07:27.624107043 > +0200 > @@ -0,0 +1,13 @@ > +/* PR target/87198 */ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -mxsavec -mno-xsave" } */ > + > +#include <x86intrin.h> > + > +void > +test_xsavec (void *__A, long long __B) > +{ > + _xsavec (__A, __B); > +} > + > +/* { dg-error "target specific option mismatch" "" { target *-*-* } 0 } */ > > Jakub