@@ -3081,11 +3081,18 @@ ready_sort_real (struct ready_list *ready)
if (sched_verbose >= 4)
stats1 = rank_for_schedule_stats;
+ /* autopref_rank_for_schedule lacks transitivity. */
+ if (PARAM_VALUE (PARAM_SCHED_AUTOPREF_QUEUE_DEPTH) >= 0)
+ qsort_disable_checking |= 1;
+
if (n_ready_real == 2)
swap_sort (first, n_ready_real);
else if (n_ready_real > 2)
qsort (first, n_ready_real, sizeof (rtx), rank_for_schedule);
+ if (PARAM_VALUE (PARAM_SCHED_AUTOPREF_QUEUE_DEPTH) >= 0)
+ qsort_disable_checking &= ~1;
+
if (sched_verbose >= 4)
{
rank_for_schedule_stats_diff (&stats1, &rank_for_schedule_stats);
@@ -5704,6 +5711,7 @@ autopref_rank_data (autopref_multipass_data_t data1,
}
/* Helper function for rank_for_schedule sorting. */
+/* FIXME: this comparator lacks transitivity and is thus invalid for qsort. */
static int
autopref_rank_for_schedule (const rtx_insn *insn1, const rtx_insn *insn2)
{