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.