aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfgrtl.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2001-10-29 12:45:45 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2001-10-29 11:45:45 +0000
commit473fb060f3609f51fc4e1711297f3600e15ed7c0 (patch)
tree91cc2113797ecc74514f6de4826f7f7c19e0e549 /gcc/cfgrtl.c
parent4fdaa8786fe048b12597a2055370044e16a37e1f (diff)
downloadgcc-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.c24
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;
}