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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
           Keywords|                            |missed-optimization
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2021-06-08
             Target|                            |x86_64-*-* i?86-*-*

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
So it's slightly more complex than a BB reduction with plus since SLP sees

  <bb 2> [local count: 1073741824]:
  _1 = a_8(D) == b_9(D);
  _2 = VEC_COND_EXPR <_1, { -1, -1, -1, -1 }, { 0, 0, 0, 0 }>;
  _3 = BIT_FIELD_REF <_2, 32, 0>;
  if (_3 != 0)
    goto <bb 3>; [50.00%]
  else
    goto <bb 13>; [50.00%]

  <bb 13> [local count: 536870912]:

  <bb 8> [local count: 1006632961]:
  goto <bb 6>; [100.00%]

  <bb 3> [local count: 536870913]:
  _4 = BIT_FIELD_REF <_2, 32, 32>;
  if (_4 != 0)
    goto <bb 4>; [50.00%]
  else
    goto <bb 14>; [50.00%]
...

and thus it requires some if-conversion.  Maybe this is even good enough
for pattern matching in forwprop, turning it into

   if (_2 == { -1, -1, -1, -1 })

Reply via email to