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

            Bug ID: 111320
           Summary: RISC-V: Failed combine extend + vfwredosum
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: lehua.ding at rivai dot ai
  Target Milestone: ---

vfwcvt.f.f.v and vfredosum.vs should be combined to vfwredosum.vs


C Code:
#include <riscv_vector.h>

double foo1 (float* restrict a, float* restrict b, int n)
{
    double sum = 0;
    for (int i = 0; i < n; i += 1)
      sum += a[i];
    return sum;
}

Assembly Code:
foo1:
        fmv.d.x fa0,zero
        ble     a2,zero,.L4
.L3:
        vsetvli a5,a2,e64,m1,ta,ma
        vle32.v v3,0(a0)
        vfmv.s.f        v2,fa0
        slli    a3,a5,2
        vsetvli a4,zero,e32,mf2,ta,ma
        sub     a2,a2,a5
        vfwcvt.f.f.v    v1,v3
        add     a0,a0,a3
        vsetvli zero,a5,e64,m1,ta,ma
        vfredosum.vs    v1,v1,v2
        vfmv.f.s        fa0,v1
        bne     a2,zero,.L3
        ret
.L4:
        ret


https://godbolt.org/z/dPesPnMWG

Reply via email to