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