* Makefile.in (GTFILES): Add $(srcdir)/reload.h.
authoramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 20 May 2004 11:45:26 +0000 (11:45 +0000)
committeramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 20 May 2004 11:45:26 +0000 (11:45 +0000)
* gengtype.c (open_base_files): Include reload.h in ifiles.
* reload.h (reg_equiv_memory_loc_varray): Declare.
* reload1.c (reg_equiv_memory_loc_varray): New variable.
(init_reload): Initialize it.
(reload): Instead of freeing reg_equiv_memory_loc, 'grow'
reg_equiv_memory_loc_varray to size 0.
* ra.c (reg_alloc): Allocate reg_equiv_memory_loc by
growing reg_equiv_memory_loc_varray to the desired size.
* passes.c (rest_of_handle_old_regalloc): Likewise.
* reload.c: Amend comment on calling init_reload.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@82050 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/Makefile.in
gcc/gengtype.c
gcc/passes.c
gcc/ra.c
gcc/reload.c
gcc/reload.h
gcc/reload1.c

index 50e9407..24e1c24 100644 (file)
@@ -1,3 +1,17 @@
+2004-05-20  J"orn Rennecke <joern.rennecke@superh.com>
+
+       * Makefile.in (GTFILES): Add $(srcdir)/reload.h.
+       * gengtype.c (open_base_files): Include reload.h in ifiles.
+       * reload.h (reg_equiv_memory_loc_varray): Declare.
+       * reload1.c (reg_equiv_memory_loc_varray): New variable.
+       (init_reload): Initialize it.
+       (reload): Instead of freeing reg_equiv_memory_loc, 'grow'
+       reg_equiv_memory_loc_varray to size 0.
+       * ra.c (reg_alloc): Allocate reg_equiv_memory_loc by
+       growing reg_equiv_memory_loc_varray to the desired size.
+       * passes.c (rest_of_handle_old_regalloc): Likewise.
+       * reload.c: Amend comment on calling init_reload.
+
 2004-05-20  Nick Clifton  <nickc@redhat.com>
 
        * config/c4x/c4x.h (INITIALIZE_TRAMPOLINE): Replace 'tramp'
index 804aa5e..35f8bcb 100644 (file)
@@ -2265,7 +2265,7 @@ GTFILES = $(srcdir)/input.h $(srcdir)/coretypes.h $(srcdir)/cpplib.h \
   $(srcdir)/optabs.h $(srcdir)/tree.h $(srcdir)/libfuncs.h $(srcdir)/hashtable.h \
   $(srcdir)/real.h $(srcdir)/varray.h $(srcdir)/insn-addr.h $(srcdir)/hwint.h \
   $(srcdir)/cselib.h $(srcdir)/basic-block.h  $(srcdir)/cgraph.h \
-  $(srcdir)/c-common.h $(srcdir)/c-tree.h \
+  $(srcdir)/c-common.h $(srcdir)/c-tree.h $(srcdir)/reload.h \
   $(srcdir)/alias.c $(srcdir)/bitmap.c $(srcdir)/cselib.c $(srcdir)/cgraph.c \
   $(srcdir)/dbxout.c $(srcdir)/dwarf2out.c $(srcdir)/dwarf2asm.c \
   $(srcdir)/dojump.c \
index 1b56a83..95c88ef 100644 (file)
@@ -1100,7 +1100,7 @@ open_base_files (void)
       "function.h", "insn-config.h", "expr.h", "hard-reg-set.h",
       "basic-block.h", "cselib.h", "insn-addr.h", "optabs.h",
       "libfuncs.h", "debug.h", "ggc.h", "cgraph.h",
-      "tree-alias-type.h", "tree-flow.h",
+      "tree-alias-type.h", "tree-flow.h", "reload.h",
       NULL
     };
     const char *const *ifp;
index 379df57..841e361 100644 (file)
@@ -624,7 +624,8 @@ rest_of_handle_old_regalloc (tree decl, rtx insns)
   allocate_reg_info (max_regno, FALSE, TRUE);
 
   /* And the reg_equiv_memory_loc array.  */
-  reg_equiv_memory_loc = xcalloc (max_regno, sizeof (rtx));
+  VARRAY_GROW (reg_equiv_memory_loc_varray, max_regno);
+  reg_equiv_memory_loc = &VARRAY_RTX (reg_equiv_memory_loc_varray, 0);
 
   allocate_initial_values (reg_equiv_memory_loc);
 
index 782d8a5..acc1be5 100644 (file)
--- a/gcc/ra.c
+++ b/gcc/ra.c
@@ -887,7 +887,8 @@ reg_alloc (void)
                         "after allocation/spilling, before reload", NULL);
 
   /* Allocate the reg_equiv_memory_loc array for reload.  */
-  reg_equiv_memory_loc = xcalloc (max_regno, sizeof (rtx));
+  VARRAY_GROW (reg_equiv_memory_loc_varray, max_regno);
+  reg_equiv_memory_loc = &VARRAY_RTX (reg_equiv_memory_loc_varray, 0);
   /* And possibly initialize it.  */
   allocate_initial_values (reg_equiv_memory_loc);
   /* And one last regclass pass just before reload.  */
index ae21130..dc5d9f7 100644 (file)
@@ -27,6 +27,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
    ought to be used instead.
 
    Before processing the first insn of the function, call `init_reload'.
+   init_reload actually has to be called earlier anyway.
 
    To scan an insn, call `find_reloads'.  This does two things:
    1. sets up tables describing which values must be reloaded
index 9a5e33c..166d2ab 100644 (file)
@@ -164,6 +164,7 @@ extern struct reload rld[MAX_RELOADS];
 extern int n_reloads;
 #endif
 
+extern GTY (()) struct varray_head_tag *reg_equiv_memory_loc_varray;
 extern rtx *reg_equiv_constant;
 extern rtx *reg_equiv_memory_loc;
 extern rtx *reg_equiv_address;
index c848ce6..4282280 100644 (file)
@@ -102,6 +102,10 @@ rtx *reg_equiv_constant;
    is transferred to either reg_equiv_address or reg_equiv_mem.  */
 rtx *reg_equiv_memory_loc;
 
+/* We allocate reg_equiv_memory_loc inside a varray so that the garbage
+   collector can keep track of what is inside.  */
+varray_type reg_equiv_memory_loc_varray;
+
 /* Element N is the address of stack slot to which pseudo reg N is equivalent.
    This is used when the address is not valid as a memory address
    (because its displacement is too big for the machine.)  */
@@ -482,6 +486,7 @@ init_reload (void)
 
   INIT_REG_SET (&spilled_pseudos);
   INIT_REG_SET (&pseudos_counted);
+  VARRAY_RTX_INIT (reg_equiv_memory_loc_varray, 0, "reg_equiv_memory_loc");
 }
 
 /* List of insn chains that are currently unused.  */
@@ -1236,8 +1241,7 @@ reload (rtx first, int global)
   if (reg_equiv_constant)
     free (reg_equiv_constant);
   reg_equiv_constant = 0;
-  if (reg_equiv_memory_loc)
-    free (reg_equiv_memory_loc);
+  VARRAY_GROW (reg_equiv_memory_loc_varray, 0);
   reg_equiv_memory_loc = 0;
 
   if (offsets_known_at)