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

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
Hum.  The following should have prevented that, but ...

  /* Check if we have any control flow that doesn't leave the loop.  */
  class loop *v_loop = loop->inner ? loop->inner : loop;

... not sure why we only look at the inner loop body?!

  basic_block *bbs = get_loop_body (v_loop);
  for (unsigned i = 0; i < v_loop->num_nodes; i++)
    if (EDGE_COUNT (bbs[i]->succs) != 1
        && (EDGE_COUNT (bbs[i]->succs) != 2
            || !loop_exits_from_bb_p (bbs[i]->loop_father, bbs[i])))
      {
        free (bbs);
        return opt_result::failure_at (vect_location,
                                       "not vectorized:" 
                                       " unsupported control flow in loop.\n");
      }

Reply via email to