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. > > 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