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

--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
Oh, and the dominated_by_p_w_unex issue is that we do

  if (succe && EDGE_COUNT (succe->dest->preds) == 1)
    {
      /* Verify the reached block is only reached through succe.
         If there is only one edge we can spare us the dominator
         check and iterate directly.  */
      if (EDGE_COUNT (succe->dest->preds) > 1)
        {
          FOR_EACH_EDGE (e, ei, succe->dest->preds)
            if (e != succe
                && ((e->flags & EDGE_EXECUTABLE)
                    || (!allow_back && (e->flags & EDGE_DFS_BACK))))
              {
                succe = NULL;
                break;
              }

where this is problematic because in the testcase with the switch stmt we have 
1000s of incoming edges into succe->dest.  I'm testing an easy workaround for
the testcase and the original case from bison.  A more general fix requires
some more work.

Reply via email to