aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKazu Hirata <kazu@codesourcery.com>2005-06-04 14:02:35 +0000
committerKazu Hirata <kazu@gcc.gnu.org>2005-06-04 14:02:35 +0000
commitf995dcfefe4df994df329c2495e415016d0384f0 (patch)
tree51a0199072df111b73ed7078485a4b6bec220510 /gcc
parent4226398ba733768dcf297f03c9bb7631fc6367cd (diff)
downloadgcc-f995dcfefe4df994df329c2495e415016d0384f0.zip
gcc-f995dcfefe4df994df329c2495e415016d0384f0.tar.gz
gcc-f995dcfefe4df994df329c2495e415016d0384f0.tar.bz2
function.c (prologue, [...]): Change their types to VEC(int,heap)*.
* 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/function.c83
-rw-r--r--gcc/function.h3
-rw-r--r--gcc/toplev.c1
4 files changed, 45 insertions, 54 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 267231d..a335deb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/function.c b/gcc/function.c
index 2e2152d..6496e4c 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -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;
/* 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
diff --git a/gcc/function.h b/gcc/function.h
index da435b1..cdacf09 100644
--- a/gcc/function.h
+++ b/gcc/function.h
@@ -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,
diff --git a/gcc/toplev.c b/gcc/toplev.c
index b26d767..0d30909 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -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