Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/808679/?format=api
{ "id": 808679, "url": "http://patchwork.ozlabs.org/api/patches/808679/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/20170901132215.GA32134@arm.com/", "project": { "id": 17, "url": "http://patchwork.ozlabs.org/api/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": "<20170901132215.GA32134@arm.com>", "list_archive_url": null, "date": "2017-09-01T13:22:17", "name": "[AArch64] Dot Product SIMD patterns [Patch (5/8)]", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "f5c8911605b219a17737971287490240dad09a18", "submitter": { "id": 69689, "url": "http://patchwork.ozlabs.org/api/people/69689/?format=api", "name": "Tamar Christina", "email": "Tamar.Christina@arm.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20170901132215.GA32134@arm.com/mbox/", "series": [ { "id": 1024, "url": "http://patchwork.ozlabs.org/api/series/1024/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=1024", "date": "2017-09-01T13:22:17", "name": "[AArch64] Dot Product SIMD patterns [Patch (5/8)]", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/1024/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/808679/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/808679/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<gcc-patches-return-461290-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-461290-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=\"o/aPEska\"; 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 3xkKfZ26Vtz9s8J\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri, 1 Sep 2017 23:22:30 +1000 (AEST)", "(qmail 123330 invoked by alias); 1 Sep 2017 13:22:22 -0000", "(qmail 123278 invoked by uid 89); 1 Sep 2017 13:22:20 -0000", "from mail-eopbgr10057.outbound.protection.outlook.com (HELO\n\tEUR02-HE1-obe.outbound.protection.outlook.com) (40.107.1.57)\n\tby sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with\n\tESMTP; Fri, 01 Sep 2017 13:22:18 +0000", "from arm.com (217.140.96.140) by\n\tAM4PR0802MB2306.eurprd08.prod.outlook.com\n\t(2603:10a6:200:5f::15) 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:22:14 +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=mtxHtDXDKiaEaRe2BSDLl/VUUW+XV3GYPH4u3ACu6hLAidUFXx\n\tYQA9NW2HfzgpCWHOQTXJuoL+79DnoT8ZUrruTnU2pkz1So81HxNcM2WvXwXwqCYB\n\tDW26rXsah0IGvCyClBaExmeGAC/SN00FqM4tDJOgr30y4AXo1Uh3rFhLI=", "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=B1PePiLU2+9/358lFFbDkcN0n8g=; b=o/aPEska+uRR8F3VA8y6\n\tFT1Fr8f57oT9BuW6YqZaF8fJXWB3d3WXwErYtNcaAkPzV8OTXykQGh5bacTCJ066\n\tDIiFKHnaKWeiiHjYfYoAHf1GGxSRmdLv4rUyh6eWBZlirbQCdRfv8v+/lQu3vryj\n\tKw6FlgDV68lGxjG9qaqVb0c=", "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=-25.5 required=5.0 tests=AWL, BAYES_00,\n\tGIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3,\n\tKAM_LOTSOFHASH, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS,\n\tSPF_PASS autolearn=ham version=3.3.2 spammy=34b", "X-HELO": "EUR02-HE1-obe.outbound.protection.outlook.com", "Date": "Fri, 1 Sep 2017 14:22:17 +0100", "From": "Tamar Christina <tamar.christina@arm.com>", "To": "gcc-patches@gcc.gnu.org", "Cc": "nd@arm.com, james.greenhalgh@arm.com, Richard.Earnshaw@arm.com,\n\tMarcus.Shawcroft@arm.com", "Subject": "[PATCH][GCC][AArch64] Dot Product SIMD patterns [Patch (5/8)]", "Message-ID": "<20170901132215.GA32134@arm.com>", "MIME-Version": "1.0", "Content-Type": "multipart/mixed; boundary=\"7JfCtLOvnd9MIVvH\"", "Content-Disposition": "inline", "User-Agent": "Mutt/1.5.24 (2015-08-30)", "X-ClientProxiedBy": "VI1P194CA0005.EURP194.PROD.OUTLOOK.COM\n\t(2603:10a6:800:be::15) To\n\tAM4PR0802MB2306.eurprd08.prod.outlook.com\n\t(2603:10a6:200:5f::15)", "X-MS-PublicTrafficType": "Email", "X-MS-Office365-Filtering-Correlation-Id": "1e136ffa-2558-4018-2e67-08d4f13c7665", "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:AM4PR0802MB2306; ", "X-Microsoft-Exchange-Diagnostics": [ "1; AM4PR0802MB2306;\n\t3:VeA7PzpG+B8F+VzKelq1QG190xP1WupCO71DY8WaGdubIhMN5vruHu0Y9NhUIsJKG6BYtXvwvxb+iluCC9lU88Og+VR9mUfAZl9jx+aLTHww4X4nkqvZxjLVhlEtpE53C5Ky06jDYCnXQ2MO40xGGq0wuAYA9Whbwgb9zldZQ5FQsQzt/JkWb+fJ/syFMARIR1oL9xbE87+mzkAO5ze0AGvMqswBRnBEv4V82eq0XZFKni7rVfm3ip/y1m/rbNx1;\n\t25:wiSal2vRf9du0lW/puK9gieU4747hv0vN46mvq/Ky8PLm4a8DRC/5ui371agfslfbiGEyOk3251s6yqX3hf3M0JegTbDDuz40VhsYxfcDn9OGoRLsjUMmNjbKBwbo2wo3PH5wYoEuC4jOG+xnWNzZc7nzLaOIttmbK0UMxoi6YBRswuFxYme88wmMVvnbh+3YzZxd6XPNfxVlRzNBsSSfQCf2tLZvFiDcYeJ+3UEXYwC6joagXdDpMKygrqSNM7bi+gyvag5PU6PKVYiRCXvo6rfik4yF5Q0GvT9LTkIfW0wOIh7zxnmxOXWMe56DeL5YTHynSxiUR6Z8Dzwca9OhA==;\n\t31:nktTy4+N5m9wUnfHDnHKql3nPfczXwcCYTMlesoYDHEuWo4Vv6ZYnYS/wcLqyrCYVpK95l3HUIxG45JgH6f0UhWuCa9id7x6I2ddtghNBZOs8AOMWiDRt3NW/dDDOPKoJZ+SNBRzWvPvPLoOF8gVkOUOvkov/NBZmgSrfeYlSV/bmzhcGAu/lArWvTCmmr83a7fdpMUlAUzwgT4mTHDT3r2FR9Fce4zFpvxO8deNSC8=", "1; AM4PR0802MB2306;\n\t20:if/RMNAPeHTaYMNA+9cVx7+xoMhMbrwLi0MAoUDI9jLDEs2i9DeGbZI9ap6fAask6/wjnCsJAjgSIU+LBrvGEuDGtlnboy8sVX1M3VsvZ7S7B7KoVk70gvLzwKT4riGSBCL63kWyrtAa8YId/zWYg5ogI7v87N69LPOIg71reYk=;\n\t4:8qxWT2DTpNVyAHmDZ8wsqFyLZvc6X8GnHibpbXGaHcMr6o50wR1tQ8TbfzfhKOhguj6ionaGPJyvK74xl1zeIQIzs0Si/Tca6CmBhSckt0MyipEHb/Uw5OGOLNaD6yFZUEoCq4s2hTwQ7AyT6+qXbs4KdktMdUozBJsKvwCoDFn10aoiA9nQggWWO0FZ+c21VYgApEmJ5AUbRhbOW1+v0/nE2V7cbB7UyElMXpzOgDIx2lHY2s2BzG9FdqhFSetMY/X0pa4sBF0ehkLGse/SMRYkxgyBbGPC++2LhACGIV8=", "1; AM4PR0802MB2306;\n\t23:00pG+9z5XZnGAZs4jHmSnPaIV23Vv13L+CDtP2cK7cs1HCfCYOeYlJSpZPb8uvlrgxcyFe2bZ0ZkUQ5OFRq4GZdQyRGYMRq7xFcw3nweruv6+EYSd85qiEiaJpOxko1+iUN6wXmQt2JaqxjUzNwTLj6NBT8xRTIcuXIjkUlq3C6XIuGMAfd7JApyCDszPgw0i1er7qpM+qRQO1S70ZhjQMSSf6bnEqzWuFj8R+/peUp/FBxxP7rrnV9u1eR+61SgPURwcx06lPMbPoWtlewvpfkSB7QH4lptMMEZVeMRXiwMdR81fojSkjCnUDs3mrKw9aZNL9BIscZZHFaQ+tk4UjiphbMxr4ZfnvioVuT45ZHErs8bQSTeHtIXRrY7Dwdc6Rx84a08MS8Z3ESsTTjvtxfQmldWYYmnTwqvrfOIyipuM8JNC7q76BoQi5U/Z9liWYvoePNkt21huFevxxiGD0qB/GpyTK3xyDLYwnpCRoBrAH3gJJvj+k8dxYeEuh2N385ELRREbg2DoXVTExkU9msjIct3JTq7nAzyVqk4rjJ/gJ/pKe+mqTSMieiaAx7vpPnKvElgHwIat/IFGvzJVp7XOHbi4ZHAi/Bim/GhLxoWu+cNSV1gfA5Cu88JDLuI0ed7TOSVpKzXiAOTFgQ1PUOIic7RVCLtVTtV9IxoxPMJpdGWiyz92vQtWULX7ysGtSCSUKZcEfADYDx7lNwvEnSvgvkGy8Vi/8Ez3E6xchAPVAM+Re0UGtI1LmLgqs7zieu6fTbSBMauy9bEAJ2i84pN1OdtsfyTR91D7WHd1bFk5J9ouRXck/4gKBunHmFheuEaYDclfkt2xs8HEMWLNOn+YC06kZqL0Dakz/3bjggEXBnf+evi4PzI1eE8r/wljFZc5UB5RD2zg9r5PwmU1j77KeIVEJYfc9zH2DFsHJ/8BWP/fAFxiiXDcVPzuU80CYn5sUx7Ji+nXuPNMOiGOdn2dmfV0rnK6ei90LLFiOrTlw/tiCaAS+YXTbWujqvFQDC3W7vpBQftQy+qqWQja3IqsivDsry22ka61kb+FViOPjk5zWnSuOdw1UtExc8FPTK8wDpBlhASDf9nwTFANo4U6255y2alqvNT10QkCUEedZEbU4Forh0OLABqckQEAeB0Nr+uxiosy1U3M6822dswsEplCqB+dJ2kKg98cX7myigYpGyFk983O4gswVe7VtKoKPun+Apt9lnTO1x4+MoSGa/C5NHw0/xw8UM3K2bhygpFRoJj+bC9uXynkcW6lfD9Hb5mDcBobmanUlVR+F7gJ22QsgpUNd7d2S/Ds/0=", "1; AM4PR0802MB2306;\n\t6:mQY9PQvHiV+Y6BTIdtL/yB9eZGQZMu1lhIyAp6k+tGK2JTt0YcRWj+0vVJ7PfOVn8ZjobIomHLhqW70oaayni5TP8MG0PAnlLj29xnXKzf+/ePbIPHN0wGoBDTrZOAA4YK2tEtpPelWM6gSWFsx3oGN9upITwnj+fODiNtHkjSwV30+S/Md76d7pjtPbwaq2Qtrz12lxYko9mSbMmvKaF9sPEM34t+reb7XkttbD1T4uMga7z6lU4NLyxV1Y0o1dOS3+BODgeHPmJ9vSMXDeNTurpm1s56b7o4eF/LVO7grXngNYV0bP7BlKz5DJdz5AQ5pVBw+F04tOPfTSs5KpxA==;\n\t5:UiPn46E9sJIdtkFEcvEQpml9coMnp1fdn3rnJ+GG7KBHRd2P66Di3CBpjwK74FuadbU0zS60VIrKDOHP3XOnZKgzjs1eX7qldmMujC2N5THLrKmwo4MBCwtu3BBx28FrM+qUoO/oE/vLoELKoVqy8Q==;\n\t24:SYkzK9vlR4D0VOBwG2sKnbw2+fAF7uthbLEtp56pWahNlkL31mUwMGYlRoyJGwW0aWJG9ihJDseDYPAMk4iOf6HFCKoKNyNer+5aiJpmCeg=;\n\t7:905Q6AQgoA9sSjQm658fPixgvmyVgdbRKS0pJHkZaPX3q+sAvJ8DrFkHebjMnFW5HBQa94JoNyWuf0JAhrpHrwJWwqBEtwU00EpIHYuazWKAYnd8rJMOVl8sxKW4Md8sGf9khYm8c0i2GQsJFg6Z9tefn7NTSQUsR0YamrAOcQN+K7GqcGCCrX9MDzxSLuX9tugP80bL0KWcui+kAIoTe2SyZIZCTuSE3lSO5heUb8c=" ], "X-MS-TrafficTypeDiagnostic": "AM4PR0802MB2306:", "NoDisclaimer": "True", "X-Exchange-Antispam-Report-Test": "UriScan:(180628864354917);", "X-Microsoft-Antispam-PRVS": "<AM4PR0802MB230692C084BD3FAB18319E46FF920@AM4PR0802MB2306.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)(3002001)(93006095)(93001095)(10201501046)(100000703101)(100105400095)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123558100)(20161123555025)(20161123564025)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:AM4PR0802MB2306; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:AM4PR0802MB2306; ", "X-Forefront-PRVS": "0417A3FFD2", "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(7370300001)(4630300001)(6009001)(39860400002)(189002)(199003)(377424004)(53754006)(2476003)(42186005)(8676002)(81156014)(50986999)(54356999)(189998001)(3846002)(4610100001)(5000100001)(83506001)(7736002)(106356001)(21086003)(568964002)(84326002)(101416001)(2906002)(105586002)(478600001)(305945005)(33656002)(2361001)(25786009)(68736007)(6116002)(36756003)(97736004)(5890100001)(6916009)(2351001)(4326008)(7350300001)(110136004)(81166006)(72206003)(66066001)(4001350100001)(5660300001)(55016002)(1076002)(53936002)(86362001)(18370500001)(2700100001);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR0802MB2306; 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:22:14.8069\n\t(UTC)", "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "AM4PR0802MB2306", "X-IsSubscribed": "yes" }, "content": "Hi All,\n\nThis patch adds the instructions for Dot Product to AArch64 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 Arm8.2-a and onwards.\n\nRegtested and bootstrapped on aarch64-none-elf and no issues.\n\nOk for trunk?\n\ngcc/\n2017-09-01 Tamar Christina <tamar.christina@arm.com>\n\n\t* config/aarch64/aarch64-builtins.c\n\t(aarch64_types_quadopu_lane_qualifiers): New.\n\t(TYPES_QUADOPU_LANE): New.\n\t* config/aarch64/aarch64-simd.md (aarch64_<sur>dot<dot_mode>): New.\n\t(<sur>dot_prod<dot_mode>, aarch64_<sur>dot_lane<dot_mode>): New.\n\t(aarch64_<sur>dot_laneq<dot_mode>): New.\n\t* config/aarch64/aarch64-simd-builtins.def (sdot, udot): New.\n\t(sdot_lane, udot_lane, sdot_laneq, udot_laneq): New.\n\t* config/aarch64/iterators.md (UNSPEC_SDOT, UNSPEC_UDOT): New.\n\t(DOT_MODE, dot_mode, Vdottype, DOTPROD): New.\n\t(sur): Add SDOT and UDOT.\n\n--", "diff": "diff --git a/gcc/config/aarch64/aarch64-builtins.c b/gcc/config/aarch64/aarch64-builtins.c\nindex d30009ba441cabc511ddbc821379daae6de09fa2..a1b598c3da29ca791c261ca8a6f918573a818974 100644\n--- a/gcc/config/aarch64/aarch64-builtins.c\n+++ b/gcc/config/aarch64/aarch64-builtins.c\n@@ -168,6 +168,11 @@ aarch64_types_quadop_lane_qualifiers[SIMD_MAX_BUILTIN_ARGS]\n = { qualifier_none, qualifier_none, qualifier_none,\n qualifier_none, qualifier_lane_index };\n #define TYPES_QUADOP_LANE (aarch64_types_quadop_lane_qualifiers)\n+static enum aarch64_type_qualifiers\n+aarch64_types_quadopu_lane_qualifiers[SIMD_MAX_BUILTIN_ARGS]\n+ = { qualifier_unsigned, qualifier_unsigned, qualifier_unsigned,\n+ qualifier_unsigned, qualifier_lane_index };\n+#define TYPES_QUADOPU_LANE (aarch64_types_quadopu_lane_qualifiers)\n \n static enum aarch64_type_qualifiers\n aarch64_types_binop_imm_p_qualifiers[SIMD_MAX_BUILTIN_ARGS]\ndiff --git a/gcc/config/aarch64/aarch64-simd-builtins.def b/gcc/config/aarch64/aarch64-simd-builtins.def\nindex d713d5d8b88837ec6f2dc51188fb252f8d5bc8bd..52d01342372e518b1238ea14097e8f0574e9a605 100644\n--- a/gcc/config/aarch64/aarch64-simd-builtins.def\n+++ b/gcc/config/aarch64/aarch64-simd-builtins.def\n@@ -205,6 +205,14 @@\n BUILTIN_VSDQ_I_DI (BINOP, srshl, 0)\n BUILTIN_VSDQ_I_DI (BINOP_UUS, urshl, 0)\n \n+ /* Implemented by aarch64_<sur><dotprod>{_lane}{q}<dot_mode>. */\n+ BUILTIN_VB (TERNOP, sdot, 0)\n+ BUILTIN_VB (TERNOPU, udot, 0)\n+ BUILTIN_VB (QUADOP_LANE, sdot_lane, 0)\n+ BUILTIN_VB (QUADOPU_LANE, udot_lane, 0)\n+ BUILTIN_VB (QUADOP_LANE, sdot_laneq, 0)\n+ BUILTIN_VB (QUADOPU_LANE, udot_laneq, 0)\n+\n BUILTIN_VDQ_I (SHIFTIMM, ashr, 3)\n VAR1 (SHIFTIMM, ashr_simd, 0, di)\n BUILTIN_VDQ_I (SHIFTIMM, lshr, 3)\ndiff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md\nindex f3e084f8778d70c82823b92fa80ff96021ad26db..21d46c84ab317c2d62afdf8c48117886aaf483b0 100644\n--- a/gcc/config/aarch64/aarch64-simd.md\n+++ b/gcc/config/aarch64/aarch64-simd.md\n@@ -386,6 +386,87 @@\n }\n )\n \n+;; These instructions map to the __builtins for the Dot Product operations.\n+(define_insn \"aarch64_<sur>dot<dot_mode>\"\n+ [(set (match_operand:VS 0 \"register_operand\" \"=w\")\n+\t(unspec:VS [(match_operand:VS 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+ \"<sur>dot\\\\t%0.<Vtype>, %2.<Vdottype>, %3.<Vdottype>\"\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 \"<sur>dot_prod<dot_mode>\"\n+ [(set (match_operand:VS 0 \"register_operand\")\n+\t(unspec:VS [(match_operand:<DOT_MODE> 1 \"register_operand\")\n+\t\t (match_operand:<DOT_MODE> 2 \"register_operand\")\n+\t\t (match_operand:VS 3 \"register_operand\")]\n+\t\tDOTPROD))]\n+ \"TARGET_DOTPROD\"\n+{\n+ emit_insn (\n+ gen_aarch64_<sur>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+;; These instructions map to the __builtins for the Dot Product\n+;; indexed operations.\n+(define_insn \"aarch64_<sur>dot_lane<dot_mode>\"\n+ [(set (match_operand:VS 0 \"register_operand\" \"=w\")\n+\t(unspec:VS [(match_operand:VS 1 \"register_operand\" \"0\")\n+\t\t (match_operand:<DOT_MODE> 2 \"register_operand\" \"w\")\n+\t\t (match_operand:V8QI 3 \"register_operand\" \"<h_con>\")\n+\t\t (match_operand:SI 4 \"immediate_operand\" \"i\")]\n+\t\tDOTPROD))]\n+ \"TARGET_DOTPROD\"\n+ {\n+ operands[4]\n+ = GEN_INT (ENDIAN_LANE_N (V8QImode, INTVAL (operands[4])));\n+ return \"<sur>dot\\\\t%0.<Vtype>, %2.<Vdottype>, %3.4b[%4]\";\n+ }\n+ [(set_attr \"type\" \"neon_dot\")]\n+)\n+\n+(define_insn \"aarch64_<sur>dot_laneq<dot_mode>\"\n+ [(set (match_operand:VS 0 \"register_operand\" \"=w\")\n+\t(unspec:VS [(match_operand:VS 1 \"register_operand\" \"0\")\n+\t\t (match_operand:<DOT_MODE> 2 \"register_operand\" \"w\")\n+\t\t (match_operand:V16QI 3 \"register_operand\" \"<h_con>\")\n+\t\t (match_operand:SI 4 \"immediate_operand\" \"i\")]\n+\t\tDOTPROD))]\n+ \"TARGET_DOTPROD\"\n+ {\n+ operands[4]\n+ = GEN_INT (ENDIAN_LANE_N (V16QImode, INTVAL (operands[4])));\n+ return \"<sur>dot\\\\t%0.<Vtype>, %2.<Vdottype>, %3.4b[%4]\";\n+ }\n+ [(set_attr \"type\" \"neon_dot\")]\n+)\n+\n (define_expand \"copysign<mode>3\"\n [(match_operand:VHSDF 0 \"register_operand\")\n (match_operand:VHSDF 1 \"register_operand\")\ndiff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md\nindex cceb57525c7aa44933419bd317b1f03a7b76f4c4..533c12cca916669195e9b094527ee0de31542b12 100644\n--- a/gcc/config/aarch64/iterators.md\n+++ b/gcc/config/aarch64/iterators.md\n@@ -354,6 +354,8 @@\n UNSPEC_SQRDMLSH ; Used in aarch64-simd.md.\n UNSPEC_FMAXNM ; Used in aarch64-simd.md.\n UNSPEC_FMINNM ; Used in aarch64-simd.md.\n+ UNSPEC_SDOT\t\t; Used in aarch64-simd.md.\n+ UNSPEC_UDOT\t\t; Used in aarch64-simd.md.\n ])\n \n ;; ------------------------------------------------------------------\n@@ -810,6 +812,13 @@\n (define_mode_attr vsi2qi [(V2SI \"v8qi\") (V4SI \"v16qi\")])\n (define_mode_attr VSI2QI [(V2SI \"V8QI\") (V4SI \"V16QI\")])\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+;; Register suffix for DOTPROD input types from the return type.\n+(define_mode_attr Vdottype [(V2SI \"8b\") (V4SI \"16b\")])\n+\n ;; Sum of lengths of instructions needed to move vector registers of a mode.\n (define_mode_attr insn_count [(OI \"8\") (CI \"12\") (XI \"16\")])\n \n@@ -1039,6 +1048,7 @@\n \t\t\t UNSPEC_SHSUB UNSPEC_UHSUB\n \t\t\t UNSPEC_SRHSUB UNSPEC_URHSUB])\n \n+(define_int_iterator DOTPROD [UNSPEC_SDOT UNSPEC_UDOT])\n \n (define_int_iterator ADDSUBHN [UNSPEC_ADDHN UNSPEC_RADDHN\n \t\t\t UNSPEC_SUBHN UNSPEC_RSUBHN])\n@@ -1176,6 +1186,7 @@\n \t\t (UNSPEC_USHLL \"u\") (UNSPEC_SSHLL \"s\")\n \t\t (UNSPEC_URSHL \"ur\") (UNSPEC_SRSHL \"sr\")\n \t\t (UNSPEC_UQRSHL \"u\") (UNSPEC_SQRSHL \"s\")\n+\t\t (UNSPEC_SDOT \"s\") (UNSPEC_UDOT \"u\")\n ])\n \n (define_int_attr r [(UNSPEC_SQDMULH \"\") (UNSPEC_SQRDMULH \"r\")\n\n", "prefixes": [ "AArch64" ] }