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]
Other format: [Raw text]

RFA: Alternate patch to avoid multiple zero vectos (Was: Re: AltiVec support toasted in HEAD)


Thanks for your patch reviews; I've checked in the ones you approved.

Richard Henderson wrote:
> 
> On Sat, Jul 06, 2002 at 09:08:48PM +0100, Joern Rennecke wrote:
> > Who is responsible for using const_tiny_rtx, gen_rtx_CONST_VECTOR,
> > or the caller of gen_rtx_CONST_VECTOR ?
> 
> As with GEN_INT, aka gen_rtx_CONST_INT, gen_rtx_CONST_VECTOR
> should be doing the canonicalization.
> 
> r~

Implemented in the attached patch.
-- 
--------------------------
SuperH
2430 Aztec West / Almondsbury / BRISTOL / BS32 4AQ
T:+44 1454 462330
Wed Jul 10 21:32:20 2002  J"orn Rennecke <joern.rennecke@superh.com>

	* rtl.h (gen_rtx_CONST_VECTOR): Declare.
	* gengenrtl.c (special_rtx): Check for CONST_VECTOR.
	(gen_rtx_CONST_VECTOR): New function.
	(gen_const_vector_0): Use it.

Index: rtl.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/rtl.h,v
retrieving revision 1.363
diff -p -r1.363 rtl.h
*** rtl.h	21 Jun 2002 02:09:11 -0000	1.363
--- rtl.h	10 Jul 2002 20:32:16 -0000
*************** extern GTY(()) rtx return_address_pointe
*** 1712,1717 ****
--- 1712,1718 ----
     should also modify gen_rtx to use the special function.  */
  
  extern rtx gen_rtx_CONST_INT PARAMS ((enum machine_mode, HOST_WIDE_INT));
+ extern rtx gen_rtx_CONST_VECTOR PARAMS ((enum machine_mode, rtvec));
  extern rtx gen_raw_REG PARAMS ((enum machine_mode, int));
  extern rtx gen_rtx_REG PARAMS ((enum machine_mode, unsigned));
  extern rtx gen_rtx_SUBREG PARAMS ((enum machine_mode, rtx, int));
Index: gengenrtl.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/gengenrtl.c,v
retrieving revision 1.56
diff -p -r1.56 gengenrtl.c
*** gengenrtl.c	31 May 2002 11:43:18 -0000	1.56
--- gengenrtl.c	10 Jul 2002 20:32:16 -0000
*************** special_rtx (idx)
*** 149,155 ****
    return (strcmp (defs[idx].enumname, "CONST_INT") == 0
  	  || strcmp (defs[idx].enumname, "REG") == 0
  	  || strcmp (defs[idx].enumname, "SUBREG") == 0
! 	  || strcmp (defs[idx].enumname, "MEM") == 0);
  }
  
  /* Return nonzero if the RTL code given by index IDX is one that we should
--- 149,156 ----
    return (strcmp (defs[idx].enumname, "CONST_INT") == 0
  	  || strcmp (defs[idx].enumname, "REG") == 0
  	  || strcmp (defs[idx].enumname, "SUBREG") == 0
! 	  || strcmp (defs[idx].enumname, "MEM") == 0
! 	  || strcmp (defs[idx].enumname, "CONST_VECTOR") == 0);
  }
  
  /* Return nonzero if the RTL code given by index IDX is one that we should
Index: emit-rtl.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/emit-rtl.c,v
retrieving revision 1.283
diff -p -r1.283 emit-rtl.c
*** emit-rtl.c	3 Jul 2002 09:49:45 -0000	1.283
--- emit-rtl.c	10 Jul 2002 20:32:16 -0000
*************** gen_const_vector_0 (mode)
*** 5188,5195 ****
    for (i = 0; i < units; ++i)
      RTVEC_ELT (v, i) = CONST0_RTX (inner);
  
!   tem = gen_rtx_CONST_VECTOR (mode, v);
    return tem;
  }
  
  /* Create some permanent unique rtl objects shared between all functions.
--- 5188,5211 ----
    for (i = 0; i < units; ++i)
      RTVEC_ELT (v, i) = CONST0_RTX (inner);
  
!   tem = gen_rtx_raw_CONST_VECTOR (mode, v);
    return tem;
+ }
+ 
+ /* Generate a vector like gen_rtx_raw_CONST_VEC, but use the zero vector when
+    all elements are zero.  */
+ rtx
+ gen_rtx_CONST_VECTOR (mode, v)
+      enum machine_mode mode;
+      rtvec v;
+ {
+   rtx inner_zero = CONST0_RTX (GET_MODE_INNER (mode));
+   int i;
+ 
+   for (i = GET_MODE_NUNITS (mode) - 1; i >= 0; i--)
+     if (RTVEC_ELT (v, i) != inner_zero)
+       return gen_rtx_CONST_VECTOR (mode, v);
+   return CONST0_RTX (mode);
  }
  
  /* Create some permanent unique rtl objects shared between all functions.

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