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

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
OK, so pattern recognition made a reduction with a conversion out of this and
it was relaxing of the vectorizable_reduction code that let this through.
This is in fact _not_ a sing-changing conversion reduction anymore:

  # d_15 = PHI <d_11(6), 0(16)>
  _4 = *_3;
  _5 = (int) _4;
  patt_24 = (unsigned char) d_15;
  patt_23 = _4 | patt_24;
  patt_22 = (int) patt_23; // was d_11 = _5 | d_15;

and now the suspicous

      /* To properly compute ncopies we are interested in the widest
         input type in case we're looking at a widening accumulation.  */
      if (tem
          && (!vectype_in
              || (GET_MODE_SIZE (SCALAR_TYPE_MODE (TREE_TYPE (vectype_in)))
                  < GET_MODE_SIZE (SCALAR_TYPE_MODE (TREE_TYPE (tem))))))
        vectype_in = tem;

comes in seeing a v16qi input resulting in ncopies == 1.

Reply via email to