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

--- Comment #23 from sebpop at gmail dot com <sebpop at gmail dot com> 
2010-10-29 21:44:09 UTC ---
Hi,

here is a preliminary patch (not tested yet other that the PR testcase).
This patch improves chrec_apply to also handle these very uncommon
cases that some like to make big titles about (I wonder if the guy who
submitted this bug report is part of some marketing division... anyways)

Note that for these cases
F (4, sum += a * a)
F (5, sum += a * a * a)
F (6, sum += a * a * a * a * a + 2 * a * a * a + 5 * a)

although GCC with this patch knows how to transform these into end
of loop values, GCC won't change them, because of this heuristic:

          /* Do not emit expensive expressions.  The rationale is that
         when someone writes a code like

         while (n > 45) n -= 45;

         he probably knows that n is not large, and does not want it
         to be turned into n %= 45.  */
          || expression_expensive_p (def))

one needs to also set the --param scev-max-expr-size to a pretty big
value for f6 to pass the fold steps...

Sebastian

Reply via email to