diff mbox series

[07/32] Remove global call sets: caller-save.c

Message ID mpto8zqy7my.fsf@arm.com
State New
Headers show
Series Support multiple ABIs in the same translation unit | expand

Commit Message

Richard Sandiford Sept. 11, 2019, 7:07 p.m. UTC
All caller-save.c uses of "|= fixed_reg_set" added in a previous patch
were redundant, since the sets are later ANDed with ~fixed_reg_set.


2019-09-11  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* caller-save.c (setup_save_areas): Remove redundant |s of
	fixed_reg_set.
	(save_call_clobbered_regs): Likewise.  Use the call ABI rather
	than call_used_or_fixed_regs to decide whether a REG_RETURNED
	value is useful.

Comments

Jeff Law Sept. 29, 2019, 9:01 p.m. UTC | #1
On 9/11/19 1:07 PM, Richard Sandiford wrote:
> All caller-save.c uses of "|= fixed_reg_set" added in a previous patch
> were redundant, since the sets are later ANDed with ~fixed_reg_set.
> 
> 
> 2019-09-11  Richard Sandiford  <richard.sandiford@arm.com>
> 
> gcc/
> 	* caller-save.c (setup_save_areas): Remove redundant |s of
> 	fixed_reg_set.
> 	(save_call_clobbered_regs): Likewise.  Use the call ABI rather
> 	than call_used_or_fixed_regs to decide whether a REG_RETURNED
> 	value is useful.
> 
OK
jeff
diff mbox series

Patch

Index: gcc/caller-save.c
===================================================================
--- gcc/caller-save.c	2019-09-11 19:47:24.402262786 +0100
+++ gcc/caller-save.c	2019-09-11 19:47:45.710112631 +0100
@@ -428,8 +428,6 @@  setup_save_areas (void)
       REG_SET_TO_HARD_REG_SET (hard_regs_to_save,
 			       &chain->live_throughout);
       used_regs = call_insn_abi (insn).full_reg_clobbers ();
-      /* ??? This preserves traditional behavior; it might not be needed.  */
-      used_regs |= fixed_reg_set;
 
       /* Record all registers set in this call insn.  These don't
 	 need to be saved.  N.B. the call insn might set a subreg
@@ -513,9 +511,6 @@  setup_save_areas (void)
 	  REG_SET_TO_HARD_REG_SET (hard_regs_to_save,
 				   &chain->live_throughout);
 	  used_regs = call_insn_abi (insn).full_reg_clobbers ();
-	  /* ??? This preserves traditional behavior; it might not
-	     be needed.  */
-	  used_regs |= fixed_reg_set;
 
 	  /* Record all registers set in this call insn.  These don't
 	     need to be saved.  N.B. the call insn might set a subreg
@@ -793,7 +788,6 @@  save_call_clobbered_regs (void)
 	    {
 	      unsigned regno;
 	      HARD_REG_SET hard_regs_to_save;
-	      HARD_REG_SET call_def_reg_set;
 	      reg_set_iterator rsi;
 	      rtx cheap;
 
@@ -840,15 +834,12 @@  save_call_clobbered_regs (void)
 	      note_stores (insn, mark_set_regs, &this_insn_sets);
 
 	      /* Compute which hard regs must be saved before this call.  */
+	      function_abi abi = call_insn_abi (insn);
 	      hard_regs_to_save &= ~(fixed_reg_set
 				     | this_insn_sets
 				     | hard_regs_saved);
 	      hard_regs_to_save &= savable_regs;
-	      call_def_reg_set = call_insn_abi (insn).full_reg_clobbers ();
-	      /* ??? This preserves traditional behavior; it might not
-		 be needed.  */
-	      call_def_reg_set |= fixed_reg_set;
-	      hard_regs_to_save &= call_def_reg_set;
+	      hard_regs_to_save &= abi.full_reg_clobbers ();
 
 	      for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
 		if (TEST_HARD_REG_BIT (hard_regs_to_save, regno))
@@ -863,8 +854,7 @@  save_call_clobbered_regs (void)
 	      
 	      if (cheap
 		  && HARD_REGISTER_P (cheap)
-		  && TEST_HARD_REG_BIT (call_used_or_fixed_regs,
-					REGNO (cheap)))
+		  && abi.clobbers_reg_p (GET_MODE (cheap), REGNO (cheap)))
 		{
 		  rtx dest, newpat;
 		  rtx pat = PATTERN (insn);