aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorJuzhe-Zhong <juzhe.zhong@rivai.ai>2023-11-14 19:38:03 +0800
committerPan Li <pan2.li@intel.com>2023-11-15 17:59:49 +0800
commite9fc877f6d4b89940dbfb9f18549b82720d0d992 (patch)
tree2050c8d78946e54a35b213d1d4cca4f2f895531d /gcc/cp
parentda36a438d8e7f31c75f1085e3a525cb1b7d5f256 (diff)
downloadgcc-e9fc877f6d4b89940dbfb9f18549b82720d0d992.zip
gcc-e9fc877f6d4b89940dbfb9f18549b82720d0d992.tar.gz
gcc-e9fc877f6d4b89940dbfb9f18549b82720d0d992.tar.bz2
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.
Diffstat (limited to 'gcc/cp')
0 files changed, 0 insertions, 0 deletions