This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] haifa-sched: fix autopref_rank_for_schedule qsort comparator
On Tue, 19 Sep 2017, Alexander Monakov wrote:
> * haifa-sched.c (autopref_rank_for_schedule): Order 'irrelevant' insns
> first, always call autopref_rank_data otherwise.
May I apply this patch now to unblock qsort checking? Further changes or
adjustments can then go in independently at a later time.
Thanks.
Alexander
> --- a/gcc/haifa-sched.c
> +++ b/gcc/haifa-sched.c
> @@ -5707,7 +5707,8 @@ autopref_rank_data (autopref_multipass_data_t data1,
> static int
> autopref_rank_for_schedule (const rtx_insn *insn1, const rtx_insn *insn2)
> {
> - for (int write = 0; write < 2; ++write)
> + int r = 0;
> + for (int write = 0; write < 2 && !r; ++write)
> {
> autopref_multipass_data_t data1
> = &INSN_AUTOPREF_MULTIPASS_DATA (insn1)[write];
> @@ -5716,21 +5717,20 @@ autopref_rank_for_schedule (const rtx_insn *insn1, const rtx_insn *insn2)
>
> if (data1->status == AUTOPREF_MULTIPASS_DATA_UNINITIALIZED)
> autopref_multipass_init (insn1, write);
> - if (data1->status == AUTOPREF_MULTIPASS_DATA_IRRELEVANT)
> - continue;
>
> if (data2->status == AUTOPREF_MULTIPASS_DATA_UNINITIALIZED)
> autopref_multipass_init (insn2, write);
> - if (data2->status == AUTOPREF_MULTIPASS_DATA_IRRELEVANT)
> - continue;
>
> - if (!rtx_equal_p (data1->base, data2->base))
> - continue;
> + int irrel1 = data1->status == AUTOPREF_MULTIPASS_DATA_IRRELEVANT;
> + int irrel2 = data2->status == AUTOPREF_MULTIPASS_DATA_IRRELEVANT;
>
> - return autopref_rank_data (data1, data2);
> + if (!irrel1 && !irrel2)
> + r = autopref_rank_data (data1, data2);
> + else
> + r = irrel2 - irrel1;
> }
>
> - return 0;
> + return r;
> }
>
> /* True if header of debug dump was printed. */
>