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