simplify-rtx.c (simplify_plus_minus): Simplify within CONST terms.
authorAndreas Krebbel <krebbel1@de.ibm.com>
Thu, 16 Mar 2006 08:15:35 +0000 (08:15 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Thu, 16 Mar 2006 08:15:35 +0000 (08:15 +0000)
2006-03-16  Andreas Krebbel  <krebbel1@de.ibm.com>

* simplify-rtx.c (simplify_plus_minus): Simplify within CONST terms.

From-SVN: r112131

gcc/ChangeLog
gcc/simplify-rtx.c

index 579f7a3c58f13e7ac2d870273dd77aa1a654a5e0..b7870e32cdd9821cf330a062c4cf565886714326 100644 (file)
@@ -1,3 +1,7 @@
+2006-03-16  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * simplify-rtx.c (simplify_plus_minus): Simplify within CONST terms.
+
 2006-03-16  Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
 
         * config/ia64/ia64.c (stops_p): Added explicit initialization.
index 754464d06f12c9bd3b7b0073596428bdcdcb8f77..e00e9ccca105c8ad007dd431b83406c6cd80456e 100644 (file)
@@ -3320,8 +3320,21 @@ simplify_plus_minus (enum rtx_code code, enum machine_mode mode, rtx op0,
                else if (swap_commutative_operands_p (lhs, rhs))
                  tem = lhs, lhs = rhs, rhs = tem;
 
-               tem = simplify_binary_operation (ncode, mode, lhs, rhs);
+               if ((GET_CODE (lhs) == CONST || GET_CODE (lhs) == CONST_INT)
+                   && (GET_CODE (rhs) == CONST || GET_CODE (rhs) == CONST_INT))
+                 {
+                   rtx tem_lhs, tem_rhs;
+
+                   tem_lhs = GET_CODE (lhs) == CONST ? XEXP (lhs, 0) : lhs;
+                   tem_rhs = GET_CODE (rhs) == CONST ? XEXP (rhs, 0) : rhs;
+                   tem = simplify_binary_operation (ncode, mode, tem_lhs, tem_rhs);
 
+                   if (tem && !CONSTANT_P (tem))
+                     tem = gen_rtx_CONST (GET_MODE (tem), tem);
+                 }
+               else
+                 tem = simplify_binary_operation (ncode, mode, lhs, rhs);
+               
                /* Reject "simplifications" that just wrap the two
                   arguments in a CONST.  Failure to do so can result
                   in infinite recursion with simplify_binary_operation