On Mon, Jan 27, 2020 at 12:26 PM Uros Bizjak <ubiz...@gmail.com> wrote:
>
> On Mon, Jan 27, 2020 at 7:23 PM H.J. Lu <hjl.to...@gmail.com> wrote:
> >
> > movaps/movups is one byte shorter than movdaq/movdqu.  But it isn't the
> > case for AVX nor AVX512.  We should disable TARGET_SSE_TYPELESS_STORES
> > for TARGET_AVX.
> >
> > gcc/
> >
> >         PR target/91461
> >         * config/i386/i386.h (TARGET_SSE_TYPELESS_STORES): Disable for
> >         TARGET_AVX.
> >         * config/i386/i386.md (*movoi_internal_avx): Remove
> >         TARGET_SSE_TYPELESS_STORES check.
> >
> > gcc/testsuite/
> >
> >         PR target/91461
> >         * gcc.target/i386/pr91461-1.c: New test.
> >         * gcc.target/i386/pr91461-2.c: Likewise.
> >         * gcc.target/i386/pr91461-3.c: Likewise.
> >         * gcc.target/i386/pr91461-4.c: Likewise.
> >         * gcc.target/i386/pr91461-5.c: Likewise.
> > ---
> >  gcc/config/i386/i386.h                    |  4 +-
> >  gcc/config/i386/i386.md                   |  4 +-
> >  gcc/testsuite/gcc.target/i386/pr91461-1.c | 66 ++++++++++++++++++++
> >  gcc/testsuite/gcc.target/i386/pr91461-2.c | 19 ++++++
> >  gcc/testsuite/gcc.target/i386/pr91461-3.c | 76 +++++++++++++++++++++++
> >  gcc/testsuite/gcc.target/i386/pr91461-4.c | 21 +++++++
> >  gcc/testsuite/gcc.target/i386/pr91461-5.c | 17 +++++
> >  7 files changed, 203 insertions(+), 4 deletions(-)
> >  create mode 100644 gcc/testsuite/gcc.target/i386/pr91461-1.c
> >  create mode 100644 gcc/testsuite/gcc.target/i386/pr91461-2.c
> >  create mode 100644 gcc/testsuite/gcc.target/i386/pr91461-3.c
> >  create mode 100644 gcc/testsuite/gcc.target/i386/pr91461-4.c
> >  create mode 100644 gcc/testsuite/gcc.target/i386/pr91461-5.c
> >
> > diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
> > index 943e9a5c783..c134b04c5c4 100644
> > --- a/gcc/config/i386/i386.h
> > +++ b/gcc/config/i386/i386.h
> > @@ -516,8 +516,10 @@ extern unsigned char ix86_tune_features[X86_TUNE_LAST];
> >  #define TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL \
> >         ix86_tune_features[X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL]
> >  #define TARGET_SSE_SPLIT_REGS  ix86_tune_features[X86_TUNE_SSE_SPLIT_REGS]
> > +/* NB: movaps/movups is one byte shorter than movdaq/movdqu.  But it
> > +   isn't the case for AVX nor AVX512.  */
> >  #define TARGET_SSE_TYPELESS_STORES \
> > -       ix86_tune_features[X86_TUNE_SSE_TYPELESS_STORES]
> > +       (!TARGET_AVX && ix86_tune_features[X86_TUNE_SSE_TYPELESS_STORES])
>
> This is wrong place to disable the feature.

Like this?

diff --git a/gcc/config/i386/i386-options.c b/gcc/config/i386/i386-options.c
index 2acc9fb0cfe..639969d736d 100644
--- a/gcc/config/i386/i386-options.c
+++ b/gcc/config/i386/i386-options.c
@@ -1597,6 +1597,11 @@ set_ix86_tune_features (enum processor_type
ix86_tune, bool dump)
     = !!(initial_ix86_tune_features[i] & ix86_tune_mask);
     }

+  /* NB: movaps/movups is one byte shorter than movdaq/movdqu.  But it
+     isn't the case for AVX nor AVX512.  */
+  if (TARGET_AVX)
+    ix86_tune_features[X86_TUNE_SSE_TYPELESS_STORES] = 0;
+
   if (dump)
     {
       fprintf (stderr, "List of x86 specific tuning parameter names:\n");


-- 
H.J.

Reply via email to