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.

Reply via email to