aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2007-08-12 01:14:24 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2007-08-11 23:14:24 +0000
commitbd85fcee30655f5692e26b08c43d691e99b83b81 (patch)
treef0954f84995a9bca9019f39db8adc5a403c44459 /gcc
parent2b840e50679f5b3208241746984cd2f195785f02 (diff)
downloadgcc-bd85fcee30655f5692e26b08c43d691e99b83b81.zip
gcc-bd85fcee30655f5692e26b08c43d691e99b83b81.tar.gz
gcc-bd85fcee30655f5692e26b08c43d691e99b83b81.tar.bz2
cgraphunit.c (record_cdtor_fn): Declare all cdtors always inlined.
* 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. From-SVN: r127365
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/cgraphunit.c13
-rw-r--r--gcc/ipa-inline.c2
3 files changed, 17 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a61667b..834db67 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 2120b6b..f810c27 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -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;
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
index b0e514f..21b894f 100644
--- a/gcc/ipa-inline.c
+++ b/gcc/ipa-inline.c
@@ -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)