From 6096017ee3a043a7d813a9291196cd6838338c04 Mon Sep 17 00:00:00 2001 From: Martin Jambor Date: Thu, 1 Oct 2009 13:48:24 +0200 Subject: [PATCH] re PR middle-end/12392 (very long optimized compile) 2009-10-01 Martin Jambor PR middle-end/12392 * tree-sra.c (convert_callers): Do not call compute_inline_parameters on one caller more than once. From-SVN: r152368 --- gcc/ChangeLog | 6 ++++++ gcc/tree-sra.c | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 254013440db6..19a52e324bf6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-10-01 Martin Jambor + + PR middle-end/12392 + * tree-sra.c (convert_callers): Do not call + compute_inline_parameters on one caller more than once. + 2009-10-01 Nick Clifton * config/vax/netbsd-elf.h (NETBSD_CC1_AND_CC1PLUS_SPEC): Define as diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index e5b141f289ec..3922c22d824b 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -3646,6 +3646,7 @@ convert_callers (struct cgraph_node *node, ipa_parm_adjustment_vec adjustments) tree old_cur_fndecl = current_function_decl; struct cgraph_edge *cs; basic_block this_block; + bitmap recomputed_callers = BITMAP_ALLOC (NULL); for (cs = node->callers; cs; cs = cs->next_caller) { @@ -3653,15 +3654,24 @@ convert_callers (struct cgraph_node *node, ipa_parm_adjustment_vec adjustments) push_cfun (DECL_STRUCT_FUNCTION (cs->caller->decl)); if (dump_file) - fprintf (dump_file, "Adjusting call %s -> %s\n", + fprintf (dump_file, "Adjusting call (%i -> %i) %s -> %s\n", + cs->caller->uid, cs->callee->uid, cgraph_node_name (cs->caller), cgraph_node_name (cs->callee)); ipa_modify_call_arguments (cs, cs->call_stmt, adjustments); - compute_inline_parameters (cs->caller); pop_cfun (); } + + for (cs = node->callers; cs; cs = cs->next_caller) + if (!bitmap_bit_p (recomputed_callers, cs->caller->uid)) + { + compute_inline_parameters (cs->caller); + bitmap_set_bit (recomputed_callers, cs->caller->uid); + } + BITMAP_FREE (recomputed_callers); + current_function_decl = old_cur_fndecl; FOR_EACH_BB (this_block) {