rtl-optimization/98863 - tame i386 specific RPAD pass

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.
This commit is contained in:
Richard Biener 2021-01-29 16:02:36 +01:00
parent ee4c4fe289
commit a7f52181a6

View File

@ -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 */
};
class pass_remove_partial_avx_dependency : public rtl_opt_pass