Commit 317a0646 by Jan Hubicka

ipa-inline.c (reset_edge_caches): Walk aliases.


	* ipa-inline.c (reset_edge_caches): Walk aliases.
	(update_caller_keys): Do not test inlinability of aliases.
	* ipa-inline-analysis.c (do_estimate_edge_time): Look through alias.
	(do_estimate_growth): Fix typo.

From-SVN: r174992
parent 8775a18b
...@@ -2079,7 +2079,7 @@ do_estimate_edge_time (struct cgraph_edge *edge) ...@@ -2079,7 +2079,7 @@ do_estimate_edge_time (struct cgraph_edge *edge)
struct inline_edge_summary *es = inline_edge_summary (edge); struct inline_edge_summary *es = inline_edge_summary (edge);
gcc_checking_assert (edge->inline_failed); gcc_checking_assert (edge->inline_failed);
estimate_node_size_and_time (edge->callee, estimate_node_size_and_time (cgraph_function_or_thunk_node (edge->callee, NULL),
evaluate_conditions_for_edge (edge, true), evaluate_conditions_for_edge (edge, true),
&size, &time); &size, &time);
...@@ -2226,7 +2226,7 @@ do_estimate_growth (struct cgraph_node *node) ...@@ -2226,7 +2226,7 @@ do_estimate_growth (struct cgraph_node *node)
else else
{ {
if (!DECL_EXTERNAL (node->decl) if (!DECL_EXTERNAL (node->decl)
&& !cgraph_will_be_removed_from_program_if_no_direct_calls (node)) && cgraph_will_be_removed_from_program_if_no_direct_calls (node))
d.growth -= info->size; d.growth -= info->size;
/* COMDAT functions are very often not shared across multiple units since they /* COMDAT functions are very often not shared across multiple units since they
come from various template instantiations. Take this into account. */ come from various template instantiations. Take this into account. */
......
...@@ -929,6 +929,8 @@ reset_edge_caches (struct cgraph_node *node) ...@@ -929,6 +929,8 @@ reset_edge_caches (struct cgraph_node *node)
struct cgraph_edge *edge; struct cgraph_edge *edge;
struct cgraph_edge *e = node->callees; struct cgraph_edge *e = node->callees;
struct cgraph_node *where = node; struct cgraph_node *where = node;
int i;
struct ipa_ref *ref;
if (where->global.inlined_to) if (where->global.inlined_to)
where = where->global.inlined_to; where = where->global.inlined_to;
...@@ -939,6 +941,9 @@ reset_edge_caches (struct cgraph_node *node) ...@@ -939,6 +941,9 @@ reset_edge_caches (struct cgraph_node *node)
for (edge = where->callers; edge; edge = edge->next_caller) for (edge = where->callers; edge; edge = edge->next_caller)
if (edge->inline_failed) if (edge->inline_failed)
reset_edge_growth_cache (edge); reset_edge_growth_cache (edge);
for (i = 0; ipa_ref_list_refering_iterate (&where->ref_list, i, ref); i++)
if (ref->use == IPA_REF_ALIAS)
reset_edge_caches (ipa_ref_refering_node (ref));
if (!e) if (!e)
return; return;
...@@ -980,7 +985,7 @@ update_caller_keys (fibheap_t heap, struct cgraph_node *node, ...@@ -980,7 +985,7 @@ update_caller_keys (fibheap_t heap, struct cgraph_node *node,
int i; int i;
struct ipa_ref *ref; struct ipa_ref *ref;
if (!inline_summary (node)->inlinable if ((!node->alias && !inline_summary (node)->inlinable)
|| cgraph_function_body_availability (node) <= AVAIL_OVERWRITABLE || cgraph_function_body_availability (node) <= AVAIL_OVERWRITABLE
|| node->global.inlined_to) || node->global.inlined_to)
return; return;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment