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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot 
gnu.org
   Target Milestone|---                         |10.4
           Priority|P3                          |P2
             Status|UNCONFIRMED                 |ASSIGNED
            Summary|x86: single-element vectors |[10/11/12/13 Regression]
                   |don't have scalar FMA insns |x86: single-element vectors
                   |used anymore                |don't have scalar FMA insns
                   |                            |used anymore
   Last reconfirmed|                            |2022-06-14
     Ever confirmed|0                           |1
           Keywords|                            |missed-optimization

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
The widen-mul pass now sees

  <bb 2> [local count: 1073741824]:
  _8 = VIEW_CONVERT_EXPR<float>(a_3(D));
  _9 = VIEW_CONVERT_EXPR<float>(b_4(D));
  _10 = _8 * _9;
  _1 = {_10};
  _11 = VIEW_CONVERT_EXPR<float>(_1);
  _12 = VIEW_CONVERT_EXPR<float>(c_5(D));
  _13 = _11 + _12;
  BIT_FIELD_REF <<retval>, 32, 0> = _13;
  return <retval>;

which confuses it.  The above is the result from vector lowering which
presumably
sees that V1SFmode isn't supported.  In GCC 8 the above is instead

  <bb 2> [local count: 1073741825]:
  _8 = BIT_FIELD_REF <a_3(D), 32, 0>;
  _9 = BIT_FIELD_REF <b_4(D), 32, 0>;
  _10 = _8 * _9;
  _11 = BIT_FIELD_REF <c_5(D), 32, 0>;
  _12 = _10 + _11;
  _2 = {_12};
  <retval> = _2;

that means we are at least missing a match.pd pattern to simplify

  _1 = {_10};
  _11 = VIEW_CONVERT_EXPR<float>(_1);

Reply via email to