From a6f834c5a87c1ac42f1c842bba34d84740218d77 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Fri, 10 Jun 2011 14:53:48 +0200 Subject: [PATCH] tree-sra.c (all_callers_have_enough_arguments_p): Rename to ... * tree-sra.c (all_callers_have_enough_arguments_p): Rename to ... (not_all_callers_have_enough_arguments_p): ... this one; turn into worker for cgraph_for_node_and_aliases. (convert_callers_for_node): Break out from ... (convert_callers): ... here. (modify_function): Use collect_callers_of_node. (ipa_early_sra): Use cgraph_for_node_and_aliases. From-SVN: r174904 --- gcc/ChangeLog | 10 ++++++++++ gcc/tree-sra.c | 52 ++++++++++++++++++++++++++++---------------------- 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 29a87a34541..14cc6d8541b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2011-06-10 Jan Hubicka + + * tree-sra.c (all_callers_have_enough_arguments_p): Rename to ... + (not_all_callers_have_enough_arguments_p): ... this one; turn into + worker for cgraph_for_node_and_aliases. + (convert_callers_for_node): Break out from ... + (convert_callers): ... here. + (modify_function): Use collect_callers_of_node. + (ipa_early_sra): Use cgraph_for_node_and_aliases. + 2011-06-10 Richard Guenther PR tree-optimization/49361 diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 47d44719d92..8ad84beb655 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -4304,31 +4304,30 @@ sra_ipa_reset_debug_stmts (ipa_parm_adjustment_vec adjustments) } } -/* Return true iff all callers have at least as many actual arguments as there +/* Return false iff all callers have at least as many actual arguments as there are formal parameters in the current function. */ static bool -all_callers_have_enough_arguments_p (struct cgraph_node *node) +not_all_callers_have_enough_arguments_p (struct cgraph_node *node, + void *data ATTRIBUTE_UNUSED) { struct cgraph_edge *cs; for (cs = node->callers; cs; cs = cs->next_caller) if (!callsite_has_enough_arguments_p (cs->call_stmt)) - return false; + return true; - return true; + return false; } +/* Convert all callers of NODE. */ -/* Convert all callers of NODE to pass parameters as given in ADJUSTMENTS. */ - -static void -convert_callers (struct cgraph_node *node, tree old_decl, - ipa_parm_adjustment_vec adjustments) +static bool +convert_callers_for_node (struct cgraph_node *node, + void *data) { - tree old_cur_fndecl = current_function_decl; - struct cgraph_edge *cs; - basic_block this_block; + ipa_parm_adjustment_vec adjustments = (ipa_parm_adjustment_vec)data; bitmap recomputed_callers = BITMAP_ALLOC (NULL); + struct cgraph_edge *cs; for (cs = node->callers; cs; cs = cs->next_caller) { @@ -4352,6 +4351,21 @@ convert_callers (struct cgraph_node *node, tree old_decl, compute_inline_parameters (cs->caller, true); BITMAP_FREE (recomputed_callers); + return true; +} + +/* Convert all callers of NODE to pass parameters as given in ADJUSTMENTS. */ + +static void +convert_callers (struct cgraph_node *node, tree old_decl, + ipa_parm_adjustment_vec adjustments) +{ + tree old_cur_fndecl = current_function_decl; + basic_block this_block; + + cgraph_for_node_and_aliases (node, convert_callers_for_node, + adjustments, false); + current_function_decl = old_cur_fndecl; if (!encountered_recursive_call) @@ -4388,17 +4402,8 @@ static bool modify_function (struct cgraph_node *node, ipa_parm_adjustment_vec adjustments) { struct cgraph_node *new_node; - struct cgraph_edge *cs; bool cfg_changed; - VEC (cgraph_edge_p, heap) * redirect_callers; - int node_callers; - - node_callers = 0; - for (cs = node->callers; cs != NULL; cs = cs->next_caller) - node_callers++; - redirect_callers = VEC_alloc (cgraph_edge_p, heap, node_callers); - for (cs = node->callers; cs != NULL; cs = cs->next_caller) - VEC_quick_push (cgraph_edge_p, redirect_callers, cs); + VEC (cgraph_edge_p, heap) * redirect_callers = collect_callers_of_node (node); rebuild_cgraph_edges (); pop_cfun (); @@ -4503,7 +4508,8 @@ ipa_early_sra (void) goto simple_out; } - if (!all_callers_have_enough_arguments_p (node)) + if (cgraph_for_node_and_aliases (node, not_all_callers_have_enough_arguments_p, + NULL, true)) { if (dump_file) fprintf (dump_file, "There are callers with insufficient number of " -- 2.30.2