> 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? > > > > Impressive :) > > > > > > Bootstrap & regtest running on x86_64-unknown-linux-gnu. > > > > > > 2021-01-29 Richard Biener <rguent...@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 <rguent...@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 <rguent...@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 >