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:
parent
c4471a4a3c
commit
dfda40f814
1 changed files with 10 additions and 0 deletions
10
gcc/dse.cc
10
gcc/dse.cc
|
@ -3682,6 +3682,16 @@ rest_of_handle_dse (void)
|
||||||
|
|
||||||
dse_step0 ();
|
dse_step0 ();
|
||||||
dse_step1 ();
|
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 ();
|
dse_step2_init ();
|
||||||
if (dse_step2 ())
|
if (dse_step2 ())
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue