On Mon, Mar 11, 2013 at 10:23 AM, Richard Biener wrote: > On Sat, Mar 9, 2013 at 11:23 PM, Steven Bosscher wrote: >> 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.
Yes. No idea why, it's always been like that. > 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. OK. I've found a buglet in the patch, too, so I'll post an updated patch for trunk GCC 4.9. Ciao! Steven