diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/flow.c | 18 |
2 files changed, 23 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 76bf641..3fc2746 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-05-29 Richard Earnshaw (rearnsha@arm.com) + + * flow.c (mark_used_reg): If a register is unconditionally live, + remove any conditional death information. + 2000-05-29 Richard Henderson <rth@cygnus.com> * final.c (current_output_insn): New. @@ -5120,6 +5120,24 @@ mark_used_reg (pbi, reg, cond, insn) (splay_tree_value) rcli); } } + else if (some_was_live) + { + splay_tree_node node; + struct reg_cond_life_info *rcli; + + node = splay_tree_lookup (pbi->reg_cond_dead, regno); + if (node != NULL) + { + /* The register was conditionally live previously, but is now + unconditionally so. Remove it from the conditionally dead + list, so that a conditional set won't cause us to think + it dead. */ + rcli = (struct reg_cond_life_info *) node->value; + rcli->condition = NULL_RTX; + splay_tree_remove (pbi->reg_cond_dead, regno); + } + } + #endif } |