diff options
author | Juzhe-Zhong <juzhe.zhong@rivai.ai> | 2023-11-10 11:36:51 +0800 |
---|---|---|
committer | Pan Li <pan2.li@intel.com> | 2023-11-10 22:11:27 +0800 |
commit | 6aaf72ff533550dad68362e8da308b480a9e0f30 (patch) | |
tree | 04788ae10b75b74bde6171aeb31b0092cf786f31 /gcc/fold-const.cc | |
parent | 62e6ded7ae8582ade4e56aea10d67b9e942d8026 (diff) | |
download | gcc-6aaf72ff533550dad68362e8da308b480a9e0f30.zip gcc-6aaf72ff533550dad68362e8da308b480a9e0f30.tar.gz gcc-6aaf72ff533550dad68362e8da308b480a9e0f30.tar.bz2 |
RISC-V: Add combine optimization by slideup for vec_init vectorization
This patch is a small optimization for vector initialization.
Discovered when I am evaluating benchmarks.
Consider this following case:
void foo3 (int8_t *out, int8_t x, int8_t y)
{
v16qi v = {y, y, y, y, y, y, y, x, x, x, x, x, x, x, x, x};
*(v16qi*)out = v;
}
Before this patch:
vsetivli zero,16,e8,m1,ta,ma
vmv.v.x v1,a2
vslide1down.vx v1,v1,a1
vslide1down.vx v1,v1,a1
vslide1down.vx v1,v1,a1
vslide1down.vx v1,v1,a1
vslide1down.vx v1,v1,a1
vslide1down.vx v1,v1,a1
vslide1down.vx v1,v1,a1
vslide1down.vx v1,v1,a1
vslide1down.vx v1,v1,a1
vse8.v v1,0(a0)
ret
After this patch:
vsetivli zero,16,e8,m1,ta,ma
vmv.v.x v1,a1
vmv.v.x v2,a2
vslideup.vi v1,v2,8
vse8.v v1,0(a0)
ret
gcc/ChangeLog:
* config/riscv/riscv-protos.h (enum insn_type): New enum.
* config/riscv/riscv-v.cc
(rvv_builder::combine_sequence_use_slideup_profitable_p): New function.
(expand_vector_init_slideup_combine_sequence): Ditto.
(expand_vec_init): Add slideup combine optimization.
gcc/testsuite/ChangeLog:
* gcc.target/riscv/rvv/autovec/vls/def.h: Add combine test.
* gcc.target/riscv/rvv/autovec/vls-vlmax/combine-1.c: New test.
* gcc.target/riscv/rvv/autovec/vls/combine-1.c: New test.
* gcc.target/riscv/rvv/autovec/vls/combine-2.c: New test.
* gcc.target/riscv/rvv/autovec/vls/combine-3.c: New test.
* gcc.target/riscv/rvv/autovec/vls/combine-4.c: New test.
* gcc.target/riscv/rvv/autovec/vls/combine-5.c: New test.
* gcc.target/riscv/rvv/autovec/vls/combine-6.c: New test.
* gcc.target/riscv/rvv/autovec/vls/combine-7.c: New test.
Diffstat (limited to 'gcc/fold-const.cc')
0 files changed, 0 insertions, 0 deletions