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

            Bug ID: 112713
           Summary: RISC-V: Trunk GCC regression on VSETVL PASS comparing
                    with GCC-13
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: juzhe.zhong at rivai dot ai
  Target Milestone: ---

https://godbolt.org/z/qePhcxd5z

#include "riscv_vector.h"

size_t
foo (char const *buf, size_t len)
{
        size_t sum = 0;
        size_t vl = __riscv_vsetvlmax_e8m8();
        size_t step = vl * 4;
        const char *it = buf, *end = buf + len;
        for(; it + step <= end; ) {
                it += vl;
                vint8m8_t v3 = __riscv_vle8_v_i8m8((void*)it, vl); it += vl;
                vbool1_t m3 = __riscv_vmsgt_vx_i8m8_b1(v3, -65, vl);
                sum += __riscv_vcpop_m_b1(m3, vl);
        }
        return sum;
}

GCC-14 ASM:

foo:
        vsetvli a4,zero,e8,m8,ta,ma
        slli    a5,a4,2
        add     a1,a0,a1
        add     a5,a0,a5
        bltu    a1,a5,.L4
        slli    a6,a4,1
        add     a5,a0,a4
        add     t1,a6,a4
        li      a0,0
        li      a7,-65
        vsetvli zero,zero,e8,m8,ta,ma   ----------> redundant
.L3:
        vle8.v  v8,0(a5)
        add     a5,a5,a6
        add     a3,t1,a5
        vmsgt.vx        v8,v8,a7
        vcpop.m a2,v8
        add     a0,a0,a2
        bgeu    a1,a3,.L3
        ret
.L4:
        li      a0,0
        ret

GCC-13 ASM:

foo:
        vsetvli a4,zero,e8,m8,ta,ma
        slli    a5,a4,2
        add     a1,a0,a1
        add     a5,a0,a5
        bltu    a1,a5,.L4
        slli    a6,a4,1
        add     a5,a0,a4
        add     t1,a6,a4
        li      a0,0
        li      a7,-65
.L3:
        vle8.v  v8,0(a5)
        add     a5,a5,a6
        add     a3,t1,a5
        vmsgt.vx        v24,v8,a7
        vcpop.m a2,v24
        add     a0,a0,a2
        bgeu    a1,a3,.L3
        ret
.L4:
        li      a0,0
        ret

Trunk GCC-14 has a regression that cause a redundant vsetvl.

Such regression need to be fixed and I will take a look at it.

Reply via email to