No documentation of -fsched-pressure-algorithm
Richard Sandiford
rdsandiford@googlemail.com
Wed May 30 18:53:00 GMT 2012
Ian Lance Taylor <iant@google.com> writes:
> Richard Sandiford <rdsandiford@googlemail.com> writes:
>> 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.
>
> This is OK.
Thanks. It's taken me too long to update the s390 bits too, but finally
got round to it today. Tested by building s390x-linux-gnu still builds,
uses the new -fsched-pressure algorithm by default, but can be told to
use the old one using --param.
Andreas, Ulrich, are the s390 bits OK?
Thanks,
Richard
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.
Index: gcc/doc/invoke.texi
===================================================================
--- gcc/doc/invoke.texi 2012-05-23 21:49:55.000000000 +0100
+++ gcc/doc/invoke.texi 2012-05-30 19:46:29.789826901 +0100
@@ -9342,6 +9342,17 @@ Set the maximum number of instructions e
reassociated tree. This parameter overrides target dependent
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
Index: gcc/common.opt
===================================================================
--- gcc/common.opt 2012-05-16 21:33:02.000000000 +0100
+++ gcc/common.opt 2012-05-30 19:46:29.694826888 +0100
@@ -1664,19 +1664,6 @@ fsched-pressure
Common Report Var(flag_sched_pressure) Init(0) Optimization
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
Common Report Var(flag_schedule_speculative) Init(1) Optimization
Allow speculative motion of non-loads
Index: gcc/flag-types.h
===================================================================
--- gcc/flag-types.h 2012-05-05 10:37:38.000000000 +0100
+++ gcc/flag-types.h 2012-05-30 19:46:29.811826884 +0100
@@ -106,14 +106,6 @@ enum symbol_visibility
};
#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). */
enum ira_algorithm
{
Index: gcc/sched-int.h
===================================================================
--- gcc/sched-int.h 2012-05-05 10:37:38.000000000 +0100
+++ gcc/sched-int.h 2012-05-30 19:46:29.824826882 +0100
@@ -37,6 +37,14 @@ #define GCC_SCHED_INT_H
enum sched_pass_id_t { SCHED_PASS_UNKNOWN, SCHED_RGN_PASS, SCHED_EBB_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 (rtx, heap) *insn_vec_t;
typedef VEC (rtx, heap) *rtx_vec_t;
Index: gcc/params.def
===================================================================
--- gcc/params.def 2012-05-05 10:37:38.000000000 +0100
+++ gcc/params.def 2012-05-30 19:46:29.822826883 +0100
@@ -979,6 +979,12 @@ DEFPARAM (PARAM_MAX_TRACKED_STRLENS,
"track string lengths",
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:
mode:c
Index: gcc/haifa-sched.c
===================================================================
--- gcc/haifa-sched.c 2012-05-30 19:44:56.000000000 +0100
+++ gcc/haifa-sched.c 2012-05-30 19:46:29.816826884 +0100
@@ -6230,7 +6230,8 @@ sched_init (void)
if (flag_sched_pressure
&& !reload_completed
&& 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
sched_pressure = SCHED_PRESSURE_NONE;
Index: gcc/common/config/s390/s390-common.c
===================================================================
--- gcc/common/config/s390/s390-common.c 2012-05-06 13:47:49.000000000 +0100
+++ gcc/common/config/s390/s390-common.c 2012-05-30 19:46:29.717826887 +0100
@@ -51,11 +51,8 @@ static const struct default_options s390
{
{ OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 },
- /* Enable -fsched-pressure using -fsched-pressure-algorithm=model
- by default when optimizing. */
+ /* Enable -fsched-pressure by default when optimizing. */
{ 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. */
{ OPT_LEVELS_ALL, OPT_fcaller_saves, NULL, 0 },
Index: gcc/config/s390/s390.c
===================================================================
--- gcc/config/s390/s390.c 2012-05-05 18:40:56.000000000 +0100
+++ gcc/config/s390/s390.c 2012-05-30 19:46:29.734826882 +0100
@@ -1650,6 +1650,11 @@ s390_option_override (void)
is beneficial on s390, we enable it if available. */
if (flag_prefetch_loop_arrays < 0 && HAVE_prefetch && optimize >= 3)
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. */
More information about the Gcc-patches
mailing list