From patchwork Tue Feb 16 04:50:57 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Hurugalawadi, Naveen" X-Patchwork-Id: 583149 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 16CA014031E for ; Tue, 16 Feb 2016 15:51:12 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=GHLyoLs6; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:references:in-reply-to :content-type:mime-version; q=dns; s=default; b=n2GV4kIXq2C2yFgz OTZKgrWmFEw7hE0ulLQse0UKBuX3aeUTOs1PHfHdEq7Ert1X3QYKkow6p4+8u10E A1G54UnHkj27ShsVn63QASatmfTAdgs4Bvss116l0cQUmNp641gKpOwJ/D/R0+EJ Sr6q2i6bOVZ2UtzjI/rgGX5FZuY= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:references:in-reply-to :content-type:mime-version; s=default; bh=JLtezyF7KTCeM3hwO5/HmH xuQsc=; b=GHLyoLs6lWHOohjHplZTh1hNjEP2hLMFjktY28eUXMofTNUW69ZqCk UrMrb7ZrEOwKt+BOaKq0Q6VCrOYysI4sfTOFAYEpmCVtqnImrJcsEU2dDVzu9CPb hEyCoEbVQGYclsbEC6677Lt0vbltNTVOtG1CbrfAcblfIxHnqoJQI= Received: (qmail 9328 invoked by alias); 16 Feb 2016 04:51:04 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9311 invoked by uid 89); 16 Feb 2016 04:51:02 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.9 required=5.0 tests=BAYES_00, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=no version=3.3.2 spammy=enhances, type_mode, TYPE_MODE, scmp X-HELO: na01-bn1-obe.outbound.protection.outlook.com Received: from mail-bn1bon0076.outbound.protection.outlook.com (HELO na01-bn1-obe.outbound.protection.outlook.com) (157.56.111.76) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA256 encrypted) ESMTPS; Tue, 16 Feb 2016 04:51:01 +0000 Received: from SN2PR0701MB1024.namprd07.prod.outlook.com (10.160.57.150) by BN4PR07MB2147.namprd07.prod.outlook.com (10.164.63.17) with Microsoft SMTP Server (TLS) id 15.1.409.15; Tue, 16 Feb 2016 04:50:58 +0000 Received: from SN2PR0701MB1024.namprd07.prod.outlook.com ([10.160.57.150]) by SN2PR0701MB1024.namprd07.prod.outlook.com ([10.160.57.150]) with mapi id 15.01.0403.019; Tue, 16 Feb 2016 04:50:58 +0000 From: "Hurugalawadi, Naveen" To: Richard Biener , Senthil Kumar Selvaraj CC: "gcc-patches@gcc.gnu.org" , "Pinski, Andrew" Subject: Re: PATCH] Fix PR 31531: A microoptimization of isnegative of signed integer Date: Tue, 16 Feb 2016 04:50:57 +0000 Message-ID: References: <87egcn7eae.fsf@atmel.com>, In-Reply-To: authentication-results: gcc.gnu.org; dkim=none (message not signed) header.d=none; gcc.gnu.org; dmarc=none action=none header.from=caviumnetworks.com; x-microsoft-exchange-diagnostics: 1; BN4PR07MB2147; 5:ZH33CVtutlmScjaK0vfI7jf/lMO3BSuP/iGf7qfIeMf+AxQAl8RgmSyYkw+UtRfU5yu7mURTmdjqPg0Gtl3z9dde3pb7V2H2ZmtfOE6kCaWRc6JkTz/0DoiINcWEqkR7W1j1a6K/jO3t4kCfEDOAuA==; 24:KwL/IEwDKvFtaXRR7ji8AQXp5U7y5r1g/E7HAeewirjonQl6lLRa7l4IqsruHsvq2CIqKnjECQS42MkuCakz0ptKSh0dc1AQmh/osx2joJI= x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN4PR07MB2147; x-ms-office365-filtering-correlation-id: 4db8376d-666e-40e2-5cce-08d3368cc2d6 x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(102415293)(102615271)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001); SRVR:BN4PR07MB2147; BCL:0; PCL:0; RULEID:; SRVR:BN4PR07MB2147; x-forefront-prvs: 0854128AF0 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6009001)(164054003)(10400500002)(107886002)(33656002)(87936001)(2906002)(5001960100002)(189998001)(5001770100001)(3660700001)(54356999)(5890100001)(2950100001)(3280700002)(4326007)(99936001)(66066001)(76176999)(76576001)(50986999)(5002640100001)(106116001)(586003)(40100003)(92566002)(1220700001)(6116002)(3846002)(102836003)(122556002)(558084003)(11100500001)(5003600100002)(74316001)(99286002)(86362001)(4001430100002)(5008740100001)(1096002)(5004730100002)(2900100001)(77096005); DIR:OUT; SFP:1101; SCL:1; SRVR:BN4PR07MB2147; H:SN2PR0701MB1024.namprd07.prod.outlook.com; FPR:; SPF:None; MLV:sfv; LANG:en; spamdiagnosticoutput: 1:23 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Feb 2016 04:50:57.6677 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN4PR07MB2147 Hi, >> I'm also failing to see why you can't enhance the existing Please find attached the patch that enhances the existing pattern. Please review the patch and let me know if any further modifications are required. Thanks, Naveen diff --git a/gcc/match.pd b/gcc/match.pd index 6c8ebd5..bd47a91 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -1871,10 +1871,21 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (for cmp (simple_comparison) scmp (swapped_simple_comparison) (simplify - (cmp (bit_not@2 @0) CONSTANT_CLASS_P@1) + (cmp (convert?@3 (bit_not@2 @0)) CONSTANT_CLASS_P@1) (if (single_use (@2) - && (TREE_CODE (@1) == INTEGER_CST || TREE_CODE (@1) == VECTOR_CST)) - (scmp @0 (bit_not @1))))) + && ((TREE_CODE (@1) == INTEGER_CST && TREE_TYPE (@3) == TREE_TYPE (@2)) + || (TREE_CODE (@1) == VECTOR_CST + && (VECTOR_TYPE_P (TREE_TYPE (@3)) + == VECTOR_TYPE_P (TREE_TYPE (@2))) + && (TYPE_VECTOR_SUBPARTS (TREE_TYPE (@3)) + == TYPE_VECTOR_SUBPARTS (TREE_TYPE (@2))) + && (TYPE_MODE (TREE_TYPE (TREE_TYPE (@3))) + == TYPE_MODE (TREE_TYPE (TREE_TYPE (@2))))))) + (scmp @0 (bit_not @1)) + (if (TYPE_PRECISION (TREE_TYPE (@3)) == TYPE_PRECISION (TREE_TYPE (@2)) + && (TREE_CODE (@1) == INTEGER_CST)) + (with { tree newtype = TREE_TYPE (@1); } + (scmp (convert:newtype @0) (bit_not @1))))))) (for cmp (simple_comparison) /* Fold (double)float1 CMP (double)float2 into float1 CMP float2. */ diff --git a/gcc/testsuite/gcc.dg/pr31531.c b/gcc/testsuite/gcc.dg/pr31531.c new file mode 100644 index 0000000..cf9dd82 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr31531.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-fdump-tree-gimple" } */ +/* { dg-require-effective-target int32 } */ + +int isnegative_optimized_4 (unsigned int X) +{ + int result; + if ((~X) >> 31) + result = 0; + else + result = 1; + return result; +} + +/* { dg-final { scan-tree-dump-times "signed int X.0" 1 "gimple" } } */