cris.c (cris_address_cost): For a PLUS, swap tem1 and tem2 if tem1 is not a REG or...
authorHans-Peter Nilsson <hp@axis.com>
Tue, 8 Apr 2008 09:04:04 +0000 (09:04 +0000)
committerHans-Peter Nilsson <hp@gcc.gnu.org>
Tue, 8 Apr 2008 09:04:04 +0000 (09:04 +0000)
* config/cris/cris.c (cris_address_cost): For a PLUS, swap tem1
and tem2 if tem1 is not a REG or MULT.

From-SVN: r134088

gcc/ChangeLog
gcc/config/cris/cris.c

index 076abb30357e2ec210257e9a54f6cb9322466a6e..af448939d3edd8096534a7db43a8d3fb20fb6fc7 100644 (file)
@@ -1,3 +1,8 @@
+2008-04-08  Hans-Peter Nilsson  <hp@axis.com>
+
+       * config/cris/cris.c (cris_address_cost): For a PLUS, swap tem1
+       and tem2 if tem1 is not a REG or MULT.
+
 2008-04-08  Jan Hubicka  <jh@suse.cz>
 
        * function.h (incomming_args): Break out of struct function.
index 85a944b9e95d1d3e7b9943a4aa64e8bbf16b22ad..87fef5a2f902b64f4b939d3eaf36c2e440fce377 100644 (file)
@@ -1883,7 +1883,12 @@ cris_address_cost (rtx x)
       rtx tem1 = XEXP (x, 0);
       rtx tem2 = XEXP (x, 1);
 
-      /* We'll "assume" canonical RTX.  */
+      /* Local extended canonicalization rule: the first operand must
+        be REG, unless it's an operation (MULT).  */
+      if (!REG_P (tem1) && GET_CODE (tem1) != MULT)
+       tem1 = tem2, tem2 = XEXP (x, 0);
+
+      /* We'll "assume" we have canonical RTX now.  */
       gcc_assert (REG_P (tem1) || GET_CODE (tem1) == MULT);
 
       /* A BIAP is 2 extra bytes for the prefix insn, nothing more.  We