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

Reply via email to