Message ID | 20171115133701.GA15187@gmail.com |
---|---|
State | New |
Headers | show |
Series | i386: Update the default -mzeroupper setting | expand |
On Wed, Nov 15, 2017 at 2:37 PM, H.J. Lu <hjl.tools@gmail.com> wrote: > -mzeroupper is specified to generate vzeroupper instruction. If it > isn't used, the default should depend on !TARGET_AVX512ER. Users can > always use -mzeroupper or -mno-zeroupper to override it. > > Sebastian, can you run the full test with it? > > OK for trunk if there is no regression? If we want to go this way, please add relevant tune flag (e.g. X86_TUNE_EMIT_VZEROUPPER) and use it for ~m_KNL. This tune is the property of the processor model, not ISA. Uros.
On Wed, Nov 15, 2017 at 8:09 AM, Uros Bizjak <ubizjak@gmail.com> wrote: > On Wed, Nov 15, 2017 at 2:37 PM, H.J. Lu <hjl.tools@gmail.com> wrote: >> -mzeroupper is specified to generate vzeroupper instruction. If it >> isn't used, the default should depend on !TARGET_AVX512ER. Users can >> always use -mzeroupper or -mno-zeroupper to override it. >> >> Sebastian, can you run the full test with it? >> >> OK for trunk if there is no regression? > > If we want to go this way, please add relevant tune flag (e.g. > X86_TUNE_EMIT_VZEROUPPER) and use it for ~m_KNL. This tune is the > property of the processor model, not ISA. How about this? OK for trunk if there are no regressions?
On Wed, Nov 15, 2017 at 5:59 PM, H.J. Lu <hjl.tools@gmail.com> wrote: > On Wed, Nov 15, 2017 at 8:09 AM, Uros Bizjak <ubizjak@gmail.com> wrote: >> On Wed, Nov 15, 2017 at 2:37 PM, H.J. Lu <hjl.tools@gmail.com> wrote: >>> -mzeroupper is specified to generate vzeroupper instruction. If it >>> isn't used, the default should depend on !TARGET_AVX512ER. Users can >>> always use -mzeroupper or -mno-zeroupper to override it. >>> >>> Sebastian, can you run the full test with it? >>> >>> OK for trunk if there is no regression? >> >> If we want to go this way, please add relevant tune flag (e.g. >> X86_TUNE_EMIT_VZEROUPPER) and use it for ~m_KNL. This tune is the >> property of the processor model, not ISA. > > How about this? OK for trunk if there are no regressions? > gcc/ > > PR target/82990 > * config/i386/i386.c (pass_insert_vzeroupper::gate): Remove > TARGET_AVX512ER check. > (ix86_option_override_internal): Set MASK_VZEROUPPER if > neither -mzeroupper nor -mno-zeroupper is used and > TARGET_EMIT_VZEROUPPER is set. > * config/i386/i386.h (TARGET_EMIT_VZEROUPPER): New. > * config/i386/x86-tune.def: Add X86_TUNE_EMIT_VZEROUPPER. > > gcc/testsuite/ > > PR target/82990 > * gcc.target/i386/pr82942-2.c: Add -mtune=knl. > * gcc.target/i386/pr82990-1.c: New test. > * gcc.target/i386/pr82990-2.c: Likewise. > * gcc.target/i386/pr82990-3.c: Likewise. > * gcc.target/i386/pr82990-4.c: Likewise. > * gcc.target/i386/pr82990-5.c: Likewise. > * gcc.target/i386/pr82990-6.c: Likewise. > * gcc.target/i386/pr82990-7.c: Likewise. OK. Thanks, Uros.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index c5e84a09954..2c729236a29 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -2497,7 +2497,7 @@ public: /* opt_pass methods: */ virtual bool gate (function *) { - return TARGET_AVX && !TARGET_AVX512ER + return TARGET_AVX && TARGET_VZEROUPPER && flag_expensive_optimizations && !optimize_size; } @@ -4666,7 +4666,8 @@ ix86_option_override_internal (bool main_args_p, if (TARGET_SEH && TARGET_CALL_MS2SYSV_XLOGUES) sorry ("-mcall-ms2sysv-xlogues isn%'t currently supported with SEH"); - if (!(opts_set->x_target_flags & MASK_VZEROUPPER)) + if (!(opts_set->x_target_flags & MASK_VZEROUPPER) + && !TARGET_AVX512ER_P (opts->x_ix86_isa_flags)) 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/pr82990-1.c b/gcc/testsuite/gcc.target/i386/pr82990-1.c new file mode 100644 index 00000000000..ff1d6d40eb2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82990-1.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=knl -mvzeroupper" } */ + +#include <immintrin.h> + +extern __m512d y, z; + +void +pr82941 () +{ + z = y; +} + +/* { dg-final { scan-assembler-times "vzeroupper" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82990-2.c b/gcc/testsuite/gcc.target/i386/pr82990-2.c new file mode 100644 index 00000000000..0d3cb2333dd --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82990-2.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=skylake-avx512 -mno-vzeroupper" } */ + +#include "pr82941-1.c" + +/* { dg-final { scan-assembler-not "vzeroupper" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82990-3.c b/gcc/testsuite/gcc.target/i386/pr82990-3.c new file mode 100644 index 00000000000..201fa98d8d4 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82990-3.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx512f -mavx512er -mvzeroupper -O2" } */ + +#include "pr82941-1.c" + +/* { dg-final { scan-assembler-times "vzeroupper" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82990-4.c b/gcc/testsuite/gcc.target/i386/pr82990-4.c new file mode 100644 index 00000000000..09f161c7291 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82990-4.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx512f -mno-avx512er -mno-vzeroupper -O2" } */ + +#include "pr82941-1.c" + +/* { dg-final { scan-assembler-not "vzeroupper" } } */