invoke.texi: Document max-inline-insns-size...
* doc/invoke.texi: Document max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns and uninlined-thunk-time. * params.def: Add max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns and uninlined-thunk-time. * ipa-fnsummary.c (compute_fn_summary, analyze_function_body): Use new parameters. * ipa-inline.c (can_inline_edge_by_limits_p, want_inline_small_function_p): Use new parameters. From-SVN: r267601
This commit is contained in:
parent
121356b017
commit
d06f73a387
|
@ -1,3 +1,16 @@
|
||||||
|
2019-01-05 Jan Hubicka <hubicka@ucw.cz>
|
||||||
|
|
||||||
|
* doc/invoke.texi: Document max-inline-insns-size,
|
||||||
|
uninlined-function-insns, uninlined-function-time,
|
||||||
|
uninlined-thunk-insns and uninlined-thunk-time.
|
||||||
|
* params.def: Add max-inline-insns-size,
|
||||||
|
uninlined-function-insns, uninlined-function-time,
|
||||||
|
uninlined-thunk-insns and uninlined-thunk-time.
|
||||||
|
* ipa-fnsummary.c (compute_fn_summary, analyze_function_body): Use
|
||||||
|
new parameters.
|
||||||
|
* ipa-inline.c (can_inline_edge_by_limits_p,
|
||||||
|
want_inline_small_function_p): Use new parameters.
|
||||||
|
|
||||||
2019-01-05 Jan Hubicka <hubicka@ucw.cz>
|
2019-01-05 Jan Hubicka <hubicka@ucw.cz>
|
||||||
|
|
||||||
* ipa-fnsummary.c (analyze_function_body): Fix accounting of time.
|
* ipa-fnsummary.c (analyze_function_body): Fix accounting of time.
|
||||||
|
|
|
@ -11007,6 +11007,23 @@ by the compiler are investigated. To those functions, a different
|
||||||
(more restrictive) limit compared to functions declared inline can
|
(more restrictive) limit compared to functions declared inline can
|
||||||
be applied.
|
be applied.
|
||||||
|
|
||||||
|
@item max-inline-insns-size
|
||||||
|
This is bound applied to calls which are optimized for size. Small growth
|
||||||
|
may be desirable to anticipate optimization oppurtunities exposed by inlining.
|
||||||
|
|
||||||
|
@item uninlined-function-insns
|
||||||
|
Number of instructions accounted by inliner for function overhead such as
|
||||||
|
function prologue and epilogue.
|
||||||
|
|
||||||
|
@item uninlined-function-time
|
||||||
|
Extra time accounted by inliner for function overhead such as time needed to
|
||||||
|
execute function prologue and epilogue
|
||||||
|
|
||||||
|
@item uninlined-thunk-insns
|
||||||
|
@item uninlined-thunk-time
|
||||||
|
Same as @option{--param uninlined-function-insns} and
|
||||||
|
@option{--param uninlined-function-time} but applied to function thunks
|
||||||
|
|
||||||
@item inline-min-speedup
|
@item inline-min-speedup
|
||||||
When estimated performance improvement of caller + callee runtime exceeds this
|
When estimated performance improvement of caller + callee runtime exceeds this
|
||||||
threshold (in percent), the function can be inlined regardless of the limit on
|
threshold (in percent), the function can be inlined regardless of the limit on
|
||||||
|
|
|
@ -2034,7 +2034,10 @@ analyze_function_body (struct cgraph_node *node, bool early)
|
||||||
info->account_size_time (0, 0, bb_predicate, bb_predicate);
|
info->account_size_time (0, 0, bb_predicate, bb_predicate);
|
||||||
|
|
||||||
bb_predicate = predicate::not_inlined ();
|
bb_predicate = predicate::not_inlined ();
|
||||||
info->account_size_time (2 * ipa_fn_summary::size_scale, 0, bb_predicate,
|
info->account_size_time (PARAM_VALUE (PARAM_UNINLINED_FUNCTION_INSNS)
|
||||||
|
* ipa_fn_summary::size_scale,
|
||||||
|
PARAM_VALUE (PARAM_UNINLINED_FUNCTION_TIME),
|
||||||
|
bb_predicate,
|
||||||
bb_predicate);
|
bb_predicate);
|
||||||
|
|
||||||
if (fbi.info)
|
if (fbi.info)
|
||||||
|
@ -2418,7 +2421,11 @@ compute_fn_summary (struct cgraph_node *node, bool early)
|
||||||
node->local.can_change_signature = false;
|
node->local.can_change_signature = false;
|
||||||
es->call_stmt_size = eni_size_weights.call_cost;
|
es->call_stmt_size = eni_size_weights.call_cost;
|
||||||
es->call_stmt_time = eni_time_weights.call_cost;
|
es->call_stmt_time = eni_time_weights.call_cost;
|
||||||
info->account_size_time (ipa_fn_summary::size_scale * 2, 2, t, t);
|
info->account_size_time (ipa_fn_summary::size_scale
|
||||||
|
* PARAM_VALUE
|
||||||
|
(PARAM_UNINLINED_FUNCTION_THUNK_INSNS),
|
||||||
|
PARAM_VALUE
|
||||||
|
(PARAM_UNINLINED_FUNCTION_THUNK_TIME), t, t);
|
||||||
t = predicate::not_inlined ();
|
t = predicate::not_inlined ();
|
||||||
info->account_size_time (2 * ipa_fn_summary::size_scale, 0, t, t);
|
info->account_size_time (2 * ipa_fn_summary::size_scale, 0, t, t);
|
||||||
ipa_update_overall_fn_summary (node);
|
ipa_update_overall_fn_summary (node);
|
||||||
|
|
|
@ -523,7 +523,7 @@ can_inline_edge_by_limits_p (struct cgraph_edge *e, bool report,
|
||||||
> opt_for_fn (caller->decl, optimize_size))
|
> opt_for_fn (caller->decl, optimize_size))
|
||||||
{
|
{
|
||||||
int growth = estimate_edge_growth (e);
|
int growth = estimate_edge_growth (e);
|
||||||
if (growth > 0
|
if (growth > PARAM_VALUE (PARAM_MAX_INLINE_INSNS_SIZE)
|
||||||
&& (!DECL_DECLARED_INLINE_P (callee->decl)
|
&& (!DECL_DECLARED_INLINE_P (callee->decl)
|
||||||
&& growth >= MAX (MAX_INLINE_INSNS_SINGLE,
|
&& growth >= MAX (MAX_INLINE_INSNS_SINGLE,
|
||||||
MAX_INLINE_INSNS_AUTO)))
|
MAX_INLINE_INSNS_AUTO)))
|
||||||
|
@ -635,7 +635,7 @@ want_early_inline_function_p (struct cgraph_edge *e)
|
||||||
int growth = estimate_edge_growth (e);
|
int growth = estimate_edge_growth (e);
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
if (growth <= 0)
|
if (growth <= PARAM_VALUE (PARAM_MAX_INLINE_INSNS_SIZE))
|
||||||
;
|
;
|
||||||
else if (!e->maybe_hot_p ()
|
else if (!e->maybe_hot_p ()
|
||||||
&& growth > 0)
|
&& growth > 0)
|
||||||
|
@ -791,7 +791,7 @@ want_inline_small_function_p (struct cgraph_edge *e, bool report)
|
||||||
ipa_hints hints = estimate_edge_hints (e);
|
ipa_hints hints = estimate_edge_hints (e);
|
||||||
int big_speedup = -1; /* compute this lazily */
|
int big_speedup = -1; /* compute this lazily */
|
||||||
|
|
||||||
if (growth <= 0)
|
if (growth <= PARAM_VALUE (PARAM_VALUE (PARAM_MAX_INLINE_INSNS_SIZE)))
|
||||||
;
|
;
|
||||||
/* Apply MAX_INLINE_INSNS_SINGLE limit. Do not do so when
|
/* Apply MAX_INLINE_INSNS_SINGLE limit. Do not do so when
|
||||||
hints suggests that inlining given function is very profitable. */
|
hints suggests that inlining given function is very profitable. */
|
||||||
|
@ -809,6 +809,8 @@ want_inline_small_function_p (struct cgraph_edge *e, bool report)
|
||||||
want_inline = false;
|
want_inline = false;
|
||||||
}
|
}
|
||||||
else if (!DECL_DECLARED_INLINE_P (callee->decl)
|
else if (!DECL_DECLARED_INLINE_P (callee->decl)
|
||||||
|
&& (in_lto_p
|
||||||
|
&& growth >= PARAM_VALUE (PARAM_EARLY_INLINING_INSNS))
|
||||||
&& !opt_for_fn (e->caller->decl, flag_inline_functions))
|
&& !opt_for_fn (e->caller->decl, flag_inline_functions))
|
||||||
{
|
{
|
||||||
/* growth_likely_positive is expensive, always test it last. */
|
/* growth_likely_positive is expensive, always test it last. */
|
||||||
|
|
|
@ -83,6 +83,33 @@ DEFPARAM (PARAM_MAX_INLINE_INSNS_AUTO,
|
||||||
"The maximum number of instructions when automatically inlining.",
|
"The maximum number of instructions when automatically inlining.",
|
||||||
30, 0, 0)
|
30, 0, 0)
|
||||||
|
|
||||||
|
DEFPARAM (PARAM_MAX_INLINE_INSNS_SIZE,
|
||||||
|
"max-inline-insns-size",
|
||||||
|
"The maximum number of instructions when inlining for size.",
|
||||||
|
0, 0, 0)
|
||||||
|
|
||||||
|
DEFPARAM (PARAM_UNINLINED_FUNCTION_INSNS,
|
||||||
|
"uninlined-function-insns",
|
||||||
|
"Instruction accounted for function prologue, epilogue and other"
|
||||||
|
" overhead.",
|
||||||
|
2, 0, 0)
|
||||||
|
|
||||||
|
DEFPARAM (PARAM_UNINLINED_FUNCTION_TIME,
|
||||||
|
"uninlined-function-time",
|
||||||
|
"Time accounted for function prologue, epilogue and other"
|
||||||
|
" overhead.",
|
||||||
|
0, 0, 0)
|
||||||
|
|
||||||
|
DEFPARAM (PARAM_UNINLINED_FUNCTION_THUNK_INSNS,
|
||||||
|
"uninlined-thunk-insns",
|
||||||
|
"Instruction accounted for function thunk overhead.",
|
||||||
|
2, 0, 0)
|
||||||
|
|
||||||
|
DEFPARAM (PARAM_UNINLINED_FUNCTION_THUNK_TIME,
|
||||||
|
"uninlined-thunk-time",
|
||||||
|
"Time accounted for function thunk overhead.",
|
||||||
|
2, 0, 0)
|
||||||
|
|
||||||
DEFPARAM (PARAM_MAX_INLINE_INSNS_RECURSIVE,
|
DEFPARAM (PARAM_MAX_INLINE_INSNS_RECURSIVE,
|
||||||
"max-inline-insns-recursive",
|
"max-inline-insns-recursive",
|
||||||
"The maximum number of instructions inline function can grow to via recursive inlining.",
|
"The maximum number of instructions inline function can grow to via recursive inlining.",
|
||||||
|
|
Loading…
Reference in New Issue