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

ak at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ak at gcc dot gnu.org

--- Comment #9 from ak at gcc dot gnu.org ---
On x86/avx512f the first variant still fails with 

earch-line-fast.c:4:60: missed: couldn't vectorize loop
search-line-fast.c:4:60: missed: not vectorized: number of iterations cannot be
computed.

and the second variant with end condition with

search-line-fast-cond.c:3:18: missed: couldn't vectorize loop
search-line-fast-cond.c:3:18: missed: not vectorized: unsupported control flow
in loop.
search-line-fast-cond.c:1:22: note: vectorized 0 loops in function.

The first needs some pattern matching: having the break condition in the loop
vs having it in a while header shouldn't matter.

I think the later is due to

vect_analyze_loop_form:
                                                                               
              |    if (EDGE_COUNT (bbs[i]->succs) != 1


 <bb 5> [local count: 1044213920]:
  # prephitmp_25 = PHI <_24(4), 0(12)>
  _10 = _1 == 92;
  _13 = _10 | prephitmp_25;
  if (_13 != 0)
    goto <bb 6>; [8.03%]
  else
    goto <bb 7>; [91.97%]

  <bb 6> [local count: 83800315]:
  # s_19 = PHI <s_15(5)>
  return s_19;

because the return isn't a jump out of the loop.
I'm not sure how arm avoids that problem.

Reply via email to