* cgraphunit.c (record_cdtor_fn): Declare all cdtors always inlined.
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 11 Aug 2007 23:14:24 +0000 (23:14 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 11 Aug 2007 23:14:24 +0000 (23:14 +0000)
(cgraph_process_new_functions): Honor previous value of
disregard_inline_limits.
* ipa-inline.c (compute_inline_parameters): Likewise.

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

gcc/ChangeLog
gcc/cgraphunit.c
gcc/ipa-inline.c

index a61667b..834db67 100644 (file)
@@ -1,3 +1,10 @@
+2007-08-11  Jan Hubicka  <jh@suse.cz>
+
+       * cgraphunit.c (record_cdtor_fn): Declare all cdtors always inlined.
+       (cgraph_process_new_functions): Honor previous value of
+       disregard_inline_limits.
+       * ipa-inline.c (compute_inline_parameters): Likewise.
+
 2007-08-11  Ian Lance Taylor  <iant@google.com>
 
        * alias.h (alias_set_type): Define new type.
index 2120b6b..f810c27 100644 (file)
@@ -180,21 +180,26 @@ static GTY (()) tree static_dtors;
 static void
 record_cdtor_fn (tree fndecl)
 {
-  if (targetm.have_ctors_dtors)
+  struct cgraph_node *node;
+  if (targetm.have_ctors_dtors
+      || (!DECL_STATIC_CONSTRUCTOR (fndecl)
+         && !DECL_STATIC_DESTRUCTOR (fndecl)))
     return;
 
   if (DECL_STATIC_CONSTRUCTOR (fndecl))
     {
       static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
       DECL_STATIC_CONSTRUCTOR (fndecl) = 0;
-      cgraph_mark_reachable_node (cgraph_node (fndecl));
     }
   if (DECL_STATIC_DESTRUCTOR (fndecl))
     {
       static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
       DECL_STATIC_DESTRUCTOR (fndecl) = 0;
-      cgraph_mark_reachable_node (cgraph_node (fndecl));
     }
+  DECL_INLINE (fndecl) = 1;
+  node = cgraph_node (fndecl);
+  node->local.disregard_inline_limits = 1;
+  cgraph_mark_reachable_node (node);
 }
 
 /* Synthesize a function which calls all the global ctors or global
@@ -376,7 +381,7 @@ cgraph_process_new_functions (void)
          node->local.self_insns = estimate_num_insns (fndecl,
                                                       &eni_inlining_weights);
          node->local.disregard_inline_limits
-           = lang_hooks.tree_inlining.disregard_inline_limits (fndecl);
+           |= lang_hooks.tree_inlining.disregard_inline_limits (fndecl);
          /* Inlining characteristics are maintained by the
             cgraph_mark_inline.  */
          node->global.insns = node->local.self_insns;
index b0e514f..21b894f 100644 (file)
@@ -1527,7 +1527,7 @@ compute_inline_parameters (void)
   node->local.inlinable = tree_inlinable_function_p (current_function_decl);
   node->local.self_insns = estimate_num_insns (current_function_decl,
                                               &eni_inlining_weights);
-  if (node->local.inlinable)
+  if (node->local.inlinable && !node->local.disregard_inline_limits)
     node->local.disregard_inline_limits
       = lang_hooks.tree_inlining.disregard_inline_limits (current_function_decl);
   if (flag_really_no_inline && !node->local.disregard_inline_limits)