http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55116
--- Comment #9 from H.J. Lu <hjl.tools at gmail dot com> 2012-10-30 01:36:26
UTC ---
This helps:
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 43d4cb8..d076ad6 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -5460,6 +5460,7 @@ strip_address_mutations (rtx *loc, enum rtx_code
*outer_code)
/* (and ... (const_int -X)) is used to align to X bytes. */
loc = &XEXP (*loc, 0);
else if (code == SUBREG
+ && GET_MODE (*loc) == Pmode
&& !OBJECT_P (SUBREG_REG (*loc))
&& subreg_lowpart_p (*loc))
/* (subreg (operator ...) ...) inside and is used for mode