summaryrefslogtreecommitdiff
path: root/gcc/ira-lives.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2008-11-11 18:07:39 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2008-11-11 18:07:39 +0000
commit5dbd125c5c3e1e45dfa6710224743e74c4c40622 (patch)
treea1abd6f8d36817c657c3c7bce1d90657936339ff /gcc/ira-lives.c
parent285743c92b583002623fe59d2886c6396b626129 (diff)
downloadgcc-5dbd125c5c3e1e45dfa6710224743e74c4c40622.tar.gz
ira-lives.c (process_bb_node_lives): Restore EH_RETURN_DATA_REGNO handling.
* ira-lives.c (process_bb_node_lives): Restore EH_RETURN_DATA_REGNO handling. From-SVN: r141772
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)