]> gcc.gnu.org Git - gcc.git/commit
RISC-V: Implement vector "average" autovec pattern.
authorRobin Dapp <rdapp@ventanamicro.com>
Mon, 31 Jul 2023 15:54:35 +0000 (17:54 +0200)
committerRobin Dapp <rdapp@ventanamicro.com>
Wed, 16 Aug 2023 12:27:41 +0000 (14:27 +0200)
commit694242930906d9f7ad15977cac6dcbeae1f3d3f2
treef909bc4be33644751025e5d01ca43bb2c0e55353
parentc94e0f52f40310b6faeae11bae3366ccb1435199
RISC-V: Implement vector "average" autovec pattern.

This patch adds vector average patterns

 op[0] = (narrow) ((wide) op[1] + (wide) op[2]) >> 1;
 op[0] = (narrow) ((wide) op[1] + (wide) op[2] + 1) >> 1;

If there is no direct support, the vectorizer can synthesize the pattern
but, presumably, due to lack of narrowing operation support, won't try a
narrowing shift.  Therefore, this patch implements the expanders
instead.

gcc/ChangeLog:

* config/riscv/autovec.md (<u>avg<v_double_trunc>3_floor):
Implement expander.
(<u>avg<v_double_trunc>3_ceil): Ditto.
* config/riscv/vector-iterators.md (ashiftrt): New iterator.
(ASHIFTRT): Ditto.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/autovec/widen/vec-avg-run.c: New test.
* gcc.target/riscv/rvv/autovec/widen/vec-avg-rv32gcv.c: New test.
* gcc.target/riscv/rvv/autovec/widen/vec-avg-rv64gcv.c: New test.
* gcc.target/riscv/rvv/autovec/widen/vec-avg-template.h: New test.
gcc/config/riscv/autovec.md
gcc/config/riscv/vector-iterators.md
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-run.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-rv32gcv.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-rv64gcv.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-template.h [new file with mode: 0644]
This page took 0.060217 seconds and 5 git commands to generate.