re PR ipa/64481 (r219076 breaks bootstrap (x86_64-unknown-linux-gnu))

PR ipa/64481
	* ipa-inline-analysis.c (node_growth_cache): Remove.
	(initialize_growth_caches): Do not initialize it.
	(free_growth_caches): Do not free it.
	(do_estimate_growth): Rename to ...
	(estimate_growth): ... this one; drop growth cache code.
	(growth_likely_positive): Always go the heuristics way.
	* ipa-inline.c (can_inline_edge_p): Walk through aliases.
	(reset_edge_caches): Do not reset node growth.
	(heap_edge_removal_hook): Do not maintain cache.
	(inline_small_functions): Likewise; strenghten sanity check.
	(ipa_inline): Do not maintain caches.
	* ipa-inline.h (node_growth_cache): Remove.
	(do_estimate_growth): Remove to ...
	(estimate_growth): this one; remove inline version.
	(reset_node_growth_cache): Remove.

From-SVN: r219572
This commit is contained in:
Jan Hubicka 2015-01-14 04:47:17 +01:00 committed by Jan Hubicka
parent dc396715ae
commit 0d92b55538
4 changed files with 33 additions and 56 deletions

View File

@ -1,3 +1,22 @@
2015-01-13 Jan Hubicka <hubicka@ucw.cz>
PR ipa/64481
* ipa-inline-analysis.c (node_growth_cache): Remove.
(initialize_growth_caches): Do not initialize it.
(free_growth_caches): Do not free it.
(do_estimate_growth): Rename to ...
(estimate_growth): ... this one; drop growth cache code.
(growth_likely_positive): Always go the heuristics way.
* ipa-inline.c (can_inline_edge_p): Walk through aliases.
(reset_edge_caches): Do not reset node growth.
(heap_edge_removal_hook): Do not maintain cache.
(inline_small_functions): Likewise; strenghten sanity check.
(ipa_inline): Do not maintain caches.
* ipa-inline.h (node_growth_cache): Remove.
(do_estimate_growth): Remove to ...
(estimate_growth): this one; remove inline version.
(reset_node_growth_cache): Remove.
2015-01-13 Jan Hubicka <hubicka@ucw.cz>
PR ipa/64565

View File

