aboutsummaryrefslogtreecommitdiff
path: root/gcc/flow.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/flow.c')
-rw-r--r--gcc/flow.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index 936240d..03e188c 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -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
}