rtl.h (global_rtx_index): New enum.
authorAlex Samuel <samuel@codesourcery.com>
Sat, 18 Sep 1999 18:16:44 +0000 (18:16 +0000)
committerRichard Henderson <rth@gcc.gnu.org>
Sat, 18 Sep 1999 18:16:44 +0000 (11:16 -0700)
        * rtl.h (global_rtx_index): New enum.
        (global_rtl): Change to array of rtx.
        (pc_rtx, cc0_rtx): Redefine accordingly.
        (cc0_rtx, stack_pointer_rtx, frame_pointer_rtx): Likewise.
        (hard_frame_pointer_rtx, arg_pointer_rtx): Likewise.
        (virtual_incoming_args_rtx, virtual_stack_vars_rtx): Likewise.
        (virtual_outgoing_args_rtx, virtual_cfa): Likewise.
        (const_int_rtx): Change to array of rtx.
        (const0_rtx, const1_rtx, const2_rtx, constm1_rtx): Redefine
        accordingly.
        * emit-rtl.c (global_rtl): Change to array of rtx.
        (const_int_rtx): Change to aray of rtx.
        (gen_rtx_CONST_INT): Redefine accordingly.
        (init_emit_once): Allocate and initialize global_rtl.  Likewise
        for const_int_rtx.  Add both as GC roots.
        * genattrtab.c (global_rtl): Update declaration.

From-SVN: r29500

gcc/ChangeLog
gcc/emit-rtl.c
gcc/genattrtab.c
gcc/rtl.h

index 89b269a7024130b8fc2695fd0367de98ac5504fe..39b001ccc9b2f8c6dfcfd29172e869b9f8dfc890 100644 (file)
@@ -1,3 +1,22 @@
+Sat Sep 18 11:15:58 1999  Alex Samuel  <samuel@codesourcery.com>
+
+       * rtl.h (global_rtx_index): New enum.
+       (global_rtl): Change to array of rtx.
+       (pc_rtx, cc0_rtx): Redefine accordingly.
+       (cc0_rtx, stack_pointer_rtx, frame_pointer_rtx): Likewise.
+       (hard_frame_pointer_rtx, arg_pointer_rtx): Likewise.
+       (virtual_incoming_args_rtx, virtual_stack_vars_rtx): Likewise.
+       (virtual_outgoing_args_rtx, virtual_cfa): Likewise.
+       (const_int_rtx): Change to array of rtx.
+       (const0_rtx, const1_rtx, const2_rtx, constm1_rtx): Redefine
+       accordingly. 
+       * emit-rtl.c (global_rtl): Change to array of rtx.
+       (const_int_rtx): Change to aray of rtx.
+       (gen_rtx_CONST_INT): Redefine accordingly.
+       (init_emit_once): Allocate and initialize global_rtl.  Likewise
+       for const_int_rtx.  Add both as GC roots.
+       * genattrtab.c (global_rtl): Update declaration.
+
 1999-09-17  Ulrich Drepper  <drepper@cygnus.com>
 
        * Makefile (USER_H): Add iso646.h back.
index 08f8c275398c42c0999d0f5e059635a572b91d21..56886fb280f873d8fd5cc4d11c6beb27b9ecc39f 100644 (file)
@@ -84,28 +84,7 @@ static int no_line_numbers;
    All of these except perhaps the floating-point CONST_DOUBLEs
    are unique; no other rtx-object will be equal to any of these.  */
 
