[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