diff mbox series

i386: Update the default -mzeroupper setting

Message ID 20171115133701.GA15187@gmail.com
State New
Headers show
Series i386: Update the default -mzeroupper setting | expand

Commit Message

H.J. Lu Nov. 15, 2017, 1:37 p.m. UTC
-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?

Thanks.

H.J.
---
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 AVX512ER is
	disabled.

gcc/testsuite/

	PR target/82990
	* 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/config/i386/i386.c                    |  5 +++--
 gcc/testsuite/gcc.target/i386/pr82990-1.c | 14 ++++++++++++++
 gcc/testsuite/gcc.target/i386/pr82990-2.c |  6 ++++++
 gcc/testsuite/gcc.target/i386/pr82990-3.c |  6 ++++++
 gcc/testsuite/gcc.target/i386/pr82990-4.c |  6 ++++++
 5 files changed, 35 insertions(+), 2 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/i386/pr82990-1.c
 create mode 100644 gcc/testsuite/gcc.target/i386/pr82990-2.c
 create mode 100644 gcc/testsuite/gcc.target/i386/pr82990-3.c
 create mode 100644 gcc/testsuite/gcc.target/i386/pr82990-4.c

Comments

Uros Bizjak Nov. 15, 2017, 4:09 p.m. UTC | #1
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.
H.J. Lu Nov. 15, 2017, 4:59 p.m. UTC | #2
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?
Uros Bizjak Nov. 15, 2017, 7:16 p.m. UTC | #3
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 mbox series

Patch

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" } } */