simplify-rtx.c (simplify_rtx): Canonicalize commutative expressions by putting comple...
authorJeffrey A Law <law@cygnus.com>
Thu, 28 Jun 2001 00:14:23 +0000 (00:14 +0000)
committerJeff Law <law@gcc.gnu.org>
Thu, 28 Jun 2001 00:14:23 +0000 (18:14 -0600)
        * simplify-rtx.c (simplify_rtx): Canonicalize commutative expressions
        by putting complex operands first and constants second.

From-SVN: r43621

gcc/ChangeLog
gcc/simplify-rtx.c

index 5a89256f13e9f6f9f4ace58dbd157a191cc132cd..3f374681d8457e6344cb3de6e36a0bd63e531a5f 100644 (file)
@@ -1,3 +1,8 @@
+Wed Jun 27 18:01:09 2001  Jeffrey A Law  (law@cygnus.com)
+
+       * simplify-rtx.c (simplify_rtx): Canonicalize commutative expressions
+       by putting complex operands first and constants second.
+
 2001-06-27  Gabriel Dos Reis  <gdr@codesourcery.com>
 
        * diagnostic.h: Add documentation. Make macros polymorphic.
index b2123c16654683fc0759aae12231812743346f2f..a5ef099360084e3e2e4ea62d126ffb95d726fa01 100644 (file)
@@ -2520,8 +2520,26 @@ simplify_rtx (x)
     case '1':
       return simplify_unary_operation (code, mode,
                                       XEXP (x, 0), GET_MODE (XEXP (x, 0)));
-    case '2':
     case 'c':
+      /* Put complex operands first and constants second if commutative.  */
+      if (GET_RTX_CLASS (code) == 'c'
+         && ((CONSTANT_P (XEXP (x, 0)) && GET_CODE (XEXP (x, 1)) != CONST_INT)
+             || (GET_RTX_CLASS (GET_CODE (XEXP (x, 0))) == 'o'
+                 && GET_RTX_CLASS (GET_CODE (XEXP (x, 1))) != 'o')
+             || (GET_CODE (XEXP (x, 0)) == SUBREG
+                 && GET_RTX_CLASS (GET_CODE (SUBREG_REG (XEXP (x, 0)))) == 'o'
+                 && GET_RTX_CLASS (GET_CODE (XEXP (x, 1))) != 'o')))
+       {
+         rtx tem;
+
+         tem = XEXP (x, 0);
+         XEXP (x, 0) = XEXP (x, 1);
+         XEXP (x, 1) = tem;
+         return simplify_binary_operation (code, mode,
+                                           XEXP (x, 0), XEXP (x, 1));
+       }
+
+    case '2':
       return simplify_binary_operation (code, mode, XEXP (x, 0), XEXP (x, 1));
 
     case '3':