OSDN Git Service

2009-10-01 Martin Jambor <mjambor@suse.cz>
authorjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 1 Oct 2009 11:48:24 +0000 (11:48 +0000)
committerjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 1 Oct 2009 11:48:24 +0000 (11:48 +0000)
PR middle-end/12392
* tree-sra.c (convert_callers): Do not call
compute_inline_parameters on one caller more than once.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@152368 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-sra.c

index 2540134..19a52e3 100644 (file)
@@ -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
index e5b141f..3922c22 100644 (file)
@@ -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)
     {