[Bug rtl-optimization/55611] Operand swapping for commutative operators
glisse at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Mar 11 14:44:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55611
--- Comment #2 from Marc Glisse <glisse at gcc dot gnu.org> 2013-03-11 14:44:09 UTC ---
The fortran test that fails is equivalent to the following (use -Ofast -g,
surprisingly it only fails in var tracking)
float f(double*a,double*b){
double x=a[0]*b[0];
x+=a[1]*b[1];
x+=a[2]*b[2];
x+=a[3]*b[3];
return x;
}
This happens because of an infinite loop between simplify_associative_operation
and simplify_gen_binary (and a few others) which keeps shuffling the additions
around to try and canonicalize the expression. Some well placed tests whether
GET_CODE(*)==code could probably help, although I am a bit surprised that it
fails so seldom, and only in var-tracking.
I didn't investigate the problem with the reverse order, as stage3 failures (in
middle-end code) are hard to debug...
More information about the Gcc-bugs
mailing list