This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

regrename.c cleanup


This mostly fixes whitespace issues, but also does some other cleanups
and makes some variables unsigned.

Mon Apr 10 07:21:13 2000  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* regrename.c: Minor cleanups, including changing some variables
	to unsigned int.

*** regrename.c	2000/04/06 13:52:59	1.4
--- regrename.c	2000/04/10 11:07:57
*************** ext_basic_blocks;
*** 76,97 ****
  #define SOURCE 2
  
! static void build_def_use PARAMS ((int, ext_basic_blocks *, HARD_REG_SET *,
! 				   def_uses *, sbitmap *));
! static int replace_reg_in_block
!   PARAMS ((def_uses *, varray_type *, int, rtx, int));
! static int consider_def PARAMS ((rtx, int, def_uses *, int));
! static int consider_available PARAMS ((rtx, int, HARD_REG_SET *, int, def_uses *, int));
! static rtx rr_replace_reg PARAMS ((rtx, rtx, rtx, int, rtx, int *));
! static int consider_use PARAMS ((rtx, int, int, int));
! static int condmove_p PARAMS ((rtx));
! static void dump_def_use_chain PARAMS ((HARD_REG_SET *, def_uses *,
! 					varray_type *));
! static void dump_ext_bb_info PARAMS ((int, ext_basic_blocks *));
! static void find_ext_basic_blocks PARAMS ((ext_basic_blocks *));
! static void find_one_ext_basic_block PARAMS ((int, basic_block, sbitmap *,
! 					      ext_basic_blocks *));
! static enum reg_class get_reg_class PARAMS ((rtx, rtx, int, enum reg_class));
! static rtx regno_first_use_in PARAMS ((int, rtx));
! 
  void
  regrename_optimize ()
--- 76,101 ----
  #define SOURCE 2
  
! static void build_def_use		PARAMS ((int, ext_basic_blocks *,
! 						 HARD_REG_SET *, def_uses *,
! 						 sbitmap *));
! static int replace_reg_in_block		PARAMS ((def_uses *, varray_type *,
! 						 int, rtx, unsigned int));
! static int consider_def			PARAMS ((rtx, int, def_uses *, int));
! static int consider_available		PARAMS ((rtx, int, HARD_REG_SET *,
! 						 int, def_uses *, int));
! static rtx rr_replace_reg		PARAMS ((rtx, rtx, rtx, int, rtx,
! 						 int *));
! static int consider_use			PARAMS ((rtx, int, int, int));
! static int condmove_p			PARAMS ((rtx));
! static void dump_def_use_chain		PARAMS ((HARD_REG_SET *, def_uses *,
! 						 varray_type *));
! static void dump_ext_bb_info		PARAMS ((int, ext_basic_blocks *));
! static void find_ext_basic_blocks	PARAMS ((ext_basic_blocks *));
! static void find_one_ext_basic_block	PARAMS ((int, basic_block, sbitmap *,
! 						 ext_basic_blocks *));
! static enum reg_class get_reg_class	PARAMS ((rtx, rtx, int,
! 						 enum reg_class));
! static rtx regno_first_use_in		PARAMS ((unsigned int, rtx));
! 
  void
  regrename_optimize ()
*************** regrename_optimize ()
*** 102,106 ****
    ext_basic_blocks ebb;
  
- 
    /* Registers used in a given class */
    HARD_REG_SET class_regs;
--- 106,109 ----
*************** regrename_optimize ()
*** 134,142 ****
    VARRAY_LONG_INIT (uid_rbid, UID_RUID_HIGH_BOUND + 1, "uid_rbid");
  
!   ebb.basic_block =
!     sbitmap_vector_alloc (n_basic_blocks, n_basic_blocks);
    sbitmap_vector_zero (ebb.basic_block, n_basic_blocks);
!   ebb.exit =
!     sbitmap_vector_alloc (n_basic_blocks, n_basic_blocks);
    sbitmap_vector_zero (ebb.exit, n_basic_blocks);
  
--- 137,145 ----
    VARRAY_LONG_INIT (uid_rbid, UID_RUID_HIGH_BOUND + 1, "uid_rbid");
  
!   ebb.basic_block
!     = sbitmap_vector_alloc (n_basic_blocks, n_basic_blocks);
    sbitmap_vector_zero (ebb.basic_block, n_basic_blocks);
!   ebb.exit
!     = sbitmap_vector_alloc (n_basic_blocks, n_basic_blocks);
    sbitmap_vector_zero (ebb.exit, n_basic_blocks);
  
*************** regrename_optimize ()
*** 150,174 ****
        {
  	for (eb = du.high_bound = 0; eb < n_basic_blocks; eb++)
! 	  {
! 	    if (TEST_BIT (ebb.basic_block[b], eb))
! 	      {
! 		basic_block bb = BASIC_BLOCK (eb);
! 		/* Calculate high bound for uid_ruid and allocate if necessary */
! 		for (insn = bb->head;
! 		     insn != NEXT_INSN (bb->end);
! 		     du.high_bound++, insn = NEXT_INSN (insn))
! 		  {
! 		    int uid_ruid_high_bound = VARRAY_SIZE (uid_ruid);
! 		    if (du.high_bound + 4 >= uid_ruid_high_bound)
! 		      {
! 			VARRAY_GROW (uid_ruid, uid_ruid_high_bound * 2);
! 			VARRAY_GROW (uid_rbid, uid_ruid_high_bound * 2);
! 		      }
! 		    VARRAY_RTX (uid_ruid, du.high_bound) = insn;
! 		    VARRAY_LONG (uid_rbid, du.high_bound) = eb;
! 		  }
! 	      }
! 	  }
  
  	CLEAR_HARD_REG_SET (null_bitmap);
  	CLEAR_HARD_REG_SET (class_regs);
--- 153,178 ----
        {
  	for (eb = du.high_bound = 0; eb < n_basic_blocks; eb++)
! 	  if (TEST_BIT (ebb.basic_block[b], eb))
! 	    {
! 	      basic_block bb = BASIC_BLOCK (eb);
! 
! 	      /* Calculate high bound for uid_ruid and allocate if necessary */
! 	      for (insn = bb->head;
! 		   insn != NEXT_INSN (bb->end);
! 		   du.high_bound++, insn = NEXT_INSN (insn))
! 		{
! 		  int uid_ruid_high_bound = VARRAY_SIZE (uid_ruid);
  
+ 		  if (du.high_bound + 4 >= uid_ruid_high_bound)
+ 		    {
+ 		      VARRAY_GROW (uid_ruid, uid_ruid_high_bound * 2);
+ 		      VARRAY_GROW (uid_rbid, uid_ruid_high_bound * 2);
+ 		    }
+ 
+ 		  VARRAY_RTX (uid_ruid, du.high_bound) = insn;
+ 		  VARRAY_LONG (uid_rbid, du.high_bound) = eb;
+ 		}
+ 	    }
+ 
  	CLEAR_HARD_REG_SET (null_bitmap);
  	CLEAR_HARD_REG_SET (class_regs);
*************** regrename_optimize ()
*** 178,186 ****
  	CLEAR_HARD_REG_SET (renamed_regs);
  
! 	du.defs =
! 	  sbitmap_vector_alloc (FIRST_PSEUDO_REGISTER, du.high_bound + 1);
  	sbitmap_vector_zero (du.defs, FIRST_PSEUDO_REGISTER);
! 	du.uses =
! 	  sbitmap_vector_alloc (FIRST_PSEUDO_REGISTER, du.high_bound + 1);
  	sbitmap_vector_zero (du.uses, FIRST_PSEUDO_REGISTER);
  	du.require_call_save_reg = sbitmap_alloc (du.high_bound + 1);
--- 182,190 ----
  	CLEAR_HARD_REG_SET (renamed_regs);
  
! 	du.defs
! 	  = sbitmap_vector_alloc (FIRST_PSEUDO_REGISTER, du.high_bound + 1);
  	sbitmap_vector_zero (du.defs, FIRST_PSEUDO_REGISTER);
! 	du.uses
! 	  = sbitmap_vector_alloc (FIRST_PSEUDO_REGISTER, du.high_bound + 1);
  	sbitmap_vector_zero (du.uses, FIRST_PSEUDO_REGISTER);
  	du.require_call_save_reg = sbitmap_alloc (du.high_bound + 1);
*************** regrename_optimize ()
*** 189,202 ****
  	sbitmap_zero (defs_live_exit);
  
! 	du.def_class = xrealloc
! 	  (du.def_class,
! 	   sizeof (enum reg_class) * FIRST_PSEUDO_REGISTER * du.high_bound);
! 
! 	du.use_class = xrealloc
! 	  (du.use_class,
! 	   sizeof (enum reg_class) * FIRST_PSEUDO_REGISTER * du.high_bound);
  
! 	build_def_use (b, &ebb, &regs_used, &du,
! 		       &defs_live_exit);
  
  	if (rtl_dump_file)
--- 193,207 ----
  	sbitmap_zero (defs_live_exit);
  
! 	du.def_class
! 	  = xrealloc (du.def_class,
! 		      (sizeof (enum reg_class) * FIRST_PSEUDO_REGISTER
! 		       * du.high_bound));
! 
! 	du.use_class
! 	  = xrealloc (du.use_class,
! 		      (sizeof (enum reg_class) * FIRST_PSEUDO_REGISTER
! 		       * du.high_bound));
  
! 	build_def_use (b, &ebb, &regs_used, &du, &defs_live_exit);
  
  	if (rtl_dump_file)
*************** regrename_optimize ()
*** 212,226 ****
  
  	COPY_HARD_REG_SET (tmp_bitmap, regs_used);
! 	REG_SET_TO_HARD_REG_SET (global_live_at_start, BASIC_BLOCK (b)->global_live_at_start);
  	IOR_HARD_REG_SET (tmp_bitmap, global_live_at_start);
  	for (eb = 0; eb < n_basic_blocks; eb++)
! 	  {
! 	    if (TEST_BIT (ebb.basic_block[b], eb))
! 	      {
! 		basic_block bb = BASIC_BLOCK (eb);
! 		REG_SET_TO_HARD_REG_SET (global_live_at_end, bb->global_live_at_end);
! 		IOR_HARD_REG_SET (tmp_bitmap, global_live_at_end);
! 	      }
! 	  }
  
  	def_idx = xcalloc (du.high_bound, sizeof (int));
--- 217,232 ----
  
  	COPY_HARD_REG_SET (tmp_bitmap, regs_used);
! 	REG_SET_TO_HARD_REG_SET (global_live_at_start,
! 				 BASIC_BLOCK (b)->global_live_at_start);
  	IOR_HARD_REG_SET (tmp_bitmap, global_live_at_start);
  	for (eb = 0; eb < n_basic_blocks; eb++)
! 	  if (TEST_BIT (ebb.basic_block[b], eb))
! 	    {
! 	      basic_block bb = BASIC_BLOCK (eb);
! 
! 	      REG_SET_TO_HARD_REG_SET (global_live_at_end,
! 				       bb->global_live_at_end);
! 	      IOR_HARD_REG_SET (tmp_bitmap, global_live_at_end);
! 	    }
  
  	def_idx = xcalloc (du.high_bound, sizeof (int));
*************** regrename_optimize ()
*** 240,293 ****
  	       definitions of this register in this block. and def_idx
  	       is the ordinal position of this insn in the block. */
! 	    for (i = 0, def_idx[def_cnt] = 0;
! 		 i < du.high_bound;
! 		 i++)
! 	      {
! 		if (TEST_BIT (du.defs[r], i)
! 		    && consider_def (VARRAY_RTX (uid_ruid, i), r,
! 				     &du, i))
! 		  {
! 		    int first_use = 1;
! 		    def_idx[def_cnt] = i;
  
! 		    /* Only consider definitions that have a use. */
! 		    for (use_idx = i + 1; use_idx < du.high_bound;
! 			 use_idx++)
! 		      {
! 			if (TEST_BIT (du.uses[r], use_idx))
! 			  {
! 			    if (consider_use (VARRAY_RTX (uid_ruid, use_idx), r,
! 					      VARRAY_LONG (uid_rbid, i),
! 					   VARRAY_LONG (uid_rbid, use_idx)))
! 			      {
! 				if (first_use)
! 				  {
! 				    first_use = 0;
! 				    def_cnt++;
! 				  }
! 			      }
! 			    else
! 			      {
! 				/* Don't consider def if we don't want this use */
! 				if (!first_use)
! 				  def_cnt--;
! 				break;
! 			      }
! 			  }
! 			if (TEST_BIT (du.defs[r], use_idx))
! 			  break;
! 		      }
! 		    /* Scan until the next def to avoid renaming
! 		       parameter registers. */
! 		    /* ??? consider using CALL_INSN_FUNCTION_USAGE */
! 		    for (call_idx = i; call_idx <= use_idx; call_idx++)
! 		      if (VARRAY_RTX (uid_ruid, call_idx)
! 			  && GET_CODE (VARRAY_RTX (uid_ruid, call_idx))
! 			  == CALL_INSN)
  			{
! 			  SET_BIT (du.require_call_save_reg, i);
  			}
! 		  }
! 	      }
  	    if (def_cnt < 2)
  	      continue;
--- 246,296 ----
  	       definitions of this register in this block. and def_idx
  	       is the ordinal position of this insn in the block. */
! 	    for (i = 0, def_idx[def_cnt] = 0; i < du.high_bound; i++)
! 	      if (TEST_BIT (du.defs[r], i)
! 		  && consider_def (VARRAY_RTX (uid_ruid, i), r, &du, i))
! 		{
! 		  int first_use = 1;
! 		  def_idx[def_cnt] = i;
  
! 		  /* Only consider definitions that have a use. */
! 		  for (use_idx = i + 1; use_idx < du.high_bound; use_idx++)
! 		    {
! 		      if (TEST_BIT (du.uses[r], use_idx))
  			{
! 			  if (consider_use (VARRAY_RTX (uid_ruid, use_idx), r,
! 					    VARRAY_LONG (uid_rbid, i),
! 					    VARRAY_LONG (uid_rbid, use_idx)))
! 			    {
! 			      if (first_use)
! 				{
! 				  first_use = 0;
! 				  def_cnt++;
! 				}
! 			    }
! 			  else
! 			    {
! 			      /* Don't consider def if we don't want this
! 				 use.  */
! 			      if (!first_use)
! 				def_cnt--;
! 
! 			      break;
! 			    }
  			}
! 
! 		      if (TEST_BIT (du.defs[r], use_idx))
! 			break;
! 		    }
! 
! 		  /* Scan until the next def to avoid renaming
! 		     parameter registers. */
! 		  /* ??? consider using CALL_INSN_FUNCTION_USAGE */
! 		  for (call_idx = i; call_idx <= use_idx; call_idx++)
! 		    if (VARRAY_RTX (uid_ruid, call_idx)
! 			&& (GET_CODE (VARRAY_RTX (uid_ruid, call_idx))
! 			    == CALL_INSN))
! 		      SET_BIT (du.require_call_save_reg, i);
! 		}
! 
  	    if (def_cnt < 2)
  	      continue;
*************** regrename_optimize ()
*** 304,309 ****
  					       def_idx[def]))) == 'i'))
  		  {
! 		    rtx reg_use = regno_first_use_in
! 		    (r, PATTERN (VARRAY_RTX (uid_ruid, def_idx[def])));
  
  		    if (!reg_use)
--- 307,313 ----
  					       def_idx[def]))) == 'i'))
  		  {
! 		    rtx reg_use
! 		      = regno_first_use_in
! 			(r, PATTERN (VARRAY_RTX (uid_ruid, def_idx[def])));
  
  		    if (!reg_use)
*************** regrename_optimize ()
*** 315,319 ****
  #endif
  		    rc = (int) DU_REG_CLASS (du.def_class,
! 				      r, du.high_bound, def_idx[def]);
  		    COPY_HARD_REG_SET (avail_regs,
  				   reg_class_contents[(enum reg_class) rc]);
--- 319,323 ----
  #endif
  		    rc = (int) DU_REG_CLASS (du.def_class,
! 					     r, du.high_bound, def_idx[def]);
  		    COPY_HARD_REG_SET (avail_regs,
  				   reg_class_contents[(enum reg_class) rc]);
*************** regrename_optimize ()
*** 324,330 ****
--- 328,336 ----
  		    GO_IF_HARD_REG_EQUAL (avail_regs, null_bitmap,
  					  no_available_regs);
+ 
  		    for (ar_idx = 0; ar_idx < FIRST_PSEUDO_REGISTER
  			 && TEST_HARD_REG_BIT (avail_regs, ar_idx); ar_idx++)
  		      ;
+ 
  		    if (ar_idx == FIRST_PSEUDO_REGISTER)
  		      goto no_available_regs;
*************** regrename_optimize ()
*** 332,338 ****
  		    /* Only try register renaming if there is an available
  		       register in this class. */
! 		    for (ar_idx = 0;
! 			 ar_idx < FIRST_PSEUDO_REGISTER;
! 			 ar_idx++)
  		      {
  #ifdef REG_ALLOC_ORDER
--- 338,342 ----
  		    /* Only try register renaming if there is an available
  		       register in this class. */
! 		    for (ar_idx = 0; ar_idx < FIRST_PSEUDO_REGISTER; ar_idx++)
  		      {
  #ifdef REG_ALLOC_ORDER
*************** regrename_optimize ()
*** 341,346 ****
  			avail_reg = ar_idx;
  #endif
! 			if (consider_available (reg_use, avail_reg, &avail_regs,
! 						rc, &du, def_idx[def]))
  			  break;
  		      }
--- 345,351 ----
  			avail_reg = ar_idx;
  #endif
! 			if (consider_available (reg_use, avail_reg,
! 						&avail_regs, rc, &du,
! 						def_idx[def]))
  			  break;
  		      }
*************** regrename_optimize ()
*** 361,366 ****
  					  def_idx[def]))
  			      fprintf (rtl_dump_file, " crosses a call");
! 			    fprintf (rtl_dump_file, ". No available registers\n");
  			  }
  			goto try_next_def;
  		      }
--- 366,374 ----
  					  def_idx[def]))
  			      fprintf (rtl_dump_file, " crosses a call");
! 
! 			    fprintf (rtl_dump_file,
! 				     ". No available registers\n");
  			  }
+ 
  			goto try_next_def;
  		      }
*************** regrename_optimize ()
*** 372,404 ****
  		       remainder of block until new register is defined
  		       again */
! 		    replace_ok = replace_reg_in_block
! 		      (&du, &uid_ruid, def_idx[def], reg_use, avail_reg);
  		    /* Replace failed, so restore previous register */
  		    if (!replace_ok)
  		      {
  			replace_reg_in_block (&du, &uid_ruid, def_idx[def],
! 					    gen_rtx_REG (GET_MODE (reg_use),
! 							 avail_reg),
  					      REGNO (reg_use));
  			if (rtl_dump_file)
! 			  fprintf (rtl_dump_file,
! 				   "Register %s in class %s Renaming as %s would not satisfy constraints\n",
! 				   reg_names[r], reg_class_names[rc],
! 				   reg_names[avail_reg]);
  		      }
  		    else if (rtl_dump_file)
! 		      fprintf (rtl_dump_file,
! 		       "Register %s in class %s Renamed as %s at insn %d\n",
! 			       reg_names[r], reg_class_names[rc],
! 			       reg_names[avail_reg],
! 			    INSN_UID (VARRAY_RTX (uid_ruid, def_idx[def])));
  		  }
  	      try_next_def:
  		continue;
  	      }
  	    sbitmap_zero (du.defs[r]);
  	  no_available_regs:
  	    continue;
  	  }
  	free (def_idx);
  	sbitmap_vector_free (du.defs);
--- 380,428 ----
  		       remainder of block until new register is defined
  		       again */
! 		    replace_ok
! 		      = replace_reg_in_block (&du, &uid_ruid, def_idx[def],
! 					      reg_use, avail_reg);
! 
  		    /* Replace failed, so restore previous register */
  		    if (!replace_ok)
  		      {
  			replace_reg_in_block (&du, &uid_ruid, def_idx[def],
! 					      gen_rtx_REG (GET_MODE (reg_use),
! 							   avail_reg),
  					      REGNO (reg_use));
+ 
  			if (rtl_dump_file)
! 			  {
! 			    fprintf (rtl_dump_file,
! 				     "Register %s in class %s Renaming as %s ",
! 				     reg_names[r], reg_class_names[rc],
! 				     reg_names[avail_reg]);
! 			    fprintf (rtl_dump_file,
! 				     "would not satisfy constraints\n");
! 			  }
  		      }
+ 
  		    else if (rtl_dump_file)
! 		      {
! 			fprintf (rtl_dump_file,
! 				 "Register %s in class %s Renamed as %s ",
! 				 reg_names[r], reg_class_names[rc],
! 				 reg_names[avail_reg]);
! 			fprintf (rtl_dump_file, "at insn %d\n",
! 				 INSN_UID (VARRAY_RTX (uid_ruid,
! 						       def_idx[def])));
! 		      }
  		  }
+ 
  	      try_next_def:
  		continue;
  	      }
+ 
  	    sbitmap_zero (du.defs[r]);
+ 
  	  no_available_regs:
  	    continue;
  	  }
+ 
  	free (def_idx);
  	sbitmap_vector_free (du.defs);
*************** build_def_use (b, ebb, regs_used, du, de
*** 430,434 ****
  {
    rtx insn;
!   int eb, inum, r;
  
    inum = 0;
--- 454,459 ----
  {
    rtx insn;
!   int eb, inum;
!   unsigned int r;
  
    inum = 0;
*************** build_def_use (b, ebb, regs_used, du, de
*** 453,459 ****
  	  mark_set_resources (insn, &insn_sets, 0, MARK_DEST);
  
! 	  for (r = 0;
! 	       r < FIRST_PSEUDO_REGISTER;
! 	       r++)
  	    {
  	      if (!TEST_HARD_REG_BIT (insn_sets.regs, r))
--- 478,482 ----
  	  mark_set_resources (insn, &insn_sets, 0, MARK_DEST);
  
! 	  for (r = 0; r < FIRST_PSEUDO_REGISTER; r++)
  	    {
  	      if (!TEST_HARD_REG_BIT (insn_sets.regs, r))
*************** build_def_use (b, ebb, regs_used, du, de
*** 463,471 ****
  	      if (REGNO_REG_SET_P (bb->global_live_at_end, r))
  		SET_BIT (*defs_live_exit, inum);
  	      if (!insn_sets.memory)
  		SET_BIT (du->defs[r], inum);
! 	      DU_REG_CLASS (du->def_class, r, du->high_bound, inum) = get_reg_class
! 		(insn, regno_first_use_in (r, PATTERN (insn)),
! 		 DESTINATION, NO_REGS);
  	    }
  
--- 486,496 ----
  	      if (REGNO_REG_SET_P (bb->global_live_at_end, r))
  		SET_BIT (*defs_live_exit, inum);
+ 
  	      if (!insn_sets.memory)
  		SET_BIT (du->defs[r], inum);
! 
! 	      DU_REG_CLASS (du->def_class, r, du->high_bound, inum)
! 		= get_reg_class (insn, regno_first_use_in (r, PATTERN (insn)),
! 				 DESTINATION, NO_REGS);
  	    }
  
*************** build_def_use (b, ebb, regs_used, du, de
*** 473,479 ****
  	  mark_referenced_resources (insn, &insn_res, 0);
  
! 	  for (r = 0;
! 	       r < FIRST_PSEUDO_REGISTER;
! 	       r++)
  	    {
  	      if (!TEST_HARD_REG_BIT (insn_res.regs, r))
--- 498,502 ----
  	  mark_referenced_resources (insn, &insn_res, 0);
  
! 	  for (r = 0; r < FIRST_PSEUDO_REGISTER; r++)
  	    {
  	      if (!TEST_HARD_REG_BIT (insn_res.regs, r))
*************** build_def_use (b, ebb, regs_used, du, de
*** 482,491 ****
  	      SET_HARD_REG_BIT (*regs_used, r);
  	      SET_BIT (du->uses[r], inum);
! 	      DU_REG_CLASS (du->use_class, r, du->high_bound, inum) = get_reg_class
! 		(insn, regno_use_in (r, PATTERN (insn)),
! 		 SOURCE, NO_REGS);
  	    }
  	}
      }
    free_resource_info ();
  }
--- 505,515 ----
  	      SET_HARD_REG_BIT (*regs_used, r);
  	      SET_BIT (du->uses[r], inum);
! 	      DU_REG_CLASS (du->use_class, r, du->high_bound, inum)
! 		= get_reg_class (insn, regno_use_in (r, PATTERN (insn)),
! 				 SOURCE, NO_REGS);
  	    }
  	}
      }
+ 
    free_resource_info ();
  }
*************** replace_reg_in_block (du, uid_ruid, def,
*** 500,514 ****
       int def;
       rtx reg_def;
!      int avail_reg;
  {
    int du_idx, status = 1;
!   int r = REGNO (reg_def);
    rtx death_note;
    rtx new_reg = gen_rtx_REG (GET_MODE (reg_def), avail_reg);
  
  
-   rr_replace_reg (PATTERN (VARRAY_RTX (*uid_ruid, def)), reg_def,
- 		  new_reg, DESTINATION, VARRAY_RTX (*uid_ruid, def),
- 		  &status);
    if (!status)
      return status;
--- 524,537 ----
       int def;
       rtx reg_def;
!      unsigned int avail_reg;
  {
    int du_idx, status = 1;
!   unsigned int r = REGNO (reg_def);
    rtx death_note;
    rtx new_reg = gen_rtx_REG (GET_MODE (reg_def), avail_reg);
  
+   rr_replace_reg (PATTERN (VARRAY_RTX (*uid_ruid, def)), reg_def, new_reg,
+ 		  DESTINATION, VARRAY_RTX (*uid_ruid, def), &status);
  
    if (!status)
      return status;
*************** replace_reg_in_block (du, uid_ruid, def,
*** 516,520 ****
    death_note = find_reg_note (VARRAY_RTX (*uid_ruid, def), REG_DEAD, reg_def);
    if (!death_note)
!     death_note = find_reg_note (VARRAY_RTX (*uid_ruid, def), REG_UNUSED, reg_def);
    if (death_note)
      rr_replace_reg (death_note, reg_def, new_reg, 0,
--- 539,545 ----
    death_note = find_reg_note (VARRAY_RTX (*uid_ruid, def), REG_DEAD, reg_def);
    if (!death_note)
!     death_note = find_reg_note (VARRAY_RTX (*uid_ruid, def), REG_UNUSED,
! 				reg_def);
! 
    if (death_note)
      rr_replace_reg (death_note, reg_def, new_reg, 0,
*************** replace_reg_in_block (du, uid_ruid, def,
*** 525,532 ****
        rtx reg_use;
        rtx new_reg;
        if (GET_RTX_CLASS (GET_CODE (VARRAY_RTX (*uid_ruid, du_idx))) != 'i')
  	continue;
-       reg_use = regno_use_in (r, PATTERN (VARRAY_RTX (*uid_ruid, du_idx)));
  
        if (reg_use && TEST_BIT (du->uses[r], du_idx))
  	{
--- 550,558 ----
        rtx reg_use;
        rtx new_reg;
+ 
        if (GET_RTX_CLASS (GET_CODE (VARRAY_RTX (*uid_ruid, du_idx))) != 'i')
  	continue;
  
+       reg_use = regno_use_in (r, PATTERN (VARRAY_RTX (*uid_ruid, du_idx)));
        if (reg_use && TEST_BIT (du->uses[r], du_idx))
  	{
*************** replace_reg_in_block (du, uid_ruid, def,
*** 543,546 ****
--- 569,573 ----
  	    rr_replace_reg (death_note, reg_use, new_reg, 0,
  			    VARRAY_RTX (*uid_ruid, def), &status);
+ 
  	  SET_BIT (du->uses[avail_reg], du_idx);
  	  RESET_BIT (du->uses[r], du_idx);
*************** replace_reg_in_block (du, uid_ruid, def,
*** 548,554 ****
--- 575,583 ----
  	    return status;
  	}
+ 
        if (TEST_BIT (du->defs[r], du_idx))
  	break;
      }
+ 
    return status;
  }
*************** rr_replace_reg (x, reg_use, reg_sub, rep
*** 585,588 ****
--- 614,618 ----
  	    return gen_rtx_REG (GET_MODE (x), REGNO (reg_use));
  	}
+ 
        return x;
  
*************** rr_replace_reg (x, reg_use, reg_sub, rep
*** 593,605 ****
        else if (replace_type == SOURCE)
  	{
! 	  int dest_subregno;
  
! 	  if (GET_CODE (SET_DEST (x)) == SUBREG)
  	    dest_subregno = REGNO (XEXP (SET_DEST (x), 0));
- 	  else
- 	    dest_subregno = 0;
  
  	  SET_SRC (x) = rr_replace_reg (SET_SRC (x), reg_use, reg_sub,
  					replace_type, insn, status);
  	  /* If the replacement register is not part of the source
  	     then it may be part of a source mem operand. */
--- 623,635 ----
        else if (replace_type == SOURCE)
  	{
! 	  unsigned int dest_subregno;
! 	  int had_subreg = GET_CODE (SET_DEST (x)) == SUBREG;
  
! 	  if (had_subreg)
  	    dest_subregno = REGNO (XEXP (SET_DEST (x), 0));
  
  	  SET_SRC (x) = rr_replace_reg (SET_SRC (x), reg_use, reg_sub,
  					replace_type, insn, status);
+ 
  	  /* If the replacement register is not part of the source
  	     then it may be part of a source mem operand. */
*************** rr_replace_reg (x, reg_use, reg_sub, rep
*** 610,616 ****
  	    SET_DEST (x) = rr_replace_reg (SET_DEST (x), reg_use, reg_sub,
  					   replace_type, insn, status);
! 	  /* shared rtl sanity check */
! 	  if (dest_subregno
! 	      && dest_subregno != REGNO (XEXP (SET_DEST (x), 0)))
  	    {
  	      *status = 0;
--- 640,645 ----
  	    SET_DEST (x) = rr_replace_reg (SET_DEST (x), reg_use, reg_sub,
  					   replace_type, insn, status);
! 	  /* Shared rtl sanity check. */
! 	  if (had_subreg && dest_subregno != REGNO (XEXP (SET_DEST (x), 0)))
  	    {
  	      *status = 0;
*************** rr_replace_reg (x, reg_use, reg_sub, rep
*** 623,626 ****
--- 652,656 ----
  	{
  	  int id;
+ 
  	  extract_insn (insn);
  
*************** rr_replace_reg (x, reg_use, reg_sub, rep
*** 629,636 ****
  	    {
  	      int opno = recog_data.dup_num[id];
  	      if (GET_CODE (*recog_data.dup_loc[id]) == REG
  		  && GET_CODE (*recog_data.operand_loc[opno]) == REG
! 		  && (REGNO (*recog_data.dup_loc[id]) !=
! 		      REGNO (*recog_data.operand_loc[opno])))
  		*status = 0;
  	    }
--- 659,667 ----
  	    {
  	      int opno = recog_data.dup_num[id];
+ 
  	      if (GET_CODE (*recog_data.dup_loc[id]) == REG
  		  && GET_CODE (*recog_data.operand_loc[opno]) == REG
! 		  && (REGNO (*recog_data.dup_loc[id])
! 		      != REGNO (*recog_data.operand_loc[opno])))
  		*status = 0;
  	    }
*************** rr_replace_reg (x, reg_use, reg_sub, rep
*** 660,663 ****
--- 691,695 ----
  	{
  	  register int xv;
+ 
  	  for (xv = 0; xv < XVECLEN (x, i); xv++)
  	    {
*************** rr_replace_reg (x, reg_use, reg_sub, rep
*** 680,683 ****
--- 712,716 ----
  	}
      }
+ 
    return x;
  }
*************** consider_def (insn, regno, du, inum)
*** 690,695 ****
       rtx insn;
       int regno;
!      def_uses *du;
!      int inum;
  {
    /* Don't rename windowed registers across a call */
--- 723,728 ----
       rtx insn;
       int regno;
!      def_uses *du ATTRIBUTE_UNUSED;
!      int inum ATTRIBUTE_UNUSED;
  {
    /* Don't rename windowed registers across a call */
*************** consider_use (insn, regno, def_block, us
*** 734,743 ****
    if (def_block != use_block)
      for (e = ub->pred; e; e = e->pred_next)
!       {
! 	if (e->src->index != def_block
! 	    && e->src->index != -1
! 	    && REGNO_REG_SET_P (BASIC_BLOCK (e->src->index)->global_live_at_end, regno))
! 	  return 0;
!       }
  
    /* Don't consider conditional moves.  Predicate architectures may
--- 767,775 ----
    if (def_block != use_block)
      for (e = ub->pred; e; e = e->pred_next)
!       if (e->src->index != def_block
! 	  && e->src->index != -1
! 	  && REGNO_REG_SET_P (BASIC_BLOCK (e->src->index)->global_live_at_end,
! 			      regno))
! 	return 0;
  
    /* Don't consider conditional moves.  Predicate architectures may
*************** consider_use (insn, regno, def_block, us
*** 756,764 ****
  
        /* Don't consider register if the only use is in a USE */
!       if (reg_mentioned_p (gen_rtx_USE (VOIDmode, reg_use),
! 			   PATTERN (insn)))
! 	return 0;
!       else
! 	return 1;
      }
    else
--- 788,793 ----
  
        /* Don't consider register if the only use is in a USE */
!       return ! reg_mentioned_p (gen_rtx_USE (VOIDmode, reg_use),
! 				PATTERN (insn));
      }
    else
*************** consider_available (reg_use, avail_reg, 
*** 811,816 ****
        )
        || (TEST_BIT (du->require_call_save_reg, inum)
! 	  && (call_used_regs[avail_reg] || call_used_regs[REGNO (reg_use)]
! 	  )))
      return 0;
  
--- 840,844 ----
        )
        || (TEST_BIT (du->require_call_save_reg, inum)
! 	  && (call_used_regs[avail_reg] || call_used_regs[REGNO (reg_use)])))
      return 0;
  
*************** consider_available (reg_use, avail_reg, 
*** 818,825 ****
       call saved registers can not be added to regs_ever_live after reload,
       as it would invalidate most elimination offsets */
!   if (regs_ever_live[avail_reg] || call_used_regs[avail_reg])
!     return 1;
! 
!   return 0;
  }
  
--- 846,850 ----
       call saved registers can not be added to regs_ever_live after reload,
       as it would invalidate most elimination offsets */
!   return regs_ever_live[avail_reg] || call_used_regs[avail_reg];
  }
  
*************** condmove_p (insn)
*** 830,838 ****
       rtx insn;
  {
!   if (GET_CODE (insn) == INSN
!       && GET_CODE (PATTERN (insn)) == SET
!       && GET_CODE (SET_SRC (PATTERN (insn))) == IF_THEN_ELSE)
!     return 1;
!   return 0;
  }
  
--- 855,861 ----
       rtx insn;
  {
!   return (GET_CODE (insn) == INSN
! 	  && GET_CODE (PATTERN (insn)) == SET
! 	  && GET_CODE (SET_SRC (PATTERN (insn))) == IF_THEN_ELSE);
  }
  
*************** condmove_p (insn)
*** 842,846 ****
  static rtx
  regno_first_use_in (regno, x)
!      int regno;
       rtx x;
  {
--- 865,869 ----
  static rtx
  regno_first_use_in (regno, x)
!      unsigned int regno;
       rtx x;
  {
*************** regno_first_use_in (regno, x)
*** 860,863 ****
--- 883,887 ----
  	    return tem;
  	}
+ 
        else if (fmt[i] == 'E')
  	for (j = XVECLEN (x, i) - 1; j >= 0; j--)
*************** regno_first_use_in (regno, x)
*** 866,870 ****
      }
  
!   return NULL_RTX;
  }
  
--- 890,894 ----
      }
  
!   return 0;
  }
  
*************** dump_def_use_chain (global_live_at_end, 
*** 878,889 ****
       varray_type *uid_ruid;
  {
!   int r, inum;
! 
    for (r = 0; r < FIRST_PSEUDO_REGISTER; r++)
      {
        int set = 0;
!       for (inum = 0;
! 	   inum <= du->high_bound;
! 	   inum++)
  	{
  	  rtx insn = VARRAY_RTX (*uid_ruid, inum);
--- 902,913 ----
       varray_type *uid_ruid;
  {
!   unsigned int r;
!   int inum;
!   
    for (r = 0; r < FIRST_PSEUDO_REGISTER; r++)
      {
        int set = 0;
! 
!       for (inum = 0; inum <= du->high_bound; inum++)
  	{
  	  rtx insn = VARRAY_RTX (*uid_ruid, inum);
*************** dump_def_use_chain (global_live_at_end, 
*** 893,896 ****
--- 917,921 ----
  				(insn)) != 'i')
  	    continue;
+ 
  	  reg_use = regno_first_use_in (r, PATTERN (insn));
  	  if (!reg_use)
*************** dump_def_use_chain (global_live_at_end, 
*** 909,912 ****
--- 934,938 ----
  	      set = 1;
  	    }
+ 
  	  if (TEST_BIT (du->defs[r], inum))
  	    fprintf (rtl_dump_file, "=%d ", INSN_UID (insn));
*************** dump_def_use_chain (global_live_at_end, 
*** 914,917 ****
--- 940,944 ----
  	    fprintf (rtl_dump_file, "%d ", INSN_UID (insn));
  	}
+ 
        if (set)
  	fprintf (rtl_dump_file, "\n");
*************** dump_ext_bb_info (eb, ebb)
*** 927,954 ****
  {
    int b;
  
!   {
!     int have_ebb = 0;
!     for (b = 0; b < n_basic_blocks; b++)
!       {
! 	if (TEST_BIT (ebb->basic_block[eb], b))
! 	  {
! 	    if (!have_ebb)
! 	      {
  #ifndef RENAME_EXTENDED_BLOCKS
! 		fprintf (rtl_dump_file, "\nBasic block %d: ", b);
  #else
! 		fprintf (rtl_dump_file, "\nExtended basic block %d: ", b);
  #endif
! 		have_ebb = 1;
! 	      }
! 	    fprintf (rtl_dump_file, "%d ", b);
! 	  }
! 	if (TEST_BIT (ebb->exit[eb], b))
! 	  fprintf (rtl_dump_file, "(exit) ");
!       }
!     if (have_ebb)
!       fprintf (rtl_dump_file, "\n");
!   }
  }
  
--- 954,981 ----
  {
    int b;
+   int have_ebb = 0;
  
!   for (b = 0; b < n_basic_blocks; b++)
!     {
!       if (TEST_BIT (ebb->basic_block[eb], b))
! 	{
! 	  if (!have_ebb)
! 	    {
  #ifndef RENAME_EXTENDED_BLOCKS
! 	      fprintf (rtl_dump_file, "\nBasic block %d: ", b);
  #else
! 	      fprintf (rtl_dump_file, "\nExtended basic block %d: ", b);
  #endif
! 	      have_ebb = 1;
! 	    }
! 	  fprintf (rtl_dump_file, "%d ", b);
! 	}
! 
!       if (TEST_BIT (ebb->exit[eb], b))
! 	fprintf (rtl_dump_file, "(exit) ");
!     }
! 
!   if (have_ebb)
!     fprintf (rtl_dump_file, "\n");
  }
  
*************** find_ext_basic_blocks (ebb)
*** 975,978 ****
--- 1002,1006 ----
    for (b = 0; b < n_basic_blocks; b++)
      {
+ 
        basic_block bb = BASIC_BLOCK (b);
        if (!TEST_BIT (bb_processed, b))
*************** find_one_ext_basic_block (entry, bb, bb_
*** 1008,1018 ****
  	if (!e->dest->pred->pred_next
  	    && (!TEST_BIT (*bb_processed, e->dest->index)))
! 	  {
! 	    find_one_ext_basic_block (entry, e->dest, bb_processed, ebb);
! 	  }
  	else
! 	  {
! 	    SET_BIT (ebb->exit[entry], bb->index);
! 	  }
        }
  }
--- 1036,1042 ----
  	if (!e->dest->pred->pred_next
  	    && (!TEST_BIT (*bb_processed, e->dest->index)))
! 	  find_one_ext_basic_block (entry, e->dest, bb_processed, ebb);
  	else
! 	  SET_BIT (ebb->exit[entry], bb->index);
        }
  }
*************** get_reg_class (insn, reg_use, type, defa
*** 1037,1051 ****
  
    if (type == DESTINATION)
!     for (id = 0; id < recog_data.n_operands; id++)
!       {
  	if (rtx_equal_p (recog_data.operand[id], reg_use))
  	  break;
!       }
    else if (type == SOURCE)
      for (id = recog_data.n_operands - 1; id >= 0; id--)
!       {
! 	if (rtx_equal_p (recog_data.operand[id], reg_use))
! 	  break;
!       }
  
    if (id == -1 || id == recog_data.n_operands)
--- 1061,1074 ----
  
    if (type == DESTINATION)
!     {
!       for (id = 0; id < recog_data.n_operands; id++)
  	if (rtx_equal_p (recog_data.operand[id], reg_use))
  	  break;
!     }
! 
    else if (type == SOURCE)
      for (id = recog_data.n_operands - 1; id >= 0; id--)
!       if (rtx_equal_p (recog_data.operand[id], reg_use))
! 	break;
  
    if (id == -1 || id == recog_data.n_operands)

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]