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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |missed-optimization
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2019-06-07
          Component|middle-end                  |tree-optimization
     Ever confirmed|0                           |1

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
The veclower pass already does this but is appearantly confused by missed
association:

  <bb 2> [local count: 1073741825]:
  _18 = k_17(D) / 2;
  _1 = {_18, _18, _18, _18};
  _2 = _1 + num_19(D);
  _21 = p_20(D) * 6234;
  _3 = {_21, _21, _21, _21};

the + num_19(D) done early makes it a vector result early.  Associating
that in a different way would help.

So as Andrew says this is a reassoc heuristic issue.

Doing

    return num + (1 + k / 2 + p * 6234 + 75 * h + j / 3452 + 53 * w + x / 820 +
4 * u + y + 25 + 829 / 3 * (3452/3));

also does what you want this.

Reply via email to