From patchwork Fri Jun 3 08:53:01 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Greenhalgh X-Patchwork-Id: 69229 Delivered-To: patch@linaro.org Received: by 10.140.106.246 with SMTP id e109csp154188qgf; Fri, 3 Jun 2016 01:53:48 -0700 (PDT) X-Received: by 10.66.22.134 with SMTP id d6mr3888455paf.35.1464944028248; Fri, 03 Jun 2016 01:53:48 -0700 (PDT) Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id hq10si4581796pac.3.2016.06.03.01.53.47 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 03 Jun 2016 01:53:48 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-return-428984-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org; spf=pass (google.com: domain of gcc-patches-return-428984-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-428984-patch=linaro.org@gcc.gnu.org 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:mime-version:content-type; q=dns; s=default; b=aa9Ed+WPurzh61h4LhNuNzK/xsN9uNZRhAZDcPVl32GlYGgqOD PXX/k5bZK6TFYg3l0WlD+B6etVFfhUjcFd+pdut1yZ50iHAFofgwlKpACxQck50k o4dDoZHyD5O4T3eknjajA2vC6YpF7XnSH1BaBN+0g/mLEgqMJbkmynyc0= 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:mime-version:content-type; s= default; bh=v6iNgigoeAZrVsVTBIPq/ZQc8YQ=; b=DHCVELvmIydcqQDIj2Uk 9vHAHHJ1dPKfn3VMJEg8goGjT0/tMSd+VZNiOfLANRbn6T9eiEYylWbjDjZA3FNH 1RyFK0YEqjJr8vHA1klgRWjEtuy+tc3Ryw6LgJeIY0qppyOdVV7xfI9hGCk85pJK N8Xm2nk7VwvW62nZ/1Jxns0= Received: (qmail 65246 invoked by alias); 3 Jun 2016 08:53:36 -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 65234 invoked by uid 89); 3 Jun 2016 08:53:35 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL, BAYES_00, SPF_PASS autolearn=ham version=3.3.2 spammy=priorities, eye X-HELO: eu-smtp-delivery-143.mimecast.com Received: from eu-smtp-delivery-143.mimecast.com (HELO eu-smtp-delivery-143.mimecast.com) (207.82.80.143) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 03 Jun 2016 08:53:25 +0000 Received: from emea01-db3-obe.outbound.protection.outlook.com (mail-db3lrp0075.outbound.protection.outlook.com [213.199.154.75]) (Using TLS) by eu-smtp-1.mimecast.com with ESMTP id uk-mta-48-pgjOdrTrRnS4UBKb6MIsgw-1; Fri, 03 Jun 2016 09:53:20 +0100 Received: from VI1PR0801CA0023.eurprd08.prod.outlook.com (10.167.193.161) by DB3PR08MB0028.eurprd08.prod.outlook.com (10.161.57.18) with Microsoft SMTP Server (TLS) id 15.1.506.9; Fri, 3 Jun 2016 08:53:19 +0000 Received: from DB3FFO11FD025.protection.gbl (2a01:111:f400:7e04::123) by VI1PR0801CA0023.outlook.office365.com (2603:10a6:800:32::33) with Microsoft SMTP Server (TLS) id 15.1.511.8 via Frontend Transport; Fri, 3 Jun 2016 08:53:18 +0000 Received: from nebula.arm.com (217.140.96.140) by DB3FFO11FD025.mail.protection.outlook.com (10.47.217.56) with Microsoft SMTP Server (TLS) id 15.1.497.8 via Frontend Transport; Fri, 3 Jun 2016 08:53:18 +0000 Received: from e107456-lin.cambridge.arm.com (10.1.2.79) by mail.arm.com (10.1.106.66) with Microsoft SMTP Server id 14.3.294.0; Fri, 3 Jun 2016 09:53:02 +0100 From: James Greenhalgh To: CC: , , Subject: [Patch AArch64] Refactor and clean up some of the sched_fusion handling Date: Fri, 3 Jun 2016 09:53:01 +0100 Message-ID: <1464943981-30531-1-git-send-email-james.greenhalgh@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:217.140.96.140; IPV:CAL; SCL:-1; CTRY:GB; EFV:NLI; SFV:NSPM; SFS:(10009020)(979002)(6009001)(2980300002)(438002)(189002)(199003)(377424004)(189998001)(36756003)(8676002)(568964002)(11100500001)(5003600100002)(104016004)(5008740100001)(84326002)(92566002)(19580405001)(6806005)(19580395003)(110136002)(4610100001)(2906002)(50226002)(77096005)(87936001)(2476003)(2351001)(4326007)(229853001)(106466001)(33646002)(450100001)(5000100001)(86362001)(8936002)(512874002)(586003)(50986999)(5890100001)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR08MB0028; H:nebula.arm.com; FPR:; SPF:Pass; MLV:ovrnspm; MX:1; A:1; PTR:fw-tnat.cambridge.arm.com; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; DB3FFO11FD025; 1:PNDZmaUwZh+Q5bJWmnVogh0lExjOxBTb1cqyDfFNSWtrTZU2sR0zfOhEAF2P3ry0FOf4R29eBtL5VwQFju3Ku8bv7pmRacTpy8G+PYB2Z0z+1KhzpemG062bu55keqKsdeGjaYr1JpKgUMHdIWXHvU3vIjwrzA20Wa4Tb0KFmgJ2kAR4omE8Ai34tVlP7PcSv8OPEqHfdlYjvHphosnysvOkeDuqIMSdeD4llcmfg8kfwMeFdqZTcwy8agjoBRMc1d41OhVbVsIOzO4RIZPtfD64vbmbywLWPOb+YJ5bdkw1LzeEckVzfY/ZrEZK9syETCbN3LQBLAeiZmxPS2SE0+zG+UZvhOt/vySYAZmc1HoBylaaqBlAZQVUE11HToUD6XEUA6U8dQYOrD+jt4rxzxNUWi0QYc83WAPWyNEQBegRutpzbZW5nBdIrAM2P2Rb68AKn7MjieGb/vhrpDQ5AqweAjnMF/mVGnGNqC230N4O02Wqw/cwO9OYPZ//y1kO X-MS-Office365-Filtering-Correlation-Id: 2f36920c-34a3-4fb2-2bc7-08d38b8c8252 X-Microsoft-Exchange-Diagnostics: 1; DB3PR08MB0028; 2:CO42xUFnH1uYQ2mgRpec5wbcPDh/SasKu9d5VADNP31n50c6cz853+PmdxYAYXaz1a9+ZvpJidMtE46kGhe9W73MP+qlCGnb+sBXLwSINVB1pimu72bMZ/gR2n7tduRnJuLl8wXyZWuhVvjj3YhfC/cIY/JhwbP6K1zami6HoR3KV9Fm7E4c/u1sHata0rsx; 3:/6JSIMF831CfTgX1UN00wtnmCd9fcX20Clld40pzCL86eEehdHhYlFsJh+hYucwg19OhCdvP0wtr7Hhq509fXXn28wIdvKcDfuZRJt7OzG3TkEXhCTw/vD4lk+qk4KHiv38vXu6BupYvZC31vQ7Ai8yunwpRvqJrPDiShzG+KSNtgf+WauJj2ZFOQoJepnPWpnx5RYL0IdiNFMOWpgNLaxjmYBMDeqAmjJZT5tesKi/H4znlflXbDAzNS1YrgitoxVuEmribfQ36hMd3Z6S1AQ== X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(8251501002); SRVR:DB3PR08MB0028; X-Microsoft-Exchange-Diagnostics: 1; DB3PR08MB0028; 25:MdlWYkPImrBo/tPlScNLUMYfy4v+MC0C1JNjkGjGO0a74KwRLZ+1H+ApZ67qR6Loeo7p4me59Oc7W7Qlvcvpasp605qQhiuq3zICCxWxe1iE+K1X7kjyZN0T48uQ+QMJD+zkBWbCekhmRcf1/yvnDovgVgUYP8lDPyPGrZ28AW0UKkpfP4k1kywskBPDr6jRlAGaEivJLw53jBRp63vY9Dd749joE3Wgf647dzXiliYNd3eLylNvfrWc8Oqw1r1gz/RtKrAcpPXIO/3mQ6qpDlBHafgVkLW1P01LnLuxWYAXoTdhmg5h4TEi/+eHfUVMYbx5NcRdV0OXwpH05imN8zHuMyT0Xrna/gzsq4RDlRs6tuktYJtc/YqtLlWwndyvcoyuf3BOHrCeRUF6BMYWqCkXvyAmys/J7Kk/8gqLTUgOa6b0ndmBLd4a5bg/qut/qKwYBsUXsgvkp7aleaafngR8PDl+mloWqMWWFebhSTOx9+GcAFzlu90VOjftsARL; 20:r1QL/fVQCyJcRvHZR7UHOEqqCAaq8L5UPIKVZSfGFCExHkGrB/Kvt6+CkJaJAwutHKRl9j+x2Mwmqo0TbNCywgBAhz64Db3OxNPeMZrj5SJdVChln3q/kxhsTnAqmew40ruu6n+XDFrienFCzrU63AfivuekvT/CGQnENcCn45gqkfeNh4qDOv403oufiud+gcZ5aIW4+FWE0TuqmkLJ1UVVcjQYRlEcRtpq7L1Kcjz0zYYaV9yDAVKNF03YUVD9 NoDisclaimer: True X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(102415321)(601004)(2401047)(13024025)(5005006)(8121501046)(13013025)(13020025)(13023025)(3002001)(10201501046)(6055026); SRVR:DB3PR08MB0028; BCL:0; PCL:0; RULEID:; SRVR:DB3PR08MB0028; X-Microsoft-Exchange-Diagnostics: 1; DB3PR08MB0028; 4:u0KSYTfDKSCDM3RvIwmZXIJIK5mVkWZxueveuoVvEXD5OjVN04QwllFPjsxtLqsxlQUg4wIKNEaVhLSdf6liMp+sqVXpLtkDFOrYY4JYS9+RL96BID+YoW4tuWi9VDhI4/LF9N1QLPRdlXtnQNLVOjP8SP01DQkVAHV3LZ7RjiXARRUtYEaFfDZPYhGOH6F0mTDNVnKTwDAw1uWqfGr78T32wmTjjXOna11UWkbrbpbPmc/KeNf8Zp61r9/fOICc+1flIdaWNkqdcQQRbtys4BVfj5e558WFV4Jku93Tyvm+XO5GzqiPz4cJ53sYkJ+4qH5Xyh9dwaiw68tpX47p0/g9RlOs5gmyeTCmMTcM7rHhRXjWKF9SAJ6HNN3YcWz0UgdVUu4R+KI+/PdaBkM2sFNWZSmm7R8DD+6lq6u43wj23HF9xAhtEzGrIYFp6MjQP5ZDdlx0QObrkwnK5B9ufu0/8mWKfQsNMl2jJfOvUc3igZt8Ng1URcy41v+y1G34V+vsIGwwIPsqT7Rqg9xctQ== X-Forefront-PRVS: 0962D394D2 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB3PR08MB0028; 23:xsB7q+e0IBe8KR7omHqo+Z320UhJ0m338b8bJ4pUg?= =?us-ascii?Q?oqCLvuIbsEekcMhjXwnz6Il/cI2UHGJI1CT7L3K0c/xjLM9z9rQAlC+KlclA?= =?us-ascii?Q?zjpVkKHnD0e9yUOd7OXRos8fA0f8VgjxqWGHTjLrkTiHQnsGBXFlF0XNlRhQ?= =?us-ascii?Q?upIsorLvWlwWGRV5DIhRiPimWFcpU52ce8SvIXPQa/Ot0BdQZd07BTakuO/K?= =?us-ascii?Q?09ExH5w4AKIa/F7XhSdnlYVfodKJB4e/Nbk6UAg/1FtXHhLUL7RnTkbdZg0Q?= =?us-ascii?Q?+1v67DAPxvSfo786kVdGUhSQtYKgFNpEbfsZhIzSS4mw/RnWq9D7BBUeC0qc?= =?us-ascii?Q?7G5J+X9fa6c7sYwWGcWYyU24emrwZi35tLrPWn4gPK+gUpleO+wOJHtVSroq?= =?us-ascii?Q?6cOcxps83u8AUjkGk4Hk2mzecWXs/2kU6sTt4pP/PVFcLfD/YElbcOVO0wky?= =?us-ascii?Q?hqZEJEGYdDgCeqLLo96WfyBU5FYRv7oVRw0tmNJZKb+9DYd0ofKPs+p7fryj?= =?us-ascii?Q?A4dhzzlf1opqazqFGnzEPABwomYyKAXvCvwRJU3Ac/3zRvBtBQz2c0EQ7BnD?= =?us-ascii?Q?DP1awQ30IvUxlKupYtAkQbSZ3tMLYGBu1qxLJ4PdQIogxuDBA7wc2i7rOuVG?= =?us-ascii?Q?V0Oy4FjYTzYEZUzR1xO35UPOThLnvbXsqYOajk6YinAHvwTAovi9hwotPv4E?= =?us-ascii?Q?v2idJVcKPNXfnyHuMdl8qtal0sWrlG1cczun1P0HQs6GXjysgasjC6ALqnVZ?= =?us-ascii?Q?vtFiBFMwW9NLV8d85cqpZeJEs6/62brhKMq+BvDNxQ+QP2xUrYNg7h4VB5Zo?= =?us-ascii?Q?MqKfZ9zbYVeJsBnSqY2UmrmyUrgteMnf3YZ7ycIzrIXC1xrn7DWOx1D4ej/W?= =?us-ascii?Q?d0pyhe6qwZz0uezUEzZVXciQj+UyEHACw2V4+bplJr9P8nTkIV42zaEZuaO3?= =?us-ascii?Q?cCaJIIbidfbmniH2IyG9ve363rWofSBKOHTuEF5AF6LFp7qqLfHYD8bDC4/H?= =?us-ascii?Q?xZ52+fmstdRfUpPjpdjuhgwO+1L95zQpqW51h3O/aithlYxeIumLcLJD2gD6?= =?us-ascii?Q?ExM8KrVACwEqBvTZ2jLIpZ+yxrrYL6s/rNW26PhKowSPbPpW2o1ZhPIEB9pp?= =?us-ascii?Q?uk4J2I1oIhyEejuaOC+QzqEn042GeBe?= X-Microsoft-Exchange-Diagnostics: 1; DB3PR08MB0028; 5:53sYrCFmoQt1F4YIyyQmu1Zp1+p9fJxmQMfE+axa1mOHWt4c0bfUFer8ygY6S+efyCcmc0x9mG/2s9Kv2SXD4TnJPZcSSbRyIQxgK/WIB5a1gLRj6ujmYz0Y69GwNH3q7pDpjkqLmjAmYK4HM9OiBQ==; 24:coaUDwuna/vDcmDAK+w6jksSUtZDPXkL44I0U+LrN94CoMz8hgmHS5gdEUgZT5P6hdIzkH0Z7LPcX0xEiwSVA1OF0QN8IC5a9+K/+NYucOI=; 7:9/Jc1Sd+lYM9yq2pDG/qLA1+ZKdcWljyTq9UzgtqQw9ewCG7hiQW2Rx/Pp8o9iFCrK5WrVejfECb2povAnesfvoAR0sTAGffL5DDBtoBS7IaXMGObV/oNpzepAMYcf8VzZyKIF0XnzRrkW5dpR3ISsovhyoBElProIVVuMO3nE20xsjGRJl1/DRMB0SncZOOeRQLVknUn6j7U8N+xv0TmKQIjO0jezbofZoAHcZhXsE=; 20:2bjFhXcSR0LiRXiTq7/6Yv0U0Dojl3BdZDhNNpJhRuLxe+Z3Qn5JnMalrHam2zNSAEDZKCxaVNVApW1qLWtllIM0RIIYfGax/Z8J+F2FRo32S+60JEnkYBqQKVSeuxxI5c6ZhoVbdJyVqbMlsWO0uf/dRcAzV0EJrOwNbld5818= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2016 08:53:18.4981 (UTC) X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[217.140.96.140]; Helo=[nebula.arm.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR08MB0028 X-MC-Unique: pgjOdrTrRnS4UBKb6MIsgw-1 X-IsSubscribed: yes Hi, I had a little trouble understanding the sched_fusion code, so I refactored it and added some comments. I think this is a bit easier to read, but I'm equally happy dropping the patch. Bootstrapped on aarch64-none-linux-gnu. OK? Thanks, James --- 2016-06-03 James Greenhalgh * config/aarch64/aarch64.c (aarch64_mode_valid_for_sched_fusion_p): Make easier on the eye. (sched_fusion_type): Rename to... (aarch64_sched_fusion_type): ...this. (fusion_load_store): Rename to... (aarch64_fusion_load_store): ...this. Simplify some logic. (aarch64_sched_fusion_priority): Rename some variables. diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index ad07fe1..9435ca1 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -3836,8 +3836,10 @@ offset_12bit_unsigned_scaled_p (machine_mode mode, HOST_WIDE_INT offset) static bool aarch64_mode_valid_for_sched_fusion_p (machine_mode mode) { - return mode == SImode || mode == DImode - || mode == SFmode || mode == DFmode + return mode == SImode + || mode == DImode + || mode == SFmode + || mode == DFmode || (aarch64_vector_mode_supported_p (mode) && GET_MODE_SIZE (mode) == 8); } @@ -13193,7 +13195,7 @@ extract_base_offset_in_addr (rtx mem, rtx *base, rtx *offset) } /* Types for scheduling fusion. */ -enum sched_fusion_type +enum aarch64_sched_fusion_type { SCHED_FUSION_NONE = 0, SCHED_FUSION_LD_SIGN_EXTEND, @@ -13207,13 +13209,14 @@ enum sched_fusion_type extract the two parts and set to BASE and OFFSET. Return scheduling fusion type this INSN is. */ -static enum sched_fusion_type -fusion_load_store (rtx_insn *insn, rtx *base, rtx *offset) +static enum aarch64_sched_fusion_type +aarch64_fusion_load_store (rtx_insn *insn, rtx *base, rtx *offset) { rtx x, dest, src; - enum sched_fusion_type fusion = SCHED_FUSION_LD; + enum aarch64_sched_fusion_type fusion = SCHED_FUSION_LD; gcc_assert (INSN_P (insn)); + x = PATTERN (insn); if (GET_CODE (x) != SET) return SCHED_FUSION_NONE; @@ -13226,24 +13229,22 @@ fusion_load_store (rtx_insn *insn, rtx *base, rtx *offset) if (!aarch64_mode_valid_for_sched_fusion_p (dest_mode)) return SCHED_FUSION_NONE; - if (GET_CODE (src) == SIGN_EXTEND) - { - fusion = SCHED_FUSION_LD_SIGN_EXTEND; - src = XEXP (src, 0); - if (GET_CODE (src) != MEM || GET_MODE (src) != SImode) - return SCHED_FUSION_NONE; - } - else if (GET_CODE (src) == ZERO_EXTEND) + if (GET_CODE (src) == SIGN_EXTEND + || GET_CODE (src) == ZERO_EXTEND) { - fusion = SCHED_FUSION_LD_ZERO_EXTEND; + fusion = GET_CODE (src) == SIGN_EXTEND + ? SCHED_FUSION_LD_SIGN_EXTEND + : SCHED_FUSION_LD_ZERO_EXTEND; src = XEXP (src, 0); - if (GET_CODE (src) != MEM || GET_MODE (src) != SImode) + if (GET_CODE (src) != MEM + || GET_MODE (src) != SImode) return SCHED_FUSION_NONE; } if (GET_CODE (src) == MEM && REG_P (dest)) extract_base_offset_in_addr (src, base, offset); - else if (GET_CODE (dest) == MEM && (REG_P (src) || src == const0_rtx)) + else if (GET_CODE (dest) == MEM + && (REG_P (src) || src == const0_rtx)) { fusion = SCHED_FUSION_ST; extract_base_offset_in_addr (dest, base, offset); @@ -13270,36 +13271,35 @@ static void aarch64_sched_fusion_priority (rtx_insn *insn, int max_pri, int *fusion_pri, int *pri) { - int tmp, off_val; + int off_val; rtx base, offset; - enum sched_fusion_type fusion; + enum aarch64_sched_fusion_type fusion; + + /* The highest priority we want to return is (MAX_PRI - 1). */ + max_pri--; gcc_assert (INSN_P (insn)); - tmp = max_pri - 1; - fusion = fusion_load_store (insn, &base, &offset); + fusion = aarch64_fusion_load_store (insn, &base, &offset); + if (fusion == SCHED_FUSION_NONE) { - *pri = tmp; - *fusion_pri = tmp; + *pri = max_pri; + *fusion_pri = max_pri; return; } - /* Set FUSION_PRI according to fusion type and base register. */ - *fusion_pri = tmp - fusion * FIRST_PSEUDO_REGISTER - REGNO (base); - - /* Calculate PRI. */ - tmp /= 2; + /* Set FUSION_PRI according to fusion type and base register. + This gives a two level sort on fusion priorities, first by type of + fusion, then by REGNO (base) within that band. */ + *fusion_pri = max_pri - (fusion * FIRST_PSEUDO_REGISTER) - REGNO (base); /* INSN with smaller offset goes first. */ off_val = (int)(INTVAL (offset)); if (off_val >= 0) - tmp -= (off_val & 0xfffff); + *pri = (max_pri / 2) - (off_val & 0xfffff); else - tmp += ((- off_val) & 0xfffff); - - *pri = tmp; - return; + *pri = (max_pri / 2) + ((- off_val) & 0xfffff); } /* Given OPERANDS of consecutive load/store, check if we can merge