rtl-optimization/105577 - RTL DSE and non-call EH

When one of the first two stages of DSE removes a throwing stmt
we have to purge dead EH edges before the DF re-analyze fires off
a fast DCE since that cannot cope with the situation.

2022-05-12  Richard Biener  <rguenther@suse.de>

	PR rtl-optimization/105577
	* dse.cc (rest_of_handle_dse): Make sure to purge dead EH
	edges before running fast DCE via df_analyze.
This commit is contained in:
Richard Biener 2022-05-12 14:03:32 +02:00
parent c4471a4a3c
commit dfda40f814
1 changed files with 10 additions and 0 deletions

View File

@ -3682,6 +3682,16 @@ rest_of_handle_dse (void)
dse_step0 ();
dse_step1 ();
/* DSE can eliminate potentially-trapping MEMs.
Remove any EH edges associated with them, since otherwise
DF_LR_RUN_DCE will complain later. */
if ((locally_deleted || globally_deleted)
&& cfun->can_throw_non_call_exceptions
&& purge_all_dead_edges ())
{
free_dominance_info (CDI_DOMINATORS);
delete_unreachable_blocks ();
}
dse_step2_init ();
if (dse_step2 ())
{