[01/12] add default definition of EH_RETURN_DATA_REGNO
diff mbox

Message ID 1429622658-9034-2-git-send-email-tbsaunde+gcc@tbsaunde.org
State New
Headers show

Commit Message

tbsaunde+gcc@tbsaunde.org April 21, 2015, 1:24 p.m. UTC
From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>

gcc/ChangeLog:

2015-04-21  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* defaults.h: New definition of EH_RETURN_DATA_REGNO.
	* except.c: Remove definition of EH_RETURN_DATA_REGNO.
	* builtins.c (expand_builtin): Remove check if
	EH_RETURN_DATA_REGNO is defined.
	* df-scan.c (df_bb_refs_collect): Likewise.
	(df_get_exit_block_use_set): Likewise.
	* haifa-sched.c (initiate_bb_reg_pressure_info): Likewise.
	* ira-lives.c (process_bb_node_lives): Likewise.
	* lra-lives.c (process_bb_lives): Likewise.
---
 gcc/builtins.c    | 2 --
 gcc/defaults.h    | 6 ++++++
 gcc/df-scan.c     | 4 ----
 gcc/except.c      | 6 ------
 gcc/haifa-sched.c | 2 --
 gcc/ira-lives.c   | 2 --
 gcc/lra-lives.c   | 2 --
 7 files changed, 6 insertions(+), 18 deletions(-)

Comments

Jeff Law April 21, 2015, 1:40 p.m. UTC | #1
On 04/21/2015 07:24 AM, tbsaunde+gcc@tbsaunde.org wrote:
> From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
>
> gcc/ChangeLog:
>
> 2015-04-21  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
>
> 	* defaults.h: New definition of EH_RETURN_DATA_REGNO.
> 	* except.c: Remove definition of EH_RETURN_DATA_REGNO.
> 	* builtins.c (expand_builtin): Remove check if
> 	EH_RETURN_DATA_REGNO is defined.
> 	* df-scan.c (df_bb_refs_collect): Likewise.
> 	(df_get_exit_block_use_set): Likewise.
> 	* haifa-sched.c (initiate_bb_reg_pressure_info): Likewise.
> 	* ira-lives.c (process_bb_node_lives): Likewise.
> 	* lra-lives.c (process_bb_lives): Likewise.
This one wasn't as obvious as the others, but is clearly OK once the 
full loops being guarded by EH_RETURN_DATA_REGNO are examined.

Jeff
Jakub Jelinek April 21, 2015, 2 p.m. UTC | #2
On Tue, Apr 21, 2015 at 07:40:37AM -0600, Jeff Law wrote:
> On 04/21/2015 07:24 AM, tbsaunde+gcc@tbsaunde.org wrote:
> >From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
> >
> >gcc/ChangeLog:
> >
> >2015-04-21  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
> >
> >	* defaults.h: New definition of EH_RETURN_DATA_REGNO.
> >	* except.c: Remove definition of EH_RETURN_DATA_REGNO.
> >	* builtins.c (expand_builtin): Remove check if
> >	EH_RETURN_DATA_REGNO is defined.
> >	* df-scan.c (df_bb_refs_collect): Likewise.
> >	(df_get_exit_block_use_set): Likewise.
> >	* haifa-sched.c (initiate_bb_reg_pressure_info): Likewise.
> >	* ira-lives.c (process_bb_node_lives): Likewise.
> >	* lra-lives.c (process_bb_lives): Likewise.
> This one wasn't as obvious as the others, but is clearly OK once the full
> loops being guarded by EH_RETURN_DATA_REGNO are examined.

Except that the bb_has_eh_pred predicate might burn CPU time for basic
blocks with many predecessors.  Though, the question is if there are any
important targets that don't define EH_RETURN_DATA_REGNO already.

	Jakub
Jeff Law April 21, 2015, 2:04 p.m. UTC | #3
On 04/21/2015 08:00 AM, Jakub Jelinek wrote:
> On Tue, Apr 21, 2015 at 07:40:37AM -0600, Jeff Law wrote:
>> On 04/21/2015 07:24 AM, tbsaunde+gcc@tbsaunde.org wrote:
>>> From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
>>>
>>> gcc/ChangeLog:
>>>
>>> 2015-04-21  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
>>>
>>> 	* defaults.h: New definition of EH_RETURN_DATA_REGNO.
>>> 	* except.c: Remove definition of EH_RETURN_DATA_REGNO.
>>> 	* builtins.c (expand_builtin): Remove check if
>>> 	EH_RETURN_DATA_REGNO is defined.
>>> 	* df-scan.c (df_bb_refs_collect): Likewise.
>>> 	(df_get_exit_block_use_set): Likewise.
>>> 	* haifa-sched.c (initiate_bb_reg_pressure_info): Likewise.
>>> 	* ira-lives.c (process_bb_node_lives): Likewise.
>>> 	* lra-lives.c (process_bb_lives): Likewise.
>> This one wasn't as obvious as the others, but is clearly OK once the full
>> loops being guarded by EH_RETURN_DATA_REGNO are examined.
>
> Except that the bb_has_eh_pred predicate might burn CPU time for basic
> blocks with many predecessors.  Though, the question is if there are any
> important targets that don't define EH_RETURN_DATA_REGNO already.
Probably not since they'll blow up elsewhere (I was recently helping 
someone with a private port that didn't define EH_RETURN_DATA_REGNO) :-)
jeff

Patch
diff mbox

diff --git a/gcc/builtins.c b/gcc/builtins.c
index 9263777..028d793 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -6510,10 +6510,8 @@  expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
       expand_builtin_eh_return (CALL_EXPR_ARG (exp, 0),
 				CALL_EXPR_ARG (exp, 1));
       return const0_rtx;
-#ifdef EH_RETURN_DATA_REGNO
     case BUILT_IN_EH_RETURN_DATA_REGNO:
       return expand_builtin_eh_return_data_regno (exp);
-#endif
     case BUILT_IN_EXTEND_POINTER:
       return expand_builtin_extend_pointer (CALL_EXPR_ARG (exp, 0));
     case BUILT_IN_EH_POINTER:
diff --git a/gcc/defaults.h b/gcc/defaults.h
index 1d54798..911c2f8 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -377,6 +377,12 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #endif
 #endif
 
+/* Provide defaults for stuff that may not be defined when using
+   sjlj exceptions.  */
+#ifndef EH_RETURN_DATA_REGNO
+#define EH_RETURN_DATA_REGNO(N) INVALID_REGNUM
+#endif
+
 /* If we have named section and we support weak symbols, then use the
    .jcr section for recording java classes which need to be registered
    at program start-up time.  */
diff --git a/gcc/df-scan.c b/gcc/df-scan.c
index 1700be9..b2e2e5d 100644
--- a/gcc/df-scan.c
+++ b/gcc/df-scan.c
@@ -3332,7 +3332,6 @@  df_bb_refs_collect (struct df_collection_rec *collection_rec, basic_block bb)
       return;
     }
 
-#ifdef EH_RETURN_DATA_REGNO
   if (bb_has_eh_pred (bb))
     {
       unsigned int i;
@@ -3346,7 +3345,6 @@  df_bb_refs_collect (struct df_collection_rec *collection_rec, basic_block bb)
 			 bb, NULL, DF_REF_REG_DEF, DF_REF_AT_TOP);
 	}
     }
-#endif
 
   /* Add the hard_frame_pointer if this block is the target of a
      non-local goto.  */
@@ -3751,7 +3749,6 @@  df_get_exit_block_use_set (bitmap exit_block_uses)
 	  bitmap_set_bit (exit_block_uses, i);
     }
 
-#ifdef EH_RETURN_DATA_REGNO
   /* Mark the registers that will contain data for the handler.  */
   if (reload_completed && crtl->calls_eh_return)
     for (i = 0; ; ++i)
@@ -3761,7 +3758,6 @@  df_get_exit_block_use_set (bitmap exit_block_uses)
 	  break;
 	bitmap_set_bit (exit_block_uses, regno);
       }
-#endif
 
 #ifdef EH_RETURN_STACKADJ_RTX
   if ((!HAVE_epilogue || ! epilogue_completed)
diff --git a/gcc/except.c b/gcc/except.c
index 833ec21..7573c88 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -174,12 +174,6 @@  along with GCC; see the file COPYING3.  If not see
 #include "cfgloop.h"
 #include "builtins.h"
 
-/* Provide defaults for stuff that may not be defined when using
-   sjlj exceptions.  */
-#ifndef EH_RETURN_DATA_REGNO
-#define EH_RETURN_DATA_REGNO(N) INVALID_REGNUM
-#endif
-
 static GTY(()) int call_site_base;
 
 struct tree_hash_traits : default_hashmap_traits
diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c
index ad2450b..d47cb8c 100644
--- a/gcc/haifa-sched.c
+++ b/gcc/haifa-sched.c
@@ -1070,7 +1070,6 @@  initiate_bb_reg_pressure_info (basic_block bb)
       if (NONDEBUG_INSN_P (insn))
 	setup_ref_regs (PATTERN (insn));
   initiate_reg_pressure_info (df_get_live_in (bb));
-#ifdef EH_RETURN_DATA_REGNO
   if (bb_has_eh_pred (bb))
     for (i = 0; ; ++i)
       {
@@ -1082,7 +1081,6 @@  initiate_bb_reg_pressure_info (basic_block bb)
 	  mark_regno_birth_or_death (curr_reg_live, curr_reg_pressure,
 				     regno, true);
       }
-#endif
 }
 
 /* Save current register pressure related info.  */
diff --git a/gcc/ira-lives.c b/gcc/ira-lives.c
index b29f572..2837349 100644
--- a/gcc/ira-lives.c
+++ b/gcc/ira-lives.c
@@ -1319,7 +1319,6 @@  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)
 	  {
@@ -1328,7 +1327,6 @@  process_bb_node_lives (ira_loop_tree_node_t loop_tree_node)
 	      break;
 	    make_hard_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
diff --git a/gcc/lra-lives.c b/gcc/lra-lives.c
index 9dfffb6..47a9ba2 100644
--- a/gcc/lra-lives.c
+++ b/gcc/lra-lives.c
@@ -954,7 +954,6 @@  process_bb_lives (basic_block bb, int &curr_point, bool dead_insn_p)
 	add_reg_note (curr_insn, REG_UNUSED, regno_reg_rtx[j]);
     }
 
-#ifdef EH_RETURN_DATA_REGNO
   if (bb_has_eh_pred (bb))
     for (j = 0; ; ++j)
       {
@@ -964,7 +963,6 @@  process_bb_lives (basic_block bb, int &curr_point, bool dead_insn_p)
 	  break;
 	make_hard_regno_born (regno, false);
       }
-#endif
 
   /* Pseudos 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,