diff options
author | Jan Hubicka <jh@suse.cz> | 2001-10-29 12:45:45 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2001-10-29 11:45:45 +0000 |
commit | 473fb060f3609f51fc4e1711297f3600e15ed7c0 (patch) | |
tree | 91cc2113797ecc74514f6de4826f7f7c19e0e549 /gcc/cfgrtl.c | |
parent | 4fdaa8786fe048b12597a2055370044e16a37e1f (diff) | |
download | gcc-473fb060f3609f51fc4e1711297f3600e15ed7c0.zip gcc-473fb060f3609f51fc4e1711297f3600e15ed7c0.tar.gz gcc-473fb060f3609f51fc4e1711297f3600e15ed7c0.tar.bz2 |
basic-block.h (purge_all_dead_edges): Add update_life_p argument.
* basic-block.h (purge_all_dead_edges): Add update_life_p argument.
* cfgcleanup.c (merge_blocks): Update the life flag after merging;
fix warning.
* cfgrtl.c (purge_all_dead_edges): Allow updating of liveness.
(life_analysis): call purge_all_dead_edges after deleting noops.
(delete_noop_move): Do not purge CFG.
* toplev.c (rest_of_compilation): Update purge_all_dead_edges call.
From-SVN: r46605
Diffstat (limited to 'gcc/cfgrtl.c')
-rw-r--r-- | gcc/cfgrtl.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 6abac76..16fca39 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -1923,10 +1923,30 @@ purge_dead_edges (bb) */ bool -purge_all_dead_edges () +purge_all_dead_edges (update_life_p) + bool update_life_p; { int i, purged = false; + sbitmap blocks; + + if (update_life_p) + { + blocks = sbitmap_alloc (n_basic_blocks); + sbitmap_zero (blocks); + } for (i = 0; i < n_basic_blocks; i++) - purged |= purge_dead_edges (BASIC_BLOCK (i)); + { + bool purged_here; + purged_here = purge_dead_edges (BASIC_BLOCK (i)); + purged |= purged_here; + if (purged_here && update_life_p) + SET_BIT (blocks, i); + } + if (update_life_p && purged) + update_life_info (blocks, UPDATE_LIFE_GLOBAL, + PROP_DEATH_NOTES | PROP_SCAN_DEAD_CODE + | PROP_KILL_DEAD_CODE); + if (update_life_p) + sbitmap_free (blocks); return purged; } |