GCC generates different codes for the both functions:
  int f1(int k) { return k*k+k; }
  int f2(int k) { return k*(k+1); }

also the generated code for, say '(k*k+k) + (k*(k+1))'
calculates the two parts independently and then sums them,
whereas the code for '(k*k+k) + (k*k+k)' just calculates
k*k+k once and then doubles it.

This is not the case with two other compilers i tested -
intel's icc and the microsoft's compiler.

I think that this way GCC is missing very important
and basic opportunities for optimizations.
For example there are many macros out there in the
wilderness, that heavily rely on such kind of
optimizations that disclose parentheses.

-- 
           Summary: GCC does not disclose parentheses
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P2
         Component: middle-end
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: l_belev at yahoo dot com
                CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19912

Reply via email to