diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1c0b052325b..cf534c63d68 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-10-29 Vladimir Makarov + + PR middle-end/55116 + * rtlanal.c (strip_address_mutation): Add SUBREG case. + 2012-10-29 Jan Hubicka * ipa-inline.c (want_inline_function_called_once_p): Rename to ... diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index 399886c1a94..bfc58b0e407 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)