From f256c2743099dca4e5708d51d423c6ca70c4afb6 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Sat, 5 Jan 2019 23:47:24 +0100 Subject: [PATCH] invoke.texi (max-inline-insns-small): New parameters. * doc/invoke.texi (max-inline-insns-small): New parameters. * ipa-inline.c (want_early_inline_function_p): simplify. (want_inline_small_function_p): Fix pasto from previous patch; use max-inline-insns-small bound. * params.def (max-inline-insns-small): New param. * ipa-fnsummary.c (analyze_function_body): Initialize time/size variables correctly. From-SVN: r267603 --- gcc/ChangeLog | 10 ++++++++++ gcc/doc/invoke.texi | 4 ++++ gcc/ipa-fnsummary.c | 4 ++-- gcc/ipa-inline.c | 10 ++++------ gcc/params.def | 5 +++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/ipa/ipcp-2.c | 2 +- 7 files changed, 30 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1cf9aae..a231aee 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,15 @@ 2019-01-05 Jan Hubicka + * doc/invoke.texi (max-inline-insns-small): New parameters. + * ipa-inline.c (want_early_inline_function_p): simplify. + (want_inline_small_function_p): Fix pasto from previous patch; + use max-inline-insns-small bound. + * params.def (max-inline-insns-small): New param. + * ipa-fnsummary.c (analyze_function_body): Initialize time/size + variables correctly. + +2019-01-05 Jan Hubicka + * doc/invoke.texi: Document max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns and uninlined-thunk-time. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 3501a62..0706db6 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -11007,6 +11007,10 @@ by the compiler are investigated. To those functions, a different (more restrictive) limit compared to functions declared inline can be applied. +@item max-inline-insns-small +This is bound applied to calls which are considered relevant with +@option{-finline-small-functions}. + @item max-inline-insns-size This is bound applied to calls which are optimized for size. Small growth may be desirable to anticipate optimization oppurtunities exposed by inlining. diff --git a/gcc/ipa-fnsummary.c b/gcc/ipa-fnsummary.c index 1f5ff98..6bc9cb3 100644 --- a/gcc/ipa-fnsummary.c +++ b/gcc/ipa-fnsummary.c @@ -1969,9 +1969,9 @@ fp_expression_p (gimple *stmt) static void analyze_function_body (struct cgraph_node *node, bool early) { - sreal time = 0; + sreal time = PARAM_VALUE (PARAM_UNINLINED_FUNCTION_TIME); /* Estimate static overhead for function prologue/epilogue and alignment. */ - int size = 2; + int size = PARAM_VALUE (PARAM_UNINLINED_FUNCTION_INSNS); /* Benefits are scaled by probability of elimination that is in range <0,2>. */ basic_block bb; diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index b51e228..73da38c 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -637,8 +637,7 @@ want_early_inline_function_p (struct cgraph_edge *e) if (growth <= PARAM_VALUE (PARAM_MAX_INLINE_INSNS_SIZE)) ; - else if (!e->maybe_hot_p () - && growth > 0) + else if (!e->maybe_hot_p ()) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt, @@ -791,7 +790,7 @@ want_inline_small_function_p (struct cgraph_edge *e, bool report) ipa_hints hints = estimate_edge_hints (e); int big_speedup = -1; /* compute this lazily */ - if (growth <= PARAM_VALUE (PARAM_VALUE (PARAM_MAX_INLINE_INSNS_SIZE))) + if (growth <= PARAM_VALUE (PARAM_MAX_INLINE_INSNS_SIZE)) ; /* Apply MAX_INLINE_INSNS_SINGLE limit. Do not do so when hints suggests that inlining given function is very profitable. */ @@ -809,9 +808,8 @@ want_inline_small_function_p (struct cgraph_edge *e, bool report) want_inline = false; } else if (!DECL_DECLARED_INLINE_P (callee->decl) - && (in_lto_p - && growth >= PARAM_VALUE (PARAM_EARLY_INLINING_INSNS)) - && !opt_for_fn (e->caller->decl, flag_inline_functions)) + && !opt_for_fn (e->caller->decl, flag_inline_functions) + && growth >= PARAM_VALUE (PARAM_MAX_INLINE_INSNS_SMALL)) { /* growth_likely_positive is expensive, always test it last. */ if (growth >= MAX_INLINE_INSNS_SINGLE diff --git a/gcc/params.def b/gcc/params.def index b89b475..0e08db2 100644 --- a/gcc/params.def +++ b/gcc/params.def @@ -83,6 +83,11 @@ DEFPARAM (PARAM_MAX_INLINE_INSNS_AUTO, "The maximum number of instructions when automatically inlining.", 30, 0, 0) +DEFPARAM (PARAM_MAX_INLINE_INSNS_SMALL, + "max-inline-insns-small", + "The maximum number of instructions when automatically inlining small functions.", + 0, 0, 0) + DEFPARAM (PARAM_MAX_INLINE_INSNS_SIZE, "max-inline-insns-size", "The maximum number of instructions when inlining for size.", diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fe449c2..bbc65cb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-01-05 Jan Hubicka + + * gcc.dg/ipa/ipcp-2.c: Update bounds. + 2019-01-05 Dominique d'Humieres * gcc.dg/plugin/plugindir1.c: Adjust dg-prune-output for Darwin. diff --git a/gcc/testsuite/gcc.dg/ipa/ipcp-2.c b/gcc/testsuite/gcc.dg/ipa/ipcp-2.c index 6b6fc4e..74b2c03 100644 --- a/gcc/testsuite/gcc.dg/ipa/ipcp-2.c +++ b/gcc/testsuite/gcc.dg/ipa/ipcp-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp -fno-early-inlining --param ipa-cp-eval-threshold=80" } */ +/* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp -fno-early-inlining --param ipa-cp-eval-threshold=200" } */ /* { dg-add-options bind_pic_locally } */ extern int get_stuff (int); -- 2.7.4