From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 89833 invoked by alias); 14 Oct 2015 16:27:08 -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 89816 invoked by uid 89); 14 Oct 2015 16:27:07 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,T_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; Wed, 14 Oct 2015 16:27:06 +0000 Received: by nikam.ms.mff.cuni.cz (Postfix, from userid 16202) id 5B5135439C1; Wed, 14 Oct 2015 18:27:02 +0200 (CEST) Date: Wed, 14 Oct 2015 16:27:00 -0000 From: Jan Hubicka To: gcc-patches@gcc.gnu.org, rguenther@suse.de Subject: Handle CONSTRUCTOR in operand_equal_p Message-ID: <20151014162702.GD16672@kam.mff.cuni.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-SW-Source: 2015-10/txt/msg01387.txt.bz2 Hi, this patch adds the CONSTRUCTOR case discussed while back. Only empty constructors are matched, as those are only appearing in gimple operand. I tested that during bootstrap about 7500 matches are for empty ctors. There are couple hundred for non-empty probably used on generic. Bootstrapped/regtested x86_64-linux, OK? Honza * fold-const.c (operand_equal_p): Match empty constructors. Index: fold-const.c =================================================================== --- fold-const.c (revision 228735) +++ fold-const.c (working copy) @@ -2890,6 +2891,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 + vector types. */ + return (!vec_safe_length (CONSTRUCTOR_ELTS (arg0)) + && !vec_safe_length (CONSTRUCTOR_ELTS (arg1))); default: break; }