@ -167,7 +167,6 @@ function_summary <inline_summary *> *inline_summaries;
vec<inline_edge_summary_t> inline_edge_summary_vec;
/* Cached node/edge growths. */
vec<int> node_growth_cache;
vec<edge_growth_cache_entry> edge_growth_cache;
/* Edge predicates goes here. */
@ -1341,8 +1340,6 @@ initialize_growth_caches (void)
{
if (symtab->edges_max_uid)
edge_growth_cache.safe_grow_cleared (symtab->edges_max_uid);
if (symtab->cgraph_max_uid)
node_growth_cache.safe_grow_cleared (symtab->cgraph_max_uid);
}
@ -1352,7 +1349,6 @@ void
free_growth_caches (void)
{
edge_growth_cache.release ();
node_growth_cache.release ();
}
@ -3931,7 +3927,7 @@ do_estimate_growth_1 (struct cgraph_node *node, void *data)
/* Estimate the growth caused by inlining NODE into all callees. */
int
do_estimate_growth (struct cgraph_node *node)
estimate_growth (struct cgraph_node *node)
{
struct growth_data d = { node, 0, false };
struct inline_summary *info = inline_summaries->get (node);
@ -3960,12 +3956,6 @@ do_estimate_growth (struct cgraph_node *node)
+ 50) / 100;
}
if (node_growth_cache.exists ())
{
if ((int) node_growth_cache.length () <= node->uid)
node_growth_cache.safe_grow_cleared (symtab->cgraph_max_uid);
node_growth_cache[node->uid] = d.growth + (d.growth >= 0);
}
return d.growth;
}
@ -3979,7 +3969,6 @@ bool
growth_likely_positive (struct cgraph_node *node, int edge_growth ATTRIBUTE_UNUSED)
{
int max_callers;
int ret;
struct cgraph_edge *e;
gcc_checking_assert (edge_growth > 0);
@ -3999,10 +3988,6 @@ growth_likely_positive (struct cgraph_node *node, int edge_growth ATTRIBUTE_UNUS
|| !node->can_remove_if_no_direct_calls_p ())
return true;
/* If there is cached value, just go ahead. */
if ((int)node_growth_cache.length () > node->uid
&& (ret = node_growth_cache[node->uid]))
return ret > 0;
if (!node->will_be_removed_from_program_if_no_direct_calls_p ()
&& (!DECL_COMDAT (node->decl)
|| !node->can_remove_if_no_direct_calls_p ()))

View File

@ -388,11 +388,11 @@ can_inline_edge_p (struct cgraph_edge *e, bool report,
else if (caller_tree != callee_tree)
{
if (((opt_for_fn (e->caller->decl, optimize)
> opt_for_fn (e->callee->decl, optimize))
> opt_for_fn (callee->decl, optimize))
|| (opt_for_fn (e->caller->decl, optimize_size)
!= opt_for_fn (e->callee->decl, optimize_size)))
!= opt_for_fn (callee->decl, optimize_size)))
/* gcc.dg/pr43564.c. Look at forced inline even in -O0. */
&& !DECL_DISREGARD_INLINE_LIMITS (e->callee->decl))
&& !DECL_DISREGARD_INLINE_LIMITS (callee->decl))
{
e->inline_failed = CIF_OPTIMIZATION_MISMATCH;
inlinable = false;
@ -1095,9 +1095,6 @@ reset_edge_caches (struct cgraph_node *node)
if (where->global.inlined_to)
where = where->global.inlined_to;
/* WHERE body size has changed, the cached growth is invalid. */
reset_node_growth_cache (where);
for (edge = where->callers; edge; edge = edge->next_caller)
if (edge->inline_failed)
reset_edge_growth_cache (edge);
@ -1428,8 +1425,6 @@ add_new_edges_to_heap (edge_heap_t *heap, vec<cgraph_edge *> new_edges)
static void
heap_edge_removal_hook (struct cgraph_edge *e, void *data)
{
if (e->callee)
reset_node_growth_cache (e->callee);
if (e->aux)
{
((edge_heap_t *)data)->delete_node ((edge_heap_node_t *)e->aux);
@ -1622,7 +1617,6 @@ inline_small_functions (void)
struct cgraph_node *where = node->global.inlined_to
? node->global.inlined_to : node;
inline_update_overall_summary (where);
reset_node_growth_cache (where);
reset_edge_caches (where);
update_caller_keys (&edge_heap, where,
updated_nodes, NULL);
@ -1653,8 +1647,15 @@ inline_small_functions (void)
#ifdef ENABLE_CHECKING
/* Be sure that caches are maintained consistent. */
sreal cached_badness = edge_badness (edge, false);
int old_size_est = estimate_edge_size (edge);
int old_time_est = estimate_edge_time (edge);
int old_hints_est = estimate_edge_hints (edge);
reset_edge_growth_cache (edge);
reset_node_growth_cache (edge->callee);
gcc_assert (old_size_est == estimate_edge_size (edge));
gcc_assert (old_time_est == estimate_edge_time (edge));
gcc_assert (old_hints_est == estimate_edge_hints (edge));
/* When updating the edge costs, we only decrease badness in the keys.
Increases of badness are handled lazilly; when we see key with out
@ -1785,8 +1786,7 @@ inline_small_functions (void)
inline_call (edge, true, &new_indirect_edges, &overall_size, true);
add_new_edges_to_heap (&edge_heap, new_indirect_edges);
reset_edge_caches (edge->callee);
reset_node_growth_cache (callee);
reset_edge_caches (edge->callee->function_symbol ());
update_callee_keys (&edge_heap, where, updated_nodes);
}
@ -2218,7 +2218,6 @@ ipa_inline (void)
{
struct cgraph_node *where = node->global.inlined_to
? node->global.inlined_to : node;
reset_node_growth_cache (where);
reset_edge_caches (where);
inline_update_overall_summary (where);
}

View File

@ -224,7 +224,6 @@ struct edge_growth_cache_entry
inline_hints hints;
};
extern vec<int> node_growth_cache;
extern vec<edge_growth_cache_entry> edge_growth_cache;
/* In ipa-inline-analysis.c */
@ -245,7 +244,7 @@ void estimate_ipcp_clone_size_and_time (struct cgraph_node *,
vec<ipa_polymorphic_call_context>,
vec<ipa_agg_jump_function_p>,
int *, int *, inline_hints *);
int do_estimate_growth (struct cgraph_node *);
int estimate_growth (struct cgraph_node *);
bool growth_likely_positive (struct cgraph_node *, int);
void inline_merge_summary (struct cgraph_edge *edge);
void inline_update_overall_summary (struct cgraph_node *node);
@ -274,21 +273,6 @@ inline_edge_summary (struct cgraph_edge *edge)
return &inline_edge_summary_vec[edge->uid];
}
/* Return estimated unit growth after inlning all calls to NODE.
Quick accesors to the inline growth caches.
For convenience we keep zero 0 as unknown. Because growth
can be both positive and negative, we simply increase positive
growths by 1. */
static inline int
estimate_growth (struct cgraph_node *node)
{
int ret;
if ((int)node_growth_cache.length () <= node->uid
|| !(ret = node_growth_cache[node->uid]))
return do_estimate_growth (node);
return ret - (ret > 0);
}
/* Return estimated size of the inline sequence of EDGE. */
@ -342,16 +326,6 @@ estimate_edge_hints (struct cgraph_edge *edge)
return ret - 1;
}
/* Reset cached value for NODE. */
static inline void
reset_node_growth_cache (struct cgraph_node *node)
{
if ((int)node_growth_cache.length () > node->uid)
node_growth_cache[node->uid] = 0;
}
/* Reset cached value for EDGE. */
static inline void