get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.2/patches/808686/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "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"
    ]
}