http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47744
--- Comment #20 from H.J. Lu <hjl.tools at gmail dot com> 2011-07-17 22:12:20 UTC --- (In reply to comment #19) > (In reply to comment #18) > > > This is the same as > > > > --- > > diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c > > index c728c51..414b528 100644 > > --- a/gcc/config/i386/i386.c > > +++ b/gcc/config/i386/i386.c > > @@ -11380,7 +11382,6 @@ ix86_decompose_address (rtx addr, struct > > ix86_address > > *out) > > break; > > > > case REG: > > - case SUBREG: > > if (!base) > > base = op; > > else if (!index) > > No! > > Subreg of a reg is perfectly valid RTX here. The code in question is switch (GET_CODE (op)) { ... case REG: case SUBREG: ... break; ... default: return 0; } case SUBREG: if (GET_CODE (op) != REG) return 0; always return 0.