http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53961
--- Comment #11 from H.J. Lu <hjl.tools at gmail dot com> 2012-07-14 22:46:29 UTC --- (In reply to comment #9) > Can you test following patch that prevents non-register AND address operands: > > --cut here-- > Index: i386.c > =================================================================== > --- i386.c (revision 189483) > +++ i386.c (working copy) > @@ -11591,7 +11591,8 @@ ix86_decompose_address (rtx addr, struct ix86_addr > if (GET_CODE (addr) == SUBREG > && GET_MODE (SUBREG_REG (addr)) == SImode) > addr = SUBREG_REG (addr); > - else if (GET_MODE (addr) == DImode) > + else if (REG_P (addr) > + && GET_MODE (addr) == DImode) > addr = gen_rtx_SUBREG (SImode, addr, 0); > else if (GET_MODE (addr) != VOIDmode) > return 0; > --cut here-- It doesn't work. I will find which checkin on trunk fixed this.