mirror of git://gcc.gnu.org/git/gcc.git
invoke.texi (sched-pressure-algorithm): Document new --param.
gcc/ * doc/invoke.texi (sched-pressure-algorithm): Document new --param. * common.opt (fsched-pressure-algorithm=): Remove. * flag-types.h (sched_pressure_algorithm): Move to... * sched-int.h (sched_pressure_algorithm): ...here. * params.def (sched-pressure-algorithm): New param. * haifa-sched.c (sched_init): Use it to initialize sched_pressure. * common/config/s390/s390-common.c (s390_option_optimization_table): Remove OPT_fsched_pressure_algorithm_ entry. * config/s390/s390.c (s390_option_override): Set a default value for PARAM_SCHED_PRESSURE_ALGORITHM. From-SVN: r188258
This commit is contained in:
parent
14ae3cbc62
commit
c881de027c
|
|
@ -1,3 +1,16 @@
|
||||||
|
2012-06-06 Richard Sandiford <r.sandiford@uk.ibm.com>
|
||||||
|
|
||||||
|
* doc/invoke.texi (sched-pressure-algorithm): Document new --param.
|
||||||
|
* common.opt (fsched-pressure-algorithm=): Remove.
|
||||||
|
* flag-types.h (sched_pressure_algorithm): Move to...
|
||||||
|
* sched-int.h (sched_pressure_algorithm): ...here.
|
||||||
|
* params.def (sched-pressure-algorithm): New param.
|
||||||
|
* haifa-sched.c (sched_init): Use it to initialize sched_pressure.
|
||||||
|
* common/config/s390/s390-common.c (s390_option_optimization_table):
|
||||||
|
Remove OPT_fsched_pressure_algorithm_ entry.
|
||||||
|
* config/s390/s390.c (s390_option_override): Set a default value for
|
||||||
|
PARAM_SCHED_PRESSURE_ALGORITHM.
|
||||||
|
|
||||||
2012-06-05 Michael Meissner <meissner@linux.vnet.ibm.com>
|
2012-06-05 Michael Meissner <meissner@linux.vnet.ibm.com>
|
||||||
|
|
||||||
PR target/53487
|
PR target/53487
|
||||||
|
|
|
||||||
|
|
@ -1664,19 +1664,6 @@ fsched-pressure
|
||||||
Common Report Var(flag_sched_pressure) Init(0) Optimization
|
Common Report Var(flag_sched_pressure) Init(0) Optimization
|
||||||
Enable register pressure sensitive insn scheduling
|
Enable register pressure sensitive insn scheduling
|
||||||
|
|
||||||
fsched-pressure-algorithm=
|
|
||||||
Common Joined RejectNegative Enum(sched_pressure_algorithm) Var(flag_sched_pressure_algorithm) Init(SCHED_PRESSURE_WEIGHTED)
|
|
||||||
-fsched-pressure-algorithm=[weighted|model] Set the pressure-scheduling algorithm
|
|
||||||
|
|
||||||
Enum
|
|
||||||
Name(sched_pressure_algorithm) Type(enum sched_pressure_algorithm) UnknownError(unknown %<fsched-pressure%> algorithm %qs)
|
|
||||||
|
|
||||||
EnumValue
|
|
||||||
Enum(sched_pressure_algorithm) String(weighted) Value(SCHED_PRESSURE_WEIGHTED)
|
|
||||||
|
|
||||||
EnumValue
|
|
||||||
Enum(sched_pressure_algorithm) String(model) Value(SCHED_PRESSURE_MODEL)
|
|
||||||
|
|
||||||
fsched-spec
|
fsched-spec
|
||||||
Common Report Var(flag_schedule_speculative) Init(1) Optimization
|
Common Report Var(flag_schedule_speculative) Init(1) Optimization
|
||||||
Allow speculative motion of non-loads
|
Allow speculative motion of non-loads
|
||||||
|
|
|
||||||
|
|
@ -51,11 +51,8 @@ static const struct default_options s390_option_optimization_table[] =
|
||||||
{
|
{
|
||||||
{ OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 },
|
{ OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 },
|
||||||
|
|
||||||
/* Enable -fsched-pressure using -fsched-pressure-algorithm=model
|
/* Enable -fsched-pressure by default when optimizing. */
|
||||||
by default when optimizing. */
|
|
||||||
{ OPT_LEVELS_1_PLUS, OPT_fsched_pressure, NULL, 1 },
|
{ OPT_LEVELS_1_PLUS, OPT_fsched_pressure, NULL, 1 },
|
||||||
{ OPT_LEVELS_1_PLUS, OPT_fsched_pressure_algorithm_,
|
|
||||||
NULL, SCHED_PRESSURE_MODEL },
|
|
||||||
|
|
||||||
/* ??? There are apparently still problems with -fcaller-saves. */
|
/* ??? There are apparently still problems with -fcaller-saves. */
|
||||||
{ OPT_LEVELS_ALL, OPT_fcaller_saves, NULL, 0 },
|
{ OPT_LEVELS_ALL, OPT_fcaller_saves, NULL, 0 },
|
||||||
|
|
|
||||||
|
|
@ -1649,6 +1649,11 @@ s390_option_override (void)
|
||||||
is beneficial on s390, we enable it if available. */
|
is beneficial on s390, we enable it if available. */
|
||||||
if (flag_prefetch_loop_arrays < 0 && HAVE_prefetch && optimize >= 3)
|
if (flag_prefetch_loop_arrays < 0 && HAVE_prefetch && optimize >= 3)
|
||||||
flag_prefetch_loop_arrays = 1;
|
flag_prefetch_loop_arrays = 1;
|
||||||
|
|
||||||
|
/* Use the alternative scheduling-pressure algorithm by default. */
|
||||||
|
maybe_set_param_value (PARAM_SCHED_PRESSURE_ALGORITHM, 2,
|
||||||
|
global_options.x_param_values,
|
||||||
|
global_options_set.x_param_values);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Map for smallest class containing reg regno. */
|
/* Map for smallest class containing reg regno. */
|
||||||
|
|
|
||||||
|
|
@ -9350,6 +9350,17 @@ Set the maximum number of instructions executed in parallel in
|
||||||
reassociated tree. This parameter overrides target dependent
|
reassociated tree. This parameter overrides target dependent
|
||||||
heuristics used by default if has non zero value.
|
heuristics used by default if has non zero value.
|
||||||
|
|
||||||
|
@item sched-pressure-algorithm
|
||||||
|
Choose between the two available implementations of
|
||||||
|
@option{-fsched-pressure}. Algorithm 1 is the original implementation
|
||||||
|
and is the more likely to prevent instructions from being reordered.
|
||||||
|
Algorithm 2 was designed to be a compromise between the relatively
|
||||||
|
conservative approach taken by algorithm 1 and the rather aggressive
|
||||||
|
approach taken by the default scheduler. It relies more heavily on
|
||||||
|
having a regular register file and accurate register pressure classes.
|
||||||
|
See @file{haifa-sched.c} in the GCC sources for more details.
|
||||||
|
|
||||||
|
The default choice depends on the target.
|
||||||
@end table
|
@end table
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -106,14 +106,6 @@ enum symbol_visibility
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The algorithm used to implement -fsched-pressure. */
|
|
||||||
enum sched_pressure_algorithm
|
|
||||||
{
|
|
||||||
SCHED_PRESSURE_NONE,
|
|
||||||
SCHED_PRESSURE_WEIGHTED,
|
|
||||||
SCHED_PRESSURE_MODEL
|
|
||||||
};
|
|
||||||
|
|
||||||
/* The algorithm used for the integrated register allocator (IRA). */
|
/* The algorithm used for the integrated register allocator (IRA). */
|
||||||
enum ira_algorithm
|
enum ira_algorithm
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -6229,7 +6229,8 @@ sched_init (void)
|
||||||
if (flag_sched_pressure
|
if (flag_sched_pressure
|
||||||
&& !reload_completed
|
&& !reload_completed
|
||||||
&& common_sched_info->sched_pass_id == SCHED_RGN_PASS)
|
&& common_sched_info->sched_pass_id == SCHED_RGN_PASS)
|
||||||
sched_pressure = flag_sched_pressure_algorithm;
|
sched_pressure = ((enum sched_pressure_algorithm)
|
||||||
|
PARAM_VALUE (PARAM_SCHED_PRESSURE_ALGORITHM));
|
||||||
else
|
else
|
||||||
sched_pressure = SCHED_PRESSURE_NONE;
|
sched_pressure = SCHED_PRESSURE_NONE;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -979,6 +979,12 @@ DEFPARAM (PARAM_MAX_TRACKED_STRLENS,
|
||||||
"track string lengths",
|
"track string lengths",
|
||||||
1000, 0, 0)
|
1000, 0, 0)
|
||||||
|
|
||||||
|
/* Keep this in sync with the sched_pressure_algorithm enum. */
|
||||||
|
DEFPARAM (PARAM_SCHED_PRESSURE_ALGORITHM,
|
||||||
|
"sched-pressure-algorithm",
|
||||||
|
"Which -fsched-pressure algorithm to apply",
|
||||||
|
1, 1, 2)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Local variables:
|
Local variables:
|
||||||
mode:c
|
mode:c
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,14 @@ along with GCC; see the file COPYING3. If not see
|
||||||
enum sched_pass_id_t { SCHED_PASS_UNKNOWN, SCHED_RGN_PASS, SCHED_EBB_PASS,
|
enum sched_pass_id_t { SCHED_PASS_UNKNOWN, SCHED_RGN_PASS, SCHED_EBB_PASS,
|
||||||
SCHED_SMS_PASS, SCHED_SEL_PASS };
|
SCHED_SMS_PASS, SCHED_SEL_PASS };
|
||||||
|
|
||||||
|
/* The algorithm used to implement -fsched-pressure. */
|
||||||
|
enum sched_pressure_algorithm
|
||||||
|
{
|
||||||
|
SCHED_PRESSURE_NONE,
|
||||||
|
SCHED_PRESSURE_WEIGHTED,
|
||||||
|
SCHED_PRESSURE_MODEL
|
||||||
|
};
|
||||||
|
|
||||||
typedef VEC (basic_block, heap) *bb_vec_t;
|
typedef VEC (basic_block, heap) *bb_vec_t;
|
||||||
typedef VEC (rtx, heap) *insn_vec_t;
|
typedef VEC (rtx, heap) *insn_vec_t;
|
||||||
typedef VEC (rtx, heap) *rtx_vec_t;
|
typedef VEC (rtx, heap) *rtx_vec_t;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue