get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2175755,
    "url": "http://patchwork.ozlabs.org/api/1.0/patches/2175755/?format=api",
    "project": {
        "id": 17,
        "url": "http://patchwork.ozlabs.org/api/1.0/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
    },
    "msgid": "<20251218211109.3562-3-chris.bazley@arm.com>",
    "date": "2025-12-18T21:11:00",
    "name": "[v7,02/10] Implement recording/getting of mask/length for BB SLP",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "b2b74aa7f3e0d5e96cb0ed446f1a899e9ad341a4",
    "submitter": {
        "id": 89471,
        "url": "http://patchwork.ozlabs.org/api/1.0/people/89471/?format=api",
        "name": "Christopher Bazley",
        "email": "Chris.Bazley@arm.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20251218211109.3562-3-chris.bazley@arm.com/mbox/",
    "series": [
        {
            "id": 485915,
            "url": "http://patchwork.ozlabs.org/api/1.0/series/485915/?format=api",
            "date": "2025-12-18T21:10:58",
            "name": "Extend BB SLP vectorization to use predicated tails",
            "version": 7,
            "mbox": "http://patchwork.ozlabs.org/series/485915/mbox/"
        }
    ],
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2175755/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "gcc-patches@gcc.gnu.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@legolas.ozlabs.org",
            "gcc-patches@gcc.gnu.org"
        ],
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256\n header.s=selector1 header.b=ebv1vq6q;\n\tdkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com\n header.a=rsa-sha256 header.s=selector1 header.b=ebv1vq6q;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)",
            "sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256\n header.s=selector1 header.b=ebv1vq6q;\n\tdkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com\n header.a=rsa-sha256 header.s=selector1 header.b=ebv1vq6q",
            "sourceware.org;\n dmarc=pass (p=none dis=none) header.from=arm.com",
            "sourceware.org; spf=pass smtp.mailfrom=arm.com",
            "server2.sourceware.org;\n arc=pass smtp.remote-ip=40.107.159.8"
        ],
        "Received": [
            "from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4dXNlw6v6jz1xpw\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 19 Dec 2025 08:17:16 +1100 (AEDT)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id EBCBA4BA23D8\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 18 Dec 2025 21:17:09 +0000 (GMT)",
            "from OSPPR02CU001.outbound.protection.outlook.com\n (mail-norwayeastazon11013008.outbound.protection.outlook.com [40.107.159.8])\n by sourceware.org (Postfix) with ESMTPS id A4F764BA2E24\n for <gcc-patches@gcc.gnu.org>; Thu, 18 Dec 2025 21:12:34 +0000 (GMT)",
            "from AS9PR04CA0069.eurprd04.prod.outlook.com (2603:10a6:20b:48b::11)\n by AMDPR08MB11436.eurprd08.prod.outlook.com (2603:10a6:20b:716::17)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.8; Thu, 18 Dec\n 2025 21:12:29 +0000",
            "from AMS1EPF00000040.eurprd04.prod.outlook.com\n (2603:10a6:20b:48b:cafe::f3) by AS9PR04CA0069.outlook.office365.com\n (2603:10a6:20b:48b::11) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9434.8 via Frontend Transport; Thu,\n 18 Dec 2025 21:12:27 +0000",
            "from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by\n AMS1EPF00000040.mail.protection.outlook.com (10.167.16.37) with Microsoft\n SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9434.6\n via Frontend Transport; Thu, 18 Dec 2025 21:12:27 +0000",
            "from DU7P194CA0010.EURP194.PROD.OUTLOOK.COM (2603:10a6:10:553::13)\n by DU0PR08MB9251.eurprd08.prod.outlook.com (2603:10a6:10:41a::5) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Thu, 18 Dec\n 2025 21:11:20 +0000",
            "from DB1PEPF0003922F.eurprd03.prod.outlook.com\n (2603:10a6:10:553:cafe::d) by DU7P194CA0010.outlook.office365.com\n (2603:10a6:10:553::13) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9434.8 via Frontend Transport; Thu,\n 18 Dec 2025 21:11:18 +0000",
            "from nebula.arm.com (172.205.89.229) by\n DB1PEPF0003922F.mail.protection.outlook.com (10.167.8.102) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.9412.4 via Frontend Transport; Thu, 18 Dec 2025 21:11:19 +0000",
            "from AZ-NEU-EXJ02.Arm.com (10.240.25.139) by AZ-NEU-EX03.Arm.com\n (10.240.25.137) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Thu, 18 Dec\n 2025 21:11:19 +0000",
            "from AZ-NEU-EX04.Arm.com (10.240.25.138) by AZ-NEU-EXJ02.Arm.com\n (10.240.25.139) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Thu, 18 Dec\n 2025 21:11:19 +0000",
            "from ip-10-248-139-165.eu-west-1.compute.internal (10.248.139.165)\n by mail.arm.com (10.240.25.138) with Microsoft SMTP Server id 15.2.2562.29\n via Frontend Transport; Thu, 18 Dec 2025 21:11:19 +0000"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org EBCBA4BA23D8",
            "OpenDKIM Filter v2.11.0 sourceware.org A4F764BA2E24"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org A4F764BA2E24",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org A4F764BA2E24",
        "ARC-Seal": [
            "i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1766092354; cv=pass;\n b=MB0tcMgxiCYFYiR3KVZNRPwpLaqPrDnBHEAzOkUvUsLNOffRJZANJIu7QHkkuYJCDkc2mINgW+kVMY03UorR0HSOru0mPUi/s1xTLNcqqhtpMe7CljW6h0uib3Q93k2YfzRFVO1CM46DZwtHasPpKNbR1avgOCuLFRCXLt5RFvE=",
            "i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass;\n b=dhWEIoR6pA8aduJRfYFmImp+JAreUs0XGVPOGQaKVKIRrVxUAbOg5xrPXfL3rW5jMh/hlLkahmtessTPqXo/yRJiELLIHIkQEciwTfju/hAr33m2LIhNuUOINJP6C1hgM/KgKEziYzGuJQEcwyACUvsulNUDIwZKgwCRJCdZ3W4/SZr638ZBNBmVvgqTMYuas53v8AzS8jOaQPVkDrvUvJbrERLh+U6MXzHC9obvlrO9xzfXBZNUe/XLlrFS+IsSaMw7hSRoA243R7wEd0pRwpTer91X3ZK0VszHMX9+lNFgKM5Br27CzPpXjm0pIGV8a8vvwBGYyUTcHuesfKdZ/A==",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=rPqPTAJlxZXhIh0oiVfX78QBrWm2FJdYOn34PFbov+mZxe4r/LSOfSTZzgtAE6HM4dJoDtZ/jxccTSz93vBk27EqHE+dT8/id2Kjb7ddQ56P3CyrjPeOdNlJaAHfwCLOcO1JixHbnfb5J/7UI4u8u9zBfD3iKZpP/SqzWlzqaPYsftGVvBjHW8GR3xfvhOmBoGVXVZGkEt1CAPlhUi89Up24VUK6r9MhdBUIJRQdSdHqjtgG04Y5UvPRu+3hbQOjVZOzynSthCfkozSUzsqThMkuH2tDNXcLyn/BDLrOwMNNZY0vpxT1xinrdDgQBy2WcRinNaIUMlYyKPNiHdfJlw=="
        ],
        "ARC-Message-Signature": [
            "i=3; a=rsa-sha256; d=sourceware.org; s=key;\n t=1766092354; c=relaxed/simple;\n bh=d4b4GQVLUtYz3kVBYXwKdSNFX+HweyvHKd3SCl4N66I=;\n h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID:\n MIME-Version;\n b=fHLcGwN0hakXCcMVHEKz9IUotEf+guB1oo7/9xs6Tgz7O/GH7DiBfq48EVaeJSQHSuLWQ+JYZhZ2rN6VKWeKi/WPsRH8RNH02Y+FwuxExWinpKxpfoy/zdt02EJ5sRwtQU8fY/Aq9UQ9WEt2T25UwnY+HKVsp0u6vndtSIpotnE=",
            "i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=/SBBHf06pgZXTka0m8urz5lqKupVQLPBmstHy4KCKac=;\n b=ymKcF8L3twYT0mzA9XV4nr53u2cqbZyU11mmSEXBvnVCz9przK5vRJnT5+NM5ee+3Mrlqxxt21Sr2cR6Snph1MNgy1hwoZwmoHECGp2EWoPsUXq71tE81NUNGm6Of+Z8naPaaLrPIV3zYNGIsb9jSTPy4VWMxdGU7Jx5I/t2lpNGurp1P0eOZ+kQ7zbxi/kI+ZOW6Wrh5jzCTGSmgP15Cktphv8O5i1EFWADXZAedvzl1sJgkA1qWvm1TMWqY6ScZMY3eye5MsEwLw8BpbzAsyNzI030JfULwXO9L7uCCm28wfrSAYI19ceBN/j2HmdqNGP7NFSvsSORNsVF9t2aUQ==",
            "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=/SBBHf06pgZXTka0m8urz5lqKupVQLPBmstHy4KCKac=;\n b=GF9vgbcuvyqEJQgQAmJ7JlaDfj6BUzV2tW7ol4XzQwyFHm/dSybyZZRZdI0osPHkKc14oV54McqAJFSFIgbWYS6POeOkEkV2hO4IB8Qzil0SrCvs1pBN6c3DFV82iueiHo/jabu1J+IjQAUS1FmuNb/Y7toN8G5hHCaeUlzi2q1QdxlAEdvYqRVZ1rnF8S/2/TbfHYstAlXOkaVvs8zTM5BrIa0r8SPfNfiZeKCeDGcs4gmxfUyI38JZyPbHuS2el7hb4DgCVrsSzLDCxw0WbHG1DFYd/NuMHJWMpQ49tXg4I2HFlJdilrQ558GNh1IFAO3aURZ4YLiua31SBAdkWA=="
        ],
        "ARC-Authentication-Results": [
            "i=3; server2.sourceware.org",
            "i=2; mx.microsoft.com 1; spf=pass (sender ip is\n 4.158.2.129) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass\n (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass\n (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1\n spf=[1,1,smtp.mailfrom=arm.com] dmarc=[1,1,header.from=arm.com])",
            "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 172.205.89.229) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com;\n dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;\n dkim=none (message not signed); arc=none (0)"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=/SBBHf06pgZXTka0m8urz5lqKupVQLPBmstHy4KCKac=;\n b=ebv1vq6qRjnSoy2zbVZKbtfDH4b+wMD68/t1+ylWWvV7FSF8EvGVc/pQ0eAYK/Z52ew6RZ1CDI+jGXCvfkH5KY7k7ZiXCExuVeoIp7cq9+owuEE2wE9+sU0wmjsG4I2/e9WpQOkilbb8pMHiRXS9IoeIDiTSv7XxK3MCATWGV/8=",
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=/SBBHf06pgZXTka0m8urz5lqKupVQLPBmstHy4KCKac=;\n b=ebv1vq6qRjnSoy2zbVZKbtfDH4b+wMD68/t1+ylWWvV7FSF8EvGVc/pQ0eAYK/Z52ew6RZ1CDI+jGXCvfkH5KY7k7ZiXCExuVeoIp7cq9+owuEE2wE9+sU0wmjsG4I2/e9WpQOkilbb8pMHiRXS9IoeIDiTSv7XxK3MCATWGV/8="
        ],
        "X-MS-Exchange-Authentication-Results": [
            "spf=pass (sender IP is 4.158.2.129)\n smtp.mailfrom=arm.com; dkim=pass (signature was verified)\n header.d=arm.com;dmarc=pass action=none header.from=arm.com;",
            "spf=pass (sender IP is 172.205.89.229)\n smtp.mailfrom=arm.com; dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=arm.com;"
        ],
        "Received-SPF": [
            "Pass (protection.outlook.com: domain of arm.com designates\n 4.158.2.129 as permitted sender) receiver=protection.outlook.com;\n client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C",
            "Pass (protection.outlook.com: domain of arm.com designates\n 172.205.89.229 as permitted sender) receiver=protection.outlook.com;\n client-ip=172.205.89.229; helo=nebula.arm.com; pr=C"
        ],
        "From": "Christopher Bazley <chris.bazley@arm.com>",
        "To": "<gcc-patches@gcc.gnu.org>",
        "Subject": "[PATCH v7 02/10] Implement recording/getting of mask/length for BB\n SLP",
        "Date": "Thu, 18 Dec 2025 21:11:00 +0000",
        "Message-ID": "<20251218211109.3562-3-chris.bazley@arm.com>",
        "X-Mailer": "git-send-email 2.43.0",
        "In-Reply-To": "<20251218211109.3562-1-chris.bazley@arm.com>",
        "References": "<20251218211109.3562-1-chris.bazley@arm.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-EOPAttributedMessage": "1",
        "X-MS-TrafficTypeDiagnostic": "\n DB1PEPF0003922F:EE_|DU0PR08MB9251:EE_|AMS1EPF00000040:EE_|AMDPR08MB11436:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "ac9385a9-7695-4ae6-50b3-08de3e7a25b0",
        "x-checkrecipientrouted": "true",
        "NoDisclaimer": "true",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam-Untrusted": "BCL:0;\n ARA:13230040|36860700013|376014|82310400026|1800799024;",
        "X-Microsoft-Antispam-Message-Info-Original": "\n Z0s4jdRjnD806b1rwlnwEQSvzXrvhygT9fW4UgG4ZZ8maYHGWTJEs7HavcaQPn+swIENvgRN9QsBMxgtK0zp1krIbgJGJOzMJb6810H+wfHO9yMF3wNwz2YdvrC6zqBI5QDXQ5BvZ8sSa5q6cX7ePkgSHeaBUxzTyRizEQiMv67PZo7jEiDSfY9EUzIeK6N1jJa4Eadiy6GDTzwPsM61Equ4/MhrrwpKKEJmGUeCyBzsjnQLWl9PW1mg/WQ2DDMs58tfegpMGImZsTw0vyRH0RB4p1tG/Rjrf4xd8tIiOw0LJAsJUbiozuaYqpt2+JZpW4nsBVOrMVR7goW+lwxMJLYnDp4UGgUukFA5ZbZkrB9i/FEWwgd5VOwM+TbUiEf6DORLfV+r5w3+vUhIOhvKLTGb7fCRaDNalO2LmOp+iWd1VFWzBsrn2d5TUAYHqfQVrLOnBaEx/wmcPfIl3zay5PGaHGr2rw2DzEIkl4ZXLDuZyqPVfbuOjqTGnFwSfVZPIRzT4PPuYk0MdrxbvJa91pSOVUQd4ovpwfdSIlMOxNcxKd+fKgURSn0sh19qTPkYJb6RW15Navbt2LSReqKs7VCjKrfne/vhgBcVlpmkxH2NbusF2rKpA/upG3Efk6j1459J53HrxnJN/8fUMRJDmw290TvopFjHrizig7dtjcss6l9jX1pWnZJa1qD+k2k16sOrnN8q0zWVax4DyzVohcSza87IsUpYqkJu4lIfAdbKxiPooZ74ymYZ81wnZayUH0YcqRPr2jXlhge1Egy2a5FFC/nqhUfFrwhO6XiNI1cq79oZnNATa0ljDBB+RZOWH0rONvw3hOhSgzgikBcaD3G5db5UQjiKXIDDdF3+kf4mxPf2To+60087uNqoc+GKUvpf6tlIggpm7XE1ViAkKgIve50GH8390/hxt4UX4YuJ2s40404h9esdgcC+rr5LKSishlXUEFKbIMDFFaENxl/nFVvbT1AOfaM5wqTxDxxm2OK2IwNG2UcPU0U9zySvOHXSbdRjNHeq1sdHaed7kxVVg/NhuyTPka327RwIeC0swoTNngO0R6RT5VzjR+cKbeYIb1G6APl3UzwFzjglJVubaLhDGlZJXFI85qqSkb4ohb7Uxk8Qze2grZ9n3i+nkcovI7VhjmFyJEDg0caxmTR/wvysv04K0r4da3sg1UQG3ovu/ARaRjp0+W/LKMEr+yU48kAFVckskcB0EyZtW4SgJMblOLFFxJarPhsZIqATT/fJb62RRhlWD8i6h1ueYw8YI3MTZjrKBwFZNbBSPAg4ddLW8YJ3E1LXfOuITWx6at1qgkc3Gy99+pboj1nXy2VeVTPwZeVx9x60ZuT7Cl+Qu5lqHhKBv/KSFaEvNFozZz7MHTXCFJAjZoaUiLtjxnBxlhA81XqrUlOXDCJBCedfdbNpQM3/23L9yorZaQpc165STsz7IRL1I6PhqEId8cqgccpLWpRy7H6eHlJ2AHL6l6YEh3HE35JpWzdwg/vW6waGIX+jNjE4fJ/mMU61HUIE2smmxRTKr+OkZJ49r30r9hbRUnSrIU6kJ4AKq1U=",
        "X-Forefront-Antispam-Report-Untrusted": "CIP:172.205.89.229; CTRY:IE; LANG:en;\n SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:nebula.arm.com; PTR:InfoDomainNonexistent;\n CAT:NONE; SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024);\n DIR:OUT; SFP:1101;",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": [
            "DU0PR08MB9251",
            "AMDPR08MB11436"
        ],
        "X-MS-Exchange-Transport-CrossTenantHeadersStripped": "\n AMS1EPF00000040.eurprd04.prod.outlook.com",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id-Prvs": "\n 0e07dcee-01bc-457d-7e75-08de3e79fd8d",
        "X-Microsoft-Antispam": "BCL:0;\n ARA:13230040|376014|35042699022|36860700013|82310400026|1800799024|14060799003;",
        "X-Microsoft-Antispam-Message-Info": "\n ESaUD2Hp4tv9L2pU7v8BPG20gE+odh/F9IOM03U7UtLUb1DwnJt8qrXhPQx9n1Zn7YMKacn3me4jiN1RdNvhKd06fedwV5GdH9JFcFHjxmE8N1icYEhSUOF3GzyBKyB1CbiJ2i9cIJorcI2ZYlyIOXD8DCI54RbU7RXgXN++bwzmA8Om14xBqEzA1NK28GRN1ZsyMldhRSH2O0s7/+fdzDaEsfJ31YiLaIihV15kGg8QCWvHuMrcoO3GID3qqCG8TaQurbugpQqlowDSRe5+3ryJS8v8tccYYwnvUOZyct1bFDomIHhzSlBgBhMn1oKSTl3ZKHvAmHsiGpWkrsNGZb0Y2bq4og6w05KgwsyW0HE6OFhlGU+d5OzV9BTT4+7dDCW014hGKNV1eCB5XZNQVl8NxutjQ89VJBAC2AtULUHYNFHq3E5M5xis65ltYHsxsJsDZgoY80gLEEkMrST+rysfyeGuvNt+71Hf7cdzMwkXHBo3Z3Tlm6f4L9rbcRraSHdsn/Wf9hX8VFAsJYOSjr+WM8+WrzmGNrWtVcXNMY4A3gkjbcxSfn8Qq/Q+O3JiH5fZ9WDu/s4PPprtWqRCj4FuRqMQ5yJhUFThc1K6OlTk1PCSknsEdBLII9ZHrYE0+7S+cALUOA47io38iciOoFBBcCUjfB3cnGvIZ9wK2kRY2tk8nKjFpG1irbFiBA6ee4TM/JZtatwZrFB+G5hTBQj/zEsB1KG2/kwzkAsF2e3FehVzXU72FoDT6ystwkhp5K79FT+QWYljgqyA2mkXVx/GJMm1L42Df7TIAwjTrRiTX2n+QylKY03T65RPpBcywiPaVMS6PLM/fXJYj5GZWtmgsLqACFue/U5S/bytrOzeb5AfaROHwrf1C+x1CuqC8HF8yvsjjE2SYzUV7IBqltA+smV2JfrlRyW8xOvwvzRq5uXjtCWxXp+HP2sQ7u1V+ZyKsAfOzq/nzHhK0IsfvqYeZFCl+BEud+LvrOjma2+tDkPcmh6QR37NUEySfZKDNX4FEEahShpNmYk0OlHqdQZVP037rlQOpKZdPjz1I3kFcFWPGzoZAyihIR/YxVW6X5yTvjSCWKHgCFJzZXviDygbZW/EjHH1qLAjanEamuJKlvYksV7dWs9xJO/UnKhTw4CUDxIVra6HvOH+ZJFc9EReou0KsmHfbhjHz/C0Axw6GZpSGHm05Yf29FRkNOKwhpv0bIfnOTYPnYhHfa3NiGkBrUXND8sDrMt5Po6kH/HOlrwHwX18Eg6r4k51ZMfz1YgVrwXQNRxBlPkKp3MZ/P7T038+qIjw5TgyKbNvvJIFAZz9acsCzDuoFv+riDIA+S38LXwM/P7CZ7iDgUn+Fo1DpgUouv1Xl5Wu/K6FQlx2F4a0JQj1nxnlJB9ebiX7+H1FmUCX+d5ClEKLIMN82wCKrcKx/8if59UHNXZDEUMSH2fs47VqUU4G5SMaq+6jwe7wVhlHEVb6Pmiuh8btAAEJ4OtWgEy+E1Zv442qsHmCdlb4KvaAVI9ZZHyAN40IbqrhDSU6LUZimxUk1SE+UPvstrhgVvl0QQgbUN2pYRQ=",
        "X-Forefront-Antispam-Report": "CIP:4.158.2.129; CTRY:GB; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:outbound-uk1.az.dlp.m.darktrace.com;\n PTR:InfoDomainNonexistent; CAT:NONE;\n SFS:(13230040)(376014)(35042699022)(36860700013)(82310400026)(1800799024)(14060799003);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "arm.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "18 Dec 2025 21:12:27.1937 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n ac9385a9-7695-4ae6-50b3-08de3e7a25b0",
        "X-MS-Exchange-CrossTenant-Id": "f34e5979-57d9-4aaa-ad4d-b122a662184d",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[4.158.2.129];\n Helo=[outbound-uk1.az.dlp.m.darktrace.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n AMS1EPF00000040.eurprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-BeenThere": "gcc-patches@gcc.gnu.org",
        "X-Mailman-Version": "2.1.30",
        "Precedence": "list",
        "List-Id": "Gcc-patches mailing list <gcc-patches.gcc.gnu.org>",
        "List-Unsubscribe": "<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>",
        "List-Archive": "<https://gcc.gnu.org/pipermail/gcc-patches/>",
        "List-Post": "<mailto:gcc-patches@gcc.gnu.org>",
        "List-Help": "<mailto:gcc-patches-request@gcc.gnu.org?subject=help>",
        "List-Subscribe": "<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>",
        "Errors-To": "gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"
    },
    "content": "Add two new fields to SLP tree nodes, which are accessed as\nSLP_TREE_CAN_USE_PARTIAL_VECTORS_P and SLP_TREE_PARTIAL_VECTORS_STYLE.\n\nSLP_TREE_CAN_USE_PARTIAL_VECTORS_P is analogous to the existing\npredicate LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P. It is initialized to\ntrue. This flag just records whether the target could vectorize a\nnode using a partial vector; it does not say anything about\nwhether the vector actually is partial, or how the target would support\nuse of a partial vector. Some kinds of node require mask/length for\npartial vectors; others don't. In the latter case (e.g., for add\noperations), SLP_TREE_CAN_USE_PARTIAL_VECTORS_P will remain true.\n\nSLP_TREE_PARTIAL_VECTORS_STYLE is analogous to the existing field\nLOOP_VINFO_PARTIAL_VECTORS_STYLE. Both are initialized to 'none'.\nThe vect_partial_vectors_avx512 enumerator is not used for BB SLP.\nUnlike loop vectorization, a different style of partial vectors can be\nchosen for each node during analysis of that node.\n\nImplement the recently-introduced wrapper functions,\nvect_record_(len|mask), for BB SLP by setting\nSLP_TREE_PARTIAL_VECTORS_STYLE to indicate that a mask or length should\nbe used for a given SLP node. The passed-in vec_info is ignored.\n\nImplement the vect_fully_(masked|with_length)_p wrapper functions for\nBB SLP by checking the SLP_TREE_PARTIAL_VECTORS_STYLE. This should be\nsufficient because at most one of vect_record_(len|mask) and\nvect_cannot_use_partial_vectors are expected to be called for any\ngiven SLP node. SLP_TREE_CAN_USE_PARTIAL_VECTORS_P should be true if\nthe style is not 'none', but its value isn't used beyond the analysis\nphase.\n\nThe implementations of vect_get_mask and vect_get_len for BB SLP are\nnon-trivial (albeit simpler than for loop vectorization), therefore they\nare delegated to SLP-specific functions defined in tree-vect-slp.cc.\n\nImplement the vect_cannot_use_partial_vectors wrapper function by\nsetting the SLP_TREE_CAN_USE_PARTIAL_VECTORS_P flag to false.\nTo prevent regressions, vect_can_use_partial_vectors_p still returns\nfalse for BB SLP regardless (for now). This prevents vect_record_mask\nor vect_record_len from being called.\n\ngcc/ChangeLog:\n\n\t* tree-vect-slp.cc (_slp_tree::_slp_tree): initialize new\n\tpartial_vector_style and can_use_partial_vectors members.\n\t(vect_slp_record_bb_style): Set the partial vector style of an\n\tSLP node, checking that the style does not flip-flop between mask\n        and length.\n\t(vect_slp_record_bb_mask): Use vect_slp_record_bb_style to set\n\tthe partial vectors style of the SLP tree node to\n\tvect_partial_vectors_while_ult.\n\t(vect_slp_get_bb_mask): New function to materialize a mask for\n\tbasic block SLP vectorization.\n\t(vect_slp_record_bb_len): Use vect_slp_record_bb_style to set\n\tthe partial vectors style of the SLP tree node to\n\tvect_partial_vectors_len.\n\t(vect_slp_get_bb_len): New function to materialize a length for\n\tbasic block SLP vectorization.\n\t* tree-vect-stmts.cc (vectorizable_internal_function):\n\t(vect_record_mask): Handle the basic block SLP use case by\n\tdelegating to vect_slp_record_bb_mask.\n\t(vect_get_mask): Handle the basic block SLP use case by\n\tdelegating to vect_slp_get_bb_mask.\n\t(vect_record_len): Handle the basic block SLP use case by\n\tdelegating to vect_slp_record_bb_len.\n\t(vect_get_len): Handle the basic block SLP use case by\n\tdelegating to vect_slp_get_bb_len.\n\t(vect_gen_while_ssa_name): New function containing code\n\trefactored out of vect_gen_while for reuse by\n\tvect_slp_get_bb_mask.\n\t(vect_gen_while): Use vect_gen_while_ssa_name instead of custom\n\tcode for some of the implementation.\n\t* tree-vectorizer.h (enum vect_partial_vector_style): Move this\n\tdefinition earlier to allow reuse by struct _slp_tree.\n\t(struct _slp_tree): Add a partial_vector_style member to record\n\twhether to use a length or mask for the SLP tree node, if\n\tpartial vectors are required and supported.\n\tAdd a can_use_partial_vectors member to record whether partial\n\tvectors are supported for the SLP tree node.\n\t(SLP_TREE_PARTIAL_VECTORS_STYLE): New member accessor macro.\n\t(SLP_TREE_CAN_USE_PARTIAL_VECTORS_P): New member accessor macro.\n\t(vect_gen_while_ssa_name): Declaration of a new function.\n\t(vect_slp_get_bb_mask): As above.\n\t(vect_slp_get_bb_len): As above.\n\t(vect_cannot_use_partial_vectors): Handle the basic block SLP\n\tuse-case by setting SLP_TREE_CAN_USE_PARTIAL_VECTORS_P to\n\tfalse.\n\t(vect_fully_with_length_p): Handle the basic block SLP use\n\tcase by checking whether the SLP_TREE_PARTIAL_VECTORS_STYLE is\n\tvect_partial_vectors_len.\n\t(vect_fully_masked_p): Handle the basic block SLP use case by\n\tchecking whether the SLP_TREE_PARTIAL_VECTORS_STYLE is\n\tvect_partial_vectors_while_ult.\n\n---\n gcc/tree-vect-slp.cc   | 121 +++++++++++++++++++++++++++++++++++++++++\n gcc/tree-vect-stmts.cc |  51 ++++++++++-------\n gcc/tree-vectorizer.h  |  44 +++++++++------\n 3 files changed, 179 insertions(+), 37 deletions(-)",
    "diff": "diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc\nindex a0fd43b22fb..d541077c812 100644\n--- a/gcc/tree-vect-slp.cc\n+++ b/gcc/tree-vect-slp.cc\n@@ -124,6 +124,8 @@ _slp_tree::_slp_tree ()\n   SLP_TREE_GS_BASE (this) = NULL_TREE;\n   this->ldst_lanes = false;\n   this->avoid_stlf_fail = false;\n+  SLP_TREE_PARTIAL_VECTORS_STYLE (this) = vect_partial_vectors_none;\n+  SLP_TREE_CAN_USE_PARTIAL_VECTORS_P (this) = true;\n   SLP_TREE_VECTYPE (this) = NULL_TREE;\n   SLP_TREE_REPRESENTATIVE (this) = NULL;\n   this->cycle_info.id = -1;\n@@ -12519,3 +12521,122 @@ vect_schedule_slp (vec_info *vinfo, const vec<slp_instance> &slp_instances)\n         }\n     }\n }\n+\n+/* Record that a specific partial vector style could be used to vectorize\n+   SLP_NODE if required.  */\n+\n+static void\n+vect_slp_record_bb_style (slp_tree slp_node, vect_partial_vector_style style)\n+{\n+  gcc_assert (style != vect_partial_vectors_none);\n+  gcc_assert (style != vect_partial_vectors_avx512);\n+\n+  if (SLP_TREE_PARTIAL_VECTORS_STYLE (slp_node) == vect_partial_vectors_none)\n+    SLP_TREE_PARTIAL_VECTORS_STYLE (slp_node) = style;\n+  else\n+    gcc_assert (SLP_TREE_PARTIAL_VECTORS_STYLE (slp_node) == style);\n+}\n+\n+/* Record that a mask could be used to vectorize SLP_NODE if required.\n+ */\n+\n+void\n+vect_slp_record_bb_mask (slp_tree slp_node)\n+{\n+  vect_slp_record_bb_style (slp_node, vect_partial_vectors_while_ult);\n+}\n+\n+/* Materialize mask number INDEX for a group of scalar stmts in SLP_NODE that\n+   operate on NVECTORS vectors of type VECTYPE, where 0 <= INDEX < NVECTORS.\n+   Masking is only required for the tail, therefore NULL_TREE is returned for\n+   every value of INDEX except the last.  Insert any set-up statements before\n+   GSI.  */\n+\n+tree\n+vect_slp_get_bb_mask (slp_tree slp_node, gimple_stmt_iterator *gsi,\n+\t\t      unsigned int nvectors, tree vectype, unsigned int index)\n+{\n+  gcc_checking_assert (SLP_TREE_PARTIAL_VECTORS_STYLE (slp_node)\n+\t\t       == vect_partial_vectors_while_ult);\n+\n+  /* Only the last vector can be a partial vector.  */\n+  if (index < nvectors - 1)\n+    return NULL_TREE;\n+\n+  /* vect_get_num_copies only allows a partial vector if it is the only\n+     vector.  */\n+  if (nvectors > 1)\n+    return NULL_TREE;\n+\n+  gcc_checking_assert (nvectors == 1);\n+\n+  poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (vectype);\n+  unsigned int group_size = SLP_TREE_LANES (slp_node);\n+\n+  /* A single vector can be a full vector, in which case no mask is\n+   * needed.  */\n+  if (known_eq (nunits, group_size))\n+    return NULL_TREE;\n+\n+  /* Return a mask for a single partial vector.\n+     FORNOW: don't bother maintaining a set of mask constants to allow\n+     sharing between nodes belonging to the same instance of bb_vec_info.  */\n+  gcc_checking_assert (known_le (group_size, nunits));\n+  gimple_seq stmts = NULL;\n+  tree cmp_type = size_type_node;\n+  tree start_index = build_zero_cst (cmp_type);\n+  tree end_index = build_int_cst (cmp_type, group_size);\n+  tree masktype = truth_type_for (vectype);\n+  tree mask = make_temp_ssa_name (masktype, NULL, \"slp_mask\");\n+  vect_gen_while_ssa_name (&stmts, masktype, start_index, end_index, mask);\n+  gsi_insert_seq_before (gsi, stmts, GSI_SAME_STMT);\n+\n+  return mask;\n+}\n+\n+/* Record that a length limit could be used to vectorize SLP_NODE if required.\n+ */\n+\n+void\n+vect_slp_record_bb_len (slp_tree slp_node)\n+{\n+  vect_slp_record_bb_style (slp_node, vect_partial_vectors_len);\n+}\n+\n+/* Materialize length number INDEX for a group of scalar stmts in SLP_NODE that\n+   operate on NVECTORS vectors of type VECTYPE, where 0 <= INDEX < NVECTORS.  A\n+   length limit is only required for the tail, therefore NULL_TREE is returned\n+   for every value of INDEX except the last; otherwise, return a value that\n+   contains FACTOR multiplied by the number of elements that should be\n+   processed.  */\n+\n+tree\n+vect_slp_get_bb_len (slp_tree slp_node, unsigned int nvectors, tree vectype,\n+\t\t     unsigned int index, unsigned int factor)\n+{\n+  gcc_checking_assert (SLP_TREE_PARTIAL_VECTORS_STYLE (slp_node)\n+\t\t       == vect_partial_vectors_len);\n+\n+  /* Only the last vector can be a partial vector.  */\n+  if (index < nvectors - 1)\n+    return NULL_TREE;\n+\n+  /* vect_get_num_copies only allows a partial vector if it is the only\n+     vector.  */\n+  if (nvectors > 1)\n+    return NULL_TREE;\n+\n+  gcc_checking_assert (nvectors == 1);\n+\n+  poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (vectype);\n+  unsigned int group_size = SLP_TREE_LANES (slp_node);\n+\n+  /* A single vector can be a full vector, in which case no length limit is\n+   * needed.  */\n+  if (known_eq (nunits, group_size))\n+    return NULL_TREE;\n+\n+  /* Return the scaled length of a single partial vector.  */\n+  gcc_checking_assert (known_lt (group_size, nunits));\n+  return size_int (group_size * factor);\n+}\ndiff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc\nindex e0720a3d70a..93c87f4b329 100644\n--- a/gcc/tree-vect-stmts.cc\n+++ b/gcc/tree-vect-stmts.cc\n@@ -1387,7 +1387,9 @@ vectorizable_internal_function (combined_fn cfn, tree fndecl,\n /* Record that a complete set of masks associated with VINFO would need to\n    contain a sequence of NVECTORS masks that each control a vector of type\n    VECTYPE.  If SCALAR_MASK is nonnull, the fully-masked loop would AND\n-   these vector masks with the vector version of SCALAR_MASK.  */\n+   these vector masks with the vector version of SCALAR_MASK.  Alternatively,\n+   if doing basic block vectorization, record that a mask could be used to\n+   vectorize SLP_NODE if required.  */\n static void\n vect_record_mask (vec_info *vinfo, slp_tree slp_node, unsigned int nvectors,\n \t\t  tree vectype, tree scalar_mask)\n@@ -1397,7 +1399,7 @@ vect_record_mask (vec_info *vinfo, slp_tree slp_node, unsigned int nvectors,\n     vect_record_loop_mask (loop_vinfo, &LOOP_VINFO_MASKS (loop_vinfo), nvectors,\n \t\t\t   vectype, scalar_mask);\n   else\n-    (void) slp_node; /* FORNOW */\n+    vect_slp_record_bb_mask (slp_node);\n }\n \n /* Given a complete set of masks associated with VINFO, extract mask number\n@@ -1415,16 +1417,15 @@ vect_get_mask (vec_info *vinfo, slp_tree slp_node, gimple_stmt_iterator *gsi,\n     return vect_get_loop_mask (loop_vinfo, gsi, &LOOP_VINFO_MASKS (loop_vinfo),\n \t\t\t       nvectors, vectype, index);\n   else\n-    {\n-      (void) slp_node; /* FORNOW */\n-      return NULL_TREE;\n-    }\n+    return vect_slp_get_bb_mask (slp_node, gsi, nvectors, vectype, index);\n }\n \n /* Record that a complete set of lengths associated with VINFO would need to\n    contain a sequence of NVECTORS lengths for controlling an operation on\n    VECTYPE.  The operation splits each element of VECTYPE into FACTOR separate\n-   subelements, measuring the length as a number of these subelements.  */\n+   subelements, measuring the length as a number of these subelements.\n+   Alternatively, if doing basic block vectorization, record that a length limit\n+   could be used to vectorize SLP_NODE if required.  */\n static void\n vect_record_len (vec_info *vinfo, slp_tree slp_node, unsigned int nvectors,\n \t\t tree vectype, unsigned int factor)\n@@ -1434,7 +1435,7 @@ vect_record_len (vec_info *vinfo, slp_tree slp_node, unsigned int nvectors,\n     vect_record_loop_len (loop_vinfo, &LOOP_VINFO_LENS (loop_vinfo), nvectors,\n \t\t\t  vectype, factor);\n   else\n-    (void) slp_node; /* FORNOW */\n+    vect_slp_record_bb_len(slp_node);\n }\n \n /* Given a complete set of lengths associated with VINFO, extract length number\n@@ -1455,10 +1456,7 @@ vect_get_len (vec_info *vinfo, slp_tree slp_node, gimple_stmt_iterator *gsi,\n     return vect_get_loop_len (loop_vinfo, gsi, &LOOP_VINFO_LENS (loop_vinfo),\n \t\t\t      nvectors, vectype, index, factor);\n   else\n-    {\n-      (void) slp_node; /* FORNOW */\n-      return NULL_TREE;\n-    }\n+    return vect_slp_get_bb_len (slp_node, nvectors, vectype, index, factor);\n }\n \n static tree permute_vec_elements (vec_info *, tree, tree, tree, stmt_vec_info,\n@@ -14527,24 +14525,35 @@ supportable_indirect_convert_operation (code_helper code,\n    mask[I] is true iff J + START_INDEX < END_INDEX for all J <= I.\n    Add the statements to SEQ.  */\n \n+void\n+vect_gen_while_ssa_name (gimple_seq *seq, tree mask_type, tree start_index,\n+\t\t\t tree end_index, tree ssa_name)\n+{\n+  tree cmp_type = TREE_TYPE (start_index);\n+  gcc_checking_assert (direct_internal_fn_supported_p (IFN_WHILE_ULT, cmp_type,\n+\t\t\t\t\t\t       mask_type,\n+\t\t\t\t\t\t       OPTIMIZE_FOR_SPEED));\n+  gcall *call\n+    = gimple_build_call_internal (IFN_WHILE_ULT, 3, start_index, end_index,\n+\t\t\t\t  build_zero_cst (mask_type));\n+  gimple_call_set_lhs (call, ssa_name);\n+  gimple_seq_add_stmt (seq, call);\n+}\n+\n+/*  Like vect_gen_while_ssa_name except that it creates a new SSA_NAME node\n+    for type MASK_TYPE defined in the created GIMPLE_CALL statement.  If NAME\n+    is not a null pointer then it is used for the SSA_NAME in dumps.  */\n+\n tree\n vect_gen_while (gimple_seq *seq, tree mask_type, tree start_index,\n \t\ttree end_index, const char *name)\n {\n-  tree cmp_type = TREE_TYPE (start_index);\n-  gcc_checking_assert (direct_internal_fn_supported_p (IFN_WHILE_ULT,\n-\t\t\t\t\t\t       cmp_type, mask_type,\n-\t\t\t\t\t\t       OPTIMIZE_FOR_SPEED));\n-  gcall *call = gimple_build_call_internal (IFN_WHILE_ULT, 3,\n-\t\t\t\t\t    start_index, end_index,\n-\t\t\t\t\t    build_zero_cst (mask_type));\n   tree tmp;\n   if (name)\n     tmp = make_temp_ssa_name (mask_type, NULL, name);\n   else\n     tmp = make_ssa_name (mask_type);\n-  gimple_call_set_lhs (call, tmp);\n-  gimple_seq_add_stmt (seq, call);\n+  vect_gen_while_ssa_name (seq, mask_type, start_index, end_index, tmp);\n   return tmp;\n }\n \ndiff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h\nindex 7dbae891ff0..a4337035417 100644\n--- a/gcc/tree-vectorizer.h\n+++ b/gcc/tree-vectorizer.h\n@@ -311,6 +311,13 @@ struct vect_load_store_data : vect_data {\n   bool subchain_p; // VMAT_STRIDED_SLP and VMAT_GATHER_SCATTER\n };\n \n+enum vect_partial_vector_style {\n+  vect_partial_vectors_none,\n+  vect_partial_vectors_while_ult,\n+  vect_partial_vectors_avx512,\n+  vect_partial_vectors_len\n+};\n+\n /* A computation tree of an SLP instance.  Each node corresponds to a group of\n    stmts to be packed in a SIMD stmt.  */\n struct _slp_tree {\n@@ -372,6 +379,13 @@ struct _slp_tree {\n   /* For BB vect, flag to indicate this load node should be vectorized\n      as to avoid STLF fails because of related stores.  */\n   bool avoid_stlf_fail;\n+  /* The style used for implementing partial vectors if LANES is less than\n+     the minimum number of lanes implied by the VECTYPE.  */\n+  vect_partial_vector_style partial_vector_style;\n+  /* Flag to indicate whether we still have the option of vectorizing this node\n+     using partial vectors (i.e.  using lengths or masks to prevent use of\n+     inactive scalar lanes).  */\n+  bool can_use_partial_vectors;\n \n   int vertex;\n \n@@ -470,6 +484,8 @@ public:\n #define SLP_TREE_GS_BASE(S)\t\t\t (S)->gs_base\n #define SLP_TREE_REDUC_IDX(S)\t\t\t (S)->cycle_info.reduc_idx\n #define SLP_TREE_PERMUTE_P(S)\t\t\t ((S)->code == VEC_PERM_EXPR)\n+#define SLP_TREE_PARTIAL_VECTORS_STYLE(S)\t (S)->partial_vector_style\n+#define SLP_TREE_CAN_USE_PARTIAL_VECTORS_P(S)    (S)->can_use_partial_vectors\n \n inline vect_memory_access_type\n SLP_TREE_MEMORY_ACCESS_TYPE (slp_tree node)\n@@ -480,13 +496,6 @@ SLP_TREE_MEMORY_ACCESS_TYPE (slp_tree node)\n   return VMAT_UNINITIALIZED;\n }\n \n-enum vect_partial_vector_style {\n-    vect_partial_vectors_none,\n-    vect_partial_vectors_while_ult,\n-    vect_partial_vectors_avx512,\n-    vect_partial_vectors_len\n-};\n-\n /* Key for map that records association between\n    scalar conditions and corresponding loop mask, and\n    is populated by vect_record_loop_mask.  */\n@@ -2583,6 +2592,7 @@ extern tree vect_gen_perm_mask_checked (tree, const vec_perm_indices &);\n extern void optimize_mask_stores (class loop*);\n extern tree vect_gen_while (gimple_seq *, tree, tree, tree,\n \t\t\t    const char * = nullptr);\n+extern void vect_gen_while_ssa_name (gimple_seq *, tree, tree, tree, tree);\n extern tree vect_gen_while_not (gimple_seq *, tree, tree, tree);\n extern opt_result vect_get_vector_types_for_stmt (vec_info *,\n \t\t\t\t\t\t  stmt_vec_info, tree *,\n@@ -2767,6 +2777,12 @@ extern slp_tree vect_create_new_slp_node (unsigned, tree_code);\n extern void vect_free_slp_tree (slp_tree);\n extern bool compatible_calls_p (gcall *, gcall *, bool);\n extern int vect_slp_child_index_for_operand (const gimple *, int op, bool);\n+extern void vect_slp_record_bb_mask (slp_tree slp_node);\n+extern tree vect_slp_get_bb_mask (slp_tree, gimple_stmt_iterator *,\n+\t\t\t\t  unsigned int, tree, unsigned int);\n+extern void vect_slp_record_bb_len (slp_tree slp_node);\n+extern tree vect_slp_get_bb_len (slp_tree, unsigned int, tree, unsigned int,\n+\t\t\t\t unsigned int);\n extern tree prepare_vec_mask (vec_info *, tree, tree, tree,\n \t\t\t      gimple_stmt_iterator *);\n extern tree vect_get_mask_load_else (int, tree);\n@@ -2931,7 +2947,7 @@ vect_cannot_use_partial_vectors (vec_info *vinfo, slp_tree slp_node)\n   if (loop_vinfo)\n     LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo) = false;\n   else\n-    (void) slp_node; /* FORNOW */\n+    SLP_TREE_CAN_USE_PARTIAL_VECTORS_P (slp_node) = false;\n }\n \n /* Return true if VINFO is vectorizer state for loop vectorization, we've\n@@ -2945,10 +2961,8 @@ vect_fully_with_length_p (vec_info *vinfo, slp_tree slp_node)\n   if (loop_vec_info loop_vinfo = dyn_cast<loop_vec_info> (vinfo))\n     return LOOP_VINFO_FULLY_WITH_LENGTH_P (loop_vinfo);\n   else\n-    {\n-      (void) slp_node; /* FORNOW */\n-      return false;\n-    }\n+    return SLP_TREE_PARTIAL_VECTORS_STYLE (slp_node)\n+\t   == vect_partial_vectors_len;\n }\n \n /* Return true if VINFO is vectorizer state for loop vectorization, we've\n@@ -2962,10 +2976,8 @@ vect_fully_masked_p (vec_info *vinfo, slp_tree slp_node)\n   if (loop_vec_info loop_vinfo = dyn_cast<loop_vec_info> (vinfo))\n     return LOOP_VINFO_FULLY_MASKED_P (loop_vinfo);\n   else\n-    {\n-      (void) slp_node; /* FORNOW */\n-      return false;\n-    }\n+    return SLP_TREE_PARTIAL_VECTORS_STYLE (slp_node)\n+\t   == vect_partial_vectors_while_ult;\n }\n \n /* If STMT_INFO describes a reduction, return the vect_reduction_type\n",
    "prefixes": [
        "v7",
        "02/10"
    ]
}