From patchwork Thu Feb 2 19:19:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Steve Ellcey X-Patchwork-Id: 723274 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 3vDqZd1wbWz9s2s for ; Fri, 3 Feb 2017 06:20:09 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="vHF1jyMY"; 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 :message-id:subject:from:to:date:content-type:mime-version; q= dns; s=default; b=kNpY80IEiISf9BEVLmlgSeq68u8nldPy9sZiYEM6bdaNSl lm0mgp2zR76a3VfDfPb6D/bczoZvoCoRbWXTp1FlF5fspvIJ9dMu8ip+eG4+QOJt Gbyx93DJKeLqdu/p2fuAkehAPEjMp7NR2OtZsg3eiSn+Ffm+ne5BlWGAGmEr0= 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:to:date:content-type:mime-version; s= default; bh=5g0kRCsvCaWjbVIx+1H+blQsMLs=; b=vHF1jyMYNmW3WvutKft5 Ifc/bJ/ys4LvDvX5A6+HfvreeKQKJP+g6+2U+C/x94aU5M/Y9kwqG1maT4BtNIK5 eApIJEQaMVKQ5rxyGjVMIDGEJ1JvtVYuhwIYizmtfrwYv0h2eIg0kWIWBu9eZ9sF X9RkMPk+Y+QVyqgDlgblrh8= Received: (qmail 87486 invoked by alias); 2 Feb 2017 19:20:00 -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 87469 invoked by uid 89); 2 Feb 2017 19:19:59 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.6 required=5.0 tests=AWL, BAYES_50, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=ony, speed_p, Expand, gs1 X-HELO: NAM02-CY1-obe.outbound.protection.outlook.com Received: from mail-cys01nam02on0051.outbound.protection.outlook.com (HELO NAM02-CY1-obe.outbound.protection.outlook.com) (104.47.37.51) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 02 Feb 2017 19:19:49 +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 BLUPR0701MB1057.namprd07.prod.outlook.com (10.160.34.154) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.874.12; Thu, 2 Feb 2017 19:19:44 +0000 Message-ID: <1486063180.22118.39.camel@caviumnetworks.com> Subject: [PATCH] Improve aarch64 conditional compare usage From: Steve Ellcey To: Date: Thu, 2 Feb 2017 11:19:40 -0800 MIME-Version: 1.0 X-ClientProxiedBy: MWHPR1201CA0021.namprd12.prod.outlook.com (10.174.253.31) To BLUPR0701MB1057.namprd07.prod.outlook.com (10.160.34.154) X-MS-Office365-Filtering-Correlation-Id: c6c2689d-fce0-4c5b-eab5-08d44ba07231 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BLUPR0701MB1057; X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1057; 3:uy8BYZShUtl7dqT8TxTTBWCcGyRw7DnELdUKaCe0ZGptasmH4xki7r+L/EVeWuR0E5+pSlF7DXBMOmgYhL/iCzWR5A2D7P+n1vrEAfsKu0fornGUEA26WcxXztodE842QL/FLiBFkKCPQagzUdoI0JFq5v+4+VyvIZBJsraRQRodvTLwC/OYMQYz2vPe2cumB9KhLWZuJKzb43UrVQZV+v8+g3tjpblcVOWQTf9TpjK9NAZGNztISkFaC0Rm7/xTM1N7BYecnsf0iOGsux91FA==; 25:5BKUnehndMnet7eJSdUGTspP1iqffJClhax8bzabhjQIgCUIQJ+LHsz8Q3b3+3RIl3Hec0ieFQeHSZkS6NpyKLBxUvS41BqbyjdTpv9zCtjH4qaFRQIqiewytNjsnEruzfCDpyjTSDaBPYtingCZ3XA6jqKCLMx1DCm7fiINSplDjmIV3VzOWCmVHPM6n8urPBp7rQlSEFOVtUvcH1ZpQlwaxk96NMZLYexOfWLCrS5LZjRUWCfzOm5q+CSM4Bq2HH6Oc1z1iJqJfgcOr+wodAIMg+24/WAmPLkpmlev6Rah1Ykd0XA5wnjVOnYNnyw1DlLpwhBx017eZDgXFXrZn9CWneRipsoOuXqFo93vVY8+EIIfZtwYGkSIpKCMTvH0FwBmgHbbEICltIfJRJtmbzVa8BR8WU2/LA3Bq7Zsx71sn/2BnAC5vkauJ8elMrdU5BsTIscvGkb3yv3hon9tBtcy0ePbDv3xIgsy5eooqiWspPhCVtrCPDIArgwWbpj/ X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1057; 31:KVa/cpFd/jxQ8xB0wl69sp9rg9uOWFcZoMJgPRV2UtyQS+0pb1ALMVuwx5PKMfDtCONJbS3pK0AQLpapXVNaHi4f3s8Q6X8CKsnq6CaNhj4aUcJMu2H9rwsn5JN+fYhguUxp6djJVAk29FKaP7CEh9iv82YVdPzPXBEVe1Fr/SIELQTPUQpZVahK6NuvEbFm56eGUEXoBUjKg5Cft7+UMrYmJRy9TkzMT13xkRF4eBf4C1uVOQ12n6RbXgD/vGpHT6iTDxeOpuf0UtR3kECRZ9Y4Rn/tIHl39Sui1+hWQn8/2rGoDNCT6CWu+vX3zzAESlTPKMYsLeCyPBIyy8HiDg== X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1057; 20:cpkddiA07/HB3Hv/iLZxVnFIGjZ1z1ntTJ2RKmRbVVal3IDdq0hc/rV+xo2kluMJbDEmfdzzeGljCCyXqVU6sp9Rd3QlGpiBseF0n8nbKluSpb6Rrvvyg7bXHlmI2H0BfyHtPhZPTJwqEWaTwN6up5Dx36F5v49KUr9ZaKB7DdMuubL+aM6MjsTPi931i9XSImLVcOS35O3dI1961uulk+Z9zcqZiWjgYinvqitJzxAzkdJbWaAkBx8TGN29yPBxKsqpVFtYT6x1slXWJElmRY4ptz2Yrnref0DeWA8vg0NxuPgJyzmAfUdbnnRnvlIA4JfDxTiQHgbgccA/ousiPDxSf+nKl/k0qt3lsu49u71xAOh97XPIvI0LjFEAGRKrhC3t7kQ1PsZni5niTDUEzypFTl9Ek+Guq+1xoM1OtamipCFkS/DaN6G0pT1GZIupry4Cc7lHEhanRFAGOngUsFom7hFGKFVQn5ramUdoMpdTrMI5e1dNggqEyD35gwqhNYvWIimzI/1LDQavxDOW32ggRDTIaC6lTj5AWu1zci+XMH9NHTR+IW+M/dKAEXRm3kpKlP7QiU63dtb1Nu6n2XL0NMmEItY//d0CATSNB2M= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(102415395)(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041248)(20161123555025)(20161123562025)(20161123560025)(20161123564025)(20161123558025)(6072148); SRVR:BLUPR0701MB1057; BCL:0; PCL:0; RULEID:; SRVR:BLUPR0701MB1057; X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1057; 4:RpcAEoiZTy9JYBjHQF69nmWv+KeWdfPglniOm5UPqxkFHjb71gM7tnQdD03Zv95S4bSgqcHOGS9gO/w0fR/KUh8qzrcASGczUoVU4lBH/jOh5o7E0ACI/qwiqkJ5BCT49RWcYpUpaEcvi+78gUGlvo1/AwnVVfktzhbemrEaLpqGpcmHakKCpepBTg8GI2Z7FCL0BduiW9Gbiik5QNVYq8pjNvY9XD+R04arbPALm+F0vxjQ3INCOquLh+61cQ+FEBu+GfJUQJHb+QnHQpO8TI2tNmEx80Kfd2FXufV7c70yFP24YGVg5f6tU780zDN0etVlRxBmeFvu0tH3LsmRovTxIAM5RdQsTNTzOsIZX119V4+OGAu+v5fMDtFZM7m7RWpYHO4DgZrZxtHaa+fd+yjqlx4P88f996Tt/P4IvtxGxcQuVJR7O98Q7LjSvYsS1CM5vTMyGaikG/Ofqmjwhbsjk1QEHHMZSBAnOGMNqEqvD2tRoUy6lWfTZhbAYsU1B0vcnU3FxTSzDy+Rq7oUO6+qT9NEHjILtaQzJwRNFXtzgNfxTtsulJExxZkCf66koB6ww1+XSxJutN2Ef12q34l4gIksX8+yPKoNcXdcw57HMQ11GvKKGp1mOlvdUUzl X-Forefront-PRVS: 02065A9E77 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(39450400003)(54534003)(377424004)(189002)(199003)(3846002)(8676002)(110136003)(2476003)(5660300001)(5890100001)(92566002)(568964002)(33646002)(81156014)(512874002)(69596002)(97736004)(101416001)(6512007)(81166006)(7736002)(68736007)(107886002)(6116002)(6666003)(106356001)(6506006)(50226002)(38730400001)(66066001)(36756003)(25786008)(450100001)(50986999)(6486002)(103116003)(84326002)(105586002)(189998001)(2351001)(2906002)(53936002)(305945005)(6916009)(42186005)(53416004)(4610100001)(4810100001)(42882006)(99106002); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR0701MB1057; H:sellcey-dt.caveonetworks.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR0701MB1057; 23:mbPGuSCBaZw1+c/VkztkLVS+BO26/zAVAzo/viO?= =?us-ascii?Q?V/dGFIwdAjJqmmSpCSWc/dhW8B9qU8nuRg3VV3pzPKlTKC4Xc1eJmrSpX6Ya?= =?us-ascii?Q?0Ym1zm0S1kCXRRCO5pbP7N7OHH7bV/HZMNo2xbENt8KDAquNFeieV27Oc95h?= =?us-ascii?Q?7NCzjdMjQ71iOqvXBkuL9F0DNouBrR9bzQ8mEZjVimBZh03lUQq6gMzrMH6M?= =?us-ascii?Q?6+QCbTsdnNl849XX68d77DVPPS625XepPq+nWzghnnIqBSrURNq89NQAb/V1?= =?us-ascii?Q?nzSdvMEODfJ7rpZEn+UPWYhFWQFEcbTnrAmA4R4rwxZJIoObtK76Zi1wIfKv?= =?us-ascii?Q?RVrRcNdf+pFGwhE2nw87dK90v8tRvZSuwaOHHtlrirMbsi/Klv+AYaT9nITF?= =?us-ascii?Q?VpgBk2Rs9yui08gQE1cOmemg3U7yebDgCWQZ8vzgNVhRmzic7mssncjD72LD?= =?us-ascii?Q?46fcZ7VawSsUYv4kj/4wJyc3Motejd2VXhJlFaZHBjOpna14i02Qi4d91W/H?= =?us-ascii?Q?3Lx88sfADlBZalBUBsNpPrH/a32zQGFRl1dYM8D8SnUIaQmvVvaahmvmgHMz?= =?us-ascii?Q?UdHUrBodbMlSL/xCtMkOivdPr8SEYZYaWrmyPe6ZQtCK6WP6jRLv9RDwWqcL?= =?us-ascii?Q?Dd68Z6c85L5Vl2svNlSsIL/3CmwnsWChdksxH3sCSLUaQ9bmvy6j780h0EzS?= =?us-ascii?Q?oshvP+1yOqjVSpJMzO7kWfkbRm1OEy/WJOVoWBp+sySI18OYFg8ge8DqE0ty?= =?us-ascii?Q?baR4AH0CtAYKkAd18/ZK3HEPVJuFyN1El87w+ShoOF1O1WY7agRbCz2cflzx?= =?us-ascii?Q?mA/p97Z2IQyV1OIGAkoADZEbnlAnPuuLBpH/APG9ekgltBBJdE60Shgrva0Y?= =?us-ascii?Q?OQX3JzJAyFFnW90cv8wXydAJDHFjGUa1UH47ZuZdZnkxmtwzAVM+UToL5fLA?= =?us-ascii?Q?7/Bfmi0pCO80ppYYnb0gh75KBK4YuyCLo+2bk6G1oRj44V+6Ga8b4hm5HSZi?= =?us-ascii?Q?ryLhtZZEx7t/y9o51KF+1070lWDJ7XneBlM/TDJ0DbBK9nPIPqdobxjT7H8P?= =?us-ascii?Q?qMUHAoMo94x1sHDAKRZ1OAwjGV+w7Cn/GoBLGmPIsvlAOYRY7WWSWBJxOn6s?= =?us-ascii?Q?edGtLmXEaLnPB/+LRSFTjG0+2udCT2cfR1RQG0E5kVf1X2bNzC47Wp/OSyl2?= =?us-ascii?Q?rZPC8snyUzS++KecMglIUub6v/I4x760M7n9VUI6xx31PGg+cn4naX5q76au?= =?us-ascii?Q?jNg/nq04IlgbXVAiGb34k/dTxup8Fw/6VImlPTQ7D29NBQJb+nCVf3EEBZvh?= =?us-ascii?Q?AZw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1057; 6:fsmB9M7V0Xd8pJzVN1/MuMCDkXAEDXXhsoUcJSvKy42LWywhjL2OswsWQmuErmtPDHexHdlc/QJOJARtGmkbQ81XX5aBHqbo7PZR5AzrW+K4RWpvZsUEiFv0CZJY2LWy29dpkDp5Vh/1cstfd/HWO/r9QIOBRipeF4TyzOuWtadZ1oAjMoRREWNEiowPGWDKg0eO7OIX+aLrwxUlgrXpcLQkuEROQw4kbD922I4Ln0xfU4fw4KDlTiQVIJzPUh+DxI3no0835rSdrnem8rKueTTgmXGz5aFCOASbZQ/nI+GPO9uDnLrguHqZv0oRpoZh1bkEE5aNLmwISluXpAtrarHEkc+cj8akbnCAh7O/GAPLx4F7UFwi8H18TcHbK3OnvO4P/CZtRn8lAHGVOEOckxe/OBl5wa9JhEp9MgS0JjY=; 5:V8ZAKOM1xf+7W9Ocnpfeiyz2JfjfmsUBoKHkLz3Lax8eUN8fjf3a4ovnHmMIduy2v7lphFRVa2tWT3tYT+5nVuPzcZGpwU0/wCVO/gDkQ3z0qY7AR+2lB6gp/RY1B0MilzCOejJCPhNBsYTqsKOY337x5W+SYpK0r7b8IJQiFHc=; 24:SxtJR9RJOVUtWXj3aq9ANGKqDF3tCzT7gucmwcrs4VJACm+dm7h9b02Zj64latEExyHa0A74CT5r0kMWzu+PwJ3JWw9Zs4LJ2dD3gtB95eg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1057; 7:41I8Em2mw/N2wliNI5Bp2M1Yl96sWGc1fw916GmELGKCZ1ykhLyJkeVxCe/Cscgi4y9H8XQWDBgVgNFQvGapuJujcprxJGJHePxsyOjFFgwIQSk4D12whrDnPrvnseWX3vbndMEyI2C2Pc4yrhqSyu8TzS+KukksOXFAmp0HFQzqfhPDzR9hKavmx4ejNLQmuY2BgTfp2sPlMzKmfca582c9JmPVlNeyUYsxyTHvpv4BHcqS/1FpoDXiYhXoAGOwZQ0TB7X2vJZMt0UwhNFZjkTUqg8S6EqYvHmj2JtmlfgajKkYi69XpDZ8hjC0Zeme15pNn3iY+WrowdeU+Iw98loqmNwKQUdJXu8TeIbf8kt2cSRNbO2iDYiXfS8txEo0+q8gOk05p3GM+EO85d7i7gPx5mQEi46i2VwFH+3C5Pz/Qs8jbH5+mBhO8HoW6tRrT1LA4nC3KSGEuMi5kGFuFVGyFUP3USlQ7OE3Mk7bj/HVyNyqGujRtktI3VIiQABJJ3eXXkEz8Wt5ha+zs6WOC4QmFEHHHhzoi5lt/bkMTuvN57uwpeNPURDVsLkJH2Zt X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2017 19:19:44.5164 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR0701MB1057 This patch extends conditional compare code generation for aarch64.  Right now if there is an AND or OR of two compares, GCC will generate a compare followed by a conditional compare.  But if you have a _Bool variable on one side (or both sides) instead of a comparision than ccmp.c does not recoginize the code as something that can be done with a conditional compare instruction.  This patch fixes that limitation. Most of the changes are restructuring the code to allow the change and do not affect the actual output.  The actual behavour change is in ccmp_tree_comparison_p where we recoginize a boolean variable as well as a compare expression as code that can be done with a conditionial compare and in get_compare_parts where we treat a boolean variable X as 'X != 0' and generate that comparision. Since the code in ccmp.c is ony used when TARGET_GEN_CCMP_FIRST is set and TARGET_GEN_CCMP_FIRST is only set for aarch64 this change will only affect aarch64. Tested with no regressions and a new test is added to verify that we generate a ccmp instruction with the change. OK for checkin after 7.0? Steve Ellcey sellcey@cavium.com GCC ChangeLog: 2017-02-02  Steve Ellcey   * ccmp.c (ccmp_tree_comparison_p): New function. (ccmp_candidate_p): Update to use above function. (get_compare_parts): New function. (expand_ccmp_next): Update to use new functions. (expand_ccmp_expr_1): Take tree arg instead of gimple, update to use new functions. (expand_ccmp_expr): Pass tree instead of gimple to expand_ccmp_expr_1, take mode as argument. * ccmp.h (expand_ccmp_expr): Add mode as argument. * expr.c (expand_expr_real_1): Pass mode as argument. GCC testsuite ChangeLog: 2017-02-02  Steve Ellcey   * gcc.target/aarch64/ccmp_2.c: New test. diff --git a/gcc/testsuite/gcc.target/aarch64/ccmp_2.c b/gcc/testsuite/gcc.target/aarch64/ccmp_2.c index e69de29..69616fd 100644 --- a/gcc/testsuite/gcc.target/aarch64/ccmp_2.c +++ b/gcc/testsuite/gcc.target/aarch64/ccmp_2.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ffinite-math-only" } */ + +int g(void); +int h(int a, _Bool c) +{ + if (a != 0 && c) + return g(); + return 1; +} + +/* { dg-final { scan-assembler "\tccmp\t" } } */