Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.2/patches/808686/?format=api
{ "id": 808686, "url": "http://patchwork.ozlabs.org/api/1.2/patches/808686/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/20170901133347.GA1605@arm.com/", "project": { "id": 17, "url": "http://patchwork.ozlabs.org/api/1.2/projects/17/?format=api", "name": "GNU Compiler Collection", "link_name": "gcc", "list_id": "gcc-patches.gcc.gnu.org", "list_email": "gcc-patches@gcc.gnu.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170901133347.GA1605@arm.com>", "list_archive_url": null, "date": "2017-09-01T13:33:49", "name": "[ARM] Dot Product NEON patterns [Patch (2/8)]", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "8b9e0d1a68bed69ecab2e940346d48c379887dc6", "submitter": { "id": 69689, "url": "http://patchwork.ozlabs.org/api/1.2/people/69689/?format=api", "name": "Tamar Christina", "email": "Tamar.Christina@arm.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20170901133347.GA1605@arm.com/mbox/", "series": [ { "id": 1030, "url": "http://patchwork.ozlabs.org/api/1.2/series/1030/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=1030", "date": "2017-09-01T13:33:49", "name": "[ARM] Dot Product NEON patterns [Patch (2/8)]", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/1030/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/808686/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/808686/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<gcc-patches-return-461295-incoming=patchwork.ozlabs.org@gcc.gnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": [ "patchwork-incoming@bilbo.ozlabs.org", "mailing list gcc-patches@gcc.gnu.org" ], "Authentication-Results": [ "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org\n\t(client-ip=209.132.180.131; helo=sourceware.org;\n\tenvelope-from=gcc-patches-return-461295-incoming=patchwork.ozlabs.org@gcc.gnu.org;\n\treceiver=<UNKNOWN>)", "ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org\n\theader.b=\"FQdoyqQc\"; dkim-atps=neutral", "sourceware.org; auth=none", "spf=none (sender IP is )\n\tsmtp.mailfrom=Tamar.Christina@arm.com; " ], "Received": [ "from sourceware.org (server1.sourceware.org [209.132.180.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xkKvx51DGz9t2d\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri, 1 Sep 2017 23:34:05 +1000 (AEST)", "(qmail 39033 invoked by alias); 1 Sep 2017 13:33:58 -0000", "(qmail 39003 invoked by uid 89); 1 Sep 2017 13:33:56 -0000", "from mail-eopbgr20080.outbound.protection.outlook.com (HELO\n\tEUR02-VE1-obe.outbound.protection.outlook.com) (40.107.2.80)\n\tby sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with\n\tESMTP; Fri, 01 Sep 2017 13:33:51 +0000", "from arm.com (217.140.96.140) by\n\tDB6PR0802MB2309.eurprd08.prod.outlook.com\n\t(2603:10a6:4:86::13) with Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id\n\t15.20.13.10; Fri, 1 Sep 2017 13:33:46 +0000" ], "DomainKey-Signature": "a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:date\n\t:from:to:cc:subject:message-id:mime-version:content-type; q=dns;\n\ts=default; b=Y8fCJc5YjQw/TR6y5kOc38SZdCrNtOjg53iYODnOSv53zSvJdU\n\tXhi9juEyXt5sVhIUACjfE68r4OwmNxcugrQIRoolUmRPgATOI9HPy7EDmpo0KH9r\n\tKO1YWmNt1XcdK1Yf5AiPQBMtJTKNHvvrGspArP08llwMw8d0MK5mJbNeY=", "DKIM-Signature": "v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:date\n\t:from:to:cc:subject:message-id:mime-version:content-type; s=\n\tdefault; bh=DYCGpTlS/IykIw0MdTU0I813R6E=; b=FQdoyqQcIR4eh0h3VeiD\n\tr2/3pp1e0rHARX/4ySIUyS5O77XsIm3IUXh920sa+0h7zntSqNOUGx4ve1DMNM3Q\n\tIKhziSW4PbfuVY3ffThLp84kdZnGSUcV5dB03//lQxWCMMyEZk2p3alG3jam1N/0\n\tjZe45jl+IaEWenlCRAgKtm0=", "Mailing-List": "contact gcc-patches-help@gcc.gnu.org; run by ezmlm", "Precedence": "bulk", "List-Id": "<gcc-patches.gcc.gnu.org>", "List-Unsubscribe": "<mailto:gcc-patches-unsubscribe-incoming=patchwork.ozlabs.org@gcc.gnu.org>", "List-Archive": "<http://gcc.gnu.org/ml/gcc-patches/>", "List-Post": "<mailto:gcc-patches@gcc.gnu.org>", "List-Help": "<mailto:gcc-patches-help@gcc.gnu.org>", "Sender": "gcc-patches-owner@gcc.gnu.org", "X-Virus-Found": "No", "X-Spam-SWARE-Status": "No, score=-24.8 required=5.0 tests=AWL, BAYES_00,\n\tGIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3,\n\tKAM_ASCII_DIVIDERS, KAM_LOTSOFHASH, RCVD_IN_DNSWL_NONE,\n\tSPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy=sup,\n\t30446, 7646", "X-HELO": "EUR02-VE1-obe.outbound.protection.outlook.com", "Date": "Fri, 1 Sep 2017 14:33:49 +0100", "From": "Tamar Christina <tamar.christina@arm.com>", "To": "gcc-patches@gcc.gnu.org", "Cc": "nd@arm.com, Ramana.Radhakrishnan@arm.com, Richard.Earnshaw@arm.com,\n\tnickc@redhat.com, Kyrylo.Tkachov@arm.com", "Subject": "[PATCH][GCC][ARM] Dot Product NEON patterns [Patch (2/8)]", "Message-ID": "<20170901133347.GA1605@arm.com>", "MIME-Version": "1.0", "Content-Type": "multipart/mixed; boundary=\"PNTmBPCT7hxwcZjr\"", "Content-Disposition": "inline", "User-Agent": "Mutt/1.5.24 (2015-08-30)", "X-ClientProxiedBy": "AM4PR0202CA0015.eurprd02.prod.outlook.com\n\t(2603:10a6:200:89::25) To\n\tDB6PR0802MB2309.eurprd08.prod.outlook.com\n\t(2603:10a6:4:86::13)", "X-MS-PublicTrafficType": "Email", "X-MS-Office365-Filtering-Correlation-Id": "8530d263-a3be-46eb-12b0-08d4f13e12dd", "X-MS-Office365-Filtering-HT": "Tenant", "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(300000502095)(300135100095)(22001)(2017030254152)(48565401081)(300000503095)(300135400095)(49563074)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:DB6PR0802MB2309; ", "X-Microsoft-Exchange-Diagnostics": [ "1; DB6PR0802MB2309;\n\t3:re3eniva9kSOTyBQNz/szYQV0s5mGWUHU/JD0QgOwh+0/3O0YRxjCye7UqOl1lG4EJZqkdmZZVZHt4wvt8hbWRX/d9KBE7LWUSLuuO7nZ+bE3+vpTPTZw5Xcxg71ZfX+4xyitlFry6DXJRgXIhUNyvzHpUhXsqwEFujzVA7uQ4xuX73m1/pn2Ny/PykisNhbCInalRW+HbLZWmZDlqQIdP2Nzv7wUNKW/0fwcsXg4AOeHtzeILEzNO577fzguM8Y;\n\t25:NVtzy/neB4v+YXOBFeF/9g0W+Jetvu5Z31yYMFFNLR8ioSI6BXynVerDyquumH10GCYZ9AOmid+3lsizBN15xlra7OL0lEWNYKB/khD0/c/gFOUwaqO75o37MAgVWdeRfjmkJN8EvZ4FMYPTtZBJ3NKJo9tGcPqQhf6wyPpaHvMIIJu9D6S/mI1f6oJIZAqQrLwvbZ8b+uXrNMu8inFY1T2Dyn/U7AIoYLF5pOYXSCHME5N7a5QueiQdsXL/PoDI6ZQzUsSPrVX/nlV80MxMXiHryHKTxhm4UIqKWfu7plM40z2p4q30Warajy06SsOjwOccLjdvjscinnO05cOCDg==;\n\t31:jpEeNtARbDYpa0JS8/qxaQDuV+MHd+rH4fTX2NASPVKDvAnaHrXm6G8J98HnT4+AJDEBHSB5eU0bljrBmjEZpInGAkJaJqFh+AjZGq042IxtmrFQFaS3t37VuwZUvs1S2o5zCIEqcB5JzYZUQF3L1fWN3mLDzhLjuEORr5M8ErUi9t7/374FkcR0rviS/Z5vSbdsINKayyNscxkQhx/E3X6N2Ct8dUXC9xkWTQT/NCw=", "1; DB6PR0802MB2309;\n\t20:jTLVRUCK9hjW50zPAis7uU6iPVOqaiMPu4GoEzRCqkqAWu+T7QZlq5ISTrG+uUyHaNcf6XqvuHYW1YECT+qFMH29J/Wl5CP8hHOwnXjvDmIOBfLOJ0jj5lfl36ohYXTQYGsxdm+iIdn83bZ2gETVZ/6thjqEtm9jTpW2k0A4UkA=;\n\t4:zSZaggEB2PXKTKKaRFwgaApvg23UUu4aeG0anPzKKmNxdnOR6mHtS9Y9HYZxKmLJDIS4wRVGqRPuHY27Cow0+DGswctGXGh5z8rDBvreRrNUe1Ftg0IzUEiQ6qkBiMv2y5nMdQhgCQfL1ePcezGPXkNzVjs+7zjsPkaQhadjA/MMwFcW0PTvYt88YGOTh3/rY1Jifm23lMQiW6XU85WmMrgJSxvBlOqll++xaSgYPgvBNpt3O3fLyrzdZ29usY0pXuHZfTi8fsXnWhBany2IBOpZwYhUxiO4Ai1Al6UNJAk=", "1; DB6PR0802MB2309;\n\t23:PyUkdZgouchOJ/L9sXcSjnBGIgTpk/Y/5MqDMX7E7Vd1+1wXusry3kdxRowIqdBqh5VxIeZEU4UO70dgIN51mtdPZVL1G23kZr2/Y97UR+B6+rRnscSJjWLW68ISnYBc4liMqZn/2WHWgojw2xIhxerPHdI5hFeHvgRZyEXA+4L6iry1pw4vvbsghAE/jDUNXrTnNUg/IOGG5b5/dFfX0XXJRhhp3vfiQDbdwhVkU7b+qYzltZIJAgfhHQWYCUKXKvfgZNrCMHHePVpmTqzxKogV4JEkS9pqp5FPSNBiJ1IoRdfwfwq4K+fjMEBYssaYT0Ad/NxYH+mEcBtk/9Zy+Dv5c+dxy7SD2+OJZg5A6qpOiS1CN/hmKuIdvWnoxgTqY9SuGuBJudhmZK89pzmUqrT9aK1kZmDvdGQ4ou1twKC11prOPiNR9QxFsLhYvLyKyyRInmHoWf0AJl/uUmGGQUUw59k0XyhteAU9rK+5pPIdFqfi6I+6/J244wAqauI99X+vP/onRNasghB70iS0rkUSD+v5cOb430t3l7M5oKf8MwfJbQkVJLSKDlkaKGavrlkpiFhjBrGGj0bRRvRdAxR+n5zdmdFiuS0FgZA7tUGoigzcIivqUfOgfQE3kig2ljQ/0B8SwZd7OdaFyx2t9kGL8eB0aRWKr4oAQ+rhtqo4t4sGx6hRNn3ALrwbhYenBh5q3ir01EvcvgXSwyqCfsdUO8BFdnQTxg2VJ/ExxMtOR2pQ66RzvR6+RJb0zF+HSl9dH1xVhAcg1KlW6W1xAzunUx1YSJawGXrvmbZkQsd4YIPQhip2Z7lHasFqf1btci++DWVIDxdl1rbUa+l0jdftrArjEKUs9fMrhblxATaxUaM26JZaUGQXNd7wx92E9tjRi7SDYg2UBlowWOcNanXesV9EwhRv9h/JQwU9+1//4g8EGLtMMNTJslQtPpKsq5Hix9en2ndwXfsAABKaRVSFO+fDdQOMafWWYR2SbxIE1fbjkKQCnrlluPmowaRItfDciAEUbTsQEn/ocPu1MQH2Z7Dtiw6DYK+Ut8h3KMR/if0UfiHYO7cWUGe7vYApXJFy2M1GEvL1iptJbNNrvf7ze8tMignS/gE35s6rUdCsZwn6pwR2qrzQjBXUGyfFN9DcvtFI9R4ih2BUG6SV5rUqhWMXHE0ffiUcYbqs9w7bOOK2fmg+oru9HBI7a3bOmMVY1Nb8K/rdPMYv4eUsvSHRgxsLjxapXGXfsVugVv2KCIGfp2v4R5QbjgQ5L59D5lwH/BLlKVXfuMyfNd7Pe/IHsninslmkzxEMSGnv22Y=", "1; DB6PR0802MB2309;\n\t6:I3kswnTKfDwt//fmYTQjhBDnEn43CMzoGrPG1wdErKppvu1qASUH8+tqggb1GA+6yI9jz57C++rXhWe8SnrJwFEOgya/PsuW2toFAfr9yI3XzgVdCwMtTpRVua/5bm4pB1SmxtOFaHqrZCNUQifYAl03Y2Qsi3MGUAQEfMT+mHeWtriUFmAfyjaBg4WdXJ49E6tC/O9+6mzEOxABWoKRR3ZiodlV7Ob+GlaOyvZ8PH4jrJfLoLP35Xpt4LvfbYdzH/SajFrnMPCn8tFl7itpfdx5U71Iv9ZlFIJkfNhhjK7yVilbebV0YH5SoFmfo7/hHFqdmrItKu6WtduSJUWKxg==;\n\t5:zqYTAe1vO/2G5cD8gen7bFZXczfeTzqjkNtohCzVP7/H7KWT2HsGkCZlsJ9TsY8QS7+kOd1kgbm0lr1ZgPxjZ8PMcljqrY0gLB9TK0Zjdn1KFnzq7Bh4Z5GuUbCv8K5IEhM3+QEOXSlr/5ZPQjfmMQ==;\n\t24:K7RxNLoE5iidihYWGJdY0ujNHkdg0Q5Q4amkHSqLN7WrOqzI6VFwntbPP/BVg/dBAFzh2ON7+dPz/ACV+OfEiy34iHYo7oD0iO6wgGjJlNw=;\n\t7:/fN5Jouuin1y3jbc0rzwYFpGFjfhayDC9634EUqQQGGTagayEXAOr/jb8kG3RZmb4GracQyk1JEuFpQyfUF4j6eunKy8F2gULzj1biEoU+MqB6jRw5qSrNl9+r/DXeXB64k2Hgl5TRGuF6vRILD3kZMY9wX+R3shw9GDt/XgtxPI+6j/hzMjFu6+vxU4yB56vy02Qod69kOt2zWh6oAhXbEStpKJL+dTUZ/wS6hYxdE=" ], "X-MS-TrafficTypeDiagnostic": "DB6PR0802MB2309:", "X-LD-Processed": "f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr", "NoDisclaimer": "True", "X-Exchange-Antispam-Report-Test": "UriScan:(180628864354917);", "X-Microsoft-Antispam-PRVS": "<DB6PR0802MB2309365454BABF530BB9E381FF920@DB6PR0802MB2309.eurprd08.prod.outlook.com>", "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(102415395)(6040450)(601004)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(100000703101)(100105400095)(10201501046)(6055026)(6041248)(20161123564025)(20161123555025)(20161123560025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:DB6PR0802MB2309; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:DB6PR0802MB2309; ", "X-Forefront-PRVS": "0417A3FFD2", "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(4630300001)(7370300001)(6009001)(39860400002)(377424004)(189002)(53754006)(199003)(2476003)(5890100001)(3846002)(6116002)(1076002)(25786009)(54356999)(568964002)(5660300001)(72206003)(33656002)(7350300001)(50986999)(86362001)(4001350100001)(101416001)(6916009)(110136004)(478600001)(97736004)(189998001)(106356001)(105586002)(4326008)(2351001)(2361001)(8676002)(36756003)(55016002)(42186005)(7736002)(81166006)(81156014)(4610100001)(305945005)(21086003)(5000100001)(68736007)(66066001)(84326002)(83506001)(2906002)(53936002)(18370500001)(2700100001);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0802MB2309; H:arm.com;\n\tFPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; ", "Received-SPF": "None (protection.outlook.com: arm.com does not designate\n\tpermitted sender hosts)", "SpamDiagnosticOutput": "1:99", "SpamDiagnosticMetadata": "NSPM", "X-OriginatorOrg": "arm.com", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "01 Sep 2017 13:33:46.8764\n\t(UTC)", "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DB6PR0802MB2309", "X-IsSubscribed": "yes" }, "content": "Hi All,\n\nThis patch adds the instructions for Dot Product to ARM along\nwith the intrinsics and vectorizer pattern.\n\nArmv8.2-a dot product supports 8-bit element values both\nsigned and unsigned.\n\nDot product is available from Armv8.2-a and onwards.\n\nRegtested and bootstrapped on arm-none-eabi and no issues.\n\nOk for trunk?\n\ngcc/\n2017-09-01 Tamar Christina <tamar.christina@arm.com>\n\n\t* config/arm/arm-builtins.c (arm_unsigned_uternop_qualifiers): New.\n\t(UTERNOP_QUALIFIERS, arm_umac_lane_qualifiers, UMAC_LANE_QUALIFIERS): New.\n\t* config/arm/arm_neon_builtins.def (sdot, udot, sdot_lane, udot_lane): new.\n\t* config/arm/iterators.md (DOTPROD, DOT_MODE, dot_mode): New.\n\t(UNSPEC_DOT_S, UNSPEC_DOT_U, opsuffix): New.\n\t* config/arm/neon.md (neon_<sup>dot<dot_mode>): New.\n\t(neon_<sup>dot_lane<dot_mode>, <sup>dot_prod<dot_mode>): New.\n\t* config/arm/types.md (neon_dot, neon_dot_q): New.\n\t* config/arm/unspecs.md (UNSPEC_DOT_S, UNSPEC_DOT_U): New.\n\n--", "diff": "diff --git a/gcc/config/arm/arm-builtins.c b/gcc/config/arm/arm-builtins.c\nindex 7504ed581c63a657a0dff48442633704bd252b2e..467596c1dbefe62cc92a0ffb8a03ecaf950f3701 100644\n--- a/gcc/config/arm/arm-builtins.c\n+++ b/gcc/config/arm/arm-builtins.c\n@@ -105,6 +105,13 @@ arm_ternop_qualifiers[SIMD_MAX_BUILTIN_ARGS]\n = { qualifier_none, qualifier_none, qualifier_none, qualifier_none };\n #define TERNOP_QUALIFIERS (arm_ternop_qualifiers)\n \n+/* unsigned T (unsigned T, unsigned T, unsigned T). */\n+static enum arm_type_qualifiers\n+arm_unsigned_uternop_qualifiers[SIMD_MAX_BUILTIN_ARGS]\n+ = { qualifier_unsigned, qualifier_unsigned, qualifier_unsigned,\n+ qualifier_unsigned };\n+#define UTERNOP_QUALIFIERS (arm_unsigned_uternop_qualifiers)\n+\n /* T (T, immediate). */\n static enum arm_type_qualifiers\n arm_binop_imm_qualifiers[SIMD_MAX_BUILTIN_ARGS]\n@@ -131,6 +138,13 @@ arm_mac_lane_qualifiers[SIMD_MAX_BUILTIN_ARGS]\n qualifier_none, qualifier_lane_index };\n #define MAC_LANE_QUALIFIERS (arm_mac_lane_qualifiers)\n \n+/* unsigned T (unsigned T, unsigned T, unsigend T, lane index). */\n+static enum arm_type_qualifiers\n+arm_umac_lane_qualifiers[SIMD_MAX_BUILTIN_ARGS]\n+ = { qualifier_unsigned, qualifier_unsigned, qualifier_unsigned,\n+ qualifier_unsigned, qualifier_lane_index };\n+#define UMAC_LANE_QUALIFIERS (arm_umac_lane_qualifiers)\n+\n /* T (T, T, immediate). */\n static enum arm_type_qualifiers\n arm_ternop_imm_qualifiers[SIMD_MAX_BUILTIN_ARGS]\ndiff --git a/gcc/config/arm/arm_neon_builtins.def b/gcc/config/arm/arm_neon_builtins.def\nindex 07f0368343a0c940c1cc1848d31f28a47a587b6f..982eec810dafb5ec955273099853f8842020d104 100644\n--- a/gcc/config/arm/arm_neon_builtins.def\n+++ b/gcc/config/arm/arm_neon_builtins.def\n@@ -331,3 +331,7 @@ VAR11 (STORE1, vst4,\n \tv8qi, v4hi, v4hf, v2si, v2sf, di, v16qi, v8hi, v8hf, v4si, v4sf)\n VAR9 (STORE1LANE, vst4_lane,\n \tv8qi, v4hi, v4hf, v2si, v2sf, v8hi, v8hf, v4si, v4sf)\n+VAR2 (TERNOP, sdot, v8qi, v16qi)\n+VAR2 (UTERNOP, udot, v8qi, v16qi)\n+VAR2 (MAC_LANE, sdot_lane, v8qi, v16qi)\n+VAR2 (UMAC_LANE, udot_lane, v8qi, v16qi)\ndiff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md\nindex 7acbaf1bb40a4f270e75968804546508f7839e49..139e09fd929e17216ad9383505f1453a73d071fb 100644\n--- a/gcc/config/arm/iterators.md\n+++ b/gcc/config/arm/iterators.md\n@@ -410,6 +410,8 @@\n \n (define_int_iterator VFM_LANE_AS [UNSPEC_VFMA_LANE UNSPEC_VFMS_LANE])\n \n+(define_int_iterator DOTPROD [UNSPEC_DOT_S UNSPEC_DOT_U])\n+\n ;;----------------------------------------------------------------------------\n ;; Mode attributes\n ;;----------------------------------------------------------------------------\n@@ -720,6 +722,10 @@\n \n (define_mode_attr pf [(V8QI \"p\") (V16QI \"p\") (V2SF \"f\") (V4SF \"f\")])\n \n+;; Mapping attribute for Dot Product input modes based on result mode.\n+(define_mode_attr DOT_MODE [(V2SI \"V8QI\") (V4SI \"V16QI\")])\n+(define_mode_attr dot_mode [(V2SI \"v8qi\") (V4SI \"v16qi\")])\n+\n ;;----------------------------------------------------------------------------\n ;; Code attributes\n ;;----------------------------------------------------------------------------\n@@ -816,6 +822,7 @@\n (UNSPEC_VSRA_S_N \"s\") (UNSPEC_VSRA_U_N \"u\")\n (UNSPEC_VRSRA_S_N \"s\") (UNSPEC_VRSRA_U_N \"u\")\n (UNSPEC_VCVTH_S \"s\") (UNSPEC_VCVTH_U \"u\")\n+ (UNSPEC_DOT_S \"s\") (UNSPEC_DOT_U \"u\")\n ])\n \n (define_int_attr vcvth_op\n@@ -1003,3 +1010,6 @@\n \n (define_int_attr mrrc [(VUNSPEC_MRRC \"mrrc\") (VUNSPEC_MRRC2 \"mrrc2\")])\n (define_int_attr MRRC [(VUNSPEC_MRRC \"MRRC\") (VUNSPEC_MRRC2 \"MRRC2\")])\n+\n+(define_int_attr opsuffix [(UNSPEC_DOT_S \"s8\")\n+\t\t\t (UNSPEC_DOT_U \"u8\")])\ndiff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md\nindex 45b3bd18052dd4a33e4b9c10f3ca2ea7e2eed5ce..4c919f53757ada3ca40609b8244ed3b403be3329 100644\n--- a/gcc/config/arm/neon.md\n+++ b/gcc/config/arm/neon.md\n@@ -3044,6 +3044,71 @@\n DONE;\n })\n \n+;; These instructions map to the __builtins for the Dot Product operations.\n+(define_insn \"neon_<sup>dot<dot_mode>\"\n+ [(set (match_operand:VCVTI 0 \"register_operand\" \"=w\")\n+\t(unspec:VCVTI [(match_operand:VCVTI 1 \"register_operand\" \"0\")\n+\t\t (match_operand:<DOT_MODE> 2 \"register_operand\" \"w\")\n+\t\t (match_operand:<DOT_MODE> 3 \"register_operand\" \"w\")]\n+\t\tDOTPROD))]\n+ \"TARGET_DOTPROD\"\n+ \"v<sup>dot.<opsuffix>\\\\t%<V_reg>0, %<V_reg>2, %<V_reg>3\"\n+ [(set_attr \"type\" \"neon_dot\")]\n+)\n+\n+;; These instructions map to the __builtins for the Dot Product\n+;; indexed operations.\n+(define_insn \"neon_<sup>dot_lane<dot_mode>\"\n+ [(set (match_operand:VCVTI 0 \"register_operand\" \"=w\")\n+\t(unspec:VCVTI [(match_operand:VCVTI 1 \"register_operand\" \"0\")\n+\t\t (match_operand:<DOT_MODE> 2 \"register_operand\" \"w\")\n+\t\t (match_operand:V8QI 3 \"register_operand\" \"t\")\n+\t\t (match_operand:SI 4 \"immediate_operand\" \"i\")]\n+\t\tDOTPROD))]\n+ \"TARGET_DOTPROD\"\n+ {\n+ operands[4]\n+ = GEN_INT (NEON_ENDIAN_LANE_N (V8QImode, INTVAL (operands[4])));\n+ return \"v<sup>dot.<opsuffix>\\\\t%<V_reg>0, %<V_reg>2, %P3[%c4]\";\n+ }\n+ [(set_attr \"type\" \"neon_dot\")]\n+)\n+\n+;; These expands map to the Dot Product optab the vectorizer checks for.\n+;; The auto-vectorizer expects a dot product builtin that also does an\n+;; accumulation into the provided register.\n+;; Given the following pattern\n+;;\n+;; for (i=0; i<len; i++) {\n+;; c = a[i] * b[i];\n+;; r += c;\n+;; }\n+;; return result;\n+;;\n+;; This can be auto-vectorized to\n+;; r = a[0]*b[0] + a[1]*b[1] + a[2]*b[2] + a[3]*b[3];\n+;;\n+;; given enough iterations. However the vectorizer can keep unrolling the loop\n+;; r += a[4]*b[4] + a[5]*b[5] + a[6]*b[6] + a[7]*b[7];\n+;; r += a[8]*b[8] + a[9]*b[9] + a[10]*b[10] + a[11]*b[11];\n+;; ...\n+;;\n+;; and so the vectorizer provides r, in which the result has to be accumulated.\n+(define_expand \"<sup>dot_prod<dot_mode>\"\n+ [(set (match_operand:VCVTI 0 \"register_operand\")\n+\t(unspec:VCVTI [(match_operand:<DOT_MODE> 1 \"register_operand\")\n+\t\t (match_operand:<DOT_MODE> 2 \"register_operand\")\n+\t\t (match_operand:VCVTI 3 \"register_operand\")]\n+\t\tDOTPROD))]\n+ \"TARGET_DOTPROD\"\n+{\n+ emit_insn (\n+ gen_neon_<sup>dot<dot_mode> (operands[3], operands[3], operands[1],\n+\t\t\t\t operands[2]));\n+ emit_insn (gen_rtx_SET (operands[0], operands[3]));\n+ DONE;\n+})\n+\n (define_expand \"neon_copysignf<mode>\"\n [(match_operand:VCVTF 0 \"register_operand\")\n (match_operand:VCVTF 1 \"register_operand\")\ndiff --git a/gcc/config/arm/types.md b/gcc/config/arm/types.md\nindex 253f4968d12a09fe69f3a0d82f896115b0a92c47..27398dffd9e71ee851d5d2ed5759d7c8a85df320 100644\n--- a/gcc/config/arm/types.md\n+++ b/gcc/config/arm/types.md\n@@ -316,6 +316,8 @@\n ; neon_cls_q\n ; neon_cnt\n ; neon_cnt_q\n+; neon_dot\n+; neon_dot_q\n ; neon_ext\n ; neon_ext_q\n ; neon_rbit\n@@ -764,6 +766,8 @@\n \\\n neon_abs,\\\n neon_abs_q,\\\n+ neon_dot,\\\n+ neon_dot_q,\\\n neon_neg,\\\n neon_neg_q,\\\n neon_qneg,\\\n@@ -1110,8 +1114,8 @@\n neon_sub, neon_sub_q, neon_sub_widen, neon_sub_long, neon_qsub,\\\n neon_qsub_q, neon_sub_halve, neon_sub_halve_q,\\\n neon_sub_halve_narrow_q,\\\n- neon_abs, neon_abs_q, neon_neg, neon_neg_q, neon_qneg,\\\n- neon_qneg_q, neon_qabs, neon_qabs_q, neon_abd, neon_abd_q,\\\n+\t neon_abs, neon_abs_q, neon_dot, neon_dot_q, neon_neg, neon_neg_q,\\\n+\t neon_qneg, neon_qneg_q, neon_qabs, neon_qabs_q, neon_abd, neon_abd_q,\\\n neon_abd_long, neon_minmax, neon_minmax_q, neon_compare,\\\n neon_compare_q, neon_compare_zero, neon_compare_zero_q,\\\n neon_arith_acc, neon_arith_acc_q, neon_reduc_add,\\\ndiff --git a/gcc/config/arm/unspecs.md b/gcc/config/arm/unspecs.md\nindex 99cfa41b08dad24a85e78f069331e83c03c8bce1..c474f4bb5db995b60f464f098e478f0398ce15f9 100644\n--- a/gcc/config/arm/unspecs.md\n+++ b/gcc/config/arm/unspecs.md\n@@ -410,4 +410,6 @@\n UNSPEC_VRNDN\n UNSPEC_VRNDP\n UNSPEC_VRNDX\n+ UNSPEC_DOT_S\n+ UNSPEC_DOT_U\n ])\n\n", "prefixes": [ "ARM" ] }