diff options
author | Kazu Hirata <kazu@codesourcery.com> | 2005-06-04 14:02:35 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2005-06-04 14:02:35 +0000 |
commit | f995dcfefe4df994df329c2495e415016d0384f0 (patch) | |
tree | 51a0199072df111b73ed7078485a4b6bec220510 | |
parent | 4226398ba733768dcf297f03c9bb7631fc6367cd (diff) | |
download | gcc-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
-rw-r--r-- | gcc/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/function.c | 83 | ||||
-rw-r--r-- | gcc/function.h | 3 | ||||
-rw-r--r-- | gcc/toplev.c | 1 |
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 |