aboutsummaryrefslogtreecommitdiff
path: root/gcc/simplify-rtx.c
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2001-06-29 17:15:01 -0400
committerDJ Delorie <dj@gcc.gnu.org>2001-06-29 17:15:01 -0400
commit9199d62b824513e2e5cd943f87e5e1a958a9f4ea (patch)
tree6b5797e3fd986b6af8e3abbbb0324e55a0e0565a /gcc/simplify-rtx.c
parent62d285ff3a32b4999ef861b181ac32a3460e226d (diff)
downloadgcc-9199d62b824513e2e5cd943f87e5e1a958a9f4ea.zip
gcc-9199d62b824513e2e5cd943f87e5e1a958a9f4ea.tar.gz
gcc-9199d62b824513e2e5cd943f87e5e1a958a9f4ea.tar.bz2
simplify-rtx.c (simplify_subreg): When simplifying a CONCAT...
* simplify-rtx.c (simplify_subreg): When simplifying a CONCAT, at least get rid of the CONCAT if we can't simplify further. From-SVN: r43659
Diffstat (limited to 'gcc/simplify-rtx.c')
-rw-r--r--gcc/simplify-rtx.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index a5ef099..20471cc 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -2430,9 +2430,14 @@ simplify_subreg (outermode, op, innermode, byte)
int is_realpart = byte < GET_MODE_UNIT_SIZE (innermode);
rtx part = is_realpart ? XEXP (op, 0) : XEXP (op, 1);
unsigned int final_offset;
+ rtx res;
final_offset = byte % (GET_MODE_UNIT_SIZE (innermode));
- return simplify_subreg (outermode, part, GET_MODE (part), final_offset);
+ res = simplify_subreg (outermode, part, GET_MODE (part), final_offset);
+ if (res)
+ return res;
+ /* We can at least simplify it by referring directly to the relevent part. */
+ return gen_rtx_SUBREG (outermode, part, final_offset);
}
return NULL_RTX;