http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47744
--- Comment #29 from H.J. Lu <hjl.tools at gmail dot com> 2011-07-18 13:55:05 UTC --- (In reply to comment #28) > Here is my latest proposed patch: > > --cut here-- > Index: i386.c > =================================================================== > --- i386.c (revision 176386) > +++ i386.c (working copy) > @@ -11149,8 +11149,13 @@ > return 0; > break; > > + case SUBREG: > + /* Allow only subregs of DImode hard regs in PLUS chains. */ > + if (!register_no_elim_operand (SUBREG_REG (op), DImode)) > + return 0; > + /* FALLTHRU */ > + > case REG: > - case SUBREG: > if (!base) > base = op; > else if (!index) > --cut here-- > > The patch will also benefit x86_64 and x86_32. The patch allows only SUBREGs > with DImode non-eliminable hard register. This way paradoxical subregs are > avoided, and at the same time, the patch makes sure that PLUS RTX in wider > mode > won't enter the address RTX (via combine pass, register elimination in reload, > etc). This patch increases bootstrap time from 5173.47user 394.52system 14:59.75elapsed 618%CPU (0avgtext+0avgdata 362556maxresident)k to 7742.94user 475.20system 19:19.84elapsed 708%CPU (0avgtext+0avgdata 362556maxresident)k