https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113073
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot
gnu.org
Status|UNCONFIRMED |ASSIGNED
Ever confirmed|0 |1
Last reconfirmed| |2023-12-19
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Hmm, OK. This is because of
else if (alignment_support_scheme == dr_aligned)
/* Aligned access to excess elements is OK if
at least one element is accessed in the
scalar loop. */
;
it seems we're using dr_aligned when the target is happy with element
alignment, not only when the full vector is aligned according to its size.
I have a patch that instead produces
fn1:
.LFB0:
lui a5,%hi(.LANCHOR0)
addi a5,a5,%lo(.LANCHOR0)
vsetivli zero,4,e32,m1,ta,ma
lw a3,8(a0)
vlse32.v v1,0(a0),zero
lw a4,4(a0)
lui a6,%hi(a)
li a7,-1
addi a1,a5,40
addi a2,a5,20
vmv.v.x v2,a3
vse32.v v1,0(a5)
sw a7,%lo(a)(a6)
vmv.v.x v1,a4
vse32.v v2,0(a1)
vse32.v v1,0(a2)
ret