This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PR80803 1/2] Streamline SRA access enqueuing
- From: Martin Jambor <mjambor at suse dot cz>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: Richard Biener <rguenther at suse dot de>
- Date: Mon, 12 Jun 2017 19:08:40 +0200
- Subject: [PR80803 1/2] Streamline SRA access enqueuing
- Authentication-results: sourceware.org; auth=none
Hi,
this is a preparation for a patch fixing PR 80803. Basically, it
moves all checks for a non-null access->first_link before enqueuing a
SRA access into add_access_to_work_queue instead of each caller doing
it.
Moreover, it fixes a thinko in ancestor enqueuing by removing an
erroneous break which would previously stop the process at the first
access with a link. This has been always wrong but is now more so
because with lazy grp_write setting, we rely proper enqueuing to
propagate it to all necessary accesses.
Bootstrapped on x86_64-linux (all languages including Ada and Go),
powerpc64le-linux (all languages except Ada but including Go) and
Aarch64-linux (the same). OK for trunk?
Thanks,
Martin
2017-06-08 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.
---
gcc/tree-sra.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 42879adbad1..05bc3d0e806 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -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);
--
2.13.1