Hi,

This patch was submitted as part of PR 52235.
It increases the preference of a register for first operand of a commutative operator.

2012-02-13 Paulo Matos <paulo.ma...@csr.com>
        * gcc/rtlanal.c: Increase preference of a register for the
        first operand in a commutative operator.

--- gcc46/gcc/rtlanal.c (gcc 4.6.2)
+++ gcc46/gcc/rtlanal.c (working copy)
@@ -3047,11 +3047,11 @@

/* Constants always come the second operand. Prefer "nice" constants. */
   if (code == CONST_INT)
+    return -9;
+  if (code == CONST_DOUBLE)
     return -8;
-  if (code == CONST_DOUBLE)
-    return -7;
   if (code == CONST_FIXED)
-    return -7;
+    return -8;
   op = avoid_constant_pool_reference (op);
   code = GET_CODE (op);

@@ -3059,26 +3059,28 @@
     {
     case RTX_CONST_OBJ:
       if (code == CONST_INT)
+        return -7;
+      if (code == CONST_DOUBLE)
         return -6;
-      if (code == CONST_DOUBLE)
-        return -5;
       if (code == CONST_FIXED)
-        return -5;
-      return -4;
+        return -6;
+      return -5;

     case RTX_EXTRA:
       /* SUBREGs of objects should come second.  */
       if (code == SUBREG && OBJECT_P (SUBREG_REG (op)))
-        return -3;
+        return -4;
       return 0;

     case RTX_OBJ:
       /* Complex expressions should be the first, so decrease priority
          of objects.  Prefer pointer objects over non pointer objects.  */
-      if ((REG_P (op) && REG_POINTER (op))
-         || (MEM_P (op) && MEM_POINTER (op)))
-       return -1;
-      return -2;
+      if(REG_P(op))
+          return -1;
+      else if ((REG_P (op) && REG_POINTER (op))
+               || (MEM_P (op) && MEM_POINTER (op)))
+          return -2;
+      return -3;

     case RTX_COMM_ARITH:
       /* Prefer operands that are themselves commutative to be first.

--
PMatos

Reply via email to