params.def (PARAM_SRA_MAX_STRUCTURE_SIZE): New.
* params.def (PARAM_SRA_MAX_STRUCTURE_SIZE): New. (PARAM_SRA_FIELD_STRUCTURE_RATIO): Likewise. * params.h (SRA_MAX_STRUCTURE_SIZE): New. (SRA_FIELD_STRUCTURE_RATIO): Likewise. * tree-sra.c: Include "params.h". (decide_block_copy): Use new parameters. * doc/invoke.texi (Optimize Options): Document new SRA pass parameters sra-max-structure-size and sra-field-structure-ratio. [testsuite] * gcc.dg/tree-ssa/sra-1.c: Pass --param sra-max-structure-size. From-SVN: r89711
This commit is contained in:
parent
72111a1f4b
commit
61b5800161
|
@ -1,3 +1,14 @@
|
|||
2004-10-28 Ben Elliston <bje@au.ibm.com>
|
||||
|
||||
* params.def (PARAM_SRA_MAX_STRUCTURE_SIZE): New.
|
||||
(PARAM_SRA_FIELD_STRUCTURE_RATIO): Likewise.
|
||||
* params.h (SRA_MAX_STRUCTURE_SIZE): New.
|
||||
(SRA_FIELD_STRUCTURE_RATIO): Likewise.
|
||||
* tree-sra.c: Include "params.h".
|
||||
(decide_block_copy): Use new parameters.
|
||||
* doc/invoke.texi (Optimize Options): Document new SRA pass
|
||||
parameters sra-max-structure-size and sra-field-structure-ratio.
|
||||
|
||||
2004-10-27 Nicolas Pitre <nico@cam.org>
|
||||
|
||||
* config/arm/ieee754-df.S (floatdidf): Fix regression with big values.
|
||||
|
|
|
@ -5313,6 +5313,19 @@ In each case, the @var{value} is an integer. The allowable choices for
|
|||
@var{name} are given in the following table:
|
||||
|
||||
@table @gcctabopt
|
||||
@item sra-max-structure-size
|
||||
The maximum structure size, in bytes, at which the scalar replacement
|
||||
of aggregates (SRA) optimization will perform block copies. The
|
||||
default value, 0, implies that GCC will select the most appropriate
|
||||
size itself.
|
||||
|
||||
@item sra-field-structure-ratio
|
||||
The treshold ratio (as a percentage) between instantiated fields and
|
||||
the complete structure size. We say that if the ratio of the number
|
||||
of bytes in instantiated fields to the number of bytes in the complete
|
||||
structure exceeds this parameter, then block copies are not used. The
|
||||
default is 75.
|
||||
|
||||
@item max-crossjump-edges
|
||||
The maximum number of incoming edges to consider for crossjumping.
|
||||
The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
|
||||
|
|
|
@ -35,6 +35,25 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
|||
|
||||
Be sure to add an entry to invoke.texi summarizing the parameter. */
|
||||
|
||||
/* The maximum structure size at which the scalar replacement of
|
||||
aggregates (SRA) pass will perform block copies. The default
|
||||
value, 0, implies that GCC will select the most appropriate size
|
||||
itself. */
|
||||
DEFPARAM (PARAM_SRA_MAX_STRUCTURE_SIZE,
|
||||
"sra-max-structure-size",
|
||||
"The maximum structure size (in bytes) at which GCC will do block copies.",
|
||||
0)
|
||||
|
||||
/* The ratio between instantiated fields and the complete structure
|
||||
size. We say that if the ratio of the number of bytes in
|
||||
instantiated fields to the number of bytes in the complete
|
||||
structure exceeds this parameter, then block copies are not used.
|
||||
The default is 75%. */
|
||||
DEFPARAM (PARAM_SRA_FIELD_STRUCTURE_RATIO,
|
||||
"sra-field-structure-ratio",
|
||||
"The threshold ratio between instantiated fields and the total structure size.",
|
||||
75)
|
||||
|
||||
/* The single function inlining limit. This is the maximum size
|
||||
of a function counted in internal gcc instructions (not in
|
||||
real machine instructions) that is eligible for inlining
|
||||
|
|
|
@ -82,6 +82,10 @@ typedef enum compiler_param
|
|||
(compiler_params[(int) ENUM].value)
|
||||
|
||||
/* Macros for the various parameters. */
|
||||
#define SRA_MAX_STRUCTURE_SIZE \
|
||||
PARAM_VALUE (PARAM_SRA_MAX_STRUCTURE_SIZE)
|
||||
#define SRA_FIELD_STRUCTURE_RATIO \
|
||||
PARAM_VALUE (PARAM_SRA_FIELD_STRUCTURE_RATIO)
|
||||
#define MAX_INLINE_INSNS_SINGLE \
|
||||
PARAM_VALUE (PARAM_MAX_INLINE_INSNS_SINGLE)
|
||||
#define MAX_INLINE_INSNS \
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2004-10-28 Ben Elliston <bje@au.ibm.com>
|
||||
|
||||
* gcc.dg/tree-ssa/sra-1.c: Pass --param sra-max-structure-size.
|
||||
|
||||
2004-10-27 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* gcc.dg/cpp/direct2.c: Cope with different bison 'parse' or
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O1 -fdump-tree-optimized" } */
|
||||
/* { dg-options "-O1 -fdump-tree-optimized --param sra-max-structure-size=32" } */
|
||||
|
||||
/* Tests for SRA. */
|
||||
|
||||
|
|
|
@ -48,6 +48,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
|||
#include "target.h"
|
||||
/* expr.h is needed for MOVE_RATIO. */
|
||||
#include "expr.h"
|
||||
#include "params.h"
|
||||
|
||||
|
||||
/* This object of this pass is to replace a non-addressable aggregate with a
|
||||
|
@ -1292,6 +1293,14 @@ decide_block_copy (struct sra_elt *elt)
|
|||
{
|
||||
unsigned HOST_WIDE_INT full_size, inst_size = 0;
|
||||
unsigned int inst_count;
|
||||
unsigned int max_size;
|
||||
|
||||
/* If the sra-max-structure-size parameter is 0, then the
|
||||
user has not overridden the parameter and we can choose a
|
||||
sensible default. */
|
||||
max_size = SRA_MAX_STRUCTURE_SIZE
|
||||
? SRA_MAX_STRUCTURE_SIZE
|
||||
: MOVE_RATIO * UNITS_PER_WORD;
|
||||
|
||||
full_size = tree_low_cst (size_tree, 1);
|
||||
|
||||
|
@ -1302,14 +1311,14 @@ decide_block_copy (struct sra_elt *elt)
|
|||
|
||||
/* If the structure is small, and we've made copies, go ahead
|
||||
and instantiate, hoping that the copies will go away. */
|
||||
if (full_size <= (unsigned) MOVE_RATIO * UNITS_PER_WORD
|
||||
if (full_size <= max_size
|
||||
&& elt->n_copies > elt->n_uses)
|
||||
use_block_copy = false;
|
||||
else
|
||||
{
|
||||
inst_count = sum_instantiated_sizes (elt, &inst_size);
|
||||
|
||||
if (inst_size * 4 >= full_size * 3)
|
||||
if (inst_size * 100 >= full_size * SRA_FIELD_STRUCTURE_RATIO)
|
||||
use_block_copy = false;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue