Save and restore EDGE_DFS_BACK in draw_cfg_edges
authorTom de Vries <tom@codesourcery.com>
Tue, 4 Jul 2017 09:44:00 +0000 (09:44 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Tue, 4 Jul 2017 09:44:00 +0000 (09:44 +0000)
2017-07-04  Tom de Vries  <tom@codesourcery.com>

* graph.c (draw_cfg_edges): Save and restore EDGE_DFS_BACK.

From-SVN: r249954

gcc/ChangeLog
gcc/graph.c

index 89c16e4bbcc98092d508be0fde22ca4bc3182b78..ada4aa516376adea1efec9f0ce9518d2004335db 100644 (file)
@@ -1,3 +1,7 @@
+2017-07-04  Tom de Vries  <tom@codesourcery.com>
+
+       * graph.c (draw_cfg_edges): Save and restore EDGE_DFS_BACK.
+
 2017-07-03  Dominique d'Humieres  <dominiq@lps.ens.fr>
 
        PR target/81033
index d953fea0f5665e172ad73daecd7f541d38da7b12..9864120ff3774eea9b19c467bca1f1b0fc7ea676 100644 (file)
@@ -247,19 +247,42 @@ draw_cfg_nodes (pretty_printer *pp, struct function *fun)
 }
 
 /* Draw all edges in the CFG.  Retreating edges are drawin as not
-   constraining, this makes the layout of the graph better.
-   (??? Calling mark_dfs_back may change the compiler's behavior when
-   dumping, but computing back edges here for ourselves is also not
-   desirable.)  */
+   constraining, this makes the layout of the graph better.  */
 
 static void
 draw_cfg_edges (pretty_printer *pp, struct function *fun)
 {
   basic_block bb;
+
+  /* Save EDGE_DFS_BACK flag to dfs_back.  */
+  auto_bitmap dfs_back;
+  edge e;
+  edge_iterator ei;
+  unsigned int idx = 0;
+  FOR_EACH_BB_FN (bb, cfun)
+    FOR_EACH_EDGE (e, ei, bb->succs)
+      {
+       if (e->flags & EDGE_DFS_BACK)
+         bitmap_set_bit (dfs_back, idx);
+       idx++;
+      }
+
   mark_dfs_back_edges ();
   FOR_ALL_BB_FN (bb, cfun)
     draw_cfg_node_succ_edges (pp, fun->funcdef_no, bb);
 
+  /* Restore EDGE_DFS_BACK flag from dfs_back.  */
+  idx = 0;
+  FOR_EACH_BB_FN (bb, cfun)
+    FOR_EACH_EDGE (e, ei, bb->succs)
+      {
+       if (bitmap_bit_p (dfs_back, idx))
+         e->flags |= EDGE_DFS_BACK;
+       else
+         e->flags &= ~EDGE_DFS_BACK;
+       idx++;
+      }
+
   /* Add an invisible edge from ENTRY to EXIT, to improve the graph layout.  */
   pp_printf (pp,
             "\tfn_%d_basic_block_%d:s -> fn_%d_basic_block_%d:n "