diff options
author | Pan Li <pan2.li@intel.com> | 2023-11-10 10:57:00 +0800 |
---|---|---|
committer | Pan Li <pan2.li@intel.com> | 2023-11-10 14:35:24 +0800 |
commit | e7f4040d9d6ec40c48ada940168885d7dde03af9 (patch) | |
tree | 93b643f456f1b7b482241edb103f77f8500a4d7f /gcc/expr.cc | |
parent | 879cf9ff45d94065d89e24b71c6b27c7076ac518 (diff) | |
download | gcc-e7f4040d9d6ec40c48ada940168885d7dde03af9.zip gcc-e7f4040d9d6ec40c48ada940168885d7dde03af9.tar.gz gcc-e7f4040d9d6ec40c48ada940168885d7dde03af9.tar.bz2 |
RISC-V: Support vec_init for trailing same element
This patch would like to support the vec_init for the trailing same
element in the array. For example as below
typedef double vnx16df __attribute__ ((vector_size (128)));
__attribute__ ((noipa)) void
f_vnx16df (double a, double b, double *out)
{
vnx16df v = {a, a, a, b, b, b, b, b, b, b, b, b, b, b, b, b};
*(vnx16df *) out = v;
}
Before this patch:
f_vnx16df:
vsetivli zero,16,e64,m8,ta,ma
vfmv.v.f v8,fa0
vfslide1down.vf v8,v8,fa1
vfslide1down.vf v8,v8,fa1
vfslide1down.vf v8,v8,fa1
vfslide1down.vf v8,v8,fa1
vfslide1down.vf v8,v8,fa1
vfslide1down.vf v8,v8,fa1
vfslide1down.vf v8,v8,fa1
vfslide1down.vf v8,v8,fa1
vfslide1down.vf v8,v8,fa1
vfslide1down.vf v8,v8,fa1
vfslide1down.vf v8,v8,fa1
vfslide1down.vf v8,v8,fa1
vfslide1down.vf v8,v8,fa1
vs8r.v v8,0(a0)
ret
After this patch:
f_vnx16df:
vsetivli zero,16,e64,m8,ta,ma
vfmv.v.f v16,fa1
vfslide1up.vf v8,v16,fa0
vmv8r.v v16,v8
vfslide1up.vf v8,v16,fa0
vmv8r.v v16,v8
vfslide1up.vf v8,v16,fa0
vs8r.v v8,0(a0)
ret
gcc/ChangeLog:
* config/riscv/riscv-v.cc (expand_vector_init_trailing_same_elem):
New fun impl to expand the insn when trailing same elements.
(expand_vec_init): Try trailing same elements when vec_init.
gcc/testsuite/ChangeLog:
* gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-1.c: New test.
* gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-2.c: New test.
* gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-3.c: New test.
* gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-4.c: New test.
* gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-5.c: New test.
* gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-run-1.c: New test.
* gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-run-2.c: New test.
* gcc.target/riscv/rvv/autovec/vls-vlmax/init-same-tail-run-3.c: New test.
* gcc.target/riscv/rvv/autovec/vls/init-same-tail-1.c: New test.
* gcc.target/riscv/rvv/autovec/vls/init-same-tail-2.c: New test.
* gcc.target/riscv/rvv/autovec/vls/init-same-tail-3.c: New test.
* gcc.target/riscv/rvv/autovec/vls/init-same-tail-4.c: New test.
* gcc.target/riscv/rvv/autovec/vls/init-same-tail-5.c: New test.
* gcc.target/riscv/rvv/autovec/vls/init-same-tail-6.c: New test.
* gcc.target/riscv/rvv/autovec/vls/init-same-tail-7.c: New test.
* gcc.target/riscv/rvv/autovec/vls/init-same-tail-8.c: New test.
* gcc.target/riscv/rvv/autovec/vls/init-same-tail-9.c: New test.
Signed-off-by: Pan Li <pan2.li@intel.com>
Diffstat (limited to 'gcc/expr.cc')
0 files changed, 0 insertions, 0 deletions