https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113607

--- Comment #13 from JuzheZhong <juzhe.zhong at rivai dot ai> ---
Ok. I found a regression between rvv-next and trunk.
I believe it is GCC-12 vs GCC-14:

rvv-next:
...
.L11:
        li      t1,31
        mv      a2,a1
        bleu    a7,t1,.L12
        bne     a6,zero,.L13
        li      a5,1
        subw    a5,a5,a3
        andi    a5,a5,0xff
        vsetvli a4,zero,e64,m1,ta,mu
        vmv.v.i v24,0
        vmv.v.x v27,a1
        vmv1r.v v26,v24
.L14:
        vsetvli a3,a5,e64,m1,tu,mu
        sub     a5,a5,a3
        vmsne.vi        v0,v27,0
        vmerge.vim      v25,v26,1,v0
        vadd.vv v24,v24,v25
        bne     a5,zero,.L14
        vsetvli a5,zero,e64,m1,ta,mu
        vmv.s.x v25,zero
        li      a3,0
        vredsum.vs      v25,v24,v25
        vmv.x.s a5,v25
        j       .L17
...

RVV trunk GCC:

.L8:
        lui     a0,%hi(h)
        lb      a4,%lo(h)(a0)
        bgt     a4,zero,.L37
        lui     a5,%hi(f)
        lh      t1,%lo(f)(a5)
        lui     a3,%hi(g)
        addi    a3,a3,%lo(g)
        lw      a6,4(a3)
        not     a1,a6
        slliw   a5,t1,3
        srai    a1,a1,63
        subw    a5,a5,t1
        lw      a7,32(a3)
        and     a1,a6,a1
        addiw   a2,a5,1
        bne     a7,zero,.L13
        bne     t1,zero,.L14
        mv      a5,a6
        blt     a6,zero,.L44
.L15:
        li      a3,31
        sext.w  a2,a5
        bleu    a6,a3,.L16
        li      a3,1
.L20:
        addiw   a5,a4,1
        bgt     a6,zero,.L45
        slliw   a4,a5,24
        sraiw   a4,a4,24
        bne     a4,a3,.L20
        li      a5,0
        li      a2,0
        j       .L19
.L37:
        lui     a5,%hi(c)
.L11:
        lw      a0,%lo(c)(a5)
        addi    a0,a0,-6
        snez    a0,a0
        ret

I don't think it will affect the correctness. But it's interesting
observations..

Reply via email to