[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