aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2002-02-21 19:21:35 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2002-02-21 19:21:35 +0000
commit9dd791c86c770caf0b6a12a0dfae7cf0e0469f89 (patch)
treefe34e2b2c1ebf766d03406df39c4a33246595dfd
parent287dd527bdaedd75aaccec7722a2b509c7a6a06c (diff)
downloadgcc-9dd791c86c770caf0b6a12a0dfae7cf0e0469f89.zip
gcc-9dd791c86c770caf0b6a12a0dfae7cf0e0469f89.tar.gz
gcc-9dd791c86c770caf0b6a12a0dfae7cf0e0469f89.tar.bz2
rtlanal.c (replace_rtx): Don't make a CONST_INT the operand of SUBREG or ZERO_EXTEND.
* rtlanal.c (replace_rtx): Don't make a CONST_INT the operand of SUBREG or ZERO_EXTEND. From-SVN: r49935
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/rtlanal.c34
2 files changed, 39 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 14bd7a7..e1984f4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Thu Feb 21 16:20:46 2002 Alexandre Oliva <aoliva@redhat.com>
+
+ * rtlanal.c (replace_rtx): Don't make a CONST_INT the operand of
+ SUBREG or ZERO_EXTEND.
+
Thu Feb 21 15:35:46 2002 J"orn Rennecke <joern.rennecke@superh.com>
* sh.h (current_function_anonymous_args): Remove.
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 37f1e64..5f338e8 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -2417,6 +2417,40 @@ replace_rtx (x, from, to)
if (x == 0)
return 0;
+ if (GET_CODE (x) == SUBREG)
+ {
+ rtx new = replace_rtx (SUBREG_REG (x), from, to);
+
+ if (GET_CODE (new) == CONST_INT)
+ {
+ x = simplify_subreg (GET_MODE (x), new,
+ GET_MODE (SUBREG_REG (x)),
+ SUBREG_BYTE (x));
+ if (! x)
+ abort ();
+ }
+ else
+ SUBREG_REG (x) = new;
+
+ return x;
+ }
+ else if (GET_CODE (x) == ZERO_EXTEND)
+ {
+ rtx new = replace_rtx (XEXP (x, 0), from, to);
+
+ if (GET_CODE (new) == CONST_INT)
+ {
+ x = simplify_unary_operation (ZERO_EXTEND, GET_MODE (x),
+ new, GET_MODE (XEXP (x, 0)));
+ if (! x)
+ abort ();
+ }
+ else
+ XEXP (x, 0) = new;
+
+ return x;
+ }
+
fmt = GET_RTX_FORMAT (GET_CODE (x));
for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--)
{