aboutsummaryrefslogtreecommitdiff
path: root/gcc/rtlanal.c
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2012-10-29 16:36:57 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2012-10-29 16:36:57 +0000
commit163497f1a3f8225a05f9f3d6c7922e1e23c95fdf (patch)
tree212a62b8b7f950b214ade60f68cabf39882c20da /gcc/rtlanal.c
parent186db6a0f17cc037901e6ba0735afe325da904bd (diff)
downloadgcc-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.c6
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)