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).