diff options
author | Jan Hubicka <jh@suse.cz> | 2007-08-12 01:14:24 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2007-08-11 23:14:24 +0000 |
commit | bd85fcee30655f5692e26b08c43d691e99b83b81 (patch) | |
tree | f0954f84995a9bca9019f39db8adc5a403c44459 | |
parent | 2b840e50679f5b3208241746984cd2f195785f02 (diff) | |
download | gcc-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
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cgraphunit.c | 13 | ||||
-rw-r--r-- | gcc/ipa-inline.c | 2 |
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) |