]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
function.c (prologue, [...]): Change their types to VEC(int,heap)*.
authorKazu Hirata <kazu@codesourcery.com>
Sat, 4 Jun 2005 14:02:35 +0000 (14:02 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Sat, 4 Jun 2005 14:02:35 +0000 (14:02 +0000)
* function.c (prologue, epilogue, sibcall_epilogue): Change
their types to VEC(int,heap)*.
(free_after_compilation): Free the three vectors above.
(init_function_for_compilation, record_insns, contains,
prologue_epilogue_contains, sibcall_epilogue_contains,
reposition_prologue_and_epilogue_notes): Use VEC instead of
VARRAY.  (init_function_once): Remove.
* function.h: Remove the prototype for init_function_once.
* toplev.c (backend_init): Don't call init_function_once.

From-SVN: r100588

gcc/ChangeLog
gcc/function.c
gcc/function.h
gcc/toplev.c

index 267231db008a771d0fa0e070197d8c08da4009d9..a335deb1b53afbc3a5f3b57cb1aa9591eb364c0d 100644 (file)
@@ -1,3 +1,15 @@
+2005-06-04  Kazu Hirata  <kazu@codesourcery.com>
+
+       * function.c (prologue, epilogue, sibcall_epilogue): Change
+       their types to VEC(int,heap)*.
+       (free_after_compilation): Free the three vectors above.
+       (init_function_for_compilation, record_insns, contains,
+       prologue_epilogue_contains, sibcall_epilogue_contains,
+       reposition_prologue_and_epilogue_notes): Use VEC instead of
+       VARRAY.  (init_function_once): Remove.
+       * function.h: Remove the prototype for init_function_once.
+       * toplev.c (backend_init): Don't call init_function_once.
+
 2005-06-04  Jan Hubicka  <jh@suse.cz>
 
        * predict.c (tree_predict_edge): Do not predict entry edge and
index 2e2152da49801767912bc1841c2a8cff7c5ac531..6496e4cd95425021f98d9269366b39ba7b2ef380 100644 (file)
@@ -121,13 +121,16 @@ struct machine_function * (*init_machine_status) (void);
 /* The currently compiled function.  */
 struct function *cfun = 0;
 
+DEF_VEC_I(int);
+DEF_VEC_ALLOC_I(int,heap);
+
 /* These arrays record the INSN_UIDs of the prologue and epilogue insns.  */
-static GTY(()) varray_type prologue;
-static GTY(()) varray_type epilogue;
+static VEC(int,heap) *prologue;
+static VEC(int,heap) *epilogue;
 
 /* Array of INSN_UIDs to hold the INSN_UIDs for each sibcall epilogue
    in this function.  */
-static GTY(()) varray_type sibcall_epilogue;
+static VEC(int,heap) *sibcall_epilogue;
 \f
 /* In order to evaluate some expressions, such as function calls returning
    structures in memory, we need to temporarily allocate stack locations.
@@ -198,8 +201,8 @@ static tree *get_block_vector (tree, int *);
 extern tree debug_find_var_in_block_tree (tree, tree);
 /* We always define `record_insns' even if it's not used so that we
    can always export `prologue_epilogue_contains'.  */
-static void record_insns (rtx, varray_type *) ATTRIBUTE_UNUSED;
-static int contains (rtx, varray_type);
+static void record_insns (rtx, VEC(int,heap) **) ATTRIBUTE_UNUSED;
+static int contains (rtx, VEC(int,heap) **);
 #ifdef HAVE_return
 static void emit_return_into_block (basic_block, rtx);
 #endif
@@ -306,6 +309,10 @@ free_after_parsing (struct function *f)
 void
 free_after_compilation (struct function *f)
 {
+  VEC_free (int, heap, prologue);
+  VEC_free (int, heap, epilogue);
+  VEC_free (int, heap, sibcall_epilogue);
+
   f->eh = NULL;
   f->expr = NULL;
   f->emit = NULL;
@@ -3861,10 +3868,11 @@ init_function_for_compilation (void)
 {
   reg_renumber = 0;
 
-  /* No prologue/epilogue insns yet.  */
-  VARRAY_GROW (prologue, 0);
-  VARRAY_GROW (epilogue, 0);
-  VARRAY_GROW (sibcall_epilogue, 0);
+  /* No prologue/epilogue insns yet.  Make sure that these vectors are
+     empty.  */
+  gcc_assert (VEC_length (int, prologue) == 0);
+  gcc_assert (VEC_length (int, epilogue) == 0);
+  gcc_assert (VEC_length (int, sibcall_epilogue) == 0);
 }
 
 void
@@ -4446,28 +4454,12 @@ get_arg_pointer_save_area (struct function *f)
    (a list of one or more insns).  */
 
 static void
-record_insns (rtx insns, varray_type *vecp)
+record_insns (rtx insns, VEC(int,heap) **vecp)
 {
-  int i, len;
   rtx tmp;
 
-  tmp = insns;
-  len = 0;
-  while (tmp != NULL_RTX)
-    {
-      len++;
-      tmp = NEXT_INSN (tmp);
-    }
-
-  i = VARRAY_SIZE (*vecp);
-  VARRAY_GROW (*vecp, i + len);
-  tmp = insns;
-  while (tmp != NULL_RTX)
-    {
-      VARRAY_INT (*vecp, i) = INSN_UID (tmp);
-      i++;
-      tmp = NEXT_INSN (tmp);
-    }
+  for (tmp = insns; tmp != NULL_RTX; tmp = NEXT_INSN (tmp))
+    VEC_safe_push (int, heap, *vecp, INSN_UID (tmp));
 }
 
 /* Set the locator of the insn chain starting at INSN to LOC.  */
@@ -4486,7 +4478,7 @@ set_insn_locators (rtx insn, int loc)
    be running after reorg, SEQUENCE rtl is possible.  */
 
 static int
-contains (rtx insn, varray_type vec)
+contains (rtx insn, VEC(int,heap) **vec)
 {
   int i, j;
 
@@ -4495,15 +4487,16 @@ contains (rtx insn, varray_type vec)
     {
       int count = 0;
       for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
-       for (j = VARRAY_SIZE (vec) - 1; j >= 0; --j)
-         if (INSN_UID (XVECEXP (PATTERN (insn), 0, i)) == VARRAY_INT (vec, j))
+       for (j = VEC_length (int, *vec) - 1; j >= 0; --j)
+         if (INSN_UID (XVECEXP (PATTERN (insn), 0, i))
+             == VEC_index (int, *vec, j))
            count++;
       return count;
     }
   else
     {
-      for (j = VARRAY_SIZE (vec) - 1; j >= 0; --j)
-       if (INSN_UID (insn) == VARRAY_INT (vec, j))
+      for (j = VEC_length (int, *vec) - 1; j >= 0; --j)
+       if (INSN_UID (insn) == VEC_index (int, *vec, j))
          return 1;
     }
   return 0;
@@ -4512,9 +4505,9 @@ contains (rtx insn, varray_type vec)
 int
 prologue_epilogue_contains (rtx insn)
 {
-  if (contains (insn, prologue))
+  if (contains (insn, &prologue))
     return 1;
-  if (contains (insn, epilogue))
+  if (contains (insn, &epilogue))
     return 1;
   return 0;
 }
@@ -4523,7 +4516,7 @@ int
 sibcall_epilogue_contains (rtx insn)
 {
   if (sibcall_epilogue)
-    return contains (insn, sibcall_epilogue);
+    return contains (insn, &sibcall_epilogue);
   return 0;
 }
 
@@ -5262,7 +5255,7 @@ reposition_prologue_and_epilogue_notes (rtx f ATTRIBUTE_UNUSED)
   rtx insn, last, note;
   int len;
 
-  if ((len = VARRAY_SIZE (prologue)) > 0)
+  if ((len = VEC_length (int, prologue)) > 0)
     {
       last = 0, note = 0;
 
@@ -5276,7 +5269,7 @@ reposition_prologue_and_epilogue_notes (rtx f ATTRIBUTE_UNUSED)
              if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_PROLOGUE_END)
                note = insn;
            }
-         else if (contains (insn, prologue))
+         else if (contains (insn, &prologue))
            {
              last = insn;
              if (--len == 0)
@@ -5303,7 +5296,7 @@ reposition_prologue_and_epilogue_notes (rtx f ATTRIBUTE_UNUSED)
        }
     }
 
-  if ((len = VARRAY_SIZE (epilogue)) > 0)
+  if ((len = VEC_length (int, epilogue)) > 0)
     {
       last = 0, note = 0;
 
@@ -5317,7 +5310,7 @@ reposition_prologue_and_epilogue_notes (rtx f ATTRIBUTE_UNUSED)
              if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_EPILOGUE_BEG)
                note = insn;
            }
-         else if (contains (insn, epilogue))
+         else if (contains (insn, &epilogue))
            {
              last = insn;
              if (--len == 0)
@@ -5344,16 +5337,6 @@ reposition_prologue_and_epilogue_notes (rtx f ATTRIBUTE_UNUSED)
 #endif /* HAVE_prologue or HAVE_epilogue */
 }
 
-/* Called once, at initialization, to initialize function.c.  */
-
-void
-init_function_once (void)
-{
-  VARRAY_INT_INIT (prologue, 0, "prologue");
-  VARRAY_INT_INIT (epilogue, 0, "epilogue");
-  VARRAY_INT_INIT (sibcall_epilogue, 0, "sibcall_epilogue");
-}
-
 /* Resets insn_block_boundaries array.  */
 
 void
index da435b17c220d972bb9069eabe1e117de09eb928..cdacf09431aa4d0370414b1cf631866e1bbd9c52 100644 (file)
@@ -556,9 +556,6 @@ extern void instantiate_virtual_regs (void);
 /* Returns the name of the current function.  */
 extern const char *current_function_name (void);
 
-/* Called once, at initialization, to initialize function.c.  */
-extern void init_function_once (void);
-
 extern void do_warn_unused_parameter (tree);
 
 extern bool pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode,
index b26d767a19412b9232391b914be19d63ef6b80c6..0d3090927022e4d83fadc8d266cf780efbe481be 100644 (file)
@@ -1767,7 +1767,6 @@ backend_init (void)
   init_alias_once ();
   init_loop ();
   init_reload ();
-  init_function_once ();
   init_varasm_once ();
 
   /* The following initialization functions need to generate rtl, so