Schedule by INSN_COST in case of tie
2018-09-13 Vlad Lazar <vlad.lazar@arm.com> * haifa-sched.c (rank_for_schedule): Schedule by INSN_COST. (rfs_decision): New scheduling decision. From-SVN: r264270
This commit is contained in:
parent
2aa4cc744f
commit
d8d9514c87
@ -1,3 +1,8 @@
|
|||||||
|
2018-09-13 Vlad Lazar <vlad.lazar@arm.com>
|
||||||
|
|
||||||
|
* haifa-sched.c (rank_for_schedule): Schedule by INSN_COST.
|
||||||
|
(rfs_decision): New scheduling decision.
|
||||||
|
|
||||||
2018-09-13 Richard Biener <rguenther@suse.de>
|
2018-09-13 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
PR bootstrap/87134
|
PR bootstrap/87134
|
||||||
|
@ -2542,7 +2542,7 @@ enum rfs_decision {
|
|||||||
RFS_SCHED_GROUP, RFS_PRESSURE_DELAY, RFS_PRESSURE_TICK,
|
RFS_SCHED_GROUP, RFS_PRESSURE_DELAY, RFS_PRESSURE_TICK,
|
||||||
RFS_FEEDS_BACKTRACK_INSN, RFS_PRIORITY, RFS_SPECULATION,
|
RFS_FEEDS_BACKTRACK_INSN, RFS_PRIORITY, RFS_SPECULATION,
|
||||||
RFS_SCHED_RANK, RFS_LAST_INSN, RFS_PRESSURE_INDEX,
|
RFS_SCHED_RANK, RFS_LAST_INSN, RFS_PRESSURE_INDEX,
|
||||||
RFS_DEP_COUNT, RFS_TIE, RFS_FUSION, RFS_N };
|
RFS_DEP_COUNT, RFS_TIE, RFS_FUSION, RFS_COST, RFS_N };
|
||||||
|
|
||||||
/* Corresponding strings for print outs. */
|
/* Corresponding strings for print outs. */
|
||||||
static const char *rfs_str[RFS_N] = {
|
static const char *rfs_str[RFS_N] = {
|
||||||
@ -2550,7 +2550,7 @@ static const char *rfs_str[RFS_N] = {
|
|||||||
"RFS_SCHED_GROUP", "RFS_PRESSURE_DELAY", "RFS_PRESSURE_TICK",
|
"RFS_SCHED_GROUP", "RFS_PRESSURE_DELAY", "RFS_PRESSURE_TICK",
|
||||||
"RFS_FEEDS_BACKTRACK_INSN", "RFS_PRIORITY", "RFS_SPECULATION",
|
"RFS_FEEDS_BACKTRACK_INSN", "RFS_PRIORITY", "RFS_SPECULATION",
|
||||||
"RFS_SCHED_RANK", "RFS_LAST_INSN", "RFS_PRESSURE_INDEX",
|
"RFS_SCHED_RANK", "RFS_LAST_INSN", "RFS_PRESSURE_INDEX",
|
||||||
"RFS_DEP_COUNT", "RFS_TIE", "RFS_FUSION" };
|
"RFS_DEP_COUNT", "RFS_TIE", "RFS_FUSION", "RFS_COST" };
|
||||||
|
|
||||||
/* Statistical breakdown of rank_for_schedule decisions. */
|
/* Statistical breakdown of rank_for_schedule decisions. */
|
||||||
struct rank_for_schedule_stats_t { unsigned stats[RFS_N]; };
|
struct rank_for_schedule_stats_t { unsigned stats[RFS_N]; };
|
||||||
@ -2803,6 +2803,14 @@ rank_for_schedule (const void *x, const void *y)
|
|||||||
if (flag_sched_dep_count_heuristic && val != 0)
|
if (flag_sched_dep_count_heuristic && val != 0)
|
||||||
return rfs_result (RFS_DEP_COUNT, val, tmp, tmp2);
|
return rfs_result (RFS_DEP_COUNT, val, tmp, tmp2);
|
||||||
|
|
||||||
|
/* Sort by INSN_COST rather than INSN_LUID. This means that instructions
|
||||||
|
which take longer to execute are prioritised and it leads to more
|
||||||
|
dual-issue opportunities on in-order cores which have this feature. */
|
||||||
|
|
||||||
|
if (INSN_COST (tmp) != INSN_COST (tmp2))
|
||||||
|
return rfs_result (RFS_COST, INSN_COST (tmp2) - INSN_COST (tmp),
|
||||||
|
tmp, tmp2);
|
||||||
|
|
||||||
/* If insns are equally good, sort by INSN_LUID (original insn order),
|
/* If insns are equally good, sort by INSN_LUID (original insn order),
|
||||||
so that we make the sort stable. This minimizes instruction movement,
|
so that we make the sort stable. This minimizes instruction movement,
|
||||||
thus minimizing sched's effect on debugging and cross-jumping. */
|
thus minimizing sched's effect on debugging and cross-jumping. */
|
||||||
|
Loading…
Reference in New Issue
Block a user