mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-23 15:39:46 +08:00
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
This commit is contained in:
parent
4226398ba7
commit
f995dcfefe
@ -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
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user