From 5dbd125c5c3e1e45dfa6710224743e74c4c40622 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 11 Nov 2008 18:07:39 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/ira-lives.c | 19 ++++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5b03383..2d5803f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-11-11 Eric Botcazou + + * ira-lives.c (process_bb_node_lives): Restore EH_RETURN_DATA_REGNO + handling. + 2008-11-10 Catherine Moore * config.gcc (mips64vrel-*-elf*): Include the tm_file diff --git a/gcc/ira-lives.c b/gcc/ira-lives.c index 5573ce8..83b5ec8 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) -- 2.7.4