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
3 changed files with 33 additions and 15 deletions
|
@ -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>
|
||||
|
||||
* 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 (ipa_agg_jump_function_p, heap, known_aggs);
|
||||
|
||||
ret = (((gcov_type)time
|
||||
- es->call_stmt_time) * edge->frequency
|
||||
+ CGRAPH_FREQ_BASE / 2) / CGRAPH_FREQ_BASE;
|
||||
ret = RDIV ((gcov_type)time * edge->frequency,
|
||||
CGRAPH_FREQ_BASE);
|
||||
|
||||
/* When caching, update the cache entry. */
|
||||
if (edge_growth_cache)
|
||||
{
|
||||
int ret_size;
|
||||
if ((int)VEC_length (edge_growth_cache_entry, edge_growth_cache)
|
||||
<= edge->uid)
|
||||
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
|
||||
= 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
|
||||
= ret_size + (ret_size >= 0);
|
||||
= size + (size >= 0);
|
||||
VEC_index (edge_growth_cache_entry, edge_growth_cache, edge->uid).hints
|
||||
= 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. */
|
||||
|
||||
int
|
||||
do_estimate_edge_growth (struct cgraph_edge *edge)
|
||||
do_estimate_edge_size (struct cgraph_edge *edge)
|
||||
{
|
||||
int size;
|
||||
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_binfos);
|
||||
VEC_free (ipa_agg_jump_function_p, heap, known_aggs);
|
||||
gcc_checking_assert (inline_edge_summary (edge)->call_stmt_size);
|
||||
return size - inline_edge_summary (edge)->call_stmt_size;
|
||||
return size;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -201,7 +201,7 @@ void estimate_ipcp_clone_size_and_time (struct cgraph_node *,
|
|||
int do_estimate_growth (struct cgraph_node *);
|
||||
void inline_merge_summary (struct cgraph_edge *edge);
|
||||
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);
|
||||
inline_hints do_estimate_edge_hints (struct cgraph_edge *edge);
|
||||
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
|
||||
estimate_edge_growth (struct cgraph_edge *edge)
|
||||
estimate_edge_size (struct cgraph_edge *edge)
|
||||
{
|
||||
int ret;
|
||||
if ((int)VEC_length (edge_growth_cache_entry, edge_growth_cache) <= edge->uid
|
||||
|| !(ret = VEC_index (edge_growth_cache_entry,
|
||||
edge_growth_cache,
|
||||
edge->uid).size))
|
||||
return do_estimate_edge_growth (edge);
|
||||
return do_estimate_edge_size (edge);
|
||||
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
|
||||
EDGE. */
|
||||
|
|
Loading…
Add table
Reference in a new issue