[PATCH] rtl-optimization/98863 - tame i386 specific RPAD pass

Richard Biener rguenther@suse.de
Fri Jan 29 16:05:50 GMT 2021


On Fri, 29 Jan 2021, Jan Hubicka wrote:

> > On Fri, 29 Jan 2021, Jan Hubicka wrote:
> > 
> > > > This removes adding very expensive DF problems which we do not
> > > > use and which somehow cause 5GB of memory to leak.
> 
> Reading through the logs, isn't the leak just caused by tings going to
> memory pool that we do not trim during late optimization?

I've manually shrinked everything and it persisted.  But no,
I have no idea where the memory goes but I suspect it is
somehow caused by altering the CFG in ways not dealt with by
one of the DF problems originally removed.

Richard.

> > > 
> > > Impressive :)
> > > > 
> > > > Bootstrap & regtest running on x86_64-unknown-linux-gnu.
> > > > 
> > > > 2021-01-29  Richard Biener  <rguenther@suse.de>
> > > > 
> > > > 	PR rtl-optimization/98863
> > > > 	* config/i386/i386-features.c (remove_partial_avx_dependency):
> > > > 	Do not add DF chain and MD problems.
> > > OK (if regtests passes :)
> > 
> > After discussion on IRC I am testing the following which removes
> > the unneded df_analyze completely.
> > 
> > Bootstrap / regtest running on x86_64-unkown-linux-gnu.
> > 
> > Still OK if testing passes (I'll also build/test WRF which triggered
> > this work)
> > 
> > Richard.
> > 
> > From 1657183c8cdbaea329df47fe4d76c4f871a06bdc Mon Sep 17 00:00:00 2001
> > From: Richard Biener <rguenther@suse.de>
> > Date: Fri, 29 Jan 2021 16:02:36 +0100
> > Subject: [PATCH] rtl-optimization/98863 - tame i386 specific RPAD pass
> > To: gcc-patches@gcc.gnu.org
> > 
> > This removes analyzing DF with expensive problems which we do not
> > use at all and which somehow cause 5GB of memory to leak.  Instead
> > just do a defered rescan of added insns.
> > 
> > 2021-01-29  Richard Biener  <rguenther@suse.de>
> > 
> > 	PR rtl-optimization/98863
> > 	* config/i386/i386-features.c (remove_partial_avx_dependency):
> > 	Do not perform DF analysis.
> > 	(pass_data_remove_partial_avx_dependency): Remove
> > 	TODO_df_finish.
> > ---
> >  gcc/config/i386/i386-features.c | 17 +++++++----------
> >  1 file changed, 7 insertions(+), 10 deletions(-)
> > 
> > diff --git a/gcc/config/i386/i386-features.c b/gcc/config/i386/i386-features.c
> > index ef4f9406102..c845ba90caf 100644
> > --- a/gcc/config/i386/i386-features.c
> > +++ b/gcc/config/i386/i386-features.c
> > @@ -2272,6 +2272,9 @@ remove_partial_avx_dependency (void)
> >  
> >    auto_vec<rtx_insn *> control_flow_insns;
> >  
> > +  /* We create invalid RTL initially so defer rescans.  */
> > +  df_set_flags (DF_DEFER_INSN_RESCAN);
> > +
> >    FOR_EACH_BB_FN (bb, cfun)
> >      {
> >        FOR_BB_INSNS (bb, insn)
> > @@ -2292,14 +2295,7 @@ remove_partial_avx_dependency (void)
> >  	    continue;
> >  
> >  	  if (!v4sf_const0)
> > -	    {
> > -	      calculate_dominance_info (CDI_DOMINATORS);
> > -	      df_set_flags (DF_DEFER_INSN_RESCAN);
> > -	      df_chain_add_problem (DF_DU_CHAIN | DF_UD_CHAIN);
> > -	      df_md_add_problem ();
> > -	      df_analyze ();
> > -	      v4sf_const0 = gen_reg_rtx (V4SFmode);
> > -	    }
> > +	    v4sf_const0 = gen_reg_rtx (V4SFmode);
> >  
> >  	  /* Convert PARTIAL_XMM_UPDATE_TRUE insns, DF -> SF, SF -> DF,
> >  	     SI -> SF, SI -> DF, DI -> SF, DI -> DF, to vec_dup and
> > @@ -2360,6 +2356,7 @@ remove_partial_avx_dependency (void)
> >      {
> >        /* (Re-)discover loops so that bb->loop_father can be used in the
> >  	 analysis below.  */
> > +      calculate_dominance_info (CDI_DOMINATORS);
> >        loop_optimizer_init (AVOID_CFG_MODIFICATIONS);
> >  
> >        /* Generate a vxorps at entry of the nearest dominator for basic
> > @@ -2391,7 +2388,6 @@ remove_partial_avx_dependency (void)
> >  	set_insn = emit_insn_after (set,
> >  				    insn ? PREV_INSN (insn) : BB_END (bb));
> >        df_insn_rescan (set_insn);
> > -      df_process_deferred_rescans ();
> >        loop_optimizer_finalize ();
> >  
> >        if (!control_flow_insns.is_empty ())
> > @@ -2412,6 +2408,7 @@ remove_partial_avx_dependency (void)
> >  	}
> >      }
> >  
> > +  df_process_deferred_rescans ();
> >    bitmap_obstack_release (NULL);
> >    BITMAP_FREE (convert_bbs);
> >  
> > @@ -2441,7 +2438,7 @@ const pass_data pass_data_remove_partial_avx_dependency =
> >    0, /* properties_provided */
> >    0, /* properties_destroyed */
> >    0, /* todo_flags_start */
> > -  TODO_df_finish, /* todo_flags_finish */
> > +  0, /* todo_flags_finish */
> 
> I am not sure why df needs no longer finishing?
> 
> But patch looks OK to me (but pushing my DF knowledge though)
> 
> Honza
> >  };
> >  
> >  class pass_remove_partial_avx_dependency : public rtl_opt_pass
> > -- 
> > 2.26.2
> > 
> 

-- 
Richard Biener <rguenther@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)


More information about the Gcc-patches mailing list