diff options
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 56 |
1 files changed, 23 insertions, 33 deletions
diff --git a/gcc/function.c b/gcc/function.c index 771552913f1..3a7bb25dac6 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -37,7 +37,7 @@ along with GCC; see the file COPYING3. If not see #include "system.h" #include "coretypes.h" #include "tm.h" -#include "rtl.h" +#include "rtl-error.h" #include "tree.h" #include "flags.h" #include "except.h" @@ -51,7 +51,6 @@ along with GCC; see the file COPYING3. If not see #include "recog.h" #include "output.h" #include "basic-block.h" -#include "toplev.h" #include "hashtab.h" #include "ggc.h" #include "tm_p.h" @@ -132,7 +131,7 @@ static GTY((if_marked ("ggc_marked_p"), param_is (struct rtx_def))) htab_t types_used_by_vars_hash = NULL; -tree types_used_by_cur_var_decl = NULL; +VEC(tree,gc) *types_used_by_cur_var_decl; /* Forward declarations. */ @@ -340,7 +339,7 @@ try_fit_stack_local (HOST_WIDE_INT start, HOST_WIDE_INT length, static void add_frame_space (HOST_WIDE_INT start, HOST_WIDE_INT end) { - struct frame_space *space = GGC_NEW (struct frame_space); + struct frame_space *space = ggc_alloc_frame_space (); space->next = crtl->frame_space_list; crtl->frame_space_list = space; space->start = start; @@ -683,7 +682,7 @@ static void insert_temp_slot_address (rtx address, struct temp_slot *temp_slot) { void **slot; - struct temp_slot_address_entry *t = GGC_NEW (struct temp_slot_address_entry); + struct temp_slot_address_entry *t = ggc_alloc_temp_slot_address_entry (); t->address = address; t->temp_slot = temp_slot; t->hash = temp_slot_address_compute_hash (t); @@ -835,7 +834,7 @@ assign_stack_temp_for_type (enum machine_mode mode, HOST_WIDE_INT size, if (best_p->size - rounded_size >= alignment) { - p = GGC_NEW (struct temp_slot); + p = ggc_alloc_temp_slot (); p->in_use = p->addr_taken = 0; p->size = best_p->size - rounded_size; p->base_offset = best_p->base_offset + rounded_size; @@ -859,7 +858,7 @@ assign_stack_temp_for_type (enum machine_mode mode, HOST_WIDE_INT size, { HOST_WIDE_INT frame_offset_old = frame_offset; - p = GGC_NEW (struct temp_slot); + p = ggc_alloc_temp_slot (); /* We are passing an explicit alignment request to assign_stack_local. One side effect of that is assign_stack_local will not round SIZE @@ -2374,13 +2373,10 @@ assign_parm_find_entry_rtl (struct assign_parm_data_all *all, return; } -#ifdef FUNCTION_INCOMING_ARG - entry_parm = FUNCTION_INCOMING_ARG (all->args_so_far, data->promoted_mode, - data->passed_type, data->named_arg); -#else - entry_parm = FUNCTION_ARG (all->args_so_far, data->promoted_mode, - data->passed_type, data->named_arg); -#endif + entry_parm = targetm.calls.function_incoming_arg (&all->args_so_far, + data->promoted_mode, + data->passed_type, + data->named_arg); if (entry_parm == 0) data->promoted_mode = data->passed_mode; @@ -2404,13 +2400,9 @@ assign_parm_find_entry_rtl (struct assign_parm_data_all *all, if (targetm.calls.pretend_outgoing_varargs_named (&all->args_so_far)) { rtx tem; -#ifdef FUNCTION_INCOMING_ARG - tem = FUNCTION_INCOMING_ARG (all->args_so_far, data->promoted_mode, - data->passed_type, true); -#else - tem = FUNCTION_ARG (all->args_so_far, data->promoted_mode, - data->passed_type, true); -#endif + tem = targetm.calls.function_incoming_arg (&all->args_so_far, + data->promoted_mode, + data->passed_type, true); in_regs = tem != NULL; } } @@ -3275,8 +3267,8 @@ assign_parms (tree fndecl) set_decl_incoming_rtl (parm, data.entry_parm, data.passed_pointer); /* Update info on where next arg arrives in registers. */ - FUNCTION_ARG_ADVANCE (all.args_so_far, data.promoted_mode, - data.passed_type, data.named_arg); + targetm.calls.function_arg_advance (&all.args_so_far, data.promoted_mode, + data.passed_type, data.named_arg); assign_parm_adjust_stack_rtl (&data); @@ -3369,8 +3361,9 @@ assign_parms (tree fndecl) /* See how many bytes, if any, of its args a function should try to pop on return. */ - crtl->args.pops_args = RETURN_POPS_ARGS (fndecl, TREE_TYPE (fndecl), - crtl->args.size); + crtl->args.pops_args = targetm.calls.return_pops_args (fndecl, + TREE_TYPE (fndecl), + crtl->args.size); /* For stdarg.h function, save info about regs and stack space used by the named args. */ @@ -3464,8 +3457,8 @@ gimplify_parameters (void) continue; /* Update info on where next arg arrives in registers. */ - FUNCTION_ARG_ADVANCE (all.args_so_far, data.promoted_mode, - data.passed_type, data.named_arg); + targetm.calls.function_arg_advance (&all.args_so_far, data.promoted_mode, + data.passed_type, data.named_arg); /* ??? Once upon a time variable_size stuffed parameter list SAVE_EXPRs (amongst others) onto a pending sizes list. This @@ -4196,7 +4189,7 @@ allocate_struct_function (tree fndecl, bool abstract_p) tree result; tree fntype = fndecl ? TREE_TYPE (fndecl) : NULL_TREE; - cfun = GGC_CNEW (struct function); + cfun = ggc_alloc_cleared_function (); init_eh_for_function (); @@ -5562,9 +5555,7 @@ used_types_insert (tree t) /* So this might be a type referenced by a global variable. Record that type so that we can later decide to emit its debug information. */ - types_used_by_cur_var_decl = - tree_cons (t, NULL, types_used_by_cur_var_decl); - + VEC_safe_push (tree, gc, types_used_by_cur_var_decl, t); } } @@ -5623,8 +5614,7 @@ types_used_by_var_decl_insert (tree type, tree var_decl) if (*slot == NULL) { struct types_used_by_vars_entry *entry; - entry = (struct types_used_by_vars_entry*) ggc_alloc - (sizeof (struct types_used_by_vars_entry)); + entry = ggc_alloc_types_used_by_vars_entry (); entry->type = type; entry->var_decl = var_decl; *slot = entry; |