[PATCH 0/2] x86: Add cmpmemsi for -minline-all-stringops

H.J. Lu hjl.tools@gmail.com
Sun May 31 23:10:32 GMT 2020


We used to expand memcmp to "repz cmpsb" via cmpstrnsi.  It was changed
by

commit 9b0f6f5e511ca512e4faeabc81d2fd3abad9b02f
Author: Nick Clifton <nickc@redhat.com>
Date:   Fri Aug 12 16:26:11 2011 +0000

    builtins.c (expand_builtin_memcmp): Do not use cmpstrnsi pattern.

            * builtins.c (expand_builtin_memcmp): Do not use cmpstrnsi
            pattern.
            * doc/md.texi (cmpstrn): Note that the comparison stops if both
            fetched bytes are zero.
            (cmpstr): Likewise.
            (cmpmem): Note that the comparison does not stop if both of the
            fetched bytes are zero.

Duplicate the cmpstrn pattern for cmpmem and expand cmpmem to "repz cmpsb"
for -minline-all-stringops.  The only difference is that the length
argument of cmpmem is guaranteed to be less than or equal to lengths of
2 memory areas.  Since cmpmem expander may pass the actual string length
directly to cmpstrnqi patterns.  Pass a copy of the string length to
cmpstrnqi patterns to avoid changing the actual string length by cmpstrnqi
patterns.

Tested on Linux/x86 and Linux/x86-64.  OK for master?

H.J. Lu (2):
  x86: Pass a copy of the string length to cmpstrnqi
  x86: Add cmpmemsi for -minline-all-stringops

 gcc/config/i386/i386-expand.c             |  84 ++++++++++++++
 gcc/config/i386/i386-protos.h             |   1 +
 gcc/config/i386/i386.md                   |  80 ++++---------
 gcc/testsuite/gcc.target/i386/pr95151-1.c |  17 +++
 gcc/testsuite/gcc.target/i386/pr95151-2.c |  10 ++
 gcc/testsuite/gcc.target/i386/pr95151-3.c |  18 +++
 gcc/testsuite/gcc.target/i386/pr95151-4.c |  11 ++
 gcc/testsuite/gcc.target/i386/pr95443-1.c | 130 ++++++++++++++++++++++
 gcc/testsuite/gcc.target/i386/pr95443-2.c |  79 +++++++++++++
 9 files changed, 371 insertions(+), 59 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/i386/pr95151-1.c
 create mode 100644 gcc/testsuite/gcc.target/i386/pr95151-2.c
 create mode 100644 gcc/testsuite/gcc.target/i386/pr95151-3.c
 create mode 100644 gcc/testsuite/gcc.target/i386/pr95151-4.c
 create mode 100644 gcc/testsuite/gcc.target/i386/pr95443-1.c
 create mode 100644 gcc/testsuite/gcc.target/i386/pr95443-2.c

-- 
2.26.2



More information about the Gcc-patches mailing list