Small cleanup wrt. scratch allocation

Bernd Schmidt crux@pool.informatik.rwth-aachen.de
Mon Oct 19 02:47:00 GMT 1998


We no longer need to compute max_scratch; the only user in local-alloc.c
was deleted.

Bernd
	* combine.c (recog_for_combine): Lose PADDED_SCRATCHES arg.  All
	callers changed.
	(try_combine): Don't update max_scratch.
	* flow.c (max_scratch, num_scratch): Delete variables.
	(life_analysis_1): Don't initialize max_scratch.
	(propagate_block): Don't update max_scratch.
	(mark_set_1): Don't increment num_scratch.
	* regs.h (max_scratch): Delete declaration.

Index: combine.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/combine.c,v
retrieving revision 1.48
diff -u -p -r1.48 combine.c
--- combine.c	1998/10/14 20:50:39	1.48
+++ combine.c	1998/10/19 09:40:08
@@ -426,7 +426,7 @@ static int merge_outer_ops	PROTO((enum r
 				       enum machine_mode, int *));
 static rtx simplify_shift_const	PROTO((rtx, enum rtx_code, enum machine_mode,
 				       rtx, int));
-static int recog_for_combine	PROTO((rtx *, rtx, rtx *, int *));
+static int recog_for_combine	PROTO((rtx *, rtx, rtx *));
 static rtx gen_lowpart_for_combine  PROTO((enum machine_mode, rtx));
 static rtx gen_rtx_combine PVPROTO((enum rtx_code code, enum machine_mode mode,
 				  ...));
@@ -1356,8 +1356,6 @@ try_combine (i3, i2, i1)
   int i3_subst_into_i2 = 0;
   /* Notes that I1, I2 or I3 is a MULT operation.  */
   int have_mult = 0;
-  /* Number of clobbers of SCRATCH we had to add.  */
-  int i3_scratches = 0, i2_scratches = 0, other_scratches = 0;
 
   int maxreg;
   rtx temp;
@@ -1834,8 +1832,7 @@ try_combine (i3, i2, i1)
   mark_used_regs_combine (newpat);
 
   /* Is the result of combination a valid instruction?  */
-  insn_code_number
-    = recog_for_combine (&newpat, i3, &new_i3_notes, &i3_scratches);
+  insn_code_number = recog_for_combine (&newpat, i3, &new_i3_notes);
 
   /* If the result isn't valid, see if it is a PARALLEL of two SETs where
      the second SET's destination is a register that is unused.  In that case,
@@ -1856,8 +1853,7 @@ try_combine (i3, i2, i1)
       && asm_noperands (newpat) < 0)
     {
       newpat = XVECEXP (newpat, 0, 0);
-      insn_code_number
-	= recog_for_combine (&newpat, i3, &new_i3_notes, &i3_scratches);
+      insn_code_number = recog_for_combine (&newpat, i3, &new_i3_notes);
     }
 
   else if (insn_code_number < 0 && GET_CODE (newpat) == PARALLEL
@@ -1870,8 +1866,7 @@ try_combine (i3, i2, i1)
 	   && asm_noperands (newpat) < 0)
     {
       newpat = XVECEXP (newpat, 0, 1);
-      insn_code_number
-	= recog_for_combine (&newpat, i3, &new_i3_notes, &i3_scratches);
+      insn_code_number = recog_for_combine (&newpat, i3, &new_i3_notes);
     }
 
   /* If we were combining three insns and the result is a simple SET
@@ -1940,8 +1935,7 @@ try_combine (i3, i2, i1)
 	  if (REGNO (i2dest) >= FIRST_PSEUDO_REGISTER)
 	    SUBST (regno_reg_rtx[REGNO (i2dest)], ni2dest);
 
-	  i2_code_number = recog_for_combine (&newi2pat, i2, &new_i2_notes,
-					      &i2_scratches);
+	  i2_code_number = recog_for_combine (&newi2pat, i2, &new_i2_notes);
 
 	  /* If I2 or I3 has multiple SETs, we won't know how to track
 	     register status, so don't use these insns.  If I2's destination
@@ -1950,8 +1944,8 @@ try_combine (i3, i2, i1)
 	  if (i2_code_number >= 0 && i2set && i3set
 	      && (next_real_insn (i2) == i3
 		  || ! reg_used_between_p (SET_DEST (i2set), i2, i3)))
-	    insn_code_number = recog_for_combine (&newi3pat, i3, &new_i3_notes,
-						  &i3_scratches); 
+	    insn_code_number = recog_for_combine (&newi3pat, i3,
+						  &new_i3_notes);
 	  if (insn_code_number >= 0)
 	    newpat = newi3pat;
 
@@ -2038,14 +2032,12 @@ try_combine (i3, i2, i1)
 
 	  newi2pat = gen_rtx_combine (SET, VOIDmode, newdest, *split);
 	  SUBST (*split, newdest);
-	  i2_code_number
-	    = recog_for_combine (&newi2pat, i2, &new_i2_notes, &i2_scratches);
+	  i2_code_number = recog_for_combine (&newi2pat, i2, &new_i2_notes);
 
 	  /* If the split point was a MULT and we didn't have one before,
 	     don't use one now.  */
 	  if (i2_code_number >= 0 && ! (split_code == MULT && ! have_mult))
