basic_block gsi_insert_seq_on_edge_immediate (edge e, gimple_seq stmts) { gimple_stmt_iterator gsi; basic_block new_bb = NULL; bool ins_after; gcc_assert (!PENDING_STMT (e)); ins_after = gimple_find_edge_insert_loc (e, &gsi, &new_bb); update_call_edge_frequencies (gimple_seq_first (stmts), gsi.bb); if (ins_after) gsi_insert_seq_after (&gsi, stmts, GSI_NEW_STMT); else gsi_insert_seq_before (&gsi, stmts, GSI_NEW_STMT); return new_bb; }
void gsi_commit_one_edge_insert (edge e, basic_block *new_bb) { if (new_bb) *new_bb = NULL; if (PENDING_STMT (e)) { gimple_stmt_iterator gsi; gimple_seq seq = PENDING_STMT (e); bool ins_after; PENDING_STMT (e) = NULL; ins_after = gimple_find_edge_insert_loc (e, &gsi, new_bb); update_call_edge_frequencies (gimple_seq_first (seq), gsi.bb); if (ins_after) gsi_insert_seq_after (&gsi, seq, GSI_NEW_STMT); else gsi_insert_seq_before (&gsi, seq, GSI_NEW_STMT); } }
basic_block gsi_insert_on_edge_immediate (edge e, gimple stmt) { gimple_stmt_iterator gsi; struct gimple_seq_node_d node; basic_block new_bb = NULL; bool ins_after; gcc_assert (!PENDING_STMT (e)); ins_after = gimple_find_edge_insert_loc (e, &gsi, &new_bb); node.stmt = stmt; node.prev = node.next = NULL; update_call_edge_frequencies (&node, gsi.bb); if (ins_after) gsi_insert_after (&gsi, stmt, GSI_NEW_STMT); else gsi_insert_before (&gsi, stmt, GSI_NEW_STMT); return new_bb; }