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:
Richard Sandiford 2012-06-06 09:12:58 +00:00 committed by Richard Sandiford
parent 14ae3cbc62
commit c881de027c
9 changed files with 46 additions and 26 deletions

View File

@ -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

View File

@ -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

View File

@ -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 },

View File

@ -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. */

View File

@ -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

View File

@ -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
{ {

View File

@ -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;

View File

@ -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

View File

@ -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;