[PATCH 0/7] riscv: Improve builtins expansion
Christoph Muellner
christoph.muellner@vrull.eu
Sun Nov 13 23:05:14 GMT 2022
From: Christoph Müllner <christoph.muellner@vrull.eu>
This patchset adds includes patches to improve the following builtin
expansions:
* cpymemsi: Allow by-pieces to generate overlapping memory accesses
* cmpstrsi: Add expansion for strcmp and strncmp for aligned strings when zbb/orc.b is available
* strlen<mode>: Add expansion for strlen when zbb/orc.b is available
This changes were inspired a lot by the PowerPC backend
(e.g. moving the expansion code into riscv-string.cc and emitting an
unrolled loop which eventually calls the C runtime if necessary).
This series is meant to be applied on top of the VT1 support series:
https://gcc.gnu.org/pipermail/gcc-patches/2022-November/605959.html
The patches come with their own tests and show no regressions to
existing tests. Further the series has been tested with all SPEC CPU2017
benchmarks.
Christoph Müllner (6):
riscv: bitmanip/zbb: Add prefix/postfix and enable visiblity
riscv: Enable overlap-by-pieces via tune param
riscv: Move riscv_block_move_loop to separate file
riscv: Use by-pieces to do overlapping accesses in block_move_straight
riscv: Add support for strlen inline expansion
riscv: Add support for str(n)cmp inline expansion
Philipp Tomsich (1):
riscv: bitmanip: add orc.b as an unspec
gcc/config.gcc | 3 +-
gcc/config/riscv/bitmanip.md | 12 +-
gcc/config/riscv/riscv-protos.h | 7 +-
gcc/config/riscv/riscv-string.cc | 687 ++++++++++++++++++
gcc/config/riscv/riscv.cc | 172 +----
gcc/config/riscv/riscv.md | 105 ++-
gcc/config/riscv/riscv.opt | 5 +
gcc/config/riscv/t-riscv | 4 +
.../gcc.target/riscv/memcpy-nonoverlapping.c | 54 ++
.../gcc.target/riscv/memcpy-overlapping.c | 47 ++
.../gcc.target/riscv/memset-nonoverlapping.c | 45 ++
.../gcc.target/riscv/memset-overlapping.c | 43 ++
.../gcc.target/riscv/zbb-strcmp-unaligned.c | 36 +
gcc/testsuite/gcc.target/riscv/zbb-strcmp.c | 55 ++
.../gcc.target/riscv/zbb-strlen-unaligned.c | 13 +
gcc/testsuite/gcc.target/riscv/zbb-strlen.c | 18 +
16 files changed, 1132 insertions(+), 174 deletions(-)
create mode 100644 gcc/config/riscv/riscv-string.cc
create mode 100644 gcc/testsuite/gcc.target/riscv/memcpy-nonoverlapping.c
create mode 100644 gcc/testsuite/gcc.target/riscv/memcpy-overlapping.c
create mode 100644 gcc/testsuite/gcc.target/riscv/memset-nonoverlapping.c
create mode 100644 gcc/testsuite/gcc.target/riscv/memset-overlapping.c
create mode 100644 gcc/testsuite/gcc.target/riscv/zbb-strcmp-unaligned.c
create mode 100644 gcc/testsuite/gcc.target/riscv/zbb-strcmp.c
create mode 100644 gcc/testsuite/gcc.target/riscv/zbb-strlen-unaligned.c
create mode 100644 gcc/testsuite/gcc.target/riscv/zbb-strlen.c
--
2.38.1
More information about the Gcc-patches
mailing list