invoke.texi (early-inlining-insns-O2): Document.

* doc/invoke.texi (early-inlining-insns-O2): Document.
	(early-inlining-insns): Update.
	* params.def (early-inlining-insns-O2): New bound.
	(early-inlining-insns): Update docs.
	* ipa-inline.c (want_early_inline_function_p): Use new bound.

	* g++.dg/tree-ssa/pr61034.C: Set early-inlining-insns-O2=14.
	* g++.dg/tree-ssa/pr8781.C: Likewise.
	* g++.dg/warn/Wstringop-truncation-1.C: Likewise.
	* gcc.dg/ipa/pr63416.c: likewise.
	* gcc.dg/vect/pr66142.c: Likewise.
	* gcc.dg/tree-ssa/ssa-thread-12.c: Mark compure_idf inline.

From-SVN: r276416
This commit is contained in:
Jan Hubicka 2019-10-01 18:58:35 +02:00 committed by Jan Hubicka
parent 7552c36afa
commit 0b92cf305d
11 changed files with 50 additions and 15 deletions

View File

@ -1,3 +1,11 @@
2019-10-01 Jan Hubicka <hubicka@ucw.cz>
* doc/invoke.texi (early-inlining-insns-O2): Document.
(early-inlining-insns): Update.
* params.def (early-inlining-insns-O2): New bound.
(early-inlining-insns): Update docs.
* ipa-inline.c (want_early_inline_function_p): Use new bound.
2019-10-01 Oleg Endo <olegendo@gcc.gnu.org> 2019-10-01 Oleg Endo <olegendo@gcc.gnu.org>
PR target/88562 PR target/88562

View File

@ -11291,9 +11291,17 @@ recursion depth can be guessed from the probability that function recurses
via a given call expression. This parameter limits inlining only to call via a given call expression. This parameter limits inlining only to call
expressions whose probability exceeds the given threshold (in percents). expressions whose probability exceeds the given threshold (in percents).
@item early-inlining-insns-O2
Specify growth that the early inliner can make. In effect it increases
the amount of inlining for code having a large abstraction penalty.
This is applied to functions compiled with @option{-O1} or @option{-O2}
optimization levels.
@item early-inlining-insns @item early-inlining-insns
Specify growth that the early inliner can make. In effect it increases Specify growth that the early inliner can make. In effect it increases
the amount of inlining for code having a large abstraction penalty. the amount of inlining for code having a large abstraction penalty.
This is applied to functions compiled with @option{-O3} or @option{-Ofast}
optimization levels.
@item max-early-inliner-iterations @item max-early-inliner-iterations
Limit of iterations of the early inliner. This basically bounds Limit of iterations of the early inliner. This basically bounds

View File

@ -641,6 +641,10 @@ 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;
int early_inlining_insns = opt_for_fn (e->caller->decl, optimize) >= 3
? PARAM_VALUE (PARAM_EARLY_INLINING_INSNS)
: PARAM_VALUE (PARAM_EARLY_INLINING_INSNS_O2);
if (growth <= PARAM_VALUE (PARAM_MAX_INLINE_INSNS_SIZE)) if (growth <= PARAM_VALUE (PARAM_MAX_INLINE_INSNS_SIZE))
; ;
@ -654,26 +658,28 @@ want_early_inline_function_p (struct cgraph_edge *e)
growth); growth);
want_inline = false; want_inline = false;
} }
else if (growth > PARAM_VALUE (PARAM_EARLY_INLINING_INSNS)) else if (growth > early_inlining_insns)
{ {
if (dump_enabled_p ()) if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt, dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt,
" will not early inline: %C->%C, " " will not early inline: %C->%C, "
"growth %i exceeds --param early-inlining-insns\n", "growth %i exceeds --param early-inlining-insns%s\n",
e->caller, callee, e->caller, callee, growth,
growth); opt_for_fn (e->caller->decl, optimize) >= 3
? "" : "-O2");
want_inline = false; want_inline = false;
} }
else if ((n = num_calls (callee)) != 0 else if ((n = num_calls (callee)) != 0
&& growth * (n + 1) > PARAM_VALUE (PARAM_EARLY_INLINING_INSNS)) && growth * (n + 1) > early_inlining_insns)
{ {
if (dump_enabled_p ()) if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt, dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt,
" will not early inline: %C->%C, " " will not early inline: %C->%C, "
"growth %i exceeds --param early-inlining-insns " "growth %i exceeds --param early-inlining-insns%s "
"divided by number of calls\n", "divided by number of calls\n",
e->caller, callee, e->caller, callee, growth,
growth); opt_for_fn (e->caller->decl, optimize) >= 3
? "" : "-O2");
want_inline = false; want_inline = false;
} }
} }

View File

@ -233,8 +233,12 @@ DEFPARAM(PARAM_IPCP_UNIT_GROWTH,
10, 0, 0) 10, 0, 0)
DEFPARAM(PARAM_EARLY_INLINING_INSNS, DEFPARAM(PARAM_EARLY_INLINING_INSNS,
"early-inlining-insns", "early-inlining-insns",
"Maximal estimated growth of function body caused by early inlining of single call.", "Maximal estimated growth of function body caused by early inlining of single call with -O3 and -Ofast.",
14, 0, 0) 14, 0, 0)
DEFPARAM(PARAM_EARLY_INLINING_INSNS_O2,
"early-inlining-insns-O2",
"Maximal estimated growth of function body caused by early inlining of single call with -O1 and -O2.",
6, 0, 0)
DEFPARAM(PARAM_LARGE_STACK_FRAME, DEFPARAM(PARAM_LARGE_STACK_FRAME,
"large-stack-frame", "large-stack-frame",
"The size of stack frame to be considered large.", "The size of stack frame to be considered large.",

View File

@ -1,3 +1,12 @@
2019-10-01 Jan Hubicka <hubicka@ucw.cz>
* g++.dg/tree-ssa/pr61034.C: Set early-inlining-insns-O2=14.
* g++.dg/tree-ssa/pr8781.C: Likewise.
* g++.dg/warn/Wstringop-truncation-1.C: Likewise.
* gcc.dg/ipa/pr63416.c: likewise.
* gcc.dg/vect/pr66142.c: Likewise.
* gcc.dg/tree-ssa/ssa-thread-12.c: Mark compure_idf inline.
2019-10-01 Jakub Jelinek <jakub@redhat.com> 2019-10-01 Jakub Jelinek <jakub@redhat.com>
PR c++/91925 PR c++/91925

View File

@ -1,5 +1,5 @@
// { dg-do compile } // { dg-do compile }
// { dg-options "-O2 -fdump-tree-fre3 -fdump-tree-optimized -fdelete-null-pointer-checks" } // { dg-options "-O2 -fdump-tree-fre3 -fdump-tree-optimized -fdelete-null-pointer-checks --param early-inlining-insns-O2=14" }
#define assume(x) if(!(x))__builtin_unreachable() #define assume(x) if(!(x))__builtin_unreachable()

View File

@ -1,5 +1,5 @@
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -fno-tree-sra -fdump-tree-fre1" } */ /* { dg-options "-O -fno-tree-sra -fdump-tree-fre1 --param early-inlining-insns-O2=14" } */
int f(); int f();

View File

@ -1,7 +1,7 @@
/* PR/tree-optimization/84480 - bogus -Wstringop-truncation despite /* PR/tree-optimization/84480 - bogus -Wstringop-truncation despite
assignment with an inlined string literal assignment with an inlined string literal
{ dg-do compile } { dg-do compile }
{ dg-options "-O2 -Wstringop-truncation" } */ { dg-options "-O2 -Wstringop-truncation --param early-inlining-insns-O2=14" } */
#include <string.h> #include <string.h>

View File

@ -1,5 +1,5 @@
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-optimized" } */ /* { dg-options "-O2 -fdump-tree-optimized --param early-inlining-insns-O2=14" } */
#define _UNUSED_ __attribute__((__unused__)) #define _UNUSED_ __attribute__((__unused__))
typedef int TEST_F30 (int *v); typedef int TEST_F30 (int *v);

View File

@ -56,7 +56,7 @@ bmp_iter_and_compl (bitmap_iterator * bi, unsigned *bit_no)
} }
extern int VEC_int_base_length (VEC_int_base *); extern int VEC_int_base_length (VEC_int_base *);
bitmap inline bitmap
compute_idf (bitmap def_blocks, bitmap_head * dfs) compute_idf (bitmap def_blocks, bitmap_head * dfs)
{ {
bitmap_iterator bi; bitmap_iterator bi;

View File

@ -1,6 +1,6 @@
/* PR middle-end/66142 */ /* PR middle-end/66142 */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-additional-options "-ffast-math -fopenmp-simd" } */ /* { dg-additional-options "-ffast-math -fopenmp-simd --param early-inlining-insns-O2=14" } */
/* { dg-additional-options "-mavx" { target avx_runtime } } */ /* { dg-additional-options "-mavx" { target avx_runtime } } */
struct A { float x, y; }; struct A { float x, y; };