From 582be0a107e90be99658ff9d7b85b17430cbc864 Mon Sep 17 00:00:00 2001
From: Hans-Peter Nilsson <hp@axis.com>
Date: Tue, 8 Apr 2008 09:04:04 +0000
Subject: [PATCH] cris.c (cris_address_cost): For a PLUS, swap tem1 and tem2 if
 tem1 is not a REG or MULT.

	* 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          | 5 +++++
 gcc/config/cris/cris.c | 7 ++++++-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 076abb30357e..af448939d3ed 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/config/cris/cris.c b/gcc/config/cris/cris.c
index 85a944b9e95d..87fef5a2f902 100644
--- a/gcc/config/cris/cris.c
+++ b/gcc/config/cris/cris.c
@@ -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
-- 
GitLab