diff options
author | Jan Hubicka <jh@suse.cz> | 2010-05-11 17:15:48 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2010-05-11 15:15:48 +0000 |
commit | 1aa1419556f53e401b1ba132a3dc500947141a45 (patch) | |
tree | 220e3acd3a6863dda6117e518abafed885f7adac /gcc/ipa-inline.c | |
parent | f088f0aee27fbfbc2dd4c5fb73af24f12910418c (diff) | |
download | gcc-1aa1419556f53e401b1ba132a3dc500947141a45.tar.gz |
re PR tree-optimization/44063 (build broken for libgcc cris-elf, ICE in cgraph_estimate_size_after_inlining, at ipa-inline)
PR tree-optimize/44063
* ipa-inline.c (cgraph_edge_badness): Move always inlines to top of queue.
(cgraph_decide_inlining_of_small_function): Skip check when disrgarding
limits.
(estimate_function_body_sizes): Compute sizes even when disregarding.
* gcc.c-torture/compile/pr44063.c: New testcase.
From-SVN: r159273
Diffstat (limited to 'gcc/ipa-inline.c')
-rw-r--r-- | gcc/ipa-inline.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index 8b73210c34d..6f189a6da2d 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -541,6 +541,9 @@ cgraph_edge_badness (struct cgraph_edge *edge, bool dump) (cgraph_estimate_size_after_inlining (1, edge->caller, edge->callee) - edge->caller->global.size); + if (edge->callee->local.disregard_inline_limits) + return INT_MIN; + if (dump) { fprintf (dump_file, " Badness calculcation for %s -> %s\n", @@ -1068,12 +1071,14 @@ cgraph_decide_inlining_of_small_functions (void) } } - if (!cgraph_maybe_hot_edge_p (edge)) + if (edge->callee->local.disregard_inline_limits) + ; + else if (!cgraph_maybe_hot_edge_p (edge)) not_good = CIF_UNLIKELY_CALL; - if (!flag_inline_functions + else if (!flag_inline_functions && !DECL_DECLARED_INLINE_P (edge->callee->decl)) not_good = CIF_NOT_DECLARED_INLINED; - if (optimize_function_for_size_p (DECL_STRUCT_FUNCTION(edge->caller->decl))) + else if (optimize_function_for_size_p (DECL_STRUCT_FUNCTION(edge->caller->decl))) not_good = CIF_OPTIMIZING_FOR_SIZE; if (not_good && growth > 0 && cgraph_estimate_growth (edge->callee) > 0) { @@ -1833,17 +1838,6 @@ estimate_function_body_sizes (struct cgraph_node *node) int freq; tree funtype = TREE_TYPE (node->decl); - if (node->local.disregard_inline_limits) - { - if (dump_file) - fprintf (dump_file, "Disregarding inline limits.\n"); - inline_summary (node)->self_time = 0; - inline_summary (node)->self_size = 0; - inline_summary (node)->time_inlining_benefit = 0; - inline_summary (node)->size_inlining_benefit = 0; - return; - } - if (dump_file) fprintf (dump_file, "Analyzing function body size: %s\n", cgraph_node_name (node)); |