]> gcc.gnu.org Git - gcc.git/commit
RISC-V: Enable basic VLS auto-vectorization
authorJuzhe-Zhong <juzhe.zhong@rivai.ai>
Mon, 31 Jul 2023 02:13:57 +0000 (10:13 +0800)
committerJeff Law <jlaw@ventanamicro.com>
Mon, 7 Aug 2023 15:59:06 +0000 (09:59 -0600)
commitee0cb23c0c5ade83a48d87797e52fe10d27b69f2
tree0ec24dd233563cc817f859aa148fbcec933eeb66
parente5422cc736bd4df764f658bb67a674213a57bb59
RISC-V: Enable basic VLS auto-vectorization

Consider this following case:
void
foo (int8_t *in, int8_t *out, int8_t x)
{
  for (int i = 0; i < 16; i++)
    in[i] = x;
}

Compile option: --param=riscv-autovec-preference=scalable -fno-builtin

Before this patch:

foo:
        li      a5,16
        csrr    a4,vlenb
        vsetvli a3,zero,e8,m1,ta,ma
        vmv.v.x v1,a2
        bleu    a5,a4,.L2
        mv      a5,a4
.L2:
        vsetvli zero,a5,e8,m1,ta,ma
        vse8.v  v1,0(a0)
        ret

After this patch:

foo:
vsetivli zero,16,e8,mf8,ta,ma
vmv.v.x v1,a2
vse8.v v1,0(a0)
ret

gcc/ChangeLog:

* config/riscv/autovec-vls.md (@vec_duplicate<mode>): New pattern.
* config/riscv/riscv-v.cc (autovectorize_vector_modes): Add VLS autovec
support.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/autovec/v-1.c: Adapt test.
* gcc.target/riscv/rvv/autovec/zve32f_zvl128b-1.c: Ditto.
* gcc.target/riscv/rvv/autovec/zve64d_zvl128b-1.c: Ditto.
* gcc.target/riscv/rvv/autovec/zve64f_zvl128b-1.c: Ditto.
* gcc.target/riscv/rvv/autovec/vls/dup-1.c: New test.
* gcc.target/riscv/rvv/autovec/vls/dup-2.c: New test.
* gcc.target/riscv/rvv/autovec/vls/dup-3.c: New test.
* gcc.target/riscv/rvv/autovec/vls/dup-4.c: New test.
* gcc.target/riscv/rvv/autovec/vls/dup-5.c: New test.
* gcc.target/riscv/rvv/autovec/vls/dup-6.c: New test.
* gcc.target/riscv/rvv/autovec/vls/dup-7.c: New test.

(cherry picked from commit 92a891e869d35c940d2a7b92355af02d78c9a86e)
13 files changed:
gcc/config/riscv/autovec-vls.md
gcc/config/riscv/riscv-v.cc
gcc/testsuite/gcc.target/riscv/rvv/autovec/v-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-6.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-7.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f_zvl128b-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d_zvl128b-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f_zvl128b-1.c
This page took 0.066548 seconds and 6 git commands to generate.