https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113714
Bug ID: 113714
Summary: [11/12/13/14 Regression] Missed optimization for
redundancy computation elimination: -(w+d-x)-x =>
-(w+d)
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: 652023330028 at smail dot nju.edu.cn
Target Milestone: ---
Hello, we noticed that x can be eliminated from the calculation of z in the
following code:
c-x => -(w+d-x)-x => -(w+d)
https://godbolt.org/z/MYhGTc4Pv
int x,y,z,w;
void func(int a, int b, int c, int d){
x=a/b - y;
c=-(w+d-x);
z=c-x;
}
But GCC -O3 -fwrapv:
_1 = a_7(D) / b_8(D);
y.0_2 = y;
_3 = _1 - y.0_2;
x = _3;
#Here is the part related to the calculation of z:
w.2_4 = w;
_20 = y.0_2 - w.2_4;
_21 = _20 - d_11(D);
_22 = _3 + _21;
_6 = _22 - _1;
z = _6;
return;
Expected code:
GCC-10.5 -O3 -fwrapv
_1 = a_7(D) / b_8(D);
y.0_2 = y;
_3 = _1 - y.0_2;
x = _3;
#Here is the part related to the calculation of z:
w.2_4 = w;
_5 = w.2_4 + d_11(D);
_6 = -_5;
z = _6;
return;
Thank you very much for your time and effort! We look forward to hearing from
you.