https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114403
--- Comment #14 from Richard Biener <rguenth at gcc dot gnu.org> --- There are a few vectorizations in the dumps but only one early-exit where we vectorize <bb 2> [local count: 102053600]: first$I_39 = MEM[(struct value_op_iterator *)&first]; last$I_40 = MEM[(struct value_op_iterator *)&last]; seed_15 = llvm::hashing::detail::get_execution_seed (); if (first$I_39 != last$I_40) goto <bb 22>; [94.50%] <bb 22> [local count: 96440652]: <bb 3> [local count: 179229733]: # buffer_ptr_22 = PHI <_20(24), &buffer(22)> # first$I_24 = PHI <_29(24), first$I_39(22)> # ivtmp_226 = PHI <ivtmp_216(24), 9(22)> _20 = buffer_ptr_22 + 8; ivtmp_216 = ivtmp_226 - 1; if (ivtmp_216 == 0) goto <bb 5>; [51.12%] else goto <bb 4>; [48.88%] <bb 4> [local count: 87607493]: _30 = MEM[(const struct Use *)first$I_24].Val; _35 = (unsigned long) _30; MEM <unsigned long> [(char * {ref-all})buffer_ptr_22] = _35; _29 = first$I_24 + 32; if (_29 != last$I_40) goto <bb 24>; [94.50%] else goto <bb 5>; [5.50%] <bb 24> [local count: 82789081]: goto <bb 3>; [100.00%] <bb 5> [local count: 96440652]: # buffer_ptr_248 = PHI <_20(4), buffer_ptr_22(3)> # first$I_175 = PHI <last$I_40(4), first$I_24(3)> if (last$I_40 == first$I_175) ... as far as I can see that's a non-peeled case and from what I see it looks OK how we process that.