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:
parent
7552c36afa
commit
0b92cf305d
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.",
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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; };
|
||||||
|
|
Loading…
Reference in New Issue