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

Reply via email to