OSDN Git Service

* tree-ssa-coalesce.c (compare_pairs): Use the elements as secondary keys
authornickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 31 Aug 2007 14:28:38 +0000 (14:28 +0000)
committernickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 31 Aug 2007 14:28:38 +0000 (14:28 +0000)
  in order to obtain a stable sort.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127993 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 50832cf..e7d598a 100644 (file)
@@ -1,5 +1,10 @@
 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
        * config/m32r/constraints.md: Add W constraint for integer zero.
        * config/m32r/m32r.md (get_pc): Use W and i constraints.
index 1b63635..ef1ebca 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;
 }