diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2008-11-11 18:07:39 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2008-11-11 18:07:39 +0000 |
commit | 5dbd125c5c3e1e45dfa6710224743e74c4c40622 (patch) | |
tree | a1abd6f8d36817c657c3c7bce1d90657936339ff /gcc/ira-lives.c | |
parent | 285743c92b583002623fe59d2886c6396b626129 (diff) | |
download | gcc-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.c | 19 |
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) |