mirror of git://gcc.gnu.org/git/gcc.git
ipa-inline-analysis.c (do_estimate_edge_time): Return actual time spent by the inlined sequence.
* ipa-inline-analysis.c (do_estimate_edge_time): Return actual time spent by the inlined sequence. (do_estimate_edge_growth): Rename to ... (do_estimate_edge_time): ... this one; return size of inlined sequence. * ipa-inline.h (do_estimate_edge_size): New. (do_estimate_edge_growth): Remove. (estimate_edge_size): New function. (estimate_edge_growth): Use it. From-SVN: r192185
This commit is contained in:
parent
e75f8f79f0
commit
ed901e4c61
|
|
@ -1,3 +1,15 @@
|
||||||
|
2012-10-07 Jan Hubicka <jh@suse.cz>
|
||||||
|
|
||||||
|
* ipa-inline-analysis.c (do_estimate_edge_time): Return actual
|
||||||
|
time spent by the inlined sequence.
|
||||||
|
(do_estimate_edge_growth): Rename to ...
|
||||||
|
(do_estimate_edge_time): ... this one; return size of inlined
|
||||||
|
sequence.
|
||||||
|
* ipa-inline.h (do_estimate_edge_size): New.
|
||||||
|
(do_estimate_edge_growth): Remove.
|
||||||
|
(estimate_edge_size): New function.
|
||||||
|
(estimate_edge_growth): Use it.
|
||||||
|
|
||||||
2012-10-07 Jan Hubicka <jh@suse.cz>
|
2012-10-07 Jan Hubicka <jh@suse.cz>
|
||||||
|
|
||||||
* lto-cgraph.c (lto_symtab_encoder_new): New parameter FOR_INPUT.
|
* lto-cgraph.c (lto_symtab_encoder_new): New parameter FOR_INPUT.
|
||||||
|
|
|
||||||
|
|
@ -3312,14 +3312,12 @@ do_estimate_edge_time (struct cgraph_edge *edge)
|
||||||
VEC_free (tree, heap, known_binfos);
|
VEC_free (tree, heap, known_binfos);
|
||||||
VEC_free (ipa_agg_jump_function_p, heap, known_aggs);
|
VEC_free (ipa_agg_jump_function_p, heap, known_aggs);
|
||||||
|
|
||||||
ret = (((gcov_type)time
|
ret = RDIV ((gcov_type)time * edge->frequency,
|
||||||
- es->call_stmt_time) * edge->frequency
|
CGRAPH_FREQ_BASE);
|
||||||
+ CGRAPH_FREQ_BASE / 2) / CGRAPH_FREQ_BASE;
|
|
||||||
|
|
||||||
/* When caching, update the cache entry. */
|
/* When caching, update the cache entry. */
|
||||||
if (edge_growth_cache)
|
if (edge_growth_cache)
|
||||||
{
|
{
|
||||||
int ret_size;
|
|
||||||
if ((int)VEC_length (edge_growth_cache_entry, edge_growth_cache)
|
if ((int)VEC_length (edge_growth_cache_entry, edge_growth_cache)
|
||||||
<= edge->uid)
|
<= edge->uid)
|
||||||
VEC_safe_grow_cleared (edge_growth_cache_entry, heap, edge_growth_cache,
|
VEC_safe_grow_cleared (edge_growth_cache_entry, heap, edge_growth_cache,
|
||||||
|
|
@ -3327,10 +3325,8 @@ do_estimate_edge_time (struct cgraph_edge *edge)
|
||||||
VEC_index (edge_growth_cache_entry, edge_growth_cache, edge->uid).time
|
VEC_index (edge_growth_cache_entry, edge_growth_cache, edge->uid).time
|
||||||
= ret + (ret >= 0);
|
= ret + (ret >= 0);
|
||||||
|
|
||||||
ret_size = size - es->call_stmt_size;
|
|
||||||
gcc_checking_assert (es->call_stmt_size);
|
|
||||||
VEC_index (edge_growth_cache_entry, edge_growth_cache, edge->uid).size
|
VEC_index (edge_growth_cache_entry, edge_growth_cache, edge->uid).size
|
||||||
= ret_size + (ret_size >= 0);
|
= size + (size >= 0);
|
||||||
VEC_index (edge_growth_cache_entry, edge_growth_cache, edge->uid).hints
|
VEC_index (edge_growth_cache_entry, edge_growth_cache, edge->uid).hints
|
||||||
= hints + 1;
|
= hints + 1;
|
||||||
}
|
}
|
||||||
|
|
@ -3338,11 +3334,11 @@ do_estimate_edge_time (struct cgraph_edge *edge)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Estimate the growth of the caller when inlining EDGE.
|
/* Return estimated callee growth after inlining EDGE.
|
||||||
Only to be called via estimate_edge_size. */
|
Only to be called via estimate_edge_size. */
|
||||||
|
|
||||||
int
|
int
|
||||||
do_estimate_edge_growth (struct cgraph_edge *edge)
|
do_estimate_edge_size (struct cgraph_edge *edge)
|
||||||
{
|
{
|
||||||
int size;
|
int size;
|
||||||
struct cgraph_node *callee;
|
struct cgraph_node *callee;
|
||||||
|
|
@ -3375,8 +3371,7 @@ do_estimate_edge_growth (struct cgraph_edge *edge)
|
||||||
VEC_free (tree, heap, known_vals);
|
VEC_free (tree, heap, known_vals);
|
||||||
VEC_free (tree, heap, known_binfos);
|
VEC_free (tree, heap, known_binfos);
|
||||||
VEC_free (ipa_agg_jump_function_p, heap, known_aggs);
|
VEC_free (ipa_agg_jump_function_p, heap, known_aggs);
|
||||||
gcc_checking_assert (inline_edge_summary (edge)->call_stmt_size);
|
return size;
|
||||||
return size - inline_edge_summary (edge)->call_stmt_size;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -201,7 +201,7 @@ void estimate_ipcp_clone_size_and_time (struct cgraph_node *,
|
||||||
int do_estimate_growth (struct cgraph_node *);
|
int do_estimate_growth (struct cgraph_node *);
|
||||||
void inline_merge_summary (struct cgraph_edge *edge);
|
void inline_merge_summary (struct cgraph_edge *edge);
|
||||||
void inline_update_overall_summary (struct cgraph_node *node);
|
void inline_update_overall_summary (struct cgraph_node *node);
|
||||||
int do_estimate_edge_growth (struct cgraph_edge *edge);
|
int do_estimate_edge_size (struct cgraph_edge *edge);
|
||||||
int do_estimate_edge_time (struct cgraph_edge *edge);
|
int do_estimate_edge_time (struct cgraph_edge *edge);
|
||||||
inline_hints do_estimate_edge_hints (struct cgraph_edge *edge);
|
inline_hints do_estimate_edge_hints (struct cgraph_edge *edge);
|
||||||
void initialize_growth_caches (void);
|
void initialize_growth_caches (void);
|
||||||
|
|
@ -245,20 +245,31 @@ estimate_growth (struct cgraph_node *node)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Return estimated callee growth after inlining EDGE. */
|
/* Return estimated size of the inline sequence of EDGE. */
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
estimate_edge_growth (struct cgraph_edge *edge)
|
estimate_edge_size (struct cgraph_edge *edge)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
if ((int)VEC_length (edge_growth_cache_entry, edge_growth_cache) <= edge->uid
|
if ((int)VEC_length (edge_growth_cache_entry, edge_growth_cache) <= edge->uid
|
||||||
|| !(ret = VEC_index (edge_growth_cache_entry,
|
|| !(ret = VEC_index (edge_growth_cache_entry,
|
||||||
edge_growth_cache,
|
edge_growth_cache,
|
||||||
edge->uid).size))
|
edge->uid).size))
|
||||||
return do_estimate_edge_growth (edge);
|
return do_estimate_edge_size (edge);
|
||||||
return ret - (ret > 0);
|
return ret - (ret > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return estimated callee growth after inlining EDGE. */
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
estimate_edge_growth (struct cgraph_edge *edge)
|
||||||
|
{
|
||||||
|
#ifdef ENABLE_CHECKING
|
||||||
|
gcc_checking_assert (inline_edge_summary (edge)->call_stmt_size);
|
||||||
|
#endif
|
||||||
|
return (estimate_edge_size (edge)
|
||||||
|
- inline_edge_summary (edge)->call_stmt_size);
|
||||||
|
}
|
||||||
|
|
||||||
/* Return estimated callee runtime increase after inlning
|
/* Return estimated callee runtime increase after inlning
|
||||||
EDGE. */
|
EDGE. */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue