RISC-V: Support trailing vec_init optimization
Add optimization when trailing elements > leading elements. Consider this following case: #include <stdint.h> typedef int64_t v16di __attribute__ ((vector_size (128))); __attribute__ ((noipa)) void f_v16di (int64_t a, int64_t b, int64_t c, int64_t d, int64_t *out) { v16di v = {a, b, c, d, d, d, d, d, d, d, d, d, d, d, d, d}; *(v16di *) out = v; } https://godbolt.org/z/vWTjbrWGf Before this patch: f_v16di: vsetivli zero,16,e64,m8,ta,ma vmv.v.x v8,a0 vslide1down.vx v8,v8,a1 vslide1down.vx v8,v8,a2 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vslide1down.vx v8,v8,a3 vse64.v v8,0(a4) ret After this patch: f_v16di: vsetivli zero,16,e64,m8,ta,ma vmv.v.x v16,a3 vslide1up.vx v8,v16,a2 vslide1up.vx v16,v8,a1 vslide1up.vx v8,v16,a0 vse64.v v8,0(a4) ret gcc/ChangeLog: * config/riscv/riscv-v.cc (expand_vector_init_trailing_same_elem): New function. (expand_vec_init): Add trailing optimization. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/vls/def.h: Add trailing tests. * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-1.c: New test. * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-2.c: New test. * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c: New test. * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c: New test. * gcc.target/riscv/rvv/autovec/vls/trailing-1.c: New test. * gcc.target/riscv/rvv/autovec/vls/trailing-2.c: New test. * gcc.target/riscv/rvv/autovec/vls/trailing-3.c: New test. * gcc.target/riscv/rvv/autovec/vls/trailing-4.c: New test. * gcc.target/riscv/rvv/autovec/vls/trailing-5.c: New test. * gcc.target/riscv/rvv/autovec/vls/trailing-6.c: New test. * gcc.target/riscv/rvv/autovec/vls/trailing-7.c: New test.
Showing
- gcc/config/riscv/riscv-v.cc 48 additions, 4 deletionsgcc/config/riscv/riscv-v.cc
- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-1.c 15 additions, 0 deletions...suite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-1.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-2.c 15 additions, 0 deletions...suite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-2.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c 42 additions, 0 deletions...e/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c 42 additions, 0 deletions...e/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/def.h 8 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/rvv/autovec/vls/def.h
- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-1.c 652 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-1.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-2.c 335 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-2.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-3.c 176 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-3.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-4.c 96 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-4.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-5.c 335 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-5.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-6.c 176 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-6.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-7.c 96 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-7.c
Loading
Please register or sign in to comment