diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2012-10-29 16:36:57 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2012-10-29 16:36:57 +0000 |
commit | 163497f1a3f8225a05f9f3d6c7922e1e23c95fdf (patch) | |
tree | 212a62b8b7f950b214ade60f68cabf39882c20da /gcc/rtlanal.c | |
parent | 186db6a0f17cc037901e6ba0735afe325da904bd (diff) | |
download | gcc-163497f1a3f8225a05f9f3d6c7922e1e23c95fdf.zip gcc-163497f1a3f8225a05f9f3d6c7922e1e23c95fdf.tar.gz gcc-163497f1a3f8225a05f9f3d6c7922e1e23c95fdf.tar.bz2 |
re PR middle-end/55116 (LRA failed to decompose ASHIFT)
2012-10-29 Vladimir Makarov <vmakarov@redhat.com>
PR middle-end/55116
* rtlanal.c (strip_address_mutation): Add SUBREG case.
From-SVN: r192949
Diffstat (limited to 'gcc/rtlanal.c')
-rw-r--r-- | gcc/rtlanal.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index 399886c..bfc58b0 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -5459,6 +5459,12 @@ strip_address_mutations (rtx *loc, enum rtx_code *outer_code) else if (code == AND && CONST_INT_P (XEXP (*loc, 1))) /* (and ... (const_int -X)) is used to align to X bytes. */ loc = &XEXP (*loc, 0); + else if (code == SUBREG + && !OBJECT_P (SUBREG_REG (*loc)) + && subreg_lowpart_p (*loc)) + /* (subreg (operator ...) ...) inside and is used for mode + conversion too. */ + loc = &XEXP (*loc, 0); else return loc; if (outer_code) |