[{"id":1763945,"web_url":"http://patchwork.ozlabs.org/comment/1763945/","msgid":"<alpine.LSU.2.20.1709061117120.14191@zhemvz.fhfr.qr>","list_archive_url":null,"date":"2017-09-06T09:17:21","subject":"Re: [PR 82078] Enqueue all SRA links for write flag propagation","submitter":{"id":4338,"url":"http://patchwork.ozlabs.org/api/people/4338/","name":"Richard Biener","email":"rguenther@suse.de"},"content":"On Wed, 6 Sep 2017, Martin Jambor wrote:\n\n> Hi,\n> \n> PR 82078 is another fallout from lazy setting of written flag in SRA.\n> The problem here is that we do not enqueue assignment links going out\n> of accesses of candidates that were disqualified before we start the\n> loop with sort_and_splice_var_accesses.\n> \n> Given that the propagation is now a correctness necessity, we need to\n> enqueue all links for processing, so this patch does it when they they\n> are created.  There should be very little extra work done because of\n> this because propagate_all_subaccesses starts with checking the\n> candidate-status of both sides of each link and acts accordingly.\n> \n> Bootstrapped and tested on x86_64-linux without any issues.  OK for\n> trunk?\n\nOk.\n\nThanks,\nRichard.\n\n> Thanks,\n> \n> Martin\n> \n> \n> \n> 2017-09-05  Martin Jambor  <mjambor@suse.cz>\n> \n> \tPR tree-optimization/82078\n> gcc/\n> \t* tree-sra.c (sort_and_splice_var_accesses): Move call to\n> \tadd_access_to_work_queue...\n> \t(build_accesses_from_assign): ...here.\n> \t(propagate_all_subaccesses): Make sure racc is the group\n> \trepresentative, if there is one.\n> \n> gcc/testsuite/\n> \t* gcc.dg/tree-ssa/pr82078.c: New test.\n> ---\n>  gcc/testsuite/gcc.dg/tree-ssa/pr82078.c | 27 +++++++++++++++++++++++++++\n>  gcc/tree-sra.c                          |  5 ++++-\n>  2 files changed, 31 insertions(+), 1 deletion(-)\n>  create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr82078.c\n> \n> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr82078.c b/gcc/testsuite/gcc.dg/tree-ssa/pr82078.c\n> new file mode 100644\n> index 00000000000..3774986324b\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr82078.c\n> @@ -0,0 +1,27 @@\n> +/* { dg-do run } */\n> +/* { dg-options \"-O\" } */\n> +\n> +struct S0 {\n> +  signed f4;\n> +  signed f9 : 5;\n> +} a[6][5], b = {2}\n> +\n> +;\n> +int c, d;\n> +int fn1() {\n> +  struct S0 e[5][6];\n> +  struct S0 f;\n> +  b = f = e[2][5] = a[5][0];\n> +  if (d)\n> +    ;\n> +  else\n> +    return f.f9;\n> +  e[c][45] = a[4][4];\n> +}\n> +\n> +int main() {\n> +  fn1();\n> +  if (b.f4 != 0)\n> +    __builtin_abort ();\n> +  return 0;\n> +}\n> diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c\n> index 68edbce21b3..163b7a2d03b 100644\n> --- a/gcc/tree-sra.c\n> +++ b/gcc/tree-sra.c\n> @@ -1359,6 +1359,8 @@ build_accesses_from_assign (gimple *stmt)\n>        link->lacc = lacc;\n>        link->racc = racc;\n>        add_link_to_rhs (racc, link);\n> +      add_access_to_work_queue (racc);\n> +\n>        /* Let's delay marking the areas as written until propagation of accesses\n>  \t across link, unless the nature of rhs tells us that its data comes\n>  \t from elsewhere.  */\n> @@ -2118,7 +2120,6 @@ sort_and_splice_var_accesses (tree var)\n>        access->grp_total_scalarization = total_scalarization;\n>        access->grp_partial_lhs = grp_partial_lhs;\n>        access->grp_unscalarizable_region = unscalarizable_region;\n> -      add_access_to_work_queue (access);\n>  \n>        *prev_acc_ptr = access;\n>        prev_acc_ptr = &access->next_grp;\n> @@ -2712,6 +2713,8 @@ propagate_all_subaccesses (void)\n>        struct access *racc = pop_access_from_work_queue ();\n>        struct assign_link *link;\n>  \n> +      if (racc->group_representative)\n> +\tracc= racc->group_representative;\n>        gcc_assert (racc->first_link);\n>  \n>        for (link = racc->first_link; link; link = link->next)\n>","headers":{"Return-Path":"<gcc-patches-return-461560-incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","mailing list gcc-patches@gcc.gnu.org"],"Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org\n\t(client-ip=209.132.180.131; helo=sourceware.org;\n\tenvelope-from=gcc-patches-return-461560-incoming=patchwork.ozlabs.org@gcc.gnu.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org\n\theader.b=\"BSzb0vux\"; dkim-atps=neutral","sourceware.org; auth=none"],"Received":["from sourceware.org (server1.sourceware.org [209.132.180.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xnHzf3SXfz9sNd\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed,  6 Sep 2017 19:17:33 +1000 (AEST)","(qmail 82713 invoked by alias); 6 Sep 2017 09:17:25 -0000","(qmail 82697 invoked by uid 89); 6 Sep 2017 09:17:24 -0000","from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by\n\tsourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP;\n\tWed, 06 Sep 2017 09:17:23 +0000","from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254])\tby\n\tmx1.suse.de (Postfix) with ESMTP id 3E81AAD71\tfor\n\t<gcc-patches@gcc.gnu.org>; Wed,  6 Sep 2017 09:17:21 +0000 (UTC)"],"DomainKey-Signature":"a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:date\n\t:from:to:cc:subject:in-reply-to:message-id:references\n\t:mime-version:content-type; q=dns; s=default; b=ko5SGhhJLC3AoTyb\n\tQkIoYLBnbN0UzmZQvFtswABKvpLbJX1shw3CFXY5ftv7tklMiJlpwzooYbp/VWn/\n\taspiYs1hviO09upxT081ydRAmCvkReK0TvgR6IV2TUobOdLLmCU6PC7fy6SKdVUy\n\t1Ik+ctoeQOP/HwlOn9BBLFgO1j0=","DKIM-Signature":"v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:date\n\t:from:to:cc:subject:in-reply-to:message-id:references\n\t:mime-version:content-type; s=default; bh=Ns+PfowXtA0F1vUv/5HOy6\n\tSuWos=; b=BSzb0vuxTgZxIDRB+LTbkdGk4apZrAOx8SomVFwSz1lIYm3Du6DY9+\n\tIU3Y4YxHe1815UrFUIXg5tmN6+qe/WsHDj54EQjWWu5+GS5FbZwf33VVdEQ2JgDz\n\tLnABQH6wpdHOtdCKEu2KHQX2trPqHvPX3nUTCQMk1WvR+nHGvplKU=","Mailing-List":"contact gcc-patches-help@gcc.gnu.org; run by ezmlm","Precedence":"bulk","List-Id":"<gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<mailto:gcc-patches-unsubscribe-incoming=patchwork.ozlabs.org@gcc.gnu.org>","List-Archive":"<http://gcc.gnu.org/ml/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-help@gcc.gnu.org>","Sender":"gcc-patches-owner@gcc.gnu.org","X-Virus-Found":"No","X-Spam-SWARE-Status":"No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0,\n\tGIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RP_MATCHES_RCVD,\n\tSPF_PASS autolearn=ham version=3.3.2 spammy=","X-HELO":"mx1.suse.de","Date":"Wed, 6 Sep 2017 11:17:21 +0200 (CEST)","From":"Richard Biener <rguenther@suse.de>","To":"Martin Jambor <mjambor@suse.cz>","cc":"GCC Patches <gcc-patches@gcc.gnu.org>","Subject":"Re: [PR 82078] Enqueue all SRA links for write flag propagation","In-Reply-To":"<20170906091533.t6r3gatru4pn4vtc@virgil.suse.cz>","Message-ID":"<alpine.LSU.2.20.1709061117120.14191@zhemvz.fhfr.qr>","References":"<20170906091533.t6r3gatru4pn4vtc@virgil.suse.cz>","User-Agent":"Alpine 2.20 (LSU 67 2015-01-07)","MIME-Version":"1.0","Content-Type":"text/plain; charset=US-ASCII"}}]