diff options
author | Juzhe-Zhong <juzhe.zhong@rivai.ai> | 2023-11-14 19:38:03 +0800 |
---|---|---|
committer | Pan Li <pan2.li@intel.com> | 2023-11-15 17:59:49 +0800 |
commit | e9fc877f6d4b89940dbfb9f18549b82720d0d992 (patch) | |
tree | 2050c8d78946e54a35b213d1d4cca4f2f895531d /gcc/cp | |
parent | da36a438d8e7f31c75f1085e3a525cb1b7d5f256 (diff) | |
download | gcc-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