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

Reply via email to