OSDN Git Service

2010-01-07 Martin Jambor <mjambor@suse.cz>
authorjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 7 Jan 2010 10:38:25 +0000 (10:38 +0000)
committerjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 7 Jan 2010 10:38:25 +0000 (10:38 +0000)
PR tree-optimization/42157
* tree-sra.c (compare_access_positions): Stabilize sort if both
accesses have integer types, return zero immediately if they are the
same.

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

gcc/ChangeLog
gcc/tree-sra.c

index e8aa64b..62fb301 100644 (file)
@@ -1,3 +1,10 @@
+2010-01-07  Martin Jambor  <mjambor@suse.cz>
+
+       PR tree-optimization/42157
+       * tree-sra.c (compare_access_positions): Stabilize sort if both
+       accesses have integer types, return zero immediately if they are the
+       same.
+
 2010-01-06  Richard Henderson  <rth@redhat.com>
 
        PR middle-end/41883
index f0e874f..ebb40c4 100644 (file)
@@ -1110,8 +1110,10 @@ compare_access_positions (const void *a, const void *b)
 
   if (f1->size == f2->size)
     {
+      if (f1->type == f2->type)
+       return 0;
       /* Put any non-aggregate type before any aggregate type.  */
-      if (!is_gimple_reg_type (f1->type)
+      else if (!is_gimple_reg_type (f1->type)
          && is_gimple_reg_type (f2->type))
        return 1;
       else if (is_gimple_reg_type (f1->type)
@@ -1131,7 +1133,7 @@ compare_access_positions (const void *a, const void *b)
       /* Put the integral type with the bigger precision first.  */
       else if (INTEGRAL_TYPE_P (f1->type)
               && INTEGRAL_TYPE_P (f2->type))
-       return TYPE_PRECISION (f1->type) > TYPE_PRECISION (f2->type) ? -1 : 1;
+       return TYPE_PRECISION (f2->type) - TYPE_PRECISION (f1->type);
       /* Put any integral type with non-full precision last.  */
       else if (INTEGRAL_TYPE_P (f1->type)
               && (TREE_INT_CST_LOW (TYPE_SIZE (f1->type))