-	    insn_code_number
-	      = recog_for_combine (&newpat, i3, &new_i3_notes, &i3_scratches);
+	    insn_code_number = recog_for_combine (&newpat, i3, &new_i3_notes);
 	}
     }
 
@@ -2099,12 +2091,10 @@ try_combine (i3, i2, i1)
       newpat = XVECEXP (newpat, 0, 1);
       SUBST (SET_SRC (newpat),
 	     gen_lowpart_for_combine (GET_MODE (SET_SRC (newpat)), ni2dest));
-      i2_code_number
-	= recog_for_combine (&newi2pat, i2, &new_i2_notes, &i2_scratches);
+      i2_code_number = recog_for_combine (&newi2pat, i2, &new_i2_notes);
 
       if (i2_code_number >= 0)
-	insn_code_number
-	  = recog_for_combine (&newpat, i3, &new_i3_notes, &i3_scratches);
+	insn_code_number = recog_for_combine (&newpat, i3, &new_i3_notes);
 
       if (insn_code_number >= 0)
 	{
@@ -2191,12 +2181,10 @@ try_combine (i3, i2, i1)
 	  newpat = XVECEXP (newpat, 0, 0);
 	}
 
-      i2_code_number
-	= recog_for_combine (&newi2pat, i2, &new_i2_notes, &i2_scratches);
+      i2_code_number = recog_for_combine (&newi2pat, i2, &new_i2_notes);
 
       if (i2_code_number >= 0)
-	insn_code_number
-	  = recog_for_combine (&newpat, i3, &new_i3_notes, &i3_scratches);
+	insn_code_number = recog_for_combine (&newpat, i3, &new_i3_notes);
     }
 
   /* If it still isn't recognized, fail and change things back the way they
@@ -2218,9 +2206,8 @@ try_combine (i3, i2, i1)
 
       CLEAR_HARD_REG_SET (newpat_used_regs);
 
-      other_code_number
-	= recog_for_combine (&other_pat, undobuf.other_insn,
-			     &new_other_notes, &other_scratches);
+      other_code_number = recog_for_combine (&other_pat, undobuf.other_insn,
+					     &new_other_notes);
 
       if (other_code_number < 0 && ! check_asm_operands (other_pat))
 	{
@@ -2537,12 +2524,6 @@ try_combine (i3, i2, i1)
     if (newi2pat)
       note_stores (newi2pat, set_nonzero_bits_and_sign_copies);
 
-    /* If we added any (clobber (scratch)), add them to the max for a
-       block.  This is a very pessimistic calculation, since we might
-       have had them already and this might not be the worst block, but
-       it's not worth doing any better.  */
-    max_scratch += i3_scratches + i2_scratches + other_scratches;
-
     /* If I3 is now an unconditional jump, ensure that it has a 
        BARRIER following it since it may have initially been a
        conditional jump.  It may also be the last nonnote insn.  */
@@ -4653,7 +4634,7 @@ simplify_set (x)
 	      rtx pat = PATTERN (other_insn), note = 0;
 	      int scratches;
 
