]> git.ipfire.org Git - thirdparty/gcc.git/commit
RISC-V: Extend VLS modes in 'VWEXTI' iterator
authorJuzhe-Zhong <juzhe.zhong@rivai.ai>
Tue, 19 Sep 2023 22:49:56 +0000 (06:49 +0800)
committerLehua Ding <lehua.ding@rivai.ai>
Wed, 20 Sep 2023 02:32:27 +0000 (10:32 +0800)
commitbea89f78f2f02a0dabe4993ccf1c7cdb48be040b
treef1e6daa3a8104817fa77be2a0060cc62c925bd5b
parent677249a23243b5b51832611767366d6eb199bdc7
RISC-V: Extend VLS modes in 'VWEXTI' iterator

This patch extends 'VWEXT' iterator so that we will support
integer extension/integer truncate/integer average VLS patterns.

This patch reduce these following FAILs:

FAIL: gcc.dg/pr92301.c execution test
XPASS: gcc.dg/vect/bb-slp-subgroups-3.c -flto -ffat-lto-objects  scan-tree-dump-times slp2 "optimized: basic block" 2
XPASS: gcc.dg/vect/bb-slp-subgroups-3.c scan-tree-dump-times slp2 "optimized: basic block" 2

The pr92301.c is the latent bug in middle-end GIMPLE FOLD.
We are just lucky that this test passes with this patch which makes us not trigger the GIMPLE FOLD bug again.

gcc/ChangeLog:

* config/riscv/riscv-v.cc (can_find_related_mode_p): New function.
(vectorize_related_mode): Add VLS related modes.
* config/riscv/vector-iterators.md: Extend VLS modes.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/autovec/binop/narrow-1.c: Adapt testcase.
* gcc.target/riscv/rvv/autovec/binop/narrow-2.c: Ditto.
* gcc.target/riscv/rvv/autovec/binop/narrow-3.c: Ditto.
* gcc.target/riscv/rvv/autovec/cmp/vcond-1.c: Ditto.
* gcc.target/riscv/rvv/autovec/cmp/vcond-2.c: Ditto.
* gcc.target/riscv/rvv/autovec/cmp/vcond-3.c: Ditto.
* gcc.target/riscv/rvv/autovec/cmp/vcond-4.c: Ditto.
* gcc.target/riscv/rvv/autovec/partial/slp-18.c: Ditto.
* gcc.target/riscv/rvv/autovec/partial/slp-19.c: Ditto.
* gcc.target/riscv/rvv/autovec/pr110950.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop-1.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop-10.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop-11.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop-12.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop-2.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop-3.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop-4.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop-5.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop-6.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop-7.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop-8.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop-9.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-1.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-10.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-11.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-12.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-2.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-3.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-4.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-5.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-6.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-7.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-8.c: Ditto.
* gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-9.c: Ditto.
* gcc.target/riscv/rvv/autovec/vls/def.h: Ditto.
* gcc.target/riscv/rvv/autovec/vls/div-1.c: Ditto.
* gcc.target/riscv/rvv/autovec/vls/shift-3.c: Ditto.
* gcc.target/riscv/rvv/autovec/widen/widen-1.c: Ditto.
* gcc.target/riscv/rvv/autovec/widen/widen-2.c: Ditto.
* gcc.target/riscv/rvv/autovec/widen/widen-3.c: Ditto.
* gcc.target/riscv/rvv/autovec/widen/widen-4.c: Ditto.
* gcc.target/riscv/rvv/autovec/widen/widen-5.c: Ditto.
* gcc.target/riscv/rvv/autovec/widen/widen-6.c: Ditto.
* gcc.target/riscv/rvv/autovec/widen/widen-7.c: Ditto.
* gcc.target/riscv/rvv/autovec/widen/widen-8.c: Ditto.
* gcc.target/riscv/rvv/autovec/widen/widen-9.c: Ditto.
* gcc.target/riscv/rvv/autovec/widen/widen-complicate-1.c: Ditto.
* gcc.target/riscv/rvv/autovec/widen/widen-complicate-2.c: Ditto.
* gcc.target/riscv/rvv/autovec/widen/widen-complicate-3.c: Ditto.
* gcc.target/riscv/rvv/autovec/widen/widen-complicate-4.c: Ditto.
* gcc.target/riscv/rvv/autovec/widen/widen-complicate-5.c: Ditto.
* gcc.target/riscv/rvv/autovec/widen/widen-complicate-6.c: Ditto.
* gcc.target/riscv/rvv/autovec/zve32f-1.c: Ditto.
* gcc.target/riscv/rvv/autovec/vls/avg-1.c: New test.
* gcc.target/riscv/rvv/autovec/vls/avg-2.c: New test.
* gcc.target/riscv/rvv/autovec/vls/avg-3.c: New test.
* gcc.target/riscv/rvv/autovec/vls/avg-4.c: New test.
* gcc.target/riscv/rvv/autovec/vls/avg-5.c: New test.
* gcc.target/riscv/rvv/autovec/vls/avg-6.c: New test.
* gcc.target/riscv/rvv/autovec/vls/ext-1.c: New test.
* gcc.target/riscv/rvv/autovec/vls/ext-2.c: New test.
* gcc.target/riscv/rvv/autovec/vls/ext-3.c: New test.
* gcc.target/riscv/rvv/autovec/vls/trunc-1.c: New test.
* gcc.target/riscv/rvv/autovec/vls/trunc-2.c: New test.
* gcc.target/riscv/rvv/autovec/vls/trunc-3.c: New test.
67 files changed:
gcc/config/riscv/riscv-v.cc
gcc/config/riscv/vector-iterators.md
gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/narrow-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/narrow-2.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/narrow-3.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/vcond-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/vcond-2.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/vcond-3.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/vcond-4.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-18.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-19.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110950.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-10.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-11.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-12.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-2.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-3.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-4.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-5.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-6.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-7.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-8.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-9.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-10.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-11.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-12.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-2.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-3.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-4.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-5.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-6.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-7.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-8.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop_nofm-9.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-6.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/def.h
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/div-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-3.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-2.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-3.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-4.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-5.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-6.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-7.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-8.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-9.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-complicate-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-complicate-2.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-complicate-3.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-complicate-4.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-complicate-5.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-complicate-6.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-1.c