invoke.texi (max-loop-headers-insns): Document.
* 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
This commit is contained in:
parent
b2ae281460
commit
568876dc70
4 changed files with 25 additions and 6 deletions
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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. */
|
||||
|
|
Loading…
Add table
Reference in a new issue