aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2018-02-12 10:48:06 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2018-02-12 09:48:06 +0000
commitb9aba9fde536dc3e0293653509f530322ee2753e (patch)
tree391970e14e69d07fc50d2a3537089c09d6f7aff3 /gcc
parent85c5e2f576fd41e1ab5620cde3c63b3ca6673bea (diff)
downloadgcc-b9aba9fde536dc3e0293653509f530322ee2753e.zip
gcc-b9aba9fde536dc3e0293653509f530322ee2753e.tar.gz
gcc-b9aba9fde536dc3e0293653509f530322ee2753e.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/doc/invoke.texi3
-rw-r--r--gcc/ipa-split.c7
-rw-r--r--gcc/params.def8
4 files changed, 21 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f6df008..6faa322 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2018-02-08 Jan Hubicka <hubicka@ucw.cz>
+
+ 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 <rguenther@suse.de>
PR tree-optimization/84037
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index df357be..9db9d08 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 24b30f6..b03ae029 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 930b318..e333679 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",