-/* Avoid warnings by initializing the `fld' field.  Since its a union,
-   bypass problems with KNR compilers by only doing so when __GNUC__. */
-#ifdef __GNUC__
-#define FLDI , {{0}}
-#else
-#define FLDI
-#endif
-
-struct _global_rtl global_rtl =
-{
-  {PC, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI },  /* pc_rtx */
-  {CC0, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* cc0_rtx */
-  {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* stack_pointer_rtx */
-  {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* frame_pointer_rtx */
-  {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* hard_frame_pointer_rtx */
-  {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* arg_pointer_rtx */
-  {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* virtual_incoming_args_rtx */
-  {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* virtual_stack_vars_rtx */
-  {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* virtual_stack_dynamic_rtx */
-  {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* virtual_outgoing_args_rtx */
-  {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* virtual_cfa_rtx */
-};
+rtx global_rtl[GR_MAX];
 
 /* 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
@@ -153,7 +132,7 @@ rtx return_address_pointer_rtx;     /* (REG:Pmode RETURN_ADDRESS_POINTER_REGNUM) */
    to save space during the compilation and simplify comparisons of
    integers.  */
 
-struct rtx_def const_int_rtx[MAX_SAVED_CONST_INT * 2 + 1];
+rtx const_int_rtx[MAX_SAVED_CONST_INT * 2 + 1];
 
 /* start_sequence and gen_sequence can make a lot of rtx expressions which are
    shortly thrown away.  We use two mechanisms to prevent this waste:
@@ -197,7 +176,7 @@ gen_rtx_CONST_INT (mode, arg)
      HOST_WIDE_INT arg;
 {
   if (arg >= - MAX_SAVED_CONST_INT && arg <= MAX_SAVED_CONST_INT)
-    return &const_int_rtx[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)
@@ -3515,6 +3494,89 @@ init_emit_once (line_numbers)
 
   no_line_numbers = ! line_numbers;
 
+  /* 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.  */
+
+  pc_rtx = gen_rtx (PC, VOIDmode);
+  cc0_rtx = gen_rtx (CC0, VOIDmode);
+  stack_pointer_rtx = gen_rtx_raw_REG (Pmode, STACK_POINTER_REGNUM);
+  frame_pointer_rtx = gen_rtx_raw_REG (Pmode, FRAME_POINTER_REGNUM);
+  if (hard_frame_pointer_rtx == 0)
+    hard_frame_pointer_rtx = gen_rtx_raw_REG (Pmode, 
+                                             HARD_FRAME_POINTER_REGNUM);
+  if (arg_pointer_rtx == 0)
+    arg_pointer_rtx = gen_rtx_raw_REG (Pmode, ARG_POINTER_REGNUM);
+  virtual_incoming_args_rtx = 
+    gen_rtx_raw_REG (Pmode, VIRTUAL_INCOMING_ARGS_REGNUM);
+  virtual_stack_vars_rtx = 
+    gen_rtx_raw_REG (Pmode, VIRTUAL_STACK_VARS_REGNUM);
+  virtual_stack_dynamic_rtx = 
+    gen_rtx_raw_REG (Pmode, VIRTUAL_STACK_DYNAMIC_REGNUM);
+  virtual_outgoing_args_rtx = 
+    gen_rtx_raw_REG (Pmode, VIRTUAL_OUTGOING_ARGS_REGNUM); 
+  virtual_cfa_rtx = gen_rtx_raw_REG (Pmode, VIRTUAL_CFA_REGNUM);
+
+  /* These rtx must be roots if GC is enabled.  */
+  if (ggc_p)
+    ggc_add_rtx_root (global_rtl, GR_MAX);
+
+#ifdef RETURN_ADDRESS_POINTER_REGNUM
+  return_address_pointer_rtx
+    = gen_rtx_raw_REG (Pmode, RETURN_ADDRESS_POINTER_REGNUM);
+#endif
+
+#ifdef STRUCT_VALUE
+  struct_value_rtx = STRUCT_VALUE;
+#else
+  struct_value_rtx = gen_rtx_REG (Pmode, STRUCT_VALUE_REGNUM);
+#endif
+
+#ifdef STRUCT_VALUE_INCOMING
+  struct_value_incoming_rtx = STRUCT_VALUE_INCOMING;
+#else
+#ifdef STRUCT_VALUE_INCOMING_REGNUM
+  struct_value_incoming_rtx
+    = gen_rtx_REG (Pmode, STRUCT_VALUE_INCOMING_REGNUM);
+#else
+  struct_value_incoming_rtx = struct_value_rtx;
+#endif
+#endif
+
+#ifdef STATIC_CHAIN_REGNUM
+  static_chain_rtx = gen_rtx_REG (Pmode, STATIC_CHAIN_REGNUM);
+
+#ifdef STATIC_CHAIN_INCOMING_REGNUM
+  if (STATIC_CHAIN_INCOMING_REGNUM != STATIC_CHAIN_REGNUM)
+    static_chain_incoming_rtx
+      = gen_rtx_REG (Pmode, STATIC_CHAIN_INCOMING_REGNUM);
+  else
+#endif
+    static_chain_incoming_rtx = static_chain_rtx;
+#endif
+
+#ifdef STATIC_CHAIN
+  static_chain_rtx = STATIC_CHAIN;
+
+#ifdef STATIC_CHAIN_INCOMING
+  static_chain_incoming_rtx = STATIC_CHAIN_INCOMING;
+#else
+  static_chain_incoming_rtx = static_chain_rtx;
+#endif
+#endif
+
+#ifdef PIC_OFFSET_TABLE_REGNUM
+  pic_offset_table_rtx = gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM);
+#endif
+
+#ifdef INIT_EXPANDERS
+  /* This is to initialize save_machine_status and restore_machine_status before
+     the first call to push_function_context_to.  This is needed by the Chill
+     front end which calls push_function_context_to before the first cal to
+     init_function_start.  */
+  INIT_EXPANDERS;
+#endif
+
   /* Compute the word and byte modes.  */
 
   byte_mode = VOIDmode;
@@ -3552,15 +3614,14 @@ init_emit_once (line_numbers)
   /* 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++)
-    {
-      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;
-    }
+    const_int_rtx[i + MAX_SAVED_CONST_INT] = 
+      gen_rtx_raw_CONST_INT (VOIDmode, i);
+  if (ggc_p)
+    ggc_add_rtx_root (const_int_rtx, 2 * MAX_SAVED_CONST_INT + 1);
 
   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];
+    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);
 
@@ -3603,90 +3664,6 @@ init_emit_once (line_numbers)
     if (GET_MODE_CLASS (mode) == MODE_CC)
       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);
-#if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
-  REGNO (hard_frame_pointer_rtx) = HARD_FRAME_POINTER_REGNUM;
-  PUT_MODE (hard_frame_pointer_rtx, Pmode);
-#endif
-#if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM && HARD_FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
-  REGNO (arg_pointer_rtx) = ARG_POINTER_REGNUM;
-  PUT_MODE (arg_pointer_rtx, Pmode);
-#endif
-
-  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);
-  REGNO (virtual_cfa_rtx) = VIRTUAL_CFA_REGNUM;
-  PUT_MODE (virtual_cfa_rtx, Pmode);
-
-#ifdef RETURN_ADDRESS_POINTER_REGNUM
-  return_address_pointer_rtx
-    = gen_rtx_raw_REG (Pmode, RETURN_ADDRESS_POINTER_REGNUM);
-#endif
-
-#ifdef STRUCT_VALUE
-  struct_value_rtx = STRUCT_VALUE;
-#else
-  struct_value_rtx = gen_rtx_REG (Pmode, STRUCT_VALUE_REGNUM);
-#endif
-
-#ifdef STRUCT_VALUE_INCOMING
-  struct_value_incoming_rtx = STRUCT_VALUE_INCOMING;
-#else
-#ifdef STRUCT_VALUE_INCOMING_REGNUM
-  struct_value_incoming_rtx
-    = gen_rtx_REG (Pmode, STRUCT_VALUE_INCOMING_REGNUM);
-#else
-  struct_value_incoming_rtx = struct_value_rtx;
-#endif
-#endif
-
-#ifdef STATIC_CHAIN_REGNUM
-  static_chain_rtx = gen_rtx_REG (Pmode, STATIC_CHAIN_REGNUM);
-
-#ifdef STATIC_CHAIN_INCOMING_REGNUM
-  if (STATIC_CHAIN_INCOMING_REGNUM != STATIC_CHAIN_REGNUM)
-    static_chain_incoming_rtx
-      = gen_rtx_REG (Pmode, STATIC_CHAIN_INCOMING_REGNUM);
-  else
-#endif
-    static_chain_incoming_rtx = static_chain_rtx;
-#endif
-
-#ifdef STATIC_CHAIN
-  static_chain_rtx = STATIC_CHAIN;
-
-#ifdef STATIC_CHAIN_INCOMING
-  static_chain_incoming_rtx = STATIC_CHAIN_INCOMING;
-#else
-  static_chain_incoming_rtx = static_chain_rtx;
-#endif
-#endif
-
-#ifdef PIC_OFFSET_TABLE_REGNUM
-  pic_offset_table_rtx = gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM);
-#endif
-
-#ifdef INIT_EXPANDERS
-  /* This is to initialize save_machine_status and restore_machine_status before
-     the first call to push_function_context_to.  This is needed by the Chill
-     front end which calls push_function_context_to before the first cal to
-     init_function_start.  */
-  INIT_EXPANDERS;
-#endif
-
   ggc_add_rtx_root (&const_tiny_rtx[0][0], sizeof(const_tiny_rtx)/sizeof(rtx));
 
   ggc_add_rtx_root (&const_true_rtx, 1);
index f35e0e4a5f1aca709b5b6bc778e70c773960aba5..b02f2e0a22c9c8c484ae7df5cac6d6cb5aa5eff6 100644 (file)
@@ -354,7 +354,7 @@ int optimize = 0;
 /* These are referenced by rtlanal.c and hence need to be defined somewhere.
    They won't actually be used.  */
 
-struct _global_rtl global_rtl;
+rtx global_rtl[GR_MAX];
 rtx pic_offset_table_rtx;
 
 static void attr_hash_add_rtx  PROTO((int, rtx));
index b31a98b202730bd837e32e92662bae907d6fce3b..59043eadaeaec83b4ff664af5fc922ac7b4ca974 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1167,17 +1167,13 @@ extern rtx get_first_nonparm_insn       PROTO((void));
 extern void split_block_insns          PROTO((int, int));
 extern void update_flow_info           PROTO((rtx, rtx, rtx, rtx));
 
-/* 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];
+extern rtx 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])
+#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];
@@ -1192,24 +1188,64 @@ extern rtx const_tiny_rtx[3][(int) MAX_MACHINE_MODE];
 #define CONST1_RTX(MODE) (const_tiny_rtx[1][(int) (MODE)])
 #define CONST2_RTX(MODE) (const_tiny_rtx[2][(int) (MODE)])
 
-extern struct _global_rtl
+/* If HARD_FRAME_POINTER_REGNUM is defined, then a special dummy reg
+   is used to represent the frame pointer.  This is because the
+   hard frame pointer and the automatic variables are separated by an amount
+   that cannot be determined until after register allocation.  We can assume
+   that in this case ELIMINABLE_REGS will be defined, one action of which
+   will be to eliminate FRAME_POINTER_REGNUM into HARD_FRAME_POINTER_REGNUM. */
+#ifndef HARD_FRAME_POINTER_REGNUM
+#define HARD_FRAME_POINTER_REGNUM FRAME_POINTER_REGNUM
+#endif
+
+/* Index labels for global_rtl.  */
+enum global_rtl_index
 {
-  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;
-  struct rtx_def virtual_cfa_val;
-} global_rtl;
+  GR_PC,
+  GR_CC0,
+  GR_STACK_POINTER,
+  GR_FRAME_POINTER,
+/* 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 FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM
+  GR_ARG_POINTER = GR_FRAME_POINTER,
+#endif
+#if HARD_FRAME_POINTER_REGNUM == FRAME_POINTER_REGNUM
+  GR_HARD_FRAME_POINTER = GR_FRAME_POINTER,
+#else
+  GR_HARD_FRAME_POINTER,
+#endif
+#if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
+#if HARD_FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM
+  GR_ARG_POINTER = GR_HARD_FRAME_POINTER,
+#else
+  GR_ARG_POINTER,
+#endif
+#endif
+  GR_VIRTUAL_INCOMING_ARGS,
+  GR_VIRTUAL_STACK_ARGS,
+  GR_VIRTUAL_STACK_DYNAMIC,
+  GR_VIRTUAL_OUTGOING_ARGS,
+  GR_VIRTUAL_CFA,
+
+  GR_MAX
+};
+
+/* Pointers to standard pieces of rtx are stored here.  */
+extern rtx global_rtl[GR_MAX];
+
+/* Standard pieces of rtx, to be substituted directly into things.  */
+#define pc_rtx                  (global_rtl[GR_PC])
+#define cc0_rtx                 (global_rtl[GR_CC0])
 
 /* 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)
+#define stack_pointer_rtx       (global_rtl[GR_STACK_POINTER])
+#define frame_pointer_rtx       (global_rtl[GR_FRAME_POINTER])
+#define hard_frame_pointer_rtx (global_rtl[GR_HARD_FRAME_POINTER])
+#define arg_pointer_rtx                (global_rtl[GR_ARG_POINTER])
 
 extern rtx pic_offset_table_rtx;
 extern rtx struct_value_rtx;
@@ -1239,35 +1275,6 @@ extern rtx gen_rtx_MEM PROTO((enum machine_mode, rtx));
    and without prototypes.  */
 #define GEN_INT(N)  gen_rtx_CONST_INT (VOIDmode, (HOST_WIDE_INT) (N))
 
-/* If HARD_FRAME_POINTER_REGNUM is defined, then a special dummy reg
-   is used to represent the frame pointer.  This is because the
-   hard frame pointer and the automatic variables are separated by an amount
-   that cannot be determined until after register allocation.  We can assume
-   that in this case ELIMINABLE_REGS will be defined, one action of which
-   will be to eliminate FRAME_POINTER_REGNUM into HARD_FRAME_POINTER_REGNUM. */
-#ifndef HARD_FRAME_POINTER_REGNUM
-#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_FRAME_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
@@ -1280,7 +1287,7 @@ extern rtx gen_rtx_MEM PROTO((enum machine_mode, rtx));
    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_rtx       (global_rtl[GR_VIRTUAL_INCOMING_ARGS])
 
 #define VIRTUAL_INCOMING_ARGS_REGNUM   (FIRST_VIRTUAL_REGISTER)
 
@@ -1288,7 +1295,7 @@ extern rtx gen_rtx_MEM PROTO((enum machine_mode, rtx));
    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_rtx         (global_rtl[GR_VIRTUAL_STACK_ARGS])
 
 #define VIRTUAL_STACK_VARS_REGNUM      ((FIRST_VIRTUAL_REGISTER) + 1)
 
@@ -1296,7 +1303,7 @@ extern rtx gen_rtx_MEM PROTO((enum machine_mode, rtx));
    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_rtx      (global_rtl[GR_VIRTUAL_STACK_DYNAMIC])
 
 #define VIRTUAL_STACK_DYNAMIC_REGNUM   ((FIRST_VIRTUAL_REGISTER) + 2)
 
@@ -1304,7 +1311,7 @@ extern rtx gen_rtx_MEM PROTO((enum machine_mode, rtx));
    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_rtx      (global_rtl[GR_VIRTUAL_OUTGOING_ARGS])
 
 #define VIRTUAL_OUTGOING_ARGS_REGNUM   ((FIRST_VIRTUAL_REGISTER) + 3)
 
@@ -1314,7 +1321,7 @@ extern rtx gen_rtx_MEM PROTO((enum machine_mode, rtx));
    frame pointer nor stack pointer are necessarily fixed relative to 
    the CFA until after reload.  */
 
-#define virtual_cfa_rtx                        (&global_rtl.virtual_cfa_val)
+#define virtual_cfa_rtx                        (global_rtl[GR_VIRTUAL_CFA])
 
 #define VIRTUAL_CFA_REGNUM             ((FIRST_VIRTUAL_REGISTER) + 4)