diff options
author | Martin Jambor <mjambor@suse.cz> | 2009-10-01 13:48:24 +0200 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2009-10-01 13:48:24 +0200 |
commit | 6096017ee3a043a7d813a9291196cd6838338c04 (patch) | |
tree | 8886f0e8934210d9bcc586890b5986c4b0124661 /gcc | |
parent | 34f9cdb582eeec5c2f489d9ade0f00d03abc9db5 (diff) | |
download | gcc-6096017ee3a043a7d813a9291196cd6838338c04.zip gcc-6096017ee3a043a7d813a9291196cd6838338c04.tar.gz gcc-6096017ee3a043a7d813a9291196cd6838338c04.tar.bz2 |
re PR middle-end/12392 (very long optimized compile)
2009-10-01 Martin Jambor <mjambor@suse.cz>
PR middle-end/12392
* tree-sra.c (convert_callers): Do not call
compute_inline_parameters on one caller more than once.
From-SVN: r152368
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/tree-sra.c | 14 |
2 files changed, 18 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2540134..19a52e3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-10-01 Martin Jambor <mjambor@suse.cz> + + 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 <nickc@redhat.com> * 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 e5b141f..3922c22 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) { |