preserve EDGE_DFS_BACK across split_edge
authorRichard Biener <rguenther@suse.de>
Tue, 14 Jan 2020 13:14:54 +0000 (14:14 +0100)
committerRichard Biener <rguenther@suse.de>
Tue, 12 May 2020 10:28:24 +0000 (12:28 +0200)
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.

gcc/ChangeLog
gcc/cfghooks.c

index 72b56ad6f2ed363e055f96316eb5ee6bfb6c5250..b0a9212688a9e2b9ddf812546941516a87bec1bf 100644 (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
index ea558b46947302721171119b142d290a697317c1..71c6b63ad3bedb6da47be861ded0656470190f80 100644 (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));