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.