2009-07-13 Ghassan Shobaki <ghassan.shobaki@amd.com>
* haifa-sched.c (rank_for_schedule): Introduced flags to enable/disable individual scheduling heuristics. * common.opt: Introduced flags to enable/disable individual heuristics in the scheduler. * doc/invoke.texi: Introduced flags to enable/disable individual heuristics in the scheduler. From-SVN: r149603
This commit is contained in:
parent
05682af89f
commit
ee4764a88b
|
@ -1,3 +1,13 @@
|
|||
2009-07-13 Ghassan Shobaki <ghassan.shobaki@amd.com>
|
||||
|
||||
* haifa-sched.c
|
||||
(rank_for_schedule): Introduced flags to enable/disable
|
||||
individual scheduling heuristics.
|
||||
* common.opt: Introduced flags to enable/disable
|
||||
individual heuristics in the scheduler.
|
||||
* doc/invoke.texi: Introduced flags to enable/disable
|
||||
individual heuristics in the scheduler.
|
||||
|
||||
2009-07-13 Kai Tietz <kai.tietz@onevision.com>
|
||||
|
||||
* config/i386/t-gthr-win32 (LIB2FUNCS_EXTRA): Remove file
|
||||
|
|
|
@ -1056,6 +1056,34 @@ fsched-stalled-insns-dep=
|
|||
Common RejectNegative Joined UInteger
|
||||
-fsched-stalled-insns-dep=<number> Set dependence distance checking in premature scheduling of queued insns
|
||||
|
||||
fsched-group-heuristic
|
||||
Common Report Var(flag_sched_group_heuristic) Init(1) Optimization
|
||||
Enable the group heuristic in the scheduler
|
||||
|
||||
fsched-critical-path-heuristic
|
||||
Common Report Var(flag_sched_critical_path_heuristic) Init(1) Optimization
|
||||
Enable the critical path heuristic in the scheduler
|
||||
|
||||
fsched-spec-insn-heuristic
|
||||
Common Report Var(flag_sched_spec_insn_heuristic) Init(1) Optimization
|
||||
Enable the speculative instruction heuristic in the scheduler
|
||||
|
||||
fsched-reg-pressure-heuristic
|
||||
Common Report Var(flag_sched_reg_pressure_heuristic) Init(1) Optimization
|
||||
Enable the register pressure heuristic in the scheduler
|
||||
|
||||
fsched-rank-heuristic
|
||||
Common Report Var(flag_sched_rank_heuristic) Init(1) Optimization
|
||||
Enable the rank heuristic in the scheduler
|
||||
|
||||
fsched-last-insn-heuristic
|
||||
Common Report Var(flag_sched_last_insn_heuristic) Init(1) Optimization
|
||||
Enable the last instruction heuristic in the scheduler
|
||||
|
||||
fsched-dep-count-heuristic
|
||||
Common Report Var(flag_sched_dep_count_heuristic) Init(1) Optimization
|
||||
Enable the dependent count heuristic in the scheduler
|
||||
|
||||
fsection-anchors
|
||||
Common Report Var(flag_section_anchors) Optimization
|
||||
Access data in the same section from shared anchor points
|
||||
|
|
|
@ -364,6 +364,10 @@ Objective-C and Objective-C++ Dialects}.
|
|||
-frounding-math -fsched2-use-superblocks @gol
|
||||
-fsched2-use-traces -fsched-spec-load -fsched-spec-load-dangerous @gol
|
||||
-fsched-stalled-insns-dep[=@var{n}] -fsched-stalled-insns[=@var{n}] @gol
|
||||
-fsched-group-heuristic -fsched-critical-path-heuristic @gol
|
||||
-fsched-spec-insn-heuristic -fsched-reg-pressure-heuristic @gol
|
||||
-fsched-rank-heuristic -fsched-last-insn-heuristic @gol
|
||||
-fsched-dep-count-heuristic @gol
|
||||
-fschedule-insns -fschedule-insns2 -fsection-anchors @gol
|
||||
-fselective-scheduling -fselective-scheduling2 @gol
|
||||
-fsel-sched-pipelining -fsel-sched-pipelining-outer-loops @gol
|
||||
|
@ -6229,6 +6233,49 @@ results from the algorithm.
|
|||
This only makes sense when scheduling after register allocation, i.e.@: with
|
||||
@option{-fschedule-insns2} or at @option{-O2} or higher.
|
||||
|
||||
@item -fsched-group-heuristic
|
||||
@opindex fsched-group-heuristic
|
||||
Enable the group heuristic in the scheduler. This is enabled by default
|
||||
when scheduling is enabled, i.e.@: with @option{-fschedule-insns}
|
||||
or @option{-fschedule-insns2} or at @option{-O2} or higher.
|
||||
|
||||
@item -fsched-critical-path-heuristic
|
||||
@opindex fsched-critical-path-heuristic
|
||||
Enable the critical-path heuristic in the scheduler. This is enabled
|
||||
by default when scheduling is enabled, i.e.@: with @option{-fschedule-insns}
|
||||
or @option{-fschedule-insns2} or at @option{-O2} or higher.
|
||||
|
||||
@item -fsched-spec-insn-heuristic
|
||||
@opindex fsched-spec-insn-heuristic
|
||||
Enable the speculative instruction heuristic in the scheduler. This is
|
||||
enabled by default when scheduling is enabled, i.e.@: with
|
||||
@option{-fschedule-insns} or @option{-fschedule-insns2} or
|
||||
at @option{-O2} or higher.
|
||||
|
||||
@item -fsched-reg-pressure-heuristic
|
||||
@opindex fsched-reg-pressure-heuristic
|
||||
Enable the register pressure heuristic in the scheduler. This only makes
|
||||
sense when scheduling before register allocation, i.e.@:
|
||||
with @option{-fschedule-insns} or at @option{-O2} or higher.
|
||||
|
||||
@item -fsched-rank-heuristic
|
||||
@opindex fsched-rank-heuristic
|
||||
Enable the rank heuristic in the scheduler. This is enabled by default
|
||||
when scheduling is enabled, i.e.@: with @option{-fschedule-insns}
|
||||
or @option{-fschedule-insns2} or at @option{-O2} or higher.
|
||||
|
||||
@item -fsched-last-insn-heuristic
|
||||
@opindex fsched-last-insn-heuristic
|
||||
Enable the last-instruction heuristic in the scheduler. This is enabled
|
||||
by default when scheduling is enabled, i.e.@: with @option{-fschedule-insns}
|
||||
or @option{-fschedule-insns2} or at @option{-O2} or higher.
|
||||
|
||||
@item -fsched-dep-count-heuristic
|
||||
@opindex fsched-dep-count-heuristic
|
||||
Enable the dependent-count heuristic in the scheduler. This is enabled
|
||||
by default when scheduling is enabled, i.e.@: with @option{-fschedule-insns}
|
||||
or @option{-fschedule-insns2} or at @option{-O2} or higher.
|
||||
|
||||
@item -fsched2-use-traces
|
||||
@opindex fsched2-use-traces
|
||||
Use @option{-fsched2-use-superblocks} algorithm when scheduling after register
|
||||
|
|
|
@ -890,7 +890,8 @@ rank_for_schedule (const void *x, const void *y)
|
|||
int val, priority_val, weight_val, info_val;
|
||||
|
||||
/* The insn in a schedule group should be issued the first. */
|
||||
if (SCHED_GROUP_P (tmp) != SCHED_GROUP_P (tmp2))
|
||||
if (flag_sched_group_heuristic &&
|
||||
SCHED_GROUP_P (tmp) != SCHED_GROUP_P (tmp2))
|
||||
return SCHED_GROUP_P (tmp2) ? 1 : -1;
|
||||
|
||||
/* Make sure that priority of TMP and TMP2 are initialized. */
|
||||
|
@ -899,11 +900,11 @@ rank_for_schedule (const void *x, const void *y)
|
|||
/* Prefer insn with higher priority. */
|
||||
priority_val = INSN_PRIORITY (tmp2) - INSN_PRIORITY (tmp);
|
||||
|
||||
if (priority_val)
|
||||
if (flag_sched_critical_path_heuristic && priority_val)
|
||||
return priority_val;
|
||||
|
||||
/* Prefer speculative insn with greater dependencies weakness. */
|
||||
if (spec_info)
|
||||
if (flag_sched_spec_insn_heuristic && spec_info)
|
||||
{
|
||||
ds_t ds1, ds2;
|
||||
dw_t dw1, dw2;
|
||||
|
@ -927,16 +928,16 @@ rank_for_schedule (const void *x, const void *y)
|
|||
}
|
||||
|
||||
/* Prefer an insn with smaller contribution to registers-pressure. */
|
||||
if (!reload_completed &&
|
||||
if (flag_sched_reg_pressure_heuristic && !reload_completed &&
|
||||
(weight_val = INSN_REG_WEIGHT (tmp) - INSN_REG_WEIGHT (tmp2)))
|
||||
return weight_val;
|
||||
|
||||
info_val = (*current_sched_info->rank) (tmp, tmp2);
|
||||
if (info_val)
|
||||
if(flag_sched_rank_heuristic && info_val)
|
||||
return info_val;
|
||||
|
||||
/* Compare insns based on their relation to the last-scheduled-insn. */
|
||||
if (INSN_P (last_scheduled_insn))
|
||||
if (flag_sched_last_insn_heuristic && INSN_P (last_scheduled_insn))
|
||||
{
|
||||
dep_t dep1;
|
||||
dep_t dep2;
|
||||
|
@ -977,7 +978,7 @@ rank_for_schedule (const void *x, const void *y)
|
|||
val = (sd_lists_size (tmp2, SD_LIST_FORW)
|
||||
- sd_lists_size (tmp, SD_LIST_FORW));
|
||||
|
||||
if (val != 0)
|
||||
if (flag_sched_dep_count_heuristic && val != 0)
|
||||
return val;
|
||||
|
||||
/* If insns are equally good, sort by INSN_LUID (original insn order),
|
||||
|
|
Loading…
Reference in New Issue