diff options
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r-- | gcc/tree-inline.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 32cd852..ec7aacf 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -1977,12 +1977,13 @@ copy_phis_for_bb (basic_block bb, copy_body_data *id) edge_iterator ei; gimple phi; gimple_stmt_iterator si; + edge new_edge; + bool inserted = false; for (si = gsi_start (phi_nodes (bb)); !gsi_end_p (si); gsi_next (&si)) { tree res, new_res; gimple new_phi; - edge new_edge; phi = gsi_stmt (si); res = PHI_RESULT (phi); @@ -2021,17 +2022,20 @@ copy_phis_for_bb (basic_block bb, copy_body_data *id) && !is_gimple_val (new_arg)) { gimple_seq stmts = NULL; - basic_block tem; new_arg = force_gimple_operand (new_arg, &stmts, true, NULL); - tem = gsi_insert_seq_on_edge_immediate (new_edge, stmts); - if (tem) - new_edge = single_succ_edge (tem); + gsi_insert_seq_on_edge (new_edge, stmts); + inserted = true; } add_phi_arg (new_phi, new_arg, new_edge, gimple_phi_arg_location_from_edge (phi, old_edge)); } } } + + /* Commit the delayed edge insertions. */ + if (inserted) + FOR_EACH_EDGE (new_edge, ei, new_bb->preds) + gsi_commit_one_edge_insert (new_edge, NULL); } |