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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot 
gnu.org

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
OK, so we insert on the edge 4->5

<bb 4> [local count: 290235635]:
info_ptr_14(ab) = 0;
_16 = png_set_longjmp_fn ();

<bb 5> [local count: 290197324]:
# info_ptr_1(ab) = PHI <info_ptr_14(ab)(4)>
png_load_body_c.end_info = _16;
png_load_body_c.fp = fp_9(D);
png_set_longjmp_fn ();

where gimple_find_edge_insert_loc has

  /* If the destination has one predecessor which has no PHI nodes,
     insert there.  Except for the exit block.

     The requirement for no PHI nodes could be relaxed.  Basically we
     would have to examine the PHIs to prove that none of them used
     the value set by the statement we want to insert on E.  That
     hardly seems worth the effort.  */
 restart:
  if (single_pred_p (dest)
      && gimple_seq_empty_p (phi_nodes (dest))
      && dest != EXIT_BLOCK_PTR_FOR_FN (cfun))
    {

so the single-arg PHI confuses us here.

So we now either have to restrict the BB region or convince ourselves that
splitting the edge is OK at the above point (I think it is) ...

I'm tending to keep regions small for now.

Reply via email to