-	      if ((recog_for_combine (&pat, other_insn, &note, &scratches) < 0
+	      if ((recog_for_combine (&pat, other_insn, &note) < 0
 		   && ! check_asm_operands (pat)))
 		{
 		  PUT_CODE (*cc_use, old_code);
@@ -9052,18 +9033,14 @@ simplify_shift_const (x, code, result_mo
    PNOTES is a pointer to a location where any REG_UNUSED notes added for
    the CLOBBERs are placed.
 
-   PADDED_SCRATCHES is set to the number of (clobber (scratch)) patterns
-   we had to add.
-
    The value is the final insn code from the pattern ultimately matched,
    or -1.  */
 
 static int
-recog_for_combine (pnewpat, insn, pnotes, padded_scratches)
+recog_for_combine (pnewpat, insn, pnotes)
      rtx *pnewpat;
      rtx insn;
      rtx *pnotes;
-     int *padded_scratches;
 {
   register rtx pat = *pnewpat;
   int insn_code_number;
@@ -9071,8 +9048,6 @@ recog_for_combine (pnewpat, insn, pnotes
   int i;
   rtx notes = 0;
 
-  *padded_scratches = 0;
-
   /* If PAT is a PARALLEL, check to see if it contains the CLOBBER
      we use to indicate that something didn't match.  If we find such a
      thing, force rejection.  */
@@ -9134,8 +9109,6 @@ recog_for_combine (pnewpat, insn, pnotes
 	  if (GET_CODE (XEXP (XVECEXP (newpat, 0, i), 0)) == REG
 	      && ! reg_dead_at_p (XEXP (XVECEXP (newpat, 0, i), 0), insn))
 	    return -1;
-	  else if (GET_CODE (XEXP (XVECEXP (newpat, 0, i), 0)) == SCRATCH)
-	    (*padded_scratches)++;
 	  notes = gen_rtx_EXPR_LIST (REG_UNUSED,
 				     XEXP (XVECEXP (newpat, 0, i), 0), notes);
 	}
Index: flow.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/flow.c,v
retrieving revision 1.76
diff -u -p -r1.76 flow.c
--- flow.c	1998/10/17 20:26:16	1.76
+++ flow.c	1998/10/19 09:40:08
@@ -167,15 +167,6 @@ int n_basic_blocks;
 
 int max_regno;
 
-/* Maximum number of SCRATCH rtx's used in any basic block of this
-   function.  */
-
-int max_scratch;
-
-/* Number of SCRATCH rtx's in the current block.  */
-
-static int num_scratch;
-
 /* Indexed by n, giving various register information */
 
 varray_type reg_n_info;
@@ -1544,8 +1535,6 @@ life_analysis_1 (f, nregs)
      basic_block_live_at_start[i]).  This is ok now because
      basic_block_live_at_end[i] is no longer used past this point.  */
 
-  max_scratch = 0;
-
   for (i = 0; i < n_basic_blocks; i++)
     {
       propagate_block (basic_block_live_at_end[i],
@@ -1733,8 +1722,6 @@ propagate_block (old, first, last, final
     {
       register int i;
 
-      num_scratch = 0;
-
       /* Process the regs live at the end of the block.
 	 Mark them as not local to any one basic block. */
       EXECUTE_IF_SET_IN_REG_SET (old, 0, i,
@@ -1962,9 +1949,6 @@ propagate_block (old, first, last, final
 
   FREE_REG_SET (dead);
   FREE_REG_SET (live);
-
-  if (num_scratch > max_scratch)
-    max_scratch = num_scratch;
 }
 
 /* Return 1 if X (the body of an insn, or part of it) is just dead stores
@@ -2412,7 +2396,6 @@ mark_set_1 (needed, dead, x, insn, signi
     {
       REG_NOTES (insn)
 	= gen_rtx_EXPR_LIST (REG_UNUSED, reg, REG_NOTES (insn));
-      num_scratch++;
     }
 }
 
Index: regs.h
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/regs.h,v
retrieving revision 1.7
diff -u -p -r1.7 regs.h
--- regs.h	1998/10/02 10:21:18	1.7
+++ regs.h	1998/10/19 09:40:16
@@ -38,10 +38,6 @@ Boston, MA 02111-1307, USA.  */
 
 extern int max_regno;
 
-/* Maximum number of SCRATCH rtx's in each block of this function.  */
-
-extern int max_scratch;
-
 /* Register information indexed by register number */
 typedef struct reg_info_def {
 				/* fields set by reg_scan */




More information about the Gcc-patches mailing list