From patchwork Wed Sep 13 16:50:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Steve Ellcey X-Patchwork-Id: 813537 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-462056-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="hbQH6Y+Y"; dkim-atps=neutral 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 3xsnjb12L0z9sNV for ; Thu, 14 Sep 2017 02:50:57 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:subject:from:reply-to:to:date:content-type :mime-version; q=dns; s=default; b=e9dLyk1pZck7Q95sFrTUimzZ7DzxR 6/u5uw9JbLbweWz6IkOHcz9DID2RlnjwkgW41290udEgVgfgtueIMjDoSKbW7HGs 5dRBaI9zil2wBrhKqTYRmTVkljlOpGvCvo99/093wOpTqphavDujCT0fo5Uy2YA9 DKqESsq+CATYGQ= 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 :message-id:subject:from:reply-to:to:date:content-type :mime-version; s=default; bh=mizqLvkuMqSkdvY8fdyUR1Uoetw=; b=hbQ H6Y+YO0vdJeARHSECv54tBsDnaFvbkIT1ZjBzS6lo3Oa4IY3dlDsPYUNeyyQu/IA gXsWRWNYhV3nh8pf3UR9kpir0ZsZwGUY9NXPXKLDddc0gGfZBfpvtEQVnsK5a7wY eL/FlYoMT82lz0oE6xV+kMmKDiTU6FNMZ0NI8DGs= Received: (qmail 112053 invoked by alias); 13 Sep 2017 16:50:48 -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 112009 invoked by uid 89); 13 Sep 2017 16:50:48 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.2 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy= X-HELO: NAM02-BL2-obe.outbound.protection.outlook.com Received: from mail-bl2nam02on0073.outbound.protection.outlook.com (HELO NAM02-BL2-obe.outbound.protection.outlook.com) (104.47.38.73) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 13 Sep 2017 16:50:46 +0000 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Steve.Ellcey@cavium.com; Received: from sellcey-dt.caveonetworks.com (50.233.148.156) by BN6PR07MB3539.namprd07.prod.outlook.com (10.161.153.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.35.12; Wed, 13 Sep 2017 16:50:43 +0000 Message-ID: <1505321438.2286.7.camel@cavium.com> Subject: [PATCH][aarch64] Fix target/pr77729 - missed optimization related to zero extension From: Steve Ellcey Reply-To: sellcey@cavium.com To: gcc-patches Date: Wed, 13 Sep 2017 09:50:38 -0700 Mime-Version: 1.0 X-ClientProxiedBy: MWHPR12CA0052.namprd12.prod.outlook.com (10.175.47.142) To BN6PR07MB3539.namprd07.prod.outlook.com (10.161.153.141) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 81bb377a-28c3-4a05-d0a1-08d4fac79349 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(300000502095)(300135100095)(22001)(2017030254152)(300000503095)(300135400095)(2017052603199)(49563074)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:BN6PR07MB3539; X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3539; 3:H/FYVA5ErR/BrpWFB4B6Bm2n/kVD4RYwi9f3UHaI84UH79prB5taBolU3fo9izARxIXwIkw3z+wjYx4yYnca8wJjZ/kXZdW9zx/jHifXF7BjTKpQjaWYPyLw4c5Fp2C7N1lpBIC43Y9rLsNtumiHaZyzCslMVsaFaynMphtrCUGT+Q16VJqmEUKMS2eawCwGLIlro7iJkd9CGs1uNTJwf+9NUmcNZ1q37aq85efjwIC6qQkn8pORocKuy9HSE3LA; 25:yAZwn6n5apiYY4fg5uAq6A+iic6IsNiSu9bi2VeInMDr8/zOfEP3nL7Sjc6SHT/bC7ZkDSoTHGnU5h4bfHuMBM866Z+p/LFr5bySYL3OW0tM3GQI+MxjDosqR7Ii1eyjRznWWDdkvFf5K8XYbcF20aqN4KN2CjxQqJ7uc7zXklElmNMrBPe7x/t+LoaOrJx/QxzpgLx3AxIrw5r3fJUf4Z6+l/feShsrWWAEwX2XNWBUM0VlRXKYtRm88GlVG16hgLeJV8BHQJjPlMug8pL79S/Ht522033QWpmWWLiFbBa4ZVdy0RqIiIbgADNUf4/zNsojjCBJmNu7UkADwfXWNg==; 31:8dbwrqy+55fCN9dLL0OYjR7nniTV14ZNo7Wy0EL+RDq9yfOrJL+gP1LfG+rP9Q5bHznpBgIYnrA9zGjxD5nNfYMaWahVjaKNno2pgKm29EbLkJagImV7wZ+ZNfN4d3n89gQvBtZODiXPTDED1LPQRzEruBigMAgPuNJDyF8lAp8CIxhDzXFvqB8UfC52X3M1350NA98zApVHxOq+/JcKGdAK8K3rgp6CPQKtBSR7HT0= X-MS-TrafficTypeDiagnostic: BN6PR07MB3539: X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3539; 20:m5Kl0+jrGN7WiOCXOGYpfgPbyeWOouc7aFoNQhCPoXYBDdjU6zpYVbAIUjcpYnvvQ1QzAeVgL2MJH2M0zqXYhVBGU8n0Mj2Ph+noXFZXMXCneFpX5hqwLcV5hYTSQhfVtv6HJxqdwYLdGtgoZM+Iqg1c6bzOzNiEWSy013dt60cL5BJkhX6A0e0FBIRf+WLyZvTX03zqvFY8EqXNE7WUrjFTyBscL157XcAhIcDuctkGDclirxNzPrwphDlvbWOIesOmKxoWygN9Zh5kNtXt5/n4+L8KYI9frMiCu94IK0fNnHzWSNVoQvGONaYnk0idkeBjSE5hhH4WIcrU526PbkkC2JPAAlHIyaWAyODi8hsapYn4VhTo3EPnykz4FOlTn936D+BfQYtZX8445HtdrgIpJbeK7SkuvQb0VERoWZoGMgjT5fogiw3mEoy0IJmnQwO6LyMWsHXEKbbWQtoCnnHvRAeIboQ420CyzIrpPgrBENd07Qw7LHI2kDsA6hq7; 4:E24/mQFzqqKDgVDM8GDmTP7/qNACvXnlSIlenIoF05m6IYbMt3QHJTxaag1BUN7bh7qvjCakb1eTs4sv2oNrN4VVBFna8yamfNtfYO7PJ6dxWgRUNkRCluoE0Sv6oyQfkOWOC8skLV2IriQmeAOKdPVs92MUjWT5WMmUfloxl2s8XQyH7qlzIc3GjdtnKlwPghzN718Howjp1pJ+8hWVeOX5GEfPorNy6kMdYEZc/1MI6tp0HVArbbLEg952i9G0 X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(102415395)(6040450)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(6041248)(20161123560025)(20161123558100)(20161123562025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:BN6PR07MB3539; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:BN6PR07MB3539; X-Forefront-PRVS: 042957ACD7 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(346002)(376002)(199003)(189002)(377424004)(33646002)(2906002)(25786009)(84326002)(189998001)(6916009)(106356001)(53416004)(105586002)(110136004)(7736002)(53936002)(5890100001)(3450700001)(4810100001)(36756003)(305945005)(5660300001)(50226002)(6506006)(6486002)(50986999)(81166006)(6512007)(103116003)(4610100001)(6666003)(81156014)(8676002)(97736004)(43066003)(568964002)(478600001)(69596002)(68736007)(16526017)(3846002)(6116002)(66066001)(72206003)(101416001)(8936002)(316002)(512874002)(2476003)(99106002); DIR:OUT; SFP:1101; SCL:1; SRVR:BN6PR07MB3539; H:sellcey-dt.caveonetworks.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3539; 23:FY6XYKsWk4HvrdJ+bIaAPCvyHhuNf6PVTn/rEEjWUYXRzHfbKw1x2Ia2hlWUsWqGWggbl5lHicyJcloedtxxoq3XVoT/ZUdTq1Oxz1m2P4xjWIqcBEDLhDiqILFOg2gcJPrjEOdRgYw37HQFSZFMnq+C4A5jfEdpu2JT9Rm7ln8m2gWh2gM018QGWcKQGnm315LDLlqbMzvRgFVPontHRfiafYMAoATHXjDU+x3M2rku6HcHmSiy8r0cyviE1Nw9SC3cCuAR6CI5H7Z2lxT06QT4ybQm/Cw8MuvuFRbxLtCKc/WbJbgwKmT9uAh4z4qPFv7Svzt/cPerQ4xZ8yxKvsaMOasnn9hfmz4EXpl4rN5a3ro3TH+V2vi8qPkYNKaerj3VvQe/SMpQIV+CsVEiuSKFISDDvGJSsJkSWM8C+rRV5vbhfrNGXJprF/DaZAvhm3rOJFNxfcREbAhiKSM1Jtbd1/J6eYrNJ+abx++Qo2Gl0YIdYzZfLHdMFWNq+ZTZamvDWUlZ4PU4PWaegjvOA8Q8uTFeijgoRyjKuDltS4M6MNrNHmkpB/lCihyy0aF/XX1zRXVyvCuezYkkDTHeVkA5VvQB5AQXmjtSYWKpTiy2cO3YaRYBcRraTPxOz4eUpPjDyICr/eLikvCRXlcrjshCpbc6z8STRxRoJnmxerPCloHlz3ryId0DxIvbrOaSn+g5P/G7rCce6bhFr/sbbYNZtG0VP4Okmdg5/q1gX/mOfnHAwLf3DSgTTmIedJo/679BA2v9JsZiSPgLlhYTBlhQhrBoxBASQ0utkJtX+9rYEZkJj6MVXQFS9xy+sUxPNx0RP2bgA7Zvc1A6s2GvmnKKWzMFkO8qjy4302QeE+pcWaVS0//n/H0qTkHAQY7LY2roeHNwkcQ1Hh9P+8aWBwfMMpNN+Pq0ZfLbg5ZfWUDOtBrFEsOIaMvEK9OP/mziF/B2JT7SGB++dG8saRkgWQ0WhdBjaia964yBIEXEJ0KhmMXUgBQk/pDBSZ+71nIsDdWvrRKjEv6KuvL00cvhvLX++YqUxfC1zhK+gPQ5+Julck17qVQ1CxIXF3kukE/8nTf9vmO5mnoXSvI95PANKtqMZRtr52Ce/N3MoS3ftAquEAS5ED7j0tB5CPTpp1czk1pjAR4Al2w20nT++PuP0TZsWWisOimzzDsR6RfzAa7rjVIdVD8nt0wAWEPLgBoucEb4MQ/HceOLxFtsaum9Iw== X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3539; 6:n+0Wo43eKP85OWeObq2EDCluG2pxH83wJQGoTKWw4AfVjCIr/wYmHNX+afpQESiyneiPdyJoPqIaCmGAfdruxz82DuHgsv9enSC/Ot+JHlQ7Zn2Nd5xSfeQ75f34gp1i2fzNShIRsjFCrDme/diXu6vg+yN7v5Kli+oOwacAhEe8Y+VJVn1i+T5xushU1QQBtsYCbjT2W/ulX3XDgKF9QQMtFfJoTRbM2txZ0eeth4TwTW2CDK35bznX74Yc+uOHROMIiAavmi71tqb4e3RuIP6UjZEo/yxXevuSiBd6xC/JlYoOVymTb7MuN1ML3sxwBNcO44hTbe+4vXGOI/w5qA==; 5:mIyGjSjtit1MiYTP0p1ZS3hQpi8tc99DhuoAFGWcNWEf+N8uX25TpoVO8Q/EOjVNzH8GH97iwFEbDolObzObQjfIWZXJedROQLKG/dClAt3FEAUaJxaJUIFFVC+EclKdHHu+K4Yp3sR4wD28LHf98w==; 24:1bhy/n+qfG8yo3HL/K9JRcSX0EUmd2oMks2UAbqYMayq0bKLphbbqDzt+rldorazXmCNL9f1VWSjIAFYyD0BqygKnPe/zvo0ZPIa2ldZM3k=; 7:y5ARAdBsLv0aNDQIb24SvBN4ayiZebxLf893KXIgXJE+SYklsVF/89tTiC8owMCCjO23DIg0RqWWpVvksopguKmy/gIfEQUt984Md4QfZ0aKQTbgvatIlx8hC9hSrlwvFssckDAhInfQxAWVnsDDvIHXwsHtc2BpWFyk0KxSsll4HOKIY4s7YdMbVvcJcRsFw/PMgv9itYzRLbLEs8vYmBMQU/6h5BRfiDzhoBenRcA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Sep 2017 16:50:43.9436 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR07MB3539 This is a patch for PR target/77729 on aarch64.  The code is doing an unneeded zero extend ('uxtb' in the original report, 'and' in the ToT sources). The patch looks a bit odd, it is a specialized define_insn for the combine pass.  At some point in combine (I never did find out where), the zero_extend is converted to an AND so my instruction looks for an OR of a constant and an AND expression where one operand of the AND is a subreg and the other is a constant.  If the two constants add up to 255 that means that the AND is being used to mask out the upper bits of the register while not messing up the constant we are using in the OR expression. I also had to recognize this in the aarch64 cost function or combine would not use the new expression even when it recognized it as it thought it cost more than the original uncombined expressions. Tested on aarch64 with a bootstrap and testsuite run that had no regressions. OK to checkin? 2017-09-13  Steve Ellcey   PR target/77729 * config/aarch64/aarch64.c (aarch64_rtx_costs): Handle cost of *iorqi3_uxtw instruction. * config/aarch64/aarch64.md (*iorqi3_uxtw): New instruction for combine phase. 2017-09-13  Steve Ellcey   * gcc.target/aarch64/pr77729.c: New test. diff --git a/gcc/testsuite/gcc.target/aarch64/pr77729.c b/gcc/testsuite/gcc.target/aarch64/pr77729.c index e69de29..2fcda9a 100644 --- a/gcc/testsuite/gcc.target/aarch64/pr77729.c +++ b/gcc/testsuite/gcc.target/aarch64/pr77729.c @@ -0,0 +1,32 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +int TrieCase3_v1(const char *string) +{ + if((string[0] | 32) == 't') { + if((string[1] | 32) == 'a') { + if((string[2] | 32) == 'g') { + return 42; + } + } + } + return -1; +} + +int TrieCase3_v2(const char *string) +{ + switch(string[0] | 32) { + case 't': + switch(string[1] | 32) { + case 'a': + switch(string[2] | 32) { + case 'g': + return 42; + } + } + } + return -1; +} + +/* { dg-final { scan-assembler-not "and" } } */ +/* { dg-final { scan-assembler-not "uxtb" } } */