ira-color: fix allocno_priority_compare_func for qsort (PR 82395)
authorAlexander Monakov <amonakov@ispras.ru>
Thu, 19 Oct 2017 16:48:34 +0000 (19:48 +0300)
committerAlexander Monakov <amonakov@gcc.gnu.org>
Thu, 19 Oct 2017 16:48:34 +0000 (19:48 +0300)
PR rtl-optimization/82395
* ira-color.c (allocno_priority_compare_func): Fix comparison step
based on non_spilled_static_chain_regno_p.

From-SVN: r253904

gcc/ChangeLog
gcc/ira-color.c

index 9a35b2c3eb6e63d4494bc6df16b605749b0c1911..c37cddbb8f71c9bb93c923eda11dc3a73c3a32a0 100644 (file)
@@ -1,3 +1,9 @@
+2017-10-19  Alexander Monakov  <amonakov@ispras.ru>
+
+       PR rtl-optimization/82395
+       * ira-color.c (allocno_priority_compare_func): Fix comparison step
+       based on non_spilled_static_chain_regno_p.
+
 2017-10-19  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.c (output_387_binary_op): Rewrite SSE part.
index 22fdb88274db4c22f919400045ddbfb3a4bed079..31a4a8074d19eb72ebdea762018a82ab0d4c421e 100644 (file)
@@ -3005,14 +3005,13 @@ allocno_priority_compare_func (const void *v1p, const void *v2p)
 {
   ira_allocno_t a1 = *(const ira_allocno_t *) v1p;
   ira_allocno_t a2 = *(const ira_allocno_t *) v2p;
-  int pri1, pri2;
+  int pri1, pri2, diff;
 
   /* Assign hard reg to static chain pointer pseudo first when
      non-local goto is used.  */
-  if (non_spilled_static_chain_regno_p (ALLOCNO_REGNO (a1)))
-    return 1;
-  else if (non_spilled_static_chain_regno_p (ALLOCNO_REGNO (a2)))
-    return -1;
+  if ((diff = (non_spilled_static_chain_regno_p (ALLOCNO_REGNO (a2))
+              - non_spilled_static_chain_regno_p (ALLOCNO_REGNO (a1)))) != 0)
+    return diff;
   pri1 = allocno_priorities[ALLOCNO_NUM (a1)];
   pri2 = allocno_priorities[ALLOCNO_NUM (a2)];
   if (pri2 != pri1)