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.