Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.0/patches/2175755/?format=api
{ "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" ] }