]> git.ipfire.org Git - thirdparty/gcc.git/commit
vect: Do not try to duplicate_and_interleave one-element mode.
authorRobin Dapp <rdapp@ventanamicro.com>
Fri, 6 Sep 2024 14:04:03 +0000 (16:04 +0200)
committerRobin Dapp <rdapp@ventanamicro.com>
Mon, 16 Dec 2024 14:57:48 +0000 (15:57 +0100)
commit99eef0cfa56573c32b9c0a1e43519ee4300ac63f
treec901a7c8c0c5b5e0812cf77f15222726479132a4
parentec870d3b5f378172006104bad674d7875463da18
vect: Do not try to duplicate_and_interleave one-element mode.

PR112694 shows that we try to create sub-vectors of single-element
vectors because can_duplicate_and_interleave_p returns true.
The problem resurfaced in PR116611.

This patch makes can_duplicate_and_interleave_p return false
if count / nvectors > 0 and removes the corresponding check in the riscv
backend.

This partially gets rid of the FAIL in slp-19a.c.  At least when built
with cost model we don't have LOAD_LANES anymore.  Without cost model,
as in the test suite, we choose a different path and still end up with
LOAD_LANES.

Bootstrapped and regtested on x86 and power10, regtested on
rv64gcv_zvfh_zvbb.  Still waiting for the aarch64 results.

Regards
 Robin

gcc/ChangeLog:

PR target/112694
PR target/116611.

* config/riscv/riscv-v.cc (expand_vec_perm_const): Remove early
return.
* tree-vect-slp.cc (can_duplicate_and_interleave_p): Return
false when we cannot create sub-elements.
gcc/config/riscv/riscv-v.cc
gcc/tree-vect-slp.cc