aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2020-01-14 14:14:54 +0100
committerRichard Biener <rguenther@suse.de>2020-05-12 12:28:24 +0200
commit5e3c2d4b238f10e6e6db36810469483334d4bcb0 (patch)
tree60066599b22ad78796d99c71b7d870acbe8bb4f7
parent6b41920bd5c68998a53de749b4fe5c0b8875db6c (diff)
downloadgcc-5e3c2d4b238f10e6e6db36810469483334d4bcb0.zip
gcc-5e3c2d4b238f10e6e6db36810469483334d4bcb0.tar.gz
gcc-5e3c2d4b238f10e6e6db36810469483334d4bcb0.tar.bz2
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.
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/cfghooks.c6
2 files changed, 10 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 72b56ad..b0a9212 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/cfghooks.c b/gcc/cfghooks.c
index ea558b4..71c6b63 100644
--- a/gcc/cfghooks.c
+++ b/gcc/cfghooks.c
@@ -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));