On Thu, 2023-08-10 at 09:11 +0800, liuhongt via Gcc-patches wrote: > Currently we have 3 different independent tunes for gather > "use_gather,use_gather_2parts,use_gather_4parts", > similar for scatter, there're > "use_scatter,use_scatter_2parts,use_scatter_4parts" > > The patch support 2 standardizing options to enable/disable > vectorization for all gather/scatter instructions. The options is > interpreted by driver to 3 tunes. > > bootstrapped and regtested on x86_64-pc-linux-gnu. > Ok for trunk?
And should we set -mno-gather as the default for GDS affected processors? We'll likely apply the ucode update for them, and then the gathering instructions will be much slower. > gcc/ChangeLog: > > * config/i386/i386.h (DRIVER_SELF_SPECS): Add > GATHER_SCATTER_DRIVER_SELF_SPECS. > (GATHER_SCATTER_DRIVER_SELF_SPECS): New macro. > * config/i386/i386.opt (mgather): New option. > (mscatter): Ditto. > --- > gcc/config/i386/i386.h | 12 +++++++++++- > gcc/config/i386/i386.opt | 8 ++++++++ > 2 files changed, 19 insertions(+), 1 deletion(-) > > diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h > index ef342fcee9b..d9ac2c29bde 100644 > --- a/gcc/config/i386/i386.h > +++ b/gcc/config/i386/i386.h > @@ -565,7 +565,17 @@ extern GTY(()) tree x86_mfence; > # define SUBTARGET_DRIVER_SELF_SPECS "" > #endif > > -#define DRIVER_SELF_SPECS SUBTARGET_DRIVER_SELF_SPECS > +#ifndef GATHER_SCATTER_DRIVER_SELF_SPECS > +# define GATHER_SCATTER_DRIVER_SELF_SPECS \ > + "%{mno-gather:-mtune- > ctrl=^use_gather_2parts,^use_gather_4parts,^use_gather} \ > + %{mgather:-mtune- > ctrl=use_gather_2parts,use_gather_4parts,use_gather} \ > + %{mno-scatter:-mtune- > ctrl=^use_scatter_2parts,^use_scatter_4parts,^use_scatter} \ > + %{mscatter:-mtune- > ctrl=use_scatter_2parts,use_scatter_4parts,use_scatter}" > +#endif > + > +#define DRIVER_SELF_SPECS \ > + SUBTARGET_DRIVER_SELF_SPECS " " \ > + GATHER_SCATTER_DRIVER_SELF_SPECS > > /* -march=native handling only makes sense with compiler running on > an x86 or x86_64 chip. If changing this condition, also change > diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt > index ddb7f110aa2..99948644a8d 100644 > --- a/gcc/config/i386/i386.opt > +++ b/gcc/config/i386/i386.opt > @@ -424,6 +424,14 @@ mdaz-ftz > Target > Set the FTZ and DAZ Flags. > > +mgather > +Target > +Enable vectorization for gather instruction. > + > +mscatter > +Target > +Enable vectorization for scatter instruction. > + > mpreferred-stack-boundary= > Target RejectNegative Joined UInteger > Var(ix86_preferred_stack_boundary_arg) > Attempt to keep stack aligned to this power of 2. -- Xi Ruoyao <xry...@xry111.site> School of Aerospace Science and Technology, Xidian University