Commit 0b92cf30 by Jan Hubicka Committed by Jan Hubicka

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
parent 7552c36a
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
......
...@@ -11291,9 +11291,17 @@ recursion depth can be guessed from the probability that function recurses ...@@ -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
...@@ -641,6 +641,10 @@ want_early_inline_function_p (struct cgraph_edge *e) ...@@ -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) ...@@ -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;
} }
} }
......
...@@ -233,8 +233,12 @@ DEFPARAM(PARAM_IPCP_UNIT_GROWTH, ...@@ -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.",
......
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
......
// { 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()
......
/* { 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();
......
/* 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>
......
/* { 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);
......
...@@ -56,7 +56,7 @@ bmp_iter_and_compl (bitmap_iterator * bi, unsigned *bit_no) ...@@ -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;
......
/* 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; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment