From b9aba9fde536dc3e0293653509f530322ee2753e Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Mon, 12 Feb 2018 10:48:06 +0100 Subject: [PATCH] re PR middle-end/83665 (Big code size regression and some code quality improvement at Jan 2 2018) PR middle-end/83665 * params.def (inline-min-speedup): Increase from 8 to 15. (max-inline-insns-auto): Decrease from 40 to 30. * ipa-split.c (consider_split): Add some buffer for function to be considered inlining candidate. * invoke.texi (max-inline-insns-auto, inline-min-speedup): UPdate default values. From-SVN: r257582 --- gcc/ChangeLog | 10 ++++++++++ gcc/doc/invoke.texi | 3 ++- gcc/ipa-split.c | 7 +++++-- gcc/params.def | 8 ++++---- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f6df008a6fd..6faa322572f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2018-02-08 Jan Hubicka + + PR middle-end/83665 + * params.def (inline-min-speedup): Increase from 8 to 15. + (max-inline-insns-auto): Decrease from 40 to 30. + * ipa-split.c (consider_split): Add some buffer for function to + be considered inlining candidate. + * invoke.texi (max-inline-insns-auto, inline-min-speedup): UPdate + default values. + 2018-02-12 Richard Biener PR tree-optimization/84037 diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index df357bea7dc..9db9d083a47 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -10131,13 +10131,14 @@ a lot of functions that would otherwise not be considered for inlining by the compiler are investigated. To those functions, a different (more restrictive) limit compared to functions declared inline can be applied. -The default value is 40. +The default value is 30. @item inline-min-speedup When estimated performance improvement of caller + callee runtime exceeds this threshold (in percent), the function can be inlined regardless of the limit on @option{--param max-inline-insns-single} and @option{--param max-inline-insns-auto}. +The default value is 15. @item large-function-insns The limit specifying really large functions. For functions larger than this diff --git a/gcc/ipa-split.c b/gcc/ipa-split.c index 24b30f62cef..b03ae02924a 100644 --- a/gcc/ipa-split.c +++ b/gcc/ipa-split.c @@ -558,10 +558,13 @@ consider_split (struct split_point *current, bitmap non_ssa_vars, " Refused: split size is smaller than call overhead\n"); return; } + /* FIXME: The logic here is not very precise, because inliner does use + inline predicates to reduce function body size. We add 10 to anticipate + that. Next stage1 we should try to be more meaningful here. */ if (current->header_size + call_overhead >= (unsigned int)(DECL_DECLARED_INLINE_P (current_function_decl) ? MAX_INLINE_INSNS_SINGLE - : MAX_INLINE_INSNS_AUTO)) + : MAX_INLINE_INSNS_AUTO) + 10) { if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, @@ -574,7 +577,7 @@ consider_split (struct split_point *current, bitmap non_ssa_vars, Limit this duplication. This is consistent with limit in tree-sra.c FIXME: with LTO we ought to be able to do better! */ if (DECL_ONE_ONLY (current_function_decl) - && current->split_size >= (unsigned int) MAX_INLINE_INSNS_AUTO) + && current->split_size >= (unsigned int) MAX_INLINE_INSNS_AUTO + 10) { if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, diff --git a/gcc/params.def b/gcc/params.def index 930b31820be..e3336793b23 100644 --- a/gcc/params.def +++ b/gcc/params.def @@ -52,13 +52,13 @@ DEFPARAM (PARAM_PREDICTABLE_BRANCH_OUTCOME, DEFPARAM (PARAM_INLINE_MIN_SPEEDUP, "inline-min-speedup", "The minimal estimated speedup allowing inliner to ignore inline-insns-single and inline-insns-auto.", - 8, 0, 0) + 15, 0, 0) /* The single function inlining limit. This is the maximum size of a function counted in internal gcc instructions (not in real machine instructions) that is eligible for inlining by the tree inliner. - The default value is 450. + The default value is 400. Only functions marked inline (or methods defined in the class definition for C++) are affected by this. There are more restrictions to inlining: If inlined functions @@ -77,11 +77,11 @@ DEFPARAM (PARAM_MAX_INLINE_INSNS_SINGLE, that is applied to functions marked inlined (or defined in the class declaration in C++) given by the "max-inline-insns-single" parameter. - The default value is 40. */ + The default value is 30. */ DEFPARAM (PARAM_MAX_INLINE_INSNS_AUTO, "max-inline-insns-auto", "The maximum number of instructions when automatically inlining.", - 40, 0, 0) + 30, 0, 0) DEFPARAM (PARAM_MAX_INLINE_INSNS_RECURSIVE, "max-inline-insns-recursive", -- 2.30.2