public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* egcs compile time optimization
@ 1997-12-04 17:29 John Carr
  1997-12-11 16:22 ` Jeffrey A Law
  0 siblings, 1 reply; 2+ messages in thread
From: John Carr @ 1997-12-04 17:29 UTC (permalink / raw)
  To: egcs

This patch improves compilation speed by removing a level of indirection
from common rtl references and merging the common rtl into one data
structure.

Sat Sep 20 17:14:23 1997  John F. Carr  <jfc@mit.edu>

	* rtl.h (global_rtl): New variable, replacing separate variables for
	commonly used rtl.
	(const_int_rtx): Now array of rtx_def, not rtx.
	* emit-rtl.c: Update for new rtl data structures.
	* genattrtab.c: Define global_rtl.

*** rtl.h.orig	Thu Aug 28 09:08:51 1997
--- rtl.h	Sat Sep 20 17:12:33 1997
***************
*** 830,841 ****
  extern rtx replace_regs			PROTO((rtx, rtx *, int, int));
  
  /* Standard pieces of rtx, to be substituted directly into things.  */
! extern rtx pc_rtx;
! extern rtx cc0_rtx;
! extern rtx const0_rtx;
! extern rtx const1_rtx;
! extern rtx const2_rtx;
! extern rtx constm1_rtx;
  extern rtx const_true_rtx;
  
  extern rtx const_tiny_rtx[3][(int) MAX_MACHINE_MODE];
--- 830,845 ----
  extern rtx replace_regs			PROTO((rtx, rtx *, int, int));
  
  /* Standard pieces of rtx, to be substituted directly into things.  */
! #define pc_rtx		(&global_rtl.pc_val)
! #define cc0_rtx		(&global_rtl.cc0_val)
! 
! #define MAX_SAVED_CONST_INT 64
! extern struct rtx_def const_int_rtx[MAX_SAVED_CONST_INT * 2 + 1];
! 
! #define const0_rtx	(&const_int_rtx[MAX_SAVED_CONST_INT])
! #define const1_rtx	(&const_int_rtx[MAX_SAVED_CONST_INT+1])
! #define const2_rtx	(&const_int_rtx[MAX_SAVED_CONST_INT+2])
! #define constm1_rtx	(&const_int_rtx[MAX_SAVED_CONST_INT-1])
  extern rtx const_true_rtx;
  
  extern rtx const_tiny_rtx[3][(int) MAX_MACHINE_MODE];
***************
*** 850,862 ****
  #define CONST1_RTX(MODE) (const_tiny_rtx[1][(int) (MODE)])
  #define CONST2_RTX(MODE) (const_tiny_rtx[2][(int) (MODE)])
  
  /* All references to certain hard regs, except those created
     by allocating pseudo regs into them (when that's possible),
     go through these unique rtx objects.  */
! extern rtx stack_pointer_rtx;
! extern rtx frame_pointer_rtx;
! extern rtx hard_frame_pointer_rtx;
! extern rtx arg_pointer_rtx;
  extern rtx pic_offset_table_rtx;
  extern rtx struct_value_rtx;
  extern rtx struct_value_incoming_rtx;
--- 854,877 ----
  #define CONST1_RTX(MODE) (const_tiny_rtx[1][(int) (MODE)])
  #define CONST2_RTX(MODE) (const_tiny_rtx[2][(int) (MODE)])
  
+ extern struct _global_rtl
+ {
+   struct rtx_def pc_val, cc0_val;
+   struct rtx_def stack_pointer_val, frame_pointer_val;
+   struct rtx_def hard_frame_pointer_val;
+   struct rtx_def arg_pointer_val;
+   struct rtx_def virtual_incoming_args_val;
+   struct rtx_def virtual_stack_vars_val;
+   struct rtx_def virtual_stack_dynamic_val;
+   struct rtx_def virtual_outgoing_args_val;
+ } global_rtl;
+ 
  /* All references to certain hard regs, except those created
     by allocating pseudo regs into them (when that's possible),
     go through these unique rtx objects.  */
! #define stack_pointer_rtx	(&global_rtl.stack_pointer_val)
! #define frame_pointer_rtx	(&global_rtl.frame_pointer_val)
! 
  extern rtx pic_offset_table_rtx;
  extern rtx struct_value_rtx;
  extern rtx struct_value_incoming_rtx;
***************
*** 873,878 ****
--- 888,912 ----
  #define HARD_FRAME_POINTER_REGNUM FRAME_POINTER_REGNUM
  #endif
  
+ /* For register elimination to work properly these hard_frame_pointer_rtx,
+    frame_pointer_rtx, and arg_pointer_rtx must be the same if they refer to
+    the same register.  */
+ #if HARD_FRAME_POINTER_REGNUM == FRAME_POINTER_REGNUM
+ #define hard_frame_pointer_rtx	(&global_rtl.frame_pointer_val)
+ #else
+ #define hard_frame_pointer_rtx	(&global_rtl.hard_frame_pointer_val)
+ #endif
+ 
+ #if FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM
+ #define arg_pointer_rtx		(&global_rtl.frame_pointer_val)
+ #else
+ #if HARD_POINTER_REGNUM == ARG_POINTER_REGNUM
+ #define arg_pointer_rtx		(&global_rtl.hard_frame_pointer_val)
+ #else
+ #define arg_pointer_rtx		(&global_rtl.arg_pointer_val)
+ #endif
+ #endif
+ 
  /* Virtual registers are used during RTL generation to refer to locations into
     the stack frame when the actual location isn't known until RTL generation
     is complete.  The routine instantiate_virtual_regs replaces these with
***************
*** 885,891 ****
     either by the caller or by the callee when pretending it was passed by the
     caller.  */
  
! extern rtx virtual_incoming_args_rtx;
  
  #define VIRTUAL_INCOMING_ARGS_REGNUM	(FIRST_VIRTUAL_REGISTER)
  
--- 919,925 ----
     either by the caller or by the callee when pretending it was passed by the
     caller.  */
  
! #define virtual_incoming_args_rtx (&global_rtl.virtual_incoming_args_val)
  
  #define VIRTUAL_INCOMING_ARGS_REGNUM	(FIRST_VIRTUAL_REGISTER)
  
***************
*** 893,899 ****
     variable on the stack.  Otherwise, it points to the first variable on
     the stack.  */
  
! extern rtx virtual_stack_vars_rtx;
  
  #define VIRTUAL_STACK_VARS_REGNUM	((FIRST_VIRTUAL_REGISTER) + 1)
  
--- 927,933 ----
     variable on the stack.  Otherwise, it points to the first variable on
     the stack.  */
  
! #define virtual_stack_vars_rtx	(&global_rtl.virtual_stack_vars_val)
  
  #define VIRTUAL_STACK_VARS_REGNUM	((FIRST_VIRTUAL_REGISTER) + 1)
  
***************
*** 901,907 ****
     immediately after the stack pointer has been adjusted by the amount
     desired.  */
  
! extern rtx virtual_stack_dynamic_rtx;
  
  #define VIRTUAL_STACK_DYNAMIC_REGNUM	((FIRST_VIRTUAL_REGISTER) + 2)
  
--- 935,941 ----
     immediately after the stack pointer has been adjusted by the amount
     desired.  */
  
! #define virtual_stack_dynamic_rtx	(&global_rtl.virtual_stack_dynamic_val)
  
  #define VIRTUAL_STACK_DYNAMIC_REGNUM	((FIRST_VIRTUAL_REGISTER) + 2)
  
***************
*** 909,915 ****
     be written when the stack is pre-pushed (arguments pushed using push
     insns always use sp).  */
  
! extern rtx virtual_outgoing_args_rtx;
  
  #define VIRTUAL_OUTGOING_ARGS_REGNUM	((FIRST_VIRTUAL_REGISTER) + 3)
  
--- 943,949 ----
     be written when the stack is pre-pushed (arguments pushed using push
     insns always use sp).  */
  
! #define virtual_outgoing_args_rtx	(&global_rtl.virtual_outgoing_args_val)
  
  #define VIRTUAL_OUTGOING_ARGS_REGNUM	((FIRST_VIRTUAL_REGISTER) + 3)
  
***************
*** 959,966 ****
     Allocated in parallel with regno_pointer_flag.  */
  extern rtx *regno_reg_rtx;
  
! /* Vector indexed by regno; contains the alignment in bytes for a
!    register that contains a pointer, if known.  */
  extern char *regno_pointer_align;
  #define REGNO_POINTER_ALIGN(REGNO) regno_pointer_align[REGNO]
  
--- 993,1000 ----
     Allocated in parallel with regno_pointer_flag.  */
  extern rtx *regno_reg_rtx;
  
! /* Vector indexed by regno; contain the alignment in bytes and type
!    pointed to for a register that contains a pointer, if known.  */
  extern char *regno_pointer_align;
  #define REGNO_POINTER_ALIGN(REGNO) regno_pointer_align[REGNO]
  
*** emit-rtl.c.orig	Mon Sep 15 22:07:17 1997
--- emit-rtl.c	Sat Sep 20 17:13:04 1997
***************
*** 111,124 ****
     All of these except perhaps the floating-point CONST_DOUBLEs
     are unique; no other rtx-object will be equal to any of these.  */
  
! rtx pc_rtx;			/* (PC) */
! rtx cc0_rtx;			/* (CC0) */
! rtx cc1_rtx;			/* (CC1) (not actually used nowadays) */
! rtx const0_rtx;			/* (CONST_INT 0) */
! rtx const1_rtx;			/* (CONST_INT 1) */
! rtx const2_rtx;			/* (CONST_INT 2) */
! rtx constm1_rtx;		/* (CONST_INT -1) */
! rtx const_true_rtx;		/* (CONST_INT STORE_FLAG_VALUE) */
  
  /* We record floating-point CONST_DOUBLEs in each floating-point mode for
     the values of 0, 1, and 2.  For the integer entries and VOIDmode, we
--- 111,129 ----
     All of these except perhaps the floating-point CONST_DOUBLEs
     are unique; no other rtx-object will be equal to any of these.  */
  
! struct _global_rtl global_rtl =
! {
!   {PC, VOIDmode},			/* pc_rtx */
!   {CC0, VOIDmode},			/* cc0_rtx */
!   {REG},				/* stack_pointer_rtx */
!   {REG},				/* frame_pointer_rtx */
!   {REG},				/* hard_frame_pointer_rtx */
!   {REG},				/* arg_pointer_rtx */
!   {REG},				/* virtual_incoming_args_rtx */
!   {REG},				/* virtual_stack_vars_rtx */
!   {REG},				/* virtual_stack_dynamic_rtx */
!   {REG},				/* virtual_outgoing_args_rtx */
! };
  
  /* We record floating-point CONST_DOUBLEs in each floating-point mode for
     the values of 0, 1, and 2.  For the integer entries and VOIDmode, we
***************
*** 126,131 ****
--- 131,138 ----
  
  rtx const_tiny_rtx[3][(int) MAX_MACHINE_MODE];
  
+ rtx const_true_rtx;
+ 
  REAL_VALUE_TYPE dconst0;
  REAL_VALUE_TYPE dconst1;
  REAL_VALUE_TYPE dconst2;
***************
*** 149,158 ****
  
     In an inline procedure, the stack and frame pointer rtxs may not be
     used for anything else.  */
- rtx stack_pointer_rtx;		/* (REG:Pmode STACK_POINTER_REGNUM) */
- rtx frame_pointer_rtx;		/* (REG:Pmode FRAME_POINTER_REGNUM) */
- rtx hard_frame_pointer_rtx;	/* (REG:Pmode HARD_FRAME_POINTER_REGNUM) */
- rtx arg_pointer_rtx;		/* (REG:Pmode ARG_POINTER_REGNUM) */
  rtx struct_value_rtx;		/* (REG:Pmode STRUCT_VALUE_REGNUM) */
  rtx struct_value_incoming_rtx;	/* (REG:Pmode STRUCT_VALUE_INCOMING_REGNUM) */
  rtx static_chain_rtx;		/* (REG:Pmode STATIC_CHAIN_REGNUM) */
--- 156,161 ----
***************
*** 163,182 ****
     See for instance the MIPS port.  */
  rtx return_address_pointer_rtx;	/* (REG:Pmode RETURN_ADDRESS_POINTER_REGNUM) */
  
- rtx virtual_incoming_args_rtx;	/* (REG:Pmode VIRTUAL_INCOMING_ARGS_REGNUM) */
- rtx virtual_stack_vars_rtx;	/* (REG:Pmode VIRTUAL_STACK_VARS_REGNUM) */
- rtx virtual_stack_dynamic_rtx;	/* (REG:Pmode VIRTUAL_STACK_DYNAMIC_REGNUM) */
- rtx virtual_outgoing_args_rtx;	/* (REG:Pmode VIRTUAL_OUTGOING_ARGS_REGNUM) */
- 
  /* We make one copy of (const_int C) where C is in
     [- MAX_SAVED_CONST_INT, MAX_SAVED_CONST_INT]
     to save space during the compilation and simplify comparisons of
     integers.  */
  
! #define MAX_SAVED_CONST_INT 64
  
- static rtx const_int_rtx[MAX_SAVED_CONST_INT * 2 + 1];
- 
  /* The ends of the doubly-linked chain of rtl for the current function.
     Both are reset to null at the start of rtl generation for the function.
     
--- 166,178 ----
     See for instance the MIPS port.  */
  rtx return_address_pointer_rtx;	/* (REG:Pmode RETURN_ADDRESS_POINTER_REGNUM) */
  
  /* We make one copy of (const_int C) where C is in
     [- MAX_SAVED_CONST_INT, MAX_SAVED_CONST_INT]
     to save space during the compilation and simplify comparisons of
     integers.  */
  
! struct rtx_def const_int_rtx[MAX_SAVED_CONST_INT * 2 + 1];
  
  /* The ends of the doubly-linked chain of rtl for the current function.
     Both are reset to null at the start of rtl generation for the function.
     
***************
*** 310,319 ****
        HOST_WIDE_INT arg = va_arg (p, HOST_WIDE_INT);
  
        if (arg >= - MAX_SAVED_CONST_INT && arg <= MAX_SAVED_CONST_INT)
! 	return const_int_rtx[arg + MAX_SAVED_CONST_INT];
  
        if (const_true_rtx && arg == STORE_FLAG_VALUE)
  	return const_true_rtx;
  
        rt_val = rtx_alloc (code);
        INTVAL (rt_val) = arg;
--- 306,317 ----
        HOST_WIDE_INT arg = va_arg (p, HOST_WIDE_INT);
  
        if (arg >= - MAX_SAVED_CONST_INT && arg <= MAX_SAVED_CONST_INT)
! 	return &const_int_rtx[arg + MAX_SAVED_CONST_INT];
  
+ #if STORE_FLAG_VALUE != 1 && STORE_FLAG_VALUE != -1
        if (const_true_rtx && arg == STORE_FLAG_VALUE)
  	return const_true_rtx;
+ #endif
  
        rt_val = rtx_alloc (code);
        INTVAL (rt_val) = arg;
***************
*** 336,351 ****
  	 Also don't do this when we are making new REGs in reload,
  	 since we don't want to get confused with the real pointers.  */
  
!       if (frame_pointer_rtx && regno == FRAME_POINTER_REGNUM && mode == Pmode
  	  && ! reload_in_progress)
  	return frame_pointer_rtx;
  #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
!       if (hard_frame_pointer_rtx && regno == HARD_FRAME_POINTER_REGNUM
! 	  && mode == Pmode && ! reload_in_progress)
  	return hard_frame_pointer_rtx;
  #endif
  #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM && HARD_FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
!       if (arg_pointer_rtx && regno == ARG_POINTER_REGNUM && mode == Pmode
  	  && ! reload_in_progress)
  	return arg_pointer_rtx;
  #endif
--- 334,349 ----
  	 Also don't do this when we are making new REGs in reload,
  	 since we don't want to get confused with the real pointers.  */
  
!       if (regno == FRAME_POINTER_REGNUM && mode == Pmode
  	  && ! reload_in_progress)
  	return frame_pointer_rtx;
  #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
!       if (regno == HARD_FRAME_POINTER_REGNUM && mode == Pmode
! 	  && ! reload_in_progress)
  	return hard_frame_pointer_rtx;
  #endif
  #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM && HARD_FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
!       if (regno == ARG_POINTER_REGNUM && mode == Pmode
  	  && ! reload_in_progress)
  	return arg_pointer_rtx;
  #endif
***************
*** 354,360 ****
  	  && mode == Pmode && ! reload_in_progress)
  	return return_address_pointer_rtx;
  #endif
!       if (stack_pointer_rtx && regno == STACK_POINTER_REGNUM && mode == Pmode
  	  && ! reload_in_progress)
  	return stack_pointer_rtx;
        else
--- 352,358 ----
  	  && mode == Pmode && ! reload_in_progress)
  	return return_address_pointer_rtx;
  #endif
!       if (regno == STACK_POINTER_REGNUM && mode == Pmode
  	  && ! reload_in_progress)
  	return stack_pointer_rtx;
        else
***************
*** 3344,3370 ****
  
    /* Create the unique rtx's for certain rtx codes and operand values.  */
  
-   pc_rtx = gen_rtx (PC, VOIDmode);
-   cc0_rtx = gen_rtx (CC0, VOIDmode);
- 
-   /* Don't use gen_rtx here since gen_rtx in this case
-      tries to use these variables.  */
    for (i = - MAX_SAVED_CONST_INT; i <= MAX_SAVED_CONST_INT; i++)
      {
!       const_int_rtx[i + MAX_SAVED_CONST_INT] = rtx_alloc (CONST_INT);
!       PUT_MODE (const_int_rtx[i + MAX_SAVED_CONST_INT], VOIDmode);
!       INTVAL (const_int_rtx[i + MAX_SAVED_CONST_INT]) = i;
      }
  
!   /* These four calls obtain some of the rtx expressions made above.  */
!   const0_rtx = GEN_INT (0);
!   const1_rtx = GEN_INT (1);
!   const2_rtx = GEN_INT (2);
!   constm1_rtx = GEN_INT (-1);
  
-   /* This will usually be one of the above constants, but may be a new rtx.  */
-   const_true_rtx = GEN_INT (STORE_FLAG_VALUE);
- 
    dconst0 = REAL_VALUE_ATOF ("0", DFmode);
    dconst1 = REAL_VALUE_ATOF ("1", DFmode);
    dconst2 = REAL_VALUE_ATOF ("2", DFmode);
--- 3342,3360 ----
  
    /* Create the unique rtx's for certain rtx codes and operand values.  */
  
    for (i = - MAX_SAVED_CONST_INT; i <= MAX_SAVED_CONST_INT; i++)
      {
!       PUT_CODE (&const_int_rtx[i + MAX_SAVED_CONST_INT], CONST_INT);
!       PUT_MODE (&const_int_rtx[i + MAX_SAVED_CONST_INT], VOIDmode);
!       INTVAL (&const_int_rtx[i + MAX_SAVED_CONST_INT]) = i;
      }
  
!   if (STORE_FLAG_VALUE >= - MAX_SAVED_CONST_INT
!       && STORE_FLAG_VALUE <= MAX_SAVED_CONST_INT)
!     const_true_rtx = &const_int_rtx[STORE_FLAG_VALUE + MAX_SAVED_CONST_INT];
!   else
!     const_true_rtx = gen_rtx (CONST_INT, VOIDmode, STORE_FLAG_VALUE);
  
    dconst0 = REAL_VALUE_ATOF ("0", DFmode);
    dconst1 = REAL_VALUE_ATOF ("1", DFmode);
    dconst2 = REAL_VALUE_ATOF ("2", DFmode);
***************
*** 3404,3443 ****
         mode = GET_MODE_WIDER_MODE (mode))
      const_tiny_rtx[0][(int) mode] = const0_rtx;
  
-   stack_pointer_rtx = gen_rtx (REG, Pmode, STACK_POINTER_REGNUM);
-   frame_pointer_rtx = gen_rtx (REG, Pmode, FRAME_POINTER_REGNUM);
  
!   if (HARD_FRAME_POINTER_REGNUM == FRAME_POINTER_REGNUM)
!     hard_frame_pointer_rtx = frame_pointer_rtx;
!   else
!     hard_frame_pointer_rtx = gen_rtx (REG, Pmode, HARD_FRAME_POINTER_REGNUM);
!   
!   if (FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM)
!     arg_pointer_rtx = frame_pointer_rtx;
!   else if (HARD_FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM)
!     arg_pointer_rtx = hard_frame_pointer_rtx;
!   else if (STACK_POINTER_REGNUM == ARG_POINTER_REGNUM)
!     arg_pointer_rtx = stack_pointer_rtx;
!   else
!     arg_pointer_rtx = gen_rtx (REG, Pmode, ARG_POINTER_REGNUM);
  
  #ifdef RETURN_ADDRESS_POINTER_REGNUM
    return_address_pointer_rtx = gen_rtx (REG, Pmode,
  					RETURN_ADDRESS_POINTER_REGNUM);
  #endif
  
-   /* Create the virtual registers.  Do so here since the following objects
-      might reference them.  */
- 
-   virtual_incoming_args_rtx = gen_rtx (REG, Pmode,
- 				       VIRTUAL_INCOMING_ARGS_REGNUM);
-   virtual_stack_vars_rtx = gen_rtx (REG, Pmode,
- 				    VIRTUAL_STACK_VARS_REGNUM);
-   virtual_stack_dynamic_rtx = gen_rtx (REG, Pmode,
- 				       VIRTUAL_STACK_DYNAMIC_REGNUM);
-   virtual_outgoing_args_rtx = gen_rtx (REG, Pmode,
- 				       VIRTUAL_OUTGOING_ARGS_REGNUM);
- 
  #ifdef STRUCT_VALUE
    struct_value_rtx = STRUCT_VALUE;
  #else
--- 3394,3427 ----
         mode = GET_MODE_WIDER_MODE (mode))
      const_tiny_rtx[0][(int) mode] = const0_rtx;
  
  
!   /* Assign register numbers to the globally defined register rtx.
!      This must be done at runtime because the register number field
!      is in a union and some compilers can't initialize unions.  */
  
+   REGNO (stack_pointer_rtx) = STACK_POINTER_REGNUM;
+   PUT_MODE (stack_pointer_rtx, Pmode);
+   REGNO (frame_pointer_rtx) = FRAME_POINTER_REGNUM;
+   PUT_MODE (frame_pointer_rtx, Pmode);
+   REGNO (hard_frame_pointer_rtx) = HARD_FRAME_POINTER_REGNUM;
+   PUT_MODE (hard_frame_pointer_rtx, Pmode);
+   REGNO (arg_pointer_rtx) = ARG_POINTER_REGNUM;
+   PUT_MODE (arg_pointer_rtx, Pmode);
+ 
+   REGNO (virtual_incoming_args_rtx) = VIRTUAL_INCOMING_ARGS_REGNUM;
+   PUT_MODE (virtual_incoming_args_rtx, Pmode);
+   REGNO (virtual_stack_vars_rtx) = VIRTUAL_STACK_VARS_REGNUM;
+   PUT_MODE (virtual_stack_vars_rtx, Pmode);
+   REGNO (virtual_stack_dynamic_rtx) = VIRTUAL_STACK_DYNAMIC_REGNUM;
+   PUT_MODE (virtual_stack_dynamic_rtx, Pmode);
+   REGNO (virtual_outgoing_args_rtx) = VIRTUAL_OUTGOING_ARGS_REGNUM;
+   PUT_MODE (virtual_outgoing_args_rtx, Pmode);
+ 
  #ifdef RETURN_ADDRESS_POINTER_REGNUM
    return_address_pointer_rtx = gen_rtx (REG, Pmode,
  					RETURN_ADDRESS_POINTER_REGNUM);
  #endif
  
  #ifdef STRUCT_VALUE
    struct_value_rtx = STRUCT_VALUE;
  #else
*** genattrtab.c.egcs	Sun Sep 21 20:49:30 1997
--- genattrtab.c	Sat Nov  8 17:56:29 1997
***************
*** 358,365 ****
  /* These are referenced by rtlanal.c and hence need to be defined somewhere.
     They won't actually be used.  */
  
! rtx frame_pointer_rtx, hard_frame_pointer_rtx, stack_pointer_rtx;
! rtx arg_pointer_rtx;
  
  static rtx attr_rtx		PVPROTO((enum rtx_code, ...));
  #ifdef HAVE_VPRINTF
--- 358,364 ----
  /* These are referenced by rtlanal.c and hence need to be defined somewhere.
     They won't actually be used.  */
  
! struct _global_rtl global_rtl;
  
  static rtx attr_rtx		PVPROTO((enum rtx_code, ...));
  #ifdef HAVE_VPRINTF
***************
*** 483,490 ****
     codes are made.  */
  #define RTL_HASH(RTL) ((HOST_WIDE_INT) (RTL) & 0777777)
  
- rtx pc_rtx;
- 
  /* Add an entry to the hash table for RTL with hash code HASHCODE.  */
  
  static void
--- 482,487 ----
***************
*** 5575,5585 ****
  
    init_rtl ();
  
-   /* We don't use this, but it is referenced in rtlanal.c. 
-      Set it up correctly just in case someone tries to use it someday.  */
-   pc_rtx = rtx_alloc (PC);
-   PUT_MODE (pc_rtx, VOIDmode);
- 
    /* Set up true and false rtx's */
    true_rtx = rtx_alloc (CONST_INT);
    XWINT (true_rtx, 0) = 1;
--- 5572,5577 ----

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: egcs compile time optimization
  1997-12-04 17:29 egcs compile time optimization John Carr
@ 1997-12-11 16:22 ` Jeffrey A Law
  0 siblings, 0 replies; 2+ messages in thread
From: Jeffrey A Law @ 1997-12-11 16:22 UTC (permalink / raw)
  To: John Carr; +Cc: egcs

  In message < 199712050128.UAA01626@jfc. >you write:
  > 
  > This patch improves compilation speed by removing a level of indirection
  > from common rtl references and merging the common rtl into one data
  > structure.
  > 
  > Sat Sep 20 17:14:23 1997  John F. Carr  <jfc@mit.edu>
  > 
  > 	* rtl.h (global_rtl): New variable, replacing separate variables for
  > 	commonly used rtl.
  > 	(const_int_rtx): Now array of rtx_def, not rtx.
  > 	* emit-rtl.c: Update for new rtl data structures.
  > 	* genattrtab.c: Define global_rtl.
Thanks.  I've installed this patch.

jeff

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~1997-12-11 16:22 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1997-12-04 17:29 egcs compile time optimization John Carr
1997-12-11 16:22 ` Jeffrey A Law

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).