tree-ssa-coalesce.c (compare_pairs): Use the elements as secondary keys in order...
authorNick Clifton <nickc@redhat.com>
Fri, 31 Aug 2007 14:28:38 +0000 (14:28 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Fri, 31 Aug 2007 14:28:38 +0000 (14:28 +0000)
* tree-ssa-coalesce.c (compare_pairs): Use the elements as secondary keys
  in order to obtain a stable sort.

From-SVN: r127993

gcc/ChangeLog
gcc/tree-ssa-coalesce.c

index 50832cf78bf83637da918f815ee3d9080e0fab3f..e7d598a7a7fd8848952746f819992734bb6882df 100644 (file)
@@ -1,3 +1,8 @@
+2007-08-31  Nick Clifton  <nickc@redhat.com>
+
+       * tree-ssa-coalesce.c (compare_pairs): Use the elements as
+       secondary keys in order to obtain a stable sort.
+
 2007-08-31  Nick Clifton  <nickc@redhat.com>
 
        PR target/33132
index 1b63635881bdec7e584a85b9b48e656b4884351f..ef1ebcab4a97142c124d619f7cd2f1c4b5a51c0e 100644 (file)
@@ -314,8 +314,22 @@ add_coalesce (coalesce_list_p cl, int p1, int p2,
 static int 
 compare_pairs (const void *p1, const void *p2)
 {
-  return (*(const_coalesce_pair_p const*)p1)->cost
-    - (*(const_coalesce_pair_p const*)p2)->cost;
+  const_coalesce_pair_p const * pp1 = p1;
+  const_coalesce_pair_p const * pp2 = p2;
+  int result;
+
+  result = (* pp2)->cost - (* pp1)->cost;
+  /* Since qsort does not guarantee stability we use the elements
+     as a secondary key.  This provides us with independence from
+     the host's implementation of the sorting algorithm.  */
+  if (result == 0)
+    {
+      result = (* pp2)->first_element - (* pp1)->first_element;
+      if (result == 0)
+       result = (* pp2)->second_element - (* pp1)->second_element;
+    }
+
+  return result;
 }