[patch PR middle-end/39326 - compile time and memory explosion in combine

Richard Biener richard.guenther@gmail.com
Mon Mar 11 09:23:00 GMT 2013


On Sat, Mar 9, 2013 at 11:23 PM, Steven Bosscher <stevenb.gcc@gmail.com> wrote:
> Hello,
>
> The attached patch fixes one of the (at least) three scalability
> problems reported in PR middle-end/39326. This problem is that combine
> takes forever and increases the memory footprint from ~650MB to >7GB.
> The cause is DSE creating a lot of new registers in replace_read, and
> those registers are not copy-prop'd out between dse1 and combine. The
> result is many overlapping live ranges and single-set-single-use
> registers that combine is made to work on.
>
> The fix is to just not create so many new registers in DSE in the
> first place. It is wasteful and unnecessary if an existing register
> can be re-used.
>
> With this patch, for the test case of the PR the combine time in
> combine goes down from ~350s to ~4.5s, and the memory footprint
> explosion is avoided. For my set of cc1-i files this also helps reduce
> compile time a modest amount, especially for the larger files of
> course.
>
> Bootstrapped&tested on {x86_64,powerpc64}-unknown-linux-gnu.
> OK for trunk?

Not sure on the patch details - but in general I wonder why _DSE_
performs full redundancy elimination at all ... which replace_read
seems to be.

Anyway, for this one I'd say we wait for stage1 and consider backporting
for 4.8.1 given we want to do a 4.8 RC1 soon.

Thanks,
Richard.

> Ciao!
> Steven
>
>
>         PR middle-end/39326
>         * dse.c (replace_read): If the stored value is a pseudo-register
>         that is set only once, re-use it to replace the load instead of
>         creating a new register.



More information about the Gcc-patches mailing list