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