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

--- Comment #5 from Ilya Enkovich <ienkovich at gcc dot gnu.org> ---
What seems suspicious to me is how we vectorize boolean comparison.  Before
vectorization we have (_3, _5, _6 are bool):

  _3 = var_9.0_2 == 0;
  _6 = _3 > _5;

vectorized code:

  mask__3.59_62 = vect_cst__47 == vect_cst__66;
  mask__6.60_49 = mask__3.59_48 > vect_cst__63;

Boolean comparison is transformed into signed integer vector (according to mask
mode) comparison.  So in scalar code 'true' (1) > 'false (0) but in vector code
'true' (-1) < 'false' (0).

Reply via email to