[PR80803 1/2] Streamline SRA access enqueuing
authorMartin Jambor <mjambor@suse.cz>
Tue, 13 Jun 2017 11:34:51 +0000 (13:34 +0200)
committerMartin Jambor <jamborm@gcc.gnu.org>
Tue, 13 Jun 2017 11:34:51 +0000 (13:34 +0200)
2017-06-13  Martin Jambor  <mjambor@suse.cz>

* tree-sra.c (add_access_to_work_queue): Only enqueue accesses
that have a first_link.
(sort_and_splice_var_accesses): Do not check first_link before
enquing.
(subtree_mark_written_and_enqueue): Likewise.
(propagate_all_subaccesses): Likewise and do not stop at first
parent with a first_link.

From-SVN: r249153

gcc/ChangeLog
gcc/tree-sra.c

index 0f4f469..4dec155 100644 (file)
@@ -1,5 +1,15 @@
 2017-06-13  Martin Jambor  <mjambor@suse.cz>
 
+       * tree-sra.c (add_access_to_work_queue): Only enqueue accesses
+       that have a first_link.
+       (sort_and_splice_var_accesses): Do not check first_link before
+       enquing.
+       (subtree_mark_written_and_enqueue): Likewise.
+       (propagate_all_subaccesses): Likewise and do not stop at first
+       parent with a first_link.
+
+2017-06-13  Martin Jambor  <mjambor@suse.cz>
+
        * tree-sra.c (dump_access_tree_1): Fix accidental dumping to stderr
        instead of f.
 
index 42879ad..05bc3d0 100644 (file)
@@ -627,7 +627,7 @@ relink_to_new_repr (struct access *new_racc, struct access *old_racc)
 static void
 add_access_to_work_queue (struct access *access)
 {
-  if (!access->grp_queued)
+  if (access->first_link && !access->grp_queued)
     {
       gcc_assert (!access->next_queued);
       access->next_queued = work_queue_head;
@@ -2112,8 +2112,7 @@ sort_and_splice_var_accesses (tree var)
       access->grp_total_scalarization = total_scalarization;
       access->grp_partial_lhs = grp_partial_lhs;
       access->grp_unscalarizable_region = unscalarizable_region;
-      if (access->first_link)
-       add_access_to_work_queue (access);
+      add_access_to_work_queue (access);
 
       *prev_acc_ptr = access;
       prev_acc_ptr = &access->next_grp;
@@ -2670,8 +2669,7 @@ subtree_mark_written_and_enqueue (struct access *access)
   if (access->grp_write)
     return;
   access->grp_write = true;
-  if (access->first_link)
-    add_access_to_work_queue (access);
+  add_access_to_work_queue (access);
 
   struct access *child;
   for (child = access->first_child; child; child = child->next_sibling)
@@ -2715,11 +2713,7 @@ propagate_all_subaccesses (void)
          if (reque_parents)
            do
              {
-               if (lacc->first_link)
-                 {
-                   add_access_to_work_queue (lacc);
-                   break;
-                 }
+               add_access_to_work_queue (lacc);
                lacc = lacc->parent;
              }
            while (lacc);