>       * ipa-inline.c (want_early_inline_function_p): Use
>       PARAM_EARLY_INLINING_INSNS_O2.
>       * params.def (PARAM_EARLY_INLINING_INSNS_O2): New.
>       (PARAM_EARLY_INLINING_INSNS): Update documentation.
>       * invoke.texi (early-inlining-insns-O2): New.
>       (early-inlining-insns): Update documentation.
Hi,
this is a variant of patch with testsuite compensation I comitted today.
There are some cases where we need early inlining to happen in order to
get the even we look for.

In most cases this will go back once late inlining autoinline,
but I filled https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91954
for missed vectorization issue and 
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91955
for Wstringop.

Honza

        * 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.
Index: doc/invoke.texi
===================================================================
--- doc/invoke.texi     (revision 276272)
+++ doc/invoke.texi     (working copy)
@@ -11291,9 +11291,17 @@ recursion depth can be guessed from the
 via a given call expression.  This parameter limits inlining only to call
 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
 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{-O3} or @option{-Ofast}
+optimization levels.
 
 @item max-early-inliner-iterations
 Limit of iterations of the early inliner.  This basically bounds
Index: ipa-inline.c
===================================================================
--- ipa-inline.c        (revision 276272)
+++ ipa-inline.c        (working copy)
@@ -641,6 +641,10 @@ want_early_inline_function_p (struct cgr
     {
       int growth = estimate_edge_growth (e);
       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))
        ;
@@ -654,26 +658,28 @@ want_early_inline_function_p (struct cgr
                             growth);
          want_inline = false;
        }
-      else if (growth > PARAM_VALUE (PARAM_EARLY_INLINING_INSNS))
+      else if (growth > early_inlining_insns)
        {
          if (dump_enabled_p ())
            dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt,
                             "  will not early inline: %C->%C, "
-                            "growth %i exceeds --param early-inlining-insns\n",
-                            e->caller, callee,
-                            growth);
+                            "growth %i exceeds --param 
early-inlining-insns%s\n",
+                            e->caller, callee, growth,
+                            opt_for_fn (e->caller->decl, optimize) >= 3
+                            ? "" : "-O2");
          want_inline = false;
        }
       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 ())
            dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt,
                             "  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",
-                            e->caller, callee,
-                            growth);
+                            e->caller, callee, growth,
+                            opt_for_fn (e->caller->decl, optimize) >= 3
+                            ? "" : "-O2");
          want_inline = false;
        }
     }
Index: params.def
===================================================================
--- params.def  (revision 276272)
+++ params.def  (working copy)
@@ -233,8 +233,12 @@ DEFPARAM(PARAM_IPCP_UNIT_GROWTH,
         10, 0, 0)
 DEFPARAM(PARAM_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)
+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,
         "large-stack-frame",
         "The size of stack frame to be considered large.",
Index: testsuite/g++.dg/tree-ssa/pr61034.C
===================================================================
--- testsuite/g++.dg/tree-ssa/pr61034.C (revision 276272)
+++ testsuite/g++.dg/tree-ssa/pr61034.C (working copy)
@@ -1,5 +1,5 @@
 // { 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()
 
Index: testsuite/g++.dg/tree-ssa/pr8781.C
===================================================================
--- testsuite/g++.dg/tree-ssa/pr8781.C  (revision 276272)
+++ testsuite/g++.dg/tree-ssa/pr8781.C  (working copy)
@@ -1,5 +1,5 @@
 /* { 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();
 
Index: testsuite/g++.dg/warn/Wstringop-truncation-1.C
===================================================================
--- testsuite/g++.dg/warn/Wstringop-truncation-1.C      (revision 276272)
+++ testsuite/g++.dg/warn/Wstringop-truncation-1.C      (working copy)
@@ -1,7 +1,7 @@
 /* PR/tree-optimization/84480 - bogus -Wstringop-truncation despite
    assignment with an inlined string literal
    { dg-do compile }
-   { dg-options "-O2 -Wstringop-truncation" }  */
+   { dg-options "-O2 -Wstringop-truncation --param early-inlining-insns-O2=14" 
}  */
 
 #include <string.h>
 
Index: testsuite/gcc.dg/ipa/pr63416.c
===================================================================
--- testsuite/gcc.dg/ipa/pr63416.c      (revision 276272)
+++ testsuite/gcc.dg/ipa/pr63416.c      (working copy)
@@ -1,5 +1,5 @@
 /* { 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__))
 
 typedef int TEST_F30 (int *v);
Index: testsuite/gcc.dg/tree-ssa/ssa-thread-12.c
===================================================================
--- testsuite/gcc.dg/tree-ssa/ssa-thread-12.c   (revision 276272)
+++ testsuite/gcc.dg/tree-ssa/ssa-thread-12.c   (working copy)
@@ -56,7 +56,7 @@ bmp_iter_and_compl (bitmap_iterator * bi
 }
 
 extern int VEC_int_base_length (VEC_int_base *);
-bitmap
+inline bitmap
 compute_idf (bitmap def_blocks, bitmap_head * dfs)
 {
   bitmap_iterator bi;
Index: testsuite/gcc.dg/vect/pr66142.c
===================================================================
--- testsuite/gcc.dg/vect/pr66142.c     (revision 276272)
+++ testsuite/gcc.dg/vect/pr66142.c     (working copy)
@@ -1,6 +1,6 @@
 /* PR middle-end/66142 */
 /* { 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 } } */
 
 struct A { float x, y; };

Reply via email to