From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12782 invoked by alias); 23 Jul 2015 07:26:22 -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 12767 invoked by uid 89); 23 Jul 2015 07:26:21 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.7 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mx2.suse.de Received: from cantor2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (CAMELLIA256-SHA encrypted) ESMTPS; Thu, 23 Jul 2015 07:26:20 +0000 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 21867AB08 for ; Thu, 23 Jul 2015 07:26:15 +0000 (UTC) Date: Thu, 23 Jul 2015 08:22:00 -0000 From: Richard Biener To: gcc-patches@gcc.gnu.org Subject: [PATCH] Fix PR66916 Message-ID: User-Agent: Alpine 2.11 (LSU 23 2013-08-11) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-SW-Source: 2015-07/txt/msg01901.txt.bz2 The following adds a single-use restriction to the widening/sing-change comparison pattern which fixes PR66916. Bootstrapped and tested on x86_64-unknown-linux-gnu. Verified the arm testcase produces expected assembly with a cc1 cross. Richard. 2015-07-22 Richard Biener PR middle-end/66916 * match.pd: Guard widen and sign-change comparison simplification with single_use. Index: gcc/match.pd =================================================================== --- gcc/match.pd (revision 226042) +++ gcc/match.pd (working copy) @@ -1679,7 +1719,8 @@ (define_operator_list CBRT BUILT_IN_CBRT type on targets that require function pointer canonicalization. */ && !(targetm.have_canonicalize_funcptr_for_compare () && TREE_CODE (TREE_TYPE (@00)) == POINTER_TYPE - && TREE_CODE (TREE_TYPE (TREE_TYPE (@00))) == FUNCTION_TYPE)) + && TREE_CODE (TREE_TYPE (TREE_TYPE (@00))) == FUNCTION_TYPE) + && single_use (@0)) (if (TYPE_PRECISION (TREE_TYPE (@00)) == TYPE_PRECISION (TREE_TYPE (@0)) && (TREE_CODE (@10) == INTEGER_CST || (@1 != @10 && types_match (TREE_TYPE (@10), TREE_TYPE (@00))))