From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 64161 invoked by alias); 12 Jun 2017 17:08:44 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 64100 invoked by uid 89); 12 Jun 2017 17:08:42 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mx1.suse.de Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 12 Jun 2017 17:08:41 +0000 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 25714AB43 for ; Mon, 12 Jun 2017 17:08:43 +0000 (UTC) Date: Mon, 12 Jun 2017 17:08:00 -0000 From: Martin Jambor To: GCC Patches Cc: Richard Biener Subject: [PR80803 1/2] Streamline SRA access enqueuing Message-ID: <20170612170840.uqbdztfhwbunfj27@virgil.suse.cz> Mail-Followup-To: GCC Patches , Richard Biener MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline User-Agent: NeoMutt/20170421 (1.8.2) X-IsSubscribed: yes X-SW-Source: 2017-06/txt/msg00833.txt.bz2 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 * 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