cfgrtl.c (purge_dead_edges): Set BB_DRITY flags if edge has been removed; fix return value.

* cfgrtl.c (purge_dead_edges): Set BB_DRITY flags if edge has been
	removed; fix return value.
	* combine.c (combine_instructions): Dirtify blocks where we failed to
	update liveness; purge dead edges; use update_life_info_in_dirty_blocks.
	* toplev.c (rest_of_compilation): Do not purge_dead_edges after combine.

From-SVN: r50454
This commit is contained in:
Jan Hubicka 2002-03-08 21:32:15 +01:00 committed by Jan Hubicka
parent 3b25fbfeaf
commit c51d95ecef
4 changed files with 24 additions and 12 deletions

View File

@ -1,3 +1,11 @@
Fri Mar 8 21:27:49 CET 2002 Jan Hubicka <jh@suse.cz>
* cfgrtl.c (purge_dead_edges): Set BB_DRITY flags if edge has been
removed; fix return value.
* combine.c (combine_instructions): Dirtify blocks where we failed to
update liveness; purge dead edges; use update_life_info_in_dirty_blocks.
* toplev.c (rest_of_compilation): Do not purge_dead_edges after combine.
2002-03-08 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gcse.c (insert_insn_end_bb): Fix typo in last change.

View File

@ -2108,6 +2108,7 @@ purge_dead_edges (bb)
if (e->flags & EDGE_EH)
{
remove_edge (e);
bb->flags |= BB_DIRTY;
purged = true;
}
}
@ -2121,7 +2122,7 @@ purge_dead_edges (bb)
if (!any_condjump_p (insn)
&& !returnjump_p (insn)
&& !simplejump_p (insn))
return false;
return purged;
/* Branch probability/prediction notes are defined only for
condjumps. We've possibly turned condjump into simplejump. */
@ -2154,12 +2155,13 @@ purge_dead_edges (bb)
&& returnjump_p (insn))
continue;
bb->flags |= BB_DIRTY;
purged = true;
remove_edge (e);
}
if (!bb->succ || !purged)
return false;
return purged;
if (rtl_dump_file)
fprintf (rtl_dump_file, "Purged edges from bb %i\n", bb->index);
@ -2206,7 +2208,11 @@ purge_dead_edges (bb)
{
next = e->succ_next;
if (!(e->flags & EDGE_FALLTHRU))
remove_edge (e), purged = true;
{
bb->flags |= BB_DIRTY;
remove_edge (e);
purged = true;
}
}
if (!bb->succ || bb->succ->succ_next)

View File

@ -739,14 +739,16 @@ combine_instructions (f, nregs)
;
}
}
clear_bb_flags ();
EXECUTE_IF_SET_IN_SBITMAP (refresh_blocks, 0, this_basic_block,
BASIC_BLOCK (this_basic_block)->flags |= BB_DIRTY);
new_direct_jump_p |= purge_all_dead_edges (0);
delete_noop_moves (f);
if (need_refresh)
{
update_life_info (refresh_blocks, UPDATE_LIFE_GLOBAL_RM_NOTES,
PROP_DEATH_NOTES);
}
update_life_info_in_dirty_blocks (UPDATE_LIFE_GLOBAL_RM_NOTES,
PROP_DEATH_NOTES | PROP_SCAN_DEAD_CODE
| PROP_KILL_DEAD_CODE);
/* Clean up. */
sbitmap_free (refresh_blocks);

View File

@ -3058,10 +3058,6 @@ rest_of_compilation (decl)
rebuild_jump_labels_after_combine
= combine_instructions (insns, max_reg_num ());
/* Always purge dead edges, as we may eliminate an insn throwing
exception. */
rebuild_jump_labels_after_combine |= purge_all_dead_edges (true);
/* Combining insns may have turned an indirect jump into a
direct jump. Rebuid the JUMP_LABEL fields of jumping
instructions. */