From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8960 invoked by alias); 21 Feb 2020 12:31:31 -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 8920 invoked by uid 89); 21 Feb 2020 12:31:27 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-18.7 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mx2.suse.de Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 21 Feb 2020 12:31:26 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id F3AE7B053 for ; Fri, 21 Feb 2020 12:31:23 +0000 (UTC) Date: Fri, 21 Feb 2020 12:31:00 -0000 From: Richard Biener To: Martin Jambor cc: GCC Patches Subject: Re: [PATCH] sra: Only verify sizes of scalar accesses (PR 93845) In-Reply-To: Message-ID: References: User-Agent: Alpine 2.21 (LSU 202 2017-01-01) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="-1609908220-1445062450-1582288283=:5137" X-SW-Source: 2020-02/txt/msg01206.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---1609908220-1445062450-1582288283=:5137 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 8BIT Content-length: 2869 On Fri, 21 Feb 2020, Martin Jambor wrote: > Hi, > > the testcase is another example - in addition to recent PR 93516 - where > the SRA access verifier is confused by the fact that get_ref_base_extent > can return different sizes for the same type, depending whether they are > COMPONENT_REF or not. In the previous bug I decided to keep the > verifier check for aggregate type even though it is not really important > and instead avoid easily detectable type-within-the-same-type situation. > This testcase is however a result of a fairly random looking type cast > and so cannot be handled in the same way. > > Because the check is not really important for aggregates, this patch > simply disables it for non-register types. > > Bootstrapped and tested on x86_64-linux. OK for trunk? OK. Richard. > Thanks, > > Martin > > 2020-02-20 Martin Jambor > > PR tree-optimization/93845 > * tree-sra.c (verify_sra_access_forest): Only test access size of > scalar types. > > testsuite/ > * g++.dg/tree-ssa/pr93845.C: New test. > --- > gcc/ChangeLog | 6 +++++ > gcc/testsuite/ChangeLog | 5 +++++ > gcc/testsuite/g++.dg/tree-ssa/pr93845.C | 30 +++++++++++++++++++++++++ > gcc/tree-sra.c | 3 ++- > 4 files changed, 43 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/g++.dg/tree-ssa/pr93845.C > > diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr93845.C b/gcc/testsuite/g++.dg/tree-ssa/pr93845.C > new file mode 100644 > index 00000000000..72e473fffcd > --- /dev/null > +++ b/gcc/testsuite/g++.dg/tree-ssa/pr93845.C > @@ -0,0 +1,30 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O1" } */ > + > +struct g; > +struct h { > + g *operator->(); > +}; > +class i { > + void *a; > + int b; > + > +public: > + template f j() { return *static_cast(this); } > +}; > +struct k : i {}; > +struct l : k {}; > +struct m { > + i n(); > + i o(l, l, int); > +}; > +struct g { > + void m_fn4(k); > +}; > +h a; > +i b; > +i m::n() { > + l c, d, e = o(d, c, 0).j(); > + a->m_fn4(e); > + return b; > +} > diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c > index 0cfac0a8192..1439f11f15a 100644 > --- a/gcc/tree-sra.c > +++ b/gcc/tree-sra.c > @@ -2339,7 +2339,8 @@ verify_sra_access_forest (struct access *root) > gcc_assert (offset == access->offset); > gcc_assert (access->grp_unscalarizable_region > || size == max_size); > - gcc_assert (max_size == access->size); > + gcc_assert (!is_gimple_reg_type (access->type) > + || max_size == access->size); > gcc_assert (reverse == access->reverse); > > if (access->first_child) > -- Richard Biener SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg) ---1609908220-1445062450-1582288283=:5137--