On Tue, Jun 27, 2023 at 8:09 AM Hongtao Liu <crazy...@gmail.com> wrote: > > On Tue, Jun 27, 2023 at 2:05 PM Uros Bizjak <ubiz...@gmail.com> wrote: > > > > On Tue, Jun 27, 2023 at 7:55 AM liuhongt <hongtao....@intel.com> wrote: > > > > > > pass_insert_vzeroupper is under condition > > > > > > TARGET_AVX && TARGET_VZEROUPPER > > > && flag_expensive_optimizations && !optimize_size > > > > > > But the document of mvzeroupper doesn't mention the insertion > > > required -O2 and above, it may confuse users when they explicitly > > > use -Os -mvzeroupper. > > > > > > ------------ > > > mvzeroupper > > > Target Mask(VZEROUPPER) Save > > > Generate vzeroupper instruction before a transfer of control flow out of > > > the function. > > > ------------ > > > > > > The patch moves flag_expensive_optimizations && !optimize_size to > > > ix86_option_override_internal. It makes -mvzeroupper independent of > > > optimization level, but still keeps the behavior of architecture > > > tuning(emit_vzeroupper) unchanged. > > > > > > Bootstrapped and regtested on x86_64-pc-linux-gnu{-m32,}. > > > Ok for trunk? > > > > > > gcc/ChangeLog: > > > > > > * config/i386/i386-features.cc (pass_insert_vzeroupper:gate): > > > Move flag_expensive_optimizations && !optimize_size to .. > > > * config/i386/i386-options.cc (ix86_option_override_internal): > > > .. this, it makes -mvzeroupper independent of optimization > > > level, but still keeps the behavior of architecture > > > tuning(emit_vzeroupper) unchanged. > > > > > > gcc/testsuite/ChangeLog: > > > > > > * gcc.target/i386/avx-vzeroupper-29.c: New testcase. > > > > OK. > I'd like to backport this patch to GCC10/GCC11/GCC12/GCC13.
Also OK. Thanks, Uros. > > > > Thanks, > > Uros. > > > > > --- > > > gcc/config/i386/i386-features.cc | 3 +-- > > > gcc/config/i386/i386-options.cc | 4 +++- > > > gcc/testsuite/gcc.target/i386/avx-vzeroupper-29.c | 14 ++++++++++++++ > > > 3 files changed, 18 insertions(+), 3 deletions(-) > > > create mode 100644 gcc/testsuite/gcc.target/i386/avx-vzeroupper-29.c > > > > > > diff --git a/gcc/config/i386/i386-features.cc > > > b/gcc/config/i386/i386-features.cc > > > index 4a3b07ae045..92ae08d442e 100644 > > > --- a/gcc/config/i386/i386-features.cc > > > +++ b/gcc/config/i386/i386-features.cc > > > @@ -2489,8 +2489,7 @@ public: > > > /* opt_pass methods: */ > > > bool gate (function *) final override > > > { > > > - return TARGET_AVX && TARGET_VZEROUPPER > > > - && flag_expensive_optimizations && !optimize_size; > > > + return TARGET_AVX && TARGET_VZEROUPPER; > > > } > > > > > > unsigned int execute (function *) final override > > > diff --git a/gcc/config/i386/i386-options.cc > > > b/gcc/config/i386/i386-options.cc > > > index 2cb0bddcd35..f76e7c5947b 100644 > > > --- a/gcc/config/i386/i386-options.cc > > > +++ b/gcc/config/i386/i386-options.cc > > > @@ -2727,7 +2727,9 @@ ix86_option_override_internal (bool main_args_p, > > > sorry ("%<-mcall-ms2sysv-xlogues%> isn%'t currently supported with > > > SEH"); > > > > > > if (!(opts_set->x_target_flags & MASK_VZEROUPPER) > > > - && TARGET_EMIT_VZEROUPPER) > > > + && TARGET_EMIT_VZEROUPPER > > > + && flag_expensive_optimizations > > > + && !optimize_size) > > > opts->x_target_flags |= MASK_VZEROUPPER; > > > if (!(opts_set->x_target_flags & MASK_STV)) > > > opts->x_target_flags |= MASK_STV; > > > diff --git a/gcc/testsuite/gcc.target/i386/avx-vzeroupper-29.c > > > b/gcc/testsuite/gcc.target/i386/avx-vzeroupper-29.c > > > new file mode 100644 > > > index 00000000000..4af637757f7 > > > --- /dev/null > > > +++ b/gcc/testsuite/gcc.target/i386/avx-vzeroupper-29.c > > > @@ -0,0 +1,14 @@ > > > +/* { dg-do compile } */ > > > +/* { dg-options "-O0 -mavx -mtune=generic -mvzeroupper -dp" } */ > > > + > > > +#include <immintrin.h> > > > + > > > +extern __m256 x, y; > > > + > > > +void > > > +foo () > > > +{ > > > + x = y; > > > +} > > > + > > > +/* { dg-final { scan-assembler-times "avx_vzeroupper" 1 } } */ > > > -- > > > 2.39.1.388.g2fc9e9ca3c > > > > > > > -- > BR, > Hongtao