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

            Bug ID: 112399
           Summary: RISC-V: Missed AVL propagation for complicate
                    reduction case
           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: ---

double foo (double *__restrict a, 
double *__restrict b, 
double *__restrict c,
int n)
{
  double result = 0;
  for (int i = 0; i < n; i++)
    result += a[i] * b[i] * c[i];
  return result;
}

https://godbolt.org/z/znqcf7ehz

        vsetvli a5,a3,e8,mf8,ta,ma   -----> should be change into e64m1 Tuma
        slli    a4,a5,3
        vle64.v v4,0(a0)
        vle64.v v1,0(a1)
        vle64.v v3,0(a2)
        sub     a3,a3,a5
        vsetvli a6,zero,e64,m1,ta,ma   ---> redundant 
        add     a0,a0,a4
        vfmul.vv        v1,v1,v4
        add     a1,a1,a4
        vsetvli zero,a5,e64,m1,tu,ma   ---> redundant 
        add     a2,a2,a4
        vfmacc.vv       v2,v3,v1
        bne     a3,zero,.L3
        fmv.d.x fa5,zero
        vsetvli a6,zero,e64,m1,ta,ma
        vfmv.s.f        v1,fa5
        vfredusum.vs    v2,v2,v1
        vfmv.f.s        fa0,v2
        ret

Reply via email to