aboutsummaryrefslogtreecommitdiff
path: root/gcc/fold-const.cc
diff options
context:
space:
mode:
authorJuzhe-Zhong <juzhe.zhong@rivai.ai>2023-11-10 11:36:51 +0800
committerPan Li <pan2.li@intel.com>2023-11-10 22:11:27 +0800
commit6aaf72ff533550dad68362e8da308b480a9e0f30 (patch)
tree04788ae10b75b74bde6171aeb31b0092cf786f31 /gcc/fold-const.cc
parent62e6ded7ae8582ade4e56aea10d67b9e942d8026 (diff)
downloadgcc-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