remove write-only array in rev_post_order_and_mark_dfs_back_seme
authorRichard Biener <rguenther@suse.de>
Mon, 20 Jul 2020 13:58:19 +0000 (15:58 +0200)
committerRichard Biener <rguenther@suse.de>
Mon, 20 Jul 2020 14:00:48 +0000 (16:00 +0200)
This removes a write-only array in
rev_post_order_and_mark_dfs_back_seme.

2020-07-20  Richard Biener  <rguenther@suse.de>

* cfganal.c (rev_post_order_and_mark_dfs_back_seme): Remove
write-only post array.

gcc/cfganal.c

index 395b810262a7962b3f6c786af1f9f5978bc232d3..5c85ebe3c1aa215c0ba7bf02c3f688fa14141914 100644 (file)
@@ -1079,13 +1079,12 @@ rev_post_order_and_mark_dfs_back_seme (struct function *fn, edge entry,
      a need to re-allocate.  */
   auto_vec<edge, 20> stack (2 * n_basic_blocks_for_fn (fn));
 
-  int *pre = XNEWVEC (int, 2 * last_basic_block_for_fn (fn));
-  int *post = pre + last_basic_block_for_fn (fn);
+  int *pre = XNEWVEC (int, last_basic_block_for_fn (fn));
 
   /* BB flag to track nodes that have been visited.  */
   auto_bb_flag visited (fn);
-  /* BB flag to track which nodes have post[] assigned to avoid
-     zeroing post.  */
+  /* BB flag to track which nodes have postorder visting completed.  Used
+     for backedge marking.  */
   auto_bb_flag post_assigned (fn);
 
   /* Push the first edge on to the stack.  */
@@ -1133,7 +1132,6 @@ rev_post_order_and_mark_dfs_back_seme (struct function *fn, edge entry,
            {
              /* There are no successors for the DEST node so assign
                 its reverse completion number.  */
-             post[dest->index] = rev_post_order_num;
              dest->flags |= post_assigned;
              rev_post_order[rev_post_order_num] = dest->index;
              rev_post_order_num++;
@@ -1142,16 +1140,15 @@ rev_post_order_and_mark_dfs_back_seme (struct function *fn, edge entry,
       else
        {
          if (dest->flags & visited
+             && !(dest->flags & post_assigned)
              && src != entry->src
-             && pre[src->index] >= pre[dest->index]
-             && !(dest->flags & post_assigned))
+             && pre[src->index] >= pre[dest->index])
            e->flags |= EDGE_DFS_BACK;
 
          if (idx != 0 && stack[idx - 1]->src != src)
            {
              /* There are no more successors for the SRC node
                 so assign its reverse completion number.  */
-             post[src->index] = rev_post_order_num;
              src->flags |= post_assigned;
              rev_post_order[rev_post_order_num] = src->index;
              rev_post_order_num++;