summaryrefslogtreecommitdiff
path: root/gcc/ira-lives.c
diff options
context:
space:
mode:
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2008-11-11 18:07:39 +0000
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2008-11-11 18:07:39 +0000
commitfee75d9bbfcfad05141f1b8db8c4d3ac50891292 (patch)
treea1abd6f8d36817c657c3c7bce1d90657936339ff /gcc/ira-lives.c
parent96ddb05ff8e44cedb3be8aa3a4a2d2f9ab682b08 (diff)
downloadgcc-fee75d9bbfcfad05141f1b8db8c4d3ac50891292.tar.gz
* ira-lives.c (process_bb_node_lives): Restore EH_RETURN_DATA_REGNO
handling. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141772 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ira-lives.c')
-rw-r--r--gcc/ira-lives.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/gcc/ira-lives.c b/gcc/ira-lives.c
index 5573ce86a5e..83b5ec85e6f 100644
--- a/gcc/ira-lives.c
+++ b/gcc/ira-lives.c
@@ -785,8 +785,6 @@ process_bb_node_lives (ira_loop_tree_node_t loop_tree_node)
unsigned int j;
basic_block bb;
rtx insn;
- edge e;
- edge_iterator ei;
bitmap_iterator bi;
bitmap reg_live_out;
unsigned int px;
@@ -985,16 +983,23 @@ process_bb_node_lives (ira_loop_tree_node_t loop_tree_node)
curr_point++;
}
+#ifdef EH_RETURN_DATA_REGNO
+ if (bb_has_eh_pred (bb))
+ for (j = 0; ; ++j)
+ {
+ unsigned int regno = EH_RETURN_DATA_REGNO (j);
+ if (regno == INVALID_REGNUM)
+ break;
+ make_regno_born (regno);
+ }
+#endif
+
/* Allocnos can't go in stack regs at the start of a basic block
that is reached by an abnormal edge. Likewise for call
clobbered regs, because caller-save, fixup_abnormal_edges and
possibly the table driven EH machinery are not quite ready to
handle such allocnos live across such edges. */
- FOR_EACH_EDGE (e, ei, bb->preds)
- if (e->flags & EDGE_ABNORMAL)
- break;
-
- if (e != NULL)
+ if (bb_has_abnormal_pred (bb))
{
#ifdef STACK_REGS
EXECUTE_IF_SET_IN_SPARSESET (allocnos_live, px)