diff options
author | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-11-11 18:07:39 +0000 |
---|---|---|
committer | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-11-11 18:07:39 +0000 |
commit | fee75d9bbfcfad05141f1b8db8c4d3ac50891292 (patch) | |
tree | a1abd6f8d36817c657c3c7bce1d90657936339ff /gcc/ira-lives.c | |
parent | 96ddb05ff8e44cedb3be8aa3a4a2d2f9ab682b08 (diff) | |
download | gcc-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.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) |