preserve EDGE_DFS_BACK across split_edge

This moves EDGE_DFS_BACK to the appropriate edge when the split
edge had it set.

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

	* cfghooks.c (split_edge): Preserve EDGE_DFS_BACK if set.
This commit is contained in:
Richard Biener 2020-01-14 14:14:54 +01:00
parent 6b41920bd5
commit 5e3c2d4b23
2 changed files with 10 additions and 0 deletions

View File

@ -1,3 +1,7 @@
2020-05-12 Richard Biener <rguenther@suse.de>
* cfghooks.c (split_edge): Preserve EDGE_DFS_BACK if set.
2020-05-12 Martin Liska <mliska@suse.cz>
PR sanitizer/95033

View File

@ -640,6 +640,7 @@ split_edge (edge e)
profile_count count = e->count ();
edge f;
bool irr = (e->flags & EDGE_IRREDUCIBLE_LOOP) != 0;
bool back = (e->flags & EDGE_DFS_BACK) != 0;
class loop *loop;
basic_block src = e->src, dest = e->dest;
@ -659,6 +660,11 @@ split_edge (edge e)
single_pred_edge (ret)->flags |= EDGE_IRREDUCIBLE_LOOP;
single_succ_edge (ret)->flags |= EDGE_IRREDUCIBLE_LOOP;
}
if (back)
{
single_pred_edge (ret)->flags &= ~EDGE_DFS_BACK;
single_succ_edge (ret)->flags |= EDGE_DFS_BACK;
}
if (dom_info_available_p (CDI_DOMINATORS))
set_immediate_dominator (CDI_DOMINATORS, ret, single_pred (ret));