Skip to content
Snippets Groups Projects
Commit e9fc877f authored by Juzhe-Zhong's avatar Juzhe-Zhong Committed by Pan Li
Browse files

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.
parent da36a438
No related branches found
No related tags found
No related merge requests found
Showing
with 2036 additions and 4 deletions
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment