invoke.texi (max-loop-headers-insns): Document.
authorJan Hubicka <hubicka@ucw.cz>
Wed, 8 Jun 2016 14:11:51 +0000 (16:11 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 8 Jun 2016 14:11:51 +0000 (14:11 +0000)
* invoke.texi (max-loop-headers-insns): Document.
* params.def (PARAM_MAX_LOOP_HEADER_INSNS): New.
* tree-ssa-loop-ch.c (should_duplicate_loop_header_p): Update comment.
(ch_base::copy_headers): Use PARAM_MAX_LOOP_HEADER_INSNS.

From-SVN: r237219

gcc/ChangeLog
gcc/doc/invoke.texi
gcc/params.def
gcc/tree-ssa-loop-ch.c

index 474b064ff0480bba7d8fb8540135b48729672b8f..359c1d7bb43bba2dc0c0a5bfb0ad3a7ebcfa3690 100644 (file)
@@ -1,3 +1,10 @@
+2016-06-07  Jan Hubicka  <hubicka@ucw.cz>
+
+       * invoke.texi (max-loop-headers-insns): Document.
+       * params.def (PARAM_MAX_LOOP_HEADER_INSNS): New.
+       * tree-ssa-loop-ch.c (should_duplicate_loop_header_p): Update comment.
+       (ch_base::copy_headers): Use PARAM_MAX_LOOP_HEADER_INSNS.
+
 2016-06-08  Richard Biener  <rguenther@suse.de>
 
        * tree-vect-stmts.c (vectorizable_load): Remove restrictions
index fc66be55ba8d74989d999f94c2a62011e6f77f1c..2e92dcb44ca2736dae070fb4ab1ac8a65f7ddf0d 100644 (file)
@@ -9066,6 +9066,10 @@ The maximum number of insns of an unswitched loop.
 @item max-unswitch-level
 The maximum number of branches unswitched in a single loop.
 
+@item max-loop-headers-insns
+The maximum number of insns in loop header duplicated by he copy loop headers
+pass.
+
 @item lim-expensive
 The minimum cost of an expensive expression in the loop invariant motion.
 
index 62a1e404a1aac763ae1187b98027d073bcd6f712..2f552eb4abf421f8eb30ea3161cc32b5e13dbc0d 100644 (file)
@@ -344,6 +344,13 @@ DEFPARAM(PARAM_MAX_UNSWITCH_LEVEL,
        "The maximum number of unswitchings in a single loop.",
        3, 0, 0)
 
+/* The maximum number of insns in loop header duplicated by he copy loop
+   headers pass.  */
+DEFPARAM(PARAM_MAX_LOOP_HEADER_INSNS,
+       "max-loop-header-insns",
+       "The maximum number of insns in loop header duplicated by he copy loop headers pass.",
+       20, 0, 0)
+
 /* The maximum number of iterations of a loop the brute force algorithm
    for analysis of # of iterations of the loop tries to evaluate.  */
 DEFPARAM(PARAM_MAX_ITERATIONS_TO_TRACK,
index 0ddbda6da7ea5f4fe8ac8efe93abee4054bf1127..9a8136968de141c2e25bc41619c0138bd4a7dfa3 100644 (file)
@@ -33,6 +33,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree-inline.h"
 #include "tree-ssa-scopedtables.h"
 #include "tree-ssa-threadedge.h"
+#include "params.h"
 
 /* Duplicates headers of loops if they are small enough, so that the statements
    in the loop body are always executed when the loop is entered.  This
@@ -106,8 +107,7 @@ should_duplicate_loop_header_p (basic_block header, struct loop *loop,
       return false;
     }
 
-  /* Approximately copy the conditions that used to be used in jump.c --
-     at most 20 insns and no calls.  */
+  /* Count number of instructions and punt on calls.  */
   for (bsi = gsi_start_bb (header); !gsi_end_p (bsi); gsi_next (&bsi))
     {
       last = gsi_stmt (bsi);
@@ -290,8 +290,8 @@ ch_base::copy_headers (function *fun)
 
   FOR_EACH_LOOP (loop, 0)
     {
-      /* Copy at most 20 insns.  */
-      int limit = 20;
+      int initial_limit = PARAM_VALUE (PARAM_MAX_LOOP_HEADER_INSNS);
+      int remaining_limit = initial_limit;
       if (dump_file && (dump_flags & TDF_DETAILS))
        fprintf (dump_file,
                 "Analyzing loop %i\n", loop->num);
@@ -313,7 +313,7 @@ ch_base::copy_headers (function *fun)
 
       exit = NULL;
       n_bbs = 0;
-      while (should_duplicate_loop_header_p (header, loop, &limit))
+      while (should_duplicate_loop_header_p (header, loop, &remaining_limit))
        {
          /* Find a successor of header that is inside a loop; i.e. the new
             header after the condition is copied.  */
@@ -333,7 +333,8 @@ ch_base::copy_headers (function *fun)
        fprintf (dump_file,
                 "Duplicating header of the loop %d up to edge %d->%d,"
                 " %i insns.\n",
-                loop->num, exit->src->index, exit->dest->index, 20 - limit);
+                loop->num, exit->src->index, exit->dest->index,
+                initial_limit - remaining_limit);
 
       /* Ensure that the header will have just the latch as a predecessor
         inside the loop.  */