http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55796
Bug #: 55796
Summary: Comparison with a negated number vs sum
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: enhancement
Priority: P3
Component: tree-optimization
AssignedTo: [email protected]
ReportedBy: [email protected]
Hello,
gcc doesn't seem to notice that for double variables a and b, comparing a==-b
or a+b==0 is the same thing for finite math.
void g();
void f(double a,double b){
if(a==-b) g();
if(-a==b) g();
if(a+b==0) g();
}
compiled with -Ofast on x86_64-linux still has three comparisons and jumps.
Merging the first two shouldn't even require any unsafe flag.