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]

Loop reg lifetime patch



Another stepping stone patch...


2000-12-29  Michael Hayes  <mhayes@redhat.com>

	* loop.c (LOOP_REG_LIFETIME, LOOP_REG_GLOBAL_P): Define.
	(scan_loop, record_giv): Use LOOP_REG_LIFETIME and LOOP_REG_GLOBAL_P.

*** loop.c.orig	Wed Dec 27 22:12:20 2000
--- loop.c	Wed Dec 27 22:15:37 2000
*************** Boston, MA 02111-1307, USA.  */
*** 57,62 ****
--- 57,69 ----
  #define REGNO_FIRST_LUID(REGNO) uid_luid[REGNO_FIRST_UID (REGNO)]
  #define REGNO_LAST_LUID(REGNO) uid_luid[REGNO_LAST_UID (REGNO)]
  
+ #define LOOP_REG_LIFETIME(LOOP, REGNO) \
+ ((REGNO_LAST_LUID (REGNO) - REGNO_FIRST_LUID (REGNO)))
+ 
+ #define LOOP_REG_GLOBAL_P(LOOP, REGNO) \
+ ((REGNO_LAST_LUID (REGNO) > INSN_LUID ((LOOP)->end) \
+  || REGNO_FIRST_LUID (REGNO) < INSN_LUID ((LOOP)->start)))
+ 
  
  /* Vector mapping INSN_UIDs to luids.
     The luids are like uids but increase monotonically always.
*************** scan_loop (loop, flags)
*** 833,844 ****
  		 or consec_sets_invariant_p returned 2
  		 (only conditionally invariant).  */
  	      m->cond = ((tem | tem1 | tem2) > 1);
! 	      m->global = (REGNO_LAST_LUID (regno)
! 			   > INSN_LUID (loop_end)
! 			   || REGNO_FIRST_LUID (regno) < INSN_LUID (loop_start));
  	      m->match = 0;
! 	      m->lifetime = (REGNO_LAST_LUID (regno)
! 			     - REGNO_FIRST_LUID (regno));
  	      m->savings = VARRAY_INT (regs->n_times_set, regno);
  	      if (find_reg_note (p, REG_RETVAL, NULL_RTX))
  		m->savings += libcall_benefit (p);
--- 840,848 ----
  		 or consec_sets_invariant_p returned 2
  		 (only conditionally invariant).  */
  	      m->cond = ((tem | tem1 | tem2) > 1);
! 	      m->global =  LOOP_REG_GLOBAL_P (loop, regno);
  	      m->match = 0;
! 	      m->lifetime = LOOP_REG_LIFETIME (loop, regno);
  	      m->savings = VARRAY_INT (regs->n_times_set, regno);
  	      if (find_reg_note (p, REG_RETVAL, NULL_RTX))
  		m->savings += libcall_benefit (p);
*************** scan_loop (loop, flags)
*** 935,944 ****
  		     INSN_LUID and hence must make a conservative
  		     assumption.  */
  		  m->global = (INSN_UID (p) >= max_uid_for_loop
! 			       || (REGNO_LAST_LUID (regno)
! 				   > INSN_LUID (loop_end))
! 			       || (REGNO_FIRST_LUID (regno)
! 				   < INSN_LUID (p))
  			       || (labels_in_range_p
  				   (p, REGNO_FIRST_LUID (regno))));
  		  if (maybe_never && m->global)
--- 939,945 ----
  		     INSN_LUID and hence must make a conservative
  		     assumption.  */
  		  m->global = (INSN_UID (p) >= max_uid_for_loop
! 			       || LOOP_REG_GLOBAL_P (loop, regno)
  			       || (labels_in_range_p
  				   (p, REGNO_FIRST_LUID (regno))));
  		  if (maybe_never && m->global)
*************** scan_loop (loop, flags)
*** 948,955 ****
  		  m->regno = regno;
  		  m->cond = 0;
  		  m->match = 0;
! 		  m->lifetime = (REGNO_LAST_LUID (regno)
! 				 - REGNO_FIRST_LUID (regno));
  		  m->savings = 1;
  		  VARRAY_INT (regs->set_in_loop, regno) = -1;
  		  /* Add M to the end of the chain MOVABLES.  */
--- 949,955 ----
  		  m->regno = regno;
  		  m->cond = 0;
  		  m->match = 0;
! 		  m->lifetime = LOOP_REG_LIFETIME (loop, regno);
  		  m->savings = 1;
  		  VARRAY_INT (regs->set_in_loop, regno) = -1;
  		  /* Add M to the end of the chain MOVABLES.  */
*************** record_giv (loop, v, insn, src_reg, dest
*** 4921,4928 ****
      {
        v->mode = GET_MODE (SET_DEST (set));
  
!       v->lifetime = (REGNO_LAST_LUID (REGNO (dest_reg))
! 		     - REGNO_FIRST_LUID (REGNO (dest_reg)));
  
        /* If the lifetime is zero, it means that this register is
  	 really a dead store.  So mark this as a giv that can be
--- 4921,4927 ----
      {
        v->mode = GET_MODE (SET_DEST (set));
  
!       v->lifetime = LOOP_REG_LIFETIME (loop, REGNO (dest_reg));
  
        /* If the lifetime is zero, it means that this register is
  	 really a dead store.  So mark this as a giv that can be

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