diff options
author | Richard Henderson <rth@cygnus.com> | 1999-10-10 16:34:17 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 1999-10-10 16:34:17 -0700 |
commit | 715e7fbc831af02e80acc60be2fa19208ab62dfc (patch) | |
tree | ba7b0b84a68f9ed2f41f5b4352349cfa71aae6ad /gcc/flow.c | |
parent | 07b983cd7142b619b990d572a89a3370ae12f7a6 (diff) | |
download | gcc-715e7fbc831af02e80acc60be2fa19208ab62dfc.zip gcc-715e7fbc831af02e80acc60be2fa19208ab62dfc.tar.gz gcc-715e7fbc831af02e80acc60be2fa19208ab62dfc.tar.bz2 |
combine.c (refresh_blocks, [...]): New.
* combine.c (refresh_blocks, need_refresh): New.
(combine_instructions): Allocate refresh_blocks. Invoke
update_life_info if needed.
(distribute_notes): Mark refresh_blocks instead of installing
USE insns.
* flow.c (update_life_info): Remove notes if GLOBAL_RM_NOTES.
* basic_block.h (enum update_life_extent): Add GLOBAL_RM_NOTES.
* Makefile.in (recog.o): Depend on basic-block.h.
From-SVN: r29893
Diffstat (limited to 'gcc/flow.c')
-rw-r--r-- | gcc/flow.c | 16 |
1 files changed, 11 insertions, 5 deletions
@@ -2554,9 +2554,9 @@ verify_local_live_at_start (new_live_at_start, bb) lose the kill. So we _can_ have a pseudo go live. How irritating. */ void -update_life_info (blocks, local_only) +update_life_info (blocks, extent) sbitmap blocks; - enum update_life_extent local_only; + enum update_life_extent extent; { regset tmp; int i; @@ -2565,8 +2565,14 @@ update_life_info (blocks, local_only) tmp = ALLOCA_REG_SET (); /* For a global update, we go through the relaxation process again. */ - if (! local_only) - calculate_global_regs_live (blocks, blocks, 0); + if (extent != UPDATE_LIFE_LOCAL) + { + calculate_global_regs_live (blocks, blocks, 0); + + /* If asked, remove notes from the blocks we'll update. */ + if (extent == UPDATE_LIFE_GLOBAL_RM_NOTES) + count_or_remove_death_notes (blocks, 1); + } EXECUTE_IF_SET_IN_SBITMAP (blocks, 0, i, { @@ -2576,7 +2582,7 @@ update_life_info (blocks, local_only) propagate_block (tmp, bb->head, bb->end, (regset) NULL, i, PROP_DEATH_NOTES); - if (local_only) + if (extent == UPDATE_LIFE_LOCAL) verify_local_live_at_start (tmp, bb); CLEAN_ALLOCA; |