On 03/11/2013 03:23 AM, Richard Biener wrote:
On Sat, Mar 9, 2013 at 11:23 PM, Steven Bosscher <stevenb....@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.
Agreed on the defer until 4.8.1.

jeff

Reply via email to