From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 79891 invoked by alias); 23 Oct 2015 05:22:24 -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 79881 invoked by uid 89); 23 Oct 2015 05:22:24 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.5 required=5.0 tests=AWL,BAYES_50,KAM_ASCII_DIVIDERS,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: nikam.ms.mff.cuni.cz Received: from nikam.ms.mff.cuni.cz (HELO nikam.ms.mff.cuni.cz) (195.113.20.16) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Fri, 23 Oct 2015 05:22:23 +0000 Received: by nikam.ms.mff.cuni.cz (Postfix, from userid 16202) id 60FF8543FD0; Fri, 23 Oct 2015 07:22:20 +0200 (CEST) Date: Fri, 23 Oct 2015 05:43:00 -0000 From: Jan Hubicka To: Richard Biener Cc: Jan Hubicka , gcc-patches@gcc.gnu.org Subject: Re: Handle CONSTRUCTOR in operand_equal_p Message-ID: <20151023052220.GA42659@kam.mff.cuni.cz> References: <20151014162702.GD16672@kam.mff.cuni.cz> <20151014235509.GC16831@kam.mff.cuni.cz> <9FF55B7D-8DEC-45C4-8FDD-5AA0344B2B15@suse.de> <20151021190529.GB92763@kam.mff.cuni.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-SW-Source: 2015-10/txt/msg02372.txt.bz2 > > But only via GENERIC folding I suppose. Yes, we don't value-number > aggregates and generally PRE (and DOM via excessive jump-threading) > is the only pass that remotely handles this kind of situation. I actually think it is tail merging unifying the code, but I did not really look too deep into it. Honza > > code hoisting/sinking would maybe catch this but as this involves > memory I'm not sure the implementation ontop of PRE that is stuck > in some PR would catch it. > > Richard. > > > Honza > > > > * fold-const.c (operand_equal_p): Add code matching empty > > constructors. > > * gcc.dg/tree-ssa/operand-equal-1.c: Verify that empty constructors > > are matched. > > > > Index: fold-const.c > > =================================================================== > > --- fold-const.c (revision 229133) > > +++ fold-const.c (working copy) > > @@ -2892,6 +2892,11 @@ operand_equal_p (const_tree arg0, const_ > > return operand_equal_p (TREE_OPERAND (arg0, 0), TREE_OPERAND (arg1, 0), > > flags | OEP_ADDRESS_OF > > | OEP_CONSTANT_ADDRESS_OF); > > + case CONSTRUCTOR: > > + /* In GIMPLE empty constructors are allowed in initializers of > > + aggregates. */ > > + return (!vec_safe_length (CONSTRUCTOR_ELTS (arg0)) > > + && !vec_safe_length (CONSTRUCTOR_ELTS (arg1))); > > default: > > break; > > } > > Index: testsuite/gcc.dg/tree-ssa/operand-equal-1.c > > =================================================================== > > --- testsuite/gcc.dg/tree-ssa/operand-equal-1.c (revision 0) > > +++ testsuite/gcc.dg/tree-ssa/operand-equal-1.c (revision 0) > > @@ -0,0 +1,8 @@ > > +/* { dg-do compile } */ > > +/* { dg-options "-O2 -fdump-tree-pre" } */ > > +struct a {int a,b;}; > > +struct a ret(int val) > > +{ > > + return val? (struct a){} : (struct a){}; > > +} > > +/* { dg-final { scan-tree-dump-not "if " "pre"} } */ > > > > > > -- > Richard Biener > SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)