From ab90c27b6739a096d9afe9472b14057fbc24e392 Mon Sep 17 00:00:00 2001 From: Alexander Monakov Date: Wed, 27 Sep 2017 20:16:53 +0300 Subject: [PATCH] haifa-sched: fix autopref_rank_for_schedule qsort comparator * haifa-sched.c (autopref_rank_for_schedule): Order 'irrelevant' insns first, always call autopref_rank_data otherwise. From-SVN: r253235 --- gcc/ChangeLog | 5 +++++ gcc/haifa-sched.c | 18 +++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c70af4f60ff..6f2e0acbbeb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-09-27 Alexander Monakov + + * haifa-sched.c (autopref_rank_for_schedule): Order 'irrelevant' insns + first, always call autopref_rank_data otherwise. + 2017-09-27 Richard Biener * graphite-scop-detection.c (find_scop_parameters): Move diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index d1378d0465f..549e8961411 100644 --- 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. */ -- 2.30.2