https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110817
--- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #6) > _5 = VEC_COND_EXPR <_9, { 0, 0 }, { -1, -1 }>; > _6 = VIEW_CONVERT_EXPR<long unsigned intD.10>(_5); > > From that veclower produces: > <signed-boolean:32> _36; ... > _38 = _36 == 0; > _40 = (signed int) _36; > _41 = _40 + -1; > > _36 == 0 ? 0 : -1 I read it wrong, actually it is: _40 = (signed int) _36 _41 = _40 + - 1; Which gives -2 and -1 rather than -1 and 0 ...