http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57702
Bug ID: 57702 Summary: Reassoc missed optimizations Product: gcc Version: 4.9.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: jakub at gcc dot gnu.org On: int f1 (int x, int y) { x += y; return x + 3 * y; } unsigned int f2 (unsigned int x, unsigned int y) { x += y; return x + 3 * y; } int f3 (int x, int y) { x += 7 * y; return x + 12 * y; } unsigned int f4 (unsigned int x, unsigned int y) { x += 7 * y; return x + 12 * y; } reassoc optimizes only the f4 function into x += 19 * y; at the tree level, and at the RTL level combiner happens to optimize it except for f3, which has more insns than f4. I don't see why not optimizing this even for signed types would be problematic, as long as the multiplication is performed in the same signed type and all terms have the same sign (with different sizes the optimization could remove undefined overflow, but I don't see how it could introduce it). When things are vectorized the RTL optimizations will hardly help though.