https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63586

            Bug ID: 63586
           Summary: x+x+x+x -> 4*x in gimple
           Product: gcc
           Version: 5.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: glisse at gcc dot gnu.org

unsigned f(unsigned x){
  unsigned y = x + x;
  y = y + x;
  y = y + x;
  y = y + x;
  y = y + x;
  y = y + x;
  y = y + x;
  return y;
}

The .optimized dump still shows:

  y_2 = x_1(D) + x_1(D);
  y_3 = y_2 + x_1(D);
  y_4 = y_3 + x_1(D);
  y_5 = y_4 + x_1(D);
  y_6 = y_5 + x_1(D);
  y_7 = y_6 + x_1(D);
  y_8 = y_7 + x_1(D);
  return y_8;

RTL later optimizes it to x<<3 (leal), but I am surprised we aren't doing
anything in gimple. I would expect us to canonicalize to 8*x.

Reply via email to