On Tue, Apr 02, 2024 at 02:06:27PM +0200, Richard Biener wrote: > On Tue, 2 Apr 2024, Richard Biener wrote: > > > The following reduces peak memory use for the PR114480 testcase at -O1 > > which is almost exclusively spent by the ehcleanup pass in allocating > > PHI nodes. The free_phinodes cache we maintain isn't very effective > > since it has effectively two slots, one for 4 and one for 9 argument > > PHIs and it is only ever used for allocations up to 9 arguments but > > we put all larger PHIs in the 9 argument bucket. This proves > > uneffective resulting in much garbage to be kept when incrementally > > growing PHI nodes by edge redirection. > > > > The mitigation is to rely on the GC freelist for larger sizes and > > thus immediately return all larger bucket sized PHIs to it via ggc_free. > > > > This reduces the peak memory use from 19.8GB to 11.3GB and compile-time > > from 359s to 168s. > > > > Bootstrapped on x86_64-unknown-linux-gnu, testing in progress. > > > > OK for trunk? I'll leave more surgery for stage1. > > Testing revealed on other use-after-free. Revised patch as follows.
LGTM if there aren't similar further issues. > This reduces the peak memory use from 19.8GB to 11.3GB and compile-time > from 359s to 168s. > > PR tree-optimization/114557 > PR tree-optimization/114480 > * tree-phinodes.cc (release_phi_node): Return PHIs from > allocation buckets not covered by free_phinodes to GC. > (remove_phi_node): Release the PHI LHS before freeing the > PHI node. > * tree-vect-loop.cc (vectorizable_live_operation): Get PHI lhs > before releasing it. Jakub