domwalk.h (dom_walker::dom_walker): Add additional constructor for specifying RPO...
authorRichard Biener <rguenther@suse.de>
Thu, 1 Feb 2018 12:51:24 +0000 (12:51 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 1 Feb 2018 12:51:24 +0000 (12:51 +0000)
2018-02-01  Richard Biener  <rguenther@suse.de>

* domwalk.h (dom_walker::dom_walker): Add additional constructor
for specifying RPO order and allow NULL for that.
* domwalk.c (dom_walker::dom_walker): Likewise.
(dom_walker::walk): Handle NULL RPO order.
* tree-into-ssa.c (rewrite_dom_walker): Do not walk dom children
in RPO order.
(rewrite_update_dom_walker): Likewise.
(mark_def_dom_walker): Likewise.

* gcc.dg/graphite/pr35356-1.c: Adjust.

From-SVN: r257293

gcc/ChangeLog
gcc/domwalk.c
gcc/domwalk.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/graphite/pr35356-1.c
gcc/tree-into-ssa.c

index b655476aaac247dfe50fb8b002d545b34b907692..28804f16cc883577a419cff2d475cca06a987c61 100644 (file)
@@ -1,3 +1,14 @@
+2018-02-01  Richard Biener  <rguenther@suse.de>
+
+       * domwalk.h (dom_walker::dom_walker): Add additional constructor
+       for specifying RPO order and allow NULL for that.
+       * domwalk.c (dom_walker::dom_walker): Likewise.
+       (dom_walker::walk): Handle NULL RPO order.
+       * tree-into-ssa.c (rewrite_dom_walker): Do not walk dom children
+       in RPO order.
+       (rewrite_update_dom_walker): Likewise.
+       (mark_def_dom_walker): Likewise.
+
 2018-02-01  Richard Sandiford  <richard.sandiford@linaro.org>
 
        * config/aarch64/aarch64-protos.h (aarch64_split_sve_subreg_move)
index 0161761330b2c7b8ecc444b7c1dd033ec86d3790..2791e93817abbaf3bd8d91fdb9397412630fe32e 100644 (file)
@@ -191,13 +191,41 @@ dom_walker::dom_walker (cdi_direction direction,
                        int *bb_index_to_rpo)
   : m_dom_direction (direction),
     m_skip_unreachable_blocks (reachability != ALL_BLOCKS),
-    m_user_bb_to_rpo (bb_index_to_rpo != NULL),
+    m_user_bb_to_rpo (true),
     m_unreachable_dom (NULL),
     m_bb_to_rpo (bb_index_to_rpo)
 {
-  /* Compute the basic-block index to RPO mapping if not provided by
-     the user.  */
-  if (! m_bb_to_rpo && direction == CDI_DOMINATORS)
+  /* Set up edge flags if need be.  */
+  switch (reachability)
+    {
+    default:
+      gcc_unreachable ();
+    case ALL_BLOCKS:
+      /* No need to touch edge flags.  */
+      break;
+
+    case REACHABLE_BLOCKS:
+      set_all_edges_as_executable (cfun);
+      break;
+
+    case REACHABLE_BLOCKS_PRESERVING_FLAGS:
+      /* Preserve the edge flags.  */
+      break;
+    }
+}
+
+/* Constructor for a dom walker.  */
+
+dom_walker::dom_walker (cdi_direction direction,
+                       enum reachability reachability)
+  : m_dom_direction (direction),
+    m_skip_unreachable_blocks (reachability != ALL_BLOCKS),
+    m_user_bb_to_rpo (false),
+    m_unreachable_dom (NULL),
+    m_bb_to_rpo (NULL)
+{
+  /* Compute the basic-block index to RPO mapping.  */
+  if (direction == CDI_DOMINATORS)
     {
       int *postorder = XNEWVEC (int, n_basic_blocks_for_fn (cfun));
       int postorder_num = pre_and_rev_post_order_compute (NULL, postorder,
@@ -348,7 +376,10 @@ dom_walker::walk (basic_block bb)
              for (dest = first_dom_son (m_dom_direction, bb);
                   dest; dest = next_dom_son (m_dom_direction, dest))
                worklist[sp++] = dest;
-             if (sp - saved_sp > 1 && m_dom_direction == CDI_DOMINATORS)
+             /* Sort worklist after RPO order if requested.  */
+             if (sp - saved_sp > 1
+                 && m_dom_direction == CDI_DOMINATORS
+                 && m_bb_to_rpo)
                sort_bbs_postorder (&worklist[saved_sp], sp - saved_sp);
            }
        }
index 2e8290f3a1c4eb64649c90cbae549c88ac9567f4..3057bddc79ed6fb5c0d7e35572b95847d4b65e33 100644 (file)
@@ -60,10 +60,13 @@ public:
     REACHABLE_BLOCKS_PRESERVING_FLAGS
   };
 
+  dom_walker (cdi_direction direction, enum reachability = ALL_BLOCKS);
+
   /* You can provide a mapping of basic-block index to RPO if you
-     have that readily available or you do multiple walks.  */
-  dom_walker (cdi_direction direction, enum reachability = ALL_BLOCKS,
-             int *bb_index_to_rpo = NULL);
+     have that readily available or you do multiple walks.  If you
+     specify NULL as BB_INDEX_TO_RPO dominator children will not be
+     walked in RPO order.  */
+  dom_walker (cdi_direction direction, enum reachability, int *bb_index_to_rpo);
 
   ~dom_walker ();
 
index bd118a9391c29ade5f11b319903252f037b756d6..36ffcea16752cba326654df07089904dc57d1b1d 100644 (file)
@@ -1,3 +1,7 @@
+2018-02-01  Richard Biener  <rguenther@suse.de>
+
+       * gcc.dg/graphite/pr35356-1.c: Adjust.
+
 2018-02-01  Richard Sandiford  <richard.sandiford@linaro.org>
 
        PR testsuite/83846
index ce85178fa68a254ebea552e16952dd92cbff42eb..07339c8f6417dad5025943e917ec906750997435 100644 (file)
@@ -34,4 +34,4 @@ if (n >= k + 1 && k >= 0) {
 
 */
 
-/* { dg-final { scan-tree-dump "if \\\(P_8 >= P_11 \\\+ 1 && P_11 >= 0\\\) \\\{" "graphite" } } */
+/* { dg-final { scan-tree-dump "if \\\(P_\[0-9\]+ >= P_\[0-9\]+ \\\+ 1 && P_\[0-9\]+ >= 0\\\) \\\{" "graphite" } } */
index e9a98b2c035164dc4239df73cf7f7b588f6631be..f4af33c1303a9153d8a1ee0d7bd58ddf954d86a5 100644 (file)
@@ -1463,7 +1463,8 @@ rewrite_add_phi_arguments (basic_block bb)
 class rewrite_dom_walker : public dom_walker
 {
 public:
-  rewrite_dom_walker (cdi_direction direction) : dom_walker (direction) {}
+  rewrite_dom_walker (cdi_direction direction)
+    : dom_walker (direction, ALL_BLOCKS, NULL) {}
 
   virtual edge before_dom_children (basic_block);
   virtual void after_dom_children (basic_block);
@@ -2153,7 +2154,8 @@ rewrite_update_phi_arguments (basic_block bb)
 class rewrite_update_dom_walker : public dom_walker
 {
 public:
-  rewrite_update_dom_walker (cdi_direction direction) : dom_walker (direction) {}
+  rewrite_update_dom_walker (cdi_direction direction)
+    : dom_walker (direction, ALL_BLOCKS, NULL) {}
 
   virtual edge before_dom_children (basic_block);
   virtual void after_dom_children (basic_block);
@@ -2322,7 +2324,7 @@ private:
 };
 
 mark_def_dom_walker::mark_def_dom_walker (cdi_direction direction)
-  : dom_walker (direction), m_kills (BITMAP_ALLOC (NULL))
+  : dom_walker (direction, ALL_BLOCKS, NULL), m_kills (BITMAP_ALLOC (NULL))
 {
 }