| Message ID | patch-20682-tamar@arm.com |
|---|---|
| State | Committed |
| Commit | 09021961ea027196cafca0d0308fd7c5e997bff8 |
| Headers |
Return-Path: <gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org> X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B28944BA2E3E for <patchwork@sourceware.org>; Tue, 7 Jul 2026 10:14:09 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B28944BA2E3E Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=MQKuTpb4; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=MQKuTpb4 X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011000.outbound.protection.outlook.com [52.101.70.0]) by sourceware.org (Postfix) with ESMTPS id 9A7444BA2E07 for <gcc-patches@gcc.gnu.org>; Tue, 7 Jul 2026 10:13:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9A7444BA2E07 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 9A7444BA2E07 Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=52.101.70.0 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1783419205; cv=pass; b=XfMTnRDGRsKE23F/Te/W1uarY7w5B5RL+AQp5Zy/T14BevEIEHH+Asll09jE4vHByM00rJGfxA/ecNAUonXvV7szEoErRwPq8Ikkzx3ciaULoXH4slEuBbf/hflSHxCYGwsBOWE7widzYaTgdLKYmsdxE8qDbVuiyGVV6ZJKknA= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1783419205; c=relaxed/simple; bh=JQB2HYpKD0M7qSoVTKE7dofCnV5lvIoZU3ed0xNMXAU=; h=DKIM-Signature:DKIM-Signature:Date:From:To:Subject:Message-ID: MIME-Version; b=RXkm1ZTNssS2NXKz7ikevQQrmjwbNUAiUvYZoid2GSi+pPhrj0ydpF57EVTq5LAGwEtT1QO9WhIW8yIWSAWH2g/Eu+8JF2Y3KpaAc8pLkTUl1N6AhyZ/J0QgveBXr1zBhhHnaNkgMRb/V3+crTMWp7NT2TZi+VJJOdbEdqAj0qo= ARC-Authentication-Results: i=3; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=MQKuTpb4; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=MQKuTpb4 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9A7444BA2E07 ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=JjtVNZ5SW2tbL3EbxwNMVM3mKjs/o/VK79DWUnV0AVBDRWEDIWi3zFsJl3XLBqFDT+aBjqbYr5nmXKlawd0znPJBkC68cId4v/sZXjjMgESBUMgz4fOPeIvX9LWSV0avAOtJeQ8NfKvkP8Qoh7gnA1KCzLg4/CdGPWwGAbmHD1g/U9ZXUsZBTLdD0R3XBzmENptAU3UcTPohgc69/30NepQipN70/UhfwmyswcOmW1G0EOBkA9w1R1JZl/lboHgfQiHO+ZHxTaiCIIz8Ie/C1xZ5y8uhNS16hTyscHap0YMtlq0vUopjgs1dPCBhP8h92N+xii0A5p5EGYFkB3TiBQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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; bh=+nbd1ZZxbv4AmF14ZxJUwfctT7plV3VM6XD6JkY9MfI=; b=IBmaDqytO4dfHXwmQ8RfkSaxsuE2ipPrkHKtIhpZm+ai9wV0btG2p+5rxaJtVWW4wVjglqcel5n0dPpF6Ua7x3lJ3/cwjtcbcD2gAzfb6L+sd6Nhsez8dHaNMvGkyvAeqtBGwgcQC2w7gzcmAoArxOe4DvEMYksKpy/JwGEXJMxbaV4I3bG/i372vz85YmzxGhJKCRXOud3U6dQVVKcytEjEo/FoaJMQ9QWJszdU5AH1hjQt6YR3kVLEdl2OXTksNXe1FqyT+LnD0Z3VbKBnGMP6q0rYqidP2veYcyqV2Vq36Q5gpGuR0QdmNtioRgviD12GOFWkkiD9RKQzYmBxFg== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+nbd1ZZxbv4AmF14ZxJUwfctT7plV3VM6XD6JkY9MfI=; b=MQKuTpb4U09qSQy6xuAG7JHkEPPt9rJCOGkdFelAywfInErqGh5GPj2iJ4jlmSABPlkoxmul92u79vavTOcm1c2suYBhnljskS7pb5Me/JNghgiRMYNlW41Nh1JmzO8YHaqsquS5r+JGuOl8xS9Dswpz1PV6YXbf0Xwuz970X4s= Received: from AS4P250CA0030.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:5e3::20) by DU2PR08MB10132.eurprd08.prod.outlook.com (2603:10a6:10:49a::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.8; Tue, 7 Jul 2026 10:13:20 +0000 Received: from AM4PEPF00027A69.eurprd04.prod.outlook.com (2603:10a6:20b:5e3:cafe::30) by AS4P250CA0030.outlook.office365.com (2603:10a6:20b:5e3::20) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.202.9 via Frontend Transport; Tue, 7 Jul 2026 10:13:20 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by AM4PEPF00027A69.mail.protection.outlook.com (10.167.16.87) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Tue, 7 Jul 2026 10:13:20 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=A1iYr60c42R5cx0O0CanF4/SikoD2DSlWTVjptmyEksS2OOuG6wEtDCjLtcqyLPgte1Ub3jj90URWHqwhxUiG/70l3tObKFjiNmfE3Zmx+c4MAM7DXa4iGLdItFozcjxU9uJgy5sH2+qN4BbT+UnPxe6jKZSIkbxUL/KAt6EenUjl/z7E3e78UTCYeBglyiYnE5jUqXk3SxQ35dqyLYE2nCrvmFgD1h0XQPaBW5by46DqO3e/ujJMjU50TDoBt1xwqL1K8rI3udPXtO/Vq79m4zIXyA22KeTewMvAMIQiDV7n6n9xCQF+ejxhq27f0zJjOa/1Y5G9p2NelHTzJrIkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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; bh=+nbd1ZZxbv4AmF14ZxJUwfctT7plV3VM6XD6JkY9MfI=; b=Zl7O6ajvKSMI3PjKBBe9g9T4krwrBnzZmlRDyu+CXcG/eumqsZey6U/CxYHyVgdYutyIExAJ3snplV//StQilqUEflt4HW6KYGC1lv/3peFV0Ny+2eTufHvEYYjyW97srxBiRW/hpIttumKDKxTxomGuwmVAHFi6aF399Mi83PiK9bVc60XCY8ErGbc0E1wqtCcF45TFTmD3rzWqy/PpR4NsCxveN8/VKvGsUyB70wi/Meu3CqpFERbtkTVyc6ubWeNucciaEHf8A4xGqo1aZXwEOM6zhiXtzlDQWfS9UD9O8iZ/WtyEDzr+KcnijtB9MkMywMzNV/Db+CxXPyDG7w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+nbd1ZZxbv4AmF14ZxJUwfctT7plV3VM6XD6JkY9MfI=; b=MQKuTpb4U09qSQy6xuAG7JHkEPPt9rJCOGkdFelAywfInErqGh5GPj2iJ4jlmSABPlkoxmul92u79vavTOcm1c2suYBhnljskS7pb5Me/JNghgiRMYNlW41Nh1JmzO8YHaqsquS5r+JGuOl8xS9Dswpz1PV6YXbf0Xwuz970X4s= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI0PR08MB10392.eurprd08.prod.outlook.com (2603:10a6:800:210::10) by AM8PR08MB5826.eurprd08.prod.outlook.com (2603:10a6:20b:1c6::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.13; Tue, 7 Jul 2026 10:12:17 +0000 Received: from VI0PR08MB10392.eurprd08.prod.outlook.com ([fe80::cd7c:e19a:2072:75cc]) by VI0PR08MB10392.eurprd08.prod.outlook.com ([fe80::cd7c:e19a:2072:75cc%4]) with mapi id 15.21.0181.009; Tue, 7 Jul 2026 10:12:16 +0000 Date: Tue, 7 Jul 2026 11:12:14 +0100 From: Tamar Christina <tamar.christina@arm.com> To: gcc-patches@gcc.gnu.org Cc: nd@arm.com, rguenther@suse.de, rdapp.gcc@gmail.com Subject: [patch][vect]: unshare header computation for more CSE Message-ID: <patch-20682-tamar@arm.com> Content-Type: multipart/mixed; boundary="JDQ3Z2pR4fhSchPQ" Content-Disposition: inline X-ClientProxiedBy: LO4P123CA0548.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:319::11) To VI0PR08MB10392.eurprd08.prod.outlook.com (2603:10a6:800:210::10) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI0PR08MB10392:EE_|AM8PR08MB5826:EE_|AM4PEPF00027A69:EE_|DU2PR08MB10132:EE_ X-MS-Office365-Filtering-Correlation-Id: 1ae52527-8492-47f0-e369-08dedc105f25 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|366016|376014|1800799024|6049299003|23010399003|6133799003|56012099006|18002099003|11063799006|3023799007|4053099003; X-Microsoft-Antispam-Message-Info-Original: Ra32QUd8ul5pJjni2qlW+2DBoFcUnzyaJ49rYGL1fCi7rhpITQzdthUN/bb4EjN8V9NoNiNPhlS9yGNyzqwiTDjekyEVGQauCriNbxrJocbaenQtgU3n1GjBOczK+ou7qLqO6RJchuigmK2+FBO2zM0v9gZemVsWpBbAhxrbZ3X4WJUTEs1AZWhu1AVJmzo79ywidNk9c6UYyfAFZHOVMzek7U32+Ctvley6KUyDbJgZY498ONhBW/n3OwW7JbNgokgVCtYh6B54/JlQqQD4UwC1oeKx8MAwLckK8U6n85KWeV2bmXZqScT2ZEOS1tiQ4VQMwjoJQMzdo3ZNGC5PC1W9UlMRgYfsnT3itrqiZxjJz54hevycqxrHzyLNk6pOFlFvl9QLlavhGl7/l+9ROwFGO+CQXY7dr27Gma60tGU/iC+yMXeBCtS0Htdzm7SPdjG/5CT56D1WL0Xrspjtdah8Ne89KEQMjf0zuFnaGLVgeZZz6qRtMGvhkDCd57hAPDAodIFWSGDHIkN0zYj+PHjYTc9XuhvLD9KYwrXWUFIRLW+HYFn9VRCjWQY+EvWFl2d01XxAhFRu3u+4TNqmUPxPk6j+MlMqOiGxMXAIOUtYnFQjbGuow0F67/1tsHNs X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI0PR08MB10392.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(6049299003)(23010399003)(6133799003)(56012099006)(18002099003)(11063799006)(3023799007)(4053099003); DIR:OUT; SFP:1101; X-Exchange-RoutingPolicyChecked: XrWjIuXNlIuPkhvi7v17H6ozSqE3DqOSDElwKY/7+Rl9fL4wg2EUfCM7FimJh23zA3QSw2wbfxavfKZPVt7uVk82p/D4TWbbUdb6vQ17fbMXvCPygkZBlL1lMkK9QrBtyimWwMdjlrC96sJBYYneSwrVEgbNfmJWciSDhPSotP82UYExLZwtst1hm89UJQSXYyq1MuDU2Pina2CBEDblHnWpiTSxn1TZt0wBr2Tbt9irCRTgNEialEb9dmY/3yGpXc40H+HkG9xi8/YU7k/DNe2xIswzv+UO0VwUVPCbh4tPh0wsrbdyNem0UOscd3yq+d8zeeq7t+9OBZTawhBSYQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB5826 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM4PEPF00027A69.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 8751007c-6340-451e-1869-08dedc1038d5 X-Microsoft-Antispam: BCL:0; ARA:13230040|23010399003|36860700016|1800799024|376014|6049299003|82310400026|14060799003|35042699022|18002099003|3023799007|6133799003|11063799006|56012099006|4053099003; X-Microsoft-Antispam-Message-Info: geWGXQlABujHqd+BGccVNIYs/fHjz7an/vsJjXFh18L8XcC/torfORnlPIb418p9kYEEJLOXMNC0eMeTAKrTxPWmytVmGNGcSV6dKN75JQ5yLUdLMfz/kay4n7dvBY/XEw867eV5zdEpMIFRQOWXf9FX1fw6Py3rO2d1GuP2emkfRAV/PJgLrcsmqHIJjw0TgRCItfrc+B8cfJRCYGWdE1gtMXVDAuno1OufR8aDd8IOW9wVMykXoSyeI16UJxFJJwBoOHGelJolQHzLNbNug/1sbhksd5ZJ3DOaQuaoL8cRcuMU1iD4BSb/LkCc3LXYKKEc5iQtpEkq7vZxQKQsGheAD0jQMxYdy51gFUcFg6bO3krbsHRPH+fjHRNpvSYDhN/aN2CRjWbZJKoE06YI7u+XMOIvuHVENSJdBkrnwtIf0fJWVRwx4nXyXbc8aYOLiVyFp1FFQ+grQMP+PL9BkZhApjsTXXwr4YJeJREqm+xZ2+XV/SLiNKIu5STS4+G5Ov1RX/vdIzSuaywJPxcFwz0VzUE/YGWQU53UCA6SZOMCynmGip22PN3XUqXKKRdxbgPa03Y+4VCjztbvd3k/r035q8k75mUqNUvnBI8u5KESbN2W0WDJDoNH3/jBftTwNML7Vs/QerOlwEF7LQ6IIpH7er4dLNjXtaao8xlwyO0= X-Forefront-Antispam-Report: CIP:4.158.2.129; CTRY:GB; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:outbound-uk1.az.dlp.m.darktrace.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(23010399003)(36860700016)(1800799024)(376014)(6049299003)(82310400026)(14060799003)(35042699022)(18002099003)(3023799007)(6133799003)(11063799006)(56012099006)(4053099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XxuULKgmhk4WcBYkAaXTEuBz21B9GWuK8QXwKKRe3QWmk5WaWpYdMXaOhc7W2xebdjeaw9nwBLu8LLTYcnfuN+66m3tUN4UCG5b3CK07VXmDUicFzHexqe81yxeogcIuaMBDXDokiQRzXjbDeMk1NOYT8qwuaeh6fWab5/hO/4Sb3Cthix4JSiTonUb5Px1+dCKYOXfPj2ftTzGvgNYC9NB3mxwan+fR96sGM9ByINyZQ8Ok0M3yvtTrF3u4D8sI5vR8afvx1zQTP1BiCcuR/pBg4/bDOSXked0he3i/UiLPeVyBR+c67QDrThlTUorquI+5nv1ft5OqUcgMvp+lJRKuhi+KtvYZqliFkFMS3g9pfHvpH3mtlyhCbfvkS7ENhxs2Pi8G+fqfaaAbXzPuoY1nVSOgQvw7kEe/YlhqK6mEX+pxRUn9PyTGyNGB/OWY X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2026 10:13:20.6122 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1ae52527-8492-47f0-e369-08dedc105f25 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[4.158.2.129]; Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: AM4PEPF00027A69.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR08MB10132 X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, GIT_PATCH_0, KAM_LOTSOFHASH, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SCC_5_SHORT_WORD_LINES, SPF_HELO_PASS, SPF_NONE, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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>, <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>, <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe> Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org |
| Series |
[vect] : unshare header computation for more CSE
|
|
Checks
| Context | Check | Description |
|---|---|---|
| linaro-tcwg-bot/tcwg_gcc_build--master-arm | success | Build passed |
| linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 | success | Build passed |
Commit Message
Tamar Christina
July 7, 2026, 10:12 a.m. UTC
The example loop
#define N 512
#define START 1
#define END 505
int x[N] __attribute__((aligned(32)));
int __attribute__((noipa))
foo (void)
{
for (int *p = x + START; p < x + END; ++p)
if (*p == 0)
return START;
return -1;
}
shows that when we vectorize we generate the following pre-header when doing
peeling for alignment:
_22 = (unsigned long) &MEM <int[512]> [(void *)&x + 4B];
_23 = _22 & POLY_INT_CST [15, 16];
_24 = _23 >> 2;
_26 = 1 - _24;
_27 = _26 * 4;
vectp_x.6_25 = &x + _27;
_36 = 504 + _24;
max_mask_37 = .WHILE_ULT (0, _36, { 0, ... });
_38 = .WHILE_ULT (0, _24, { 0, ... });
_39 = ~_38;
_40 = max_mask_37 & _39;
notice how _22 and and the actual vector pointer vectp_x.6_25 start at the
same offset but have a different base. This happens because in
vect_create_addr_base_for_vector_ref we fold the offset into the base very
early and so we can't form or share the address computation anymore with the
scalar address which needs to be there for the alignment checks.
The patch delays this and forms an explicit base + offset and keeping base as
a separate value. This allows VN at the end of vect to share the computations
and we get
_22 = (unsigned long) &MEM <int[512]> [(void *)&x + 4B];
_23 = _22 & POLY_INT_CST [15, 16];
_24 = _23 >> 2;
_27 = _24 * 4;
_28 = -_27;
vectp_x.6_26 = &MEM <int[512]> [(void *)&x + 4B] + _28;
_37 = 504 + _24;
max_mask_38 = .WHILE_ULT (0, _37, { 0, ... });
_39 = .WHILE_ULT (0, _24, { 0, ... });
_40 = ~_39;
_41 = max_mask_38 & _40;
Notice how they now share the same base address. This drops two instructions
off the loop pre-header:
from
foo:
cntb x0
sub x3, x0, #1
cmp x0, 4096
and x0, x0, x3
ccmp x0, 0, 0, ls
bne .L7
adrp x4, .LANCHOR0
add x4, x4, :lo12:.LANCHOR0
add x1, x4, 4
mov w2, 1
and x1, x1, x3
mov w0, 0
cntw x3
lsr x1, x1, 2
whilelo p15.s, xzr, x1
sub x2, x2, x1
add x1, x1, 504
whilelo p7.s, xzr, x1
not p7.b, p7/z, p15.b
add x2, x4, x2, lsl 2
b .L4
to
foo:
cntb x0
sub x1, x0, #1
cmp x0, 4096
and x0, x0, x1
adrp x2, .LANCHOR0
ccmp x0, 0, 0, ls
add x2, x2, :lo12:.LANCHOR0
bne .L7
add x2, x2, 4
mov w0, 0
and x1, x2, x1
cntw x3
sub x2, x2, x1
lsr x1, x1, 2
whilelo p15.s, xzr, x1
add x1, x1, 504
whilelo p7.s, xzr, x1
not p7.b, p7/z, p15.b
b .L4
Bootstrapped Regtested on aarch64-none-linux-gnu,
arm-none-linux-gnueabihf, x86_64-pc-linux-gnu
-m32, -m64 and no issues.
Any feedback?
Thanks,
Tamar
gcc/ChangeLog:
* tree-vect-data-refs.cc (vect_create_addr_base_for_vector_ref):
Restructure computations to force separate base.
gcc/testsuite/ChangeLog:
* gcc.target/aarch64/sve/vect-early-break-cbranch_18.c: New test.
---
--
Comments
On Tue, 7 Jul 2026, Tamar Christina wrote: > The example loop > > #define N 512 > #define START 1 > #define END 505 > > int x[N] __attribute__((aligned(32))); > > int __attribute__((noipa)) > foo (void) > { > for (int *p = x + START; p < x + END; ++p) > if (*p == 0) > return START; > > return -1; > } > > shows that when we vectorize we generate the following pre-header when doing > peeling for alignment: > > _22 = (unsigned long) &MEM <int[512]> [(void *)&x + 4B]; > _23 = _22 & POLY_INT_CST [15, 16]; > _24 = _23 >> 2; > _26 = 1 - _24; > _27 = _26 * 4; > vectp_x.6_25 = &x + _27; > _36 = 504 + _24; > max_mask_37 = .WHILE_ULT (0, _36, { 0, ... }); > _38 = .WHILE_ULT (0, _24, { 0, ... }); > _39 = ~_38; > _40 = max_mask_37 & _39; > > notice how _22 and and the actual vector pointer vectp_x.6_25 start at the > same offset but have a different base. This happens because in > vect_create_addr_base_for_vector_ref we fold the offset into the base very > early and so we can't form or share the address computation anymore with the > scalar address which needs to be there for the alignment checks. > > The patch delays this and forms an explicit base + offset and keeping base as > a separate value. This allows VN at the end of vect to share the computations > and we get > > _22 = (unsigned long) &MEM <int[512]> [(void *)&x + 4B]; > _23 = _22 & POLY_INT_CST [15, 16]; > _24 = _23 >> 2; > _27 = _24 * 4; > _28 = -_27; > vectp_x.6_26 = &MEM <int[512]> [(void *)&x + 4B] + _28; > _37 = 504 + _24; > max_mask_38 = .WHILE_ULT (0, _37, { 0, ... }); > _39 = .WHILE_ULT (0, _24, { 0, ... }); > _40 = ~_39; > _41 = max_mask_38 & _40; > > Notice how they now share the same base address. This drops two instructions > off the loop pre-header: > > from > > foo: > cntb x0 > sub x3, x0, #1 > cmp x0, 4096 > and x0, x0, x3 > ccmp x0, 0, 0, ls > bne .L7 > adrp x4, .LANCHOR0 > add x4, x4, :lo12:.LANCHOR0 > add x1, x4, 4 > mov w2, 1 > and x1, x1, x3 > mov w0, 0 > cntw x3 > lsr x1, x1, 2 > whilelo p15.s, xzr, x1 > sub x2, x2, x1 > add x1, x1, 504 > whilelo p7.s, xzr, x1 > not p7.b, p7/z, p15.b > add x2, x4, x2, lsl 2 > b .L4 > > to > > foo: > cntb x0 > sub x1, x0, #1 > cmp x0, 4096 > and x0, x0, x1 > adrp x2, .LANCHOR0 > ccmp x0, 0, 0, ls > add x2, x2, :lo12:.LANCHOR0 > bne .L7 > add x2, x2, 4 > mov w0, 0 > and x1, x2, x1 > cntw x3 > sub x2, x2, x1 > lsr x1, x1, 2 > whilelo p15.s, xzr, x1 > add x1, x1, 504 > whilelo p7.s, xzr, x1 > not p7.b, p7/z, p15.b > b .L4 > > Bootstrapped Regtested on aarch64-none-linux-gnu, > arm-none-linux-gnueabihf, x86_64-pc-linux-gnu > -m32, -m64 and no issues. > > Any feedback? OK. Richard. > Thanks, > Tamar > > gcc/ChangeLog: > > * tree-vect-data-refs.cc (vect_create_addr_base_for_vector_ref): > Restructure computations to force separate base. > > gcc/testsuite/ChangeLog: > > * gcc.target/aarch64/sve/vect-early-break-cbranch_18.c: New test. > > --- > diff --git a/gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_18.c b/gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_18.c > new file mode 100644 > index 0000000000000000000000000000000000000000..9129f82cffe5e0028bbd6b7f0a9ae434388331e3 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_18.c > @@ -0,0 +1,22 @@ > +/* { dg-do compile } */ > +/* { dg-options "-Ofast -msve-vector-bits=256 -mautovec-preference=sve-only -fdump-tree-vect-details" } */ > + > +#define N 512 > +#define START 1 > +#define END 505 > + > +int x[N] __attribute__((aligned(32))); > + > +int __attribute__((noipa)) > +foo (void) > +{ > + for (int *p = x + START; p < x + END; ++p) > + if (*p == 0) > + return START; > + > + return -1; > +} > + > +/* { dg-final { scan-tree-dump "Alignment of access forced using peeling" "vect" } } */ > +/* { dg-final { scan-tree-dump-times {Value numbering stmt = vectp_x\.[0-9]+_[0-9]+ = &x \+ 4;} 1 "vect" } } */ > +/* { dg-final { scan-tree-dump-times {Value numbering stmt = vectp_x\.[0-9]+_[0-9]+ = vectp_x\.[0-9]+_[0-9]+ \+ 18446744073709551612;} 1 "vect" } } */ > diff --git a/gcc/tree-vect-data-refs.cc b/gcc/tree-vect-data-refs.cc > index ab850de024bf41ea7635ce7381bcc6acd8fe0c28..8c71865aa0b1c2db7f0b0167dc7ed1db6c6da260 100644 > --- a/gcc/tree-vect-data-refs.cc > +++ b/gcc/tree-vect-data-refs.cc > @@ -5729,7 +5729,13 @@ vect_create_addr_base_for_vector_ref (vec_info *vinfo, stmt_vec_info stmt_info, > innermost_loop_behavior *drb = vect_dr_behavior (vinfo, dr_info); > > tree data_ref_base = unshare_expr (drb->base_address); > - tree base_offset = unshare_expr (get_dr_vinfo_offset (vinfo, dr_info, true)); > + tree vector_offset = NULL_TREE; > + if (loop_vinfo && dr_info->offset) > + vector_offset = unshare_expr (dr_info->offset); > + tree base_offset = unshare_expr (vector_offset > + ? drb->offset > + : get_dr_vinfo_offset (vinfo, dr_info, > + true)); > tree init = unshare_expr (drb->init); > > if (loop_vinfo) > @@ -5767,7 +5773,27 @@ vect_create_addr_base_for_vector_ref (vec_info *vinfo, stmt_vec_info stmt_info, > > vect_ptr_type = build_pointer_type (TREE_TYPE (DR_REF (dr))); > dest = vect_get_new_vect_var (vect_ptr_type, vect_pointer_var, base_name); > - addr_base = force_gimple_operand (addr_base, &seq, true, dest); > + > + /* Keep vectorizer-added offsets separate from the original scalar access > + address. Forming "base + scalar offset" first gives the target a better > + chance of sharing it with other address calculations, such as the > + misalignment check used for masked alignment peeling. */ > + if (vector_offset) > + { > + tree scalar_dest = vect_get_new_vect_var (vect_ptr_type, > + vect_pointer_var, base_name); > + gimple_seq addr_seq = NULL; > + addr_base = force_gimple_operand (addr_base, &addr_seq, true, > + scalar_dest); > + gimple_seq_add_seq (&seq, addr_seq); > + addr_base = fold_build_pointer_plus (addr_base, > + fold_convert (sizetype, > + vector_offset)); > + } > + > + gimple_seq addr_seq = NULL; > + addr_base = force_gimple_operand (addr_base, &addr_seq, true, dest); > + gimple_seq_add_seq (&seq, addr_seq); > gimple_seq_add_seq (new_stmt_list, seq); > > if (TREE_CODE (addr_base) == SSA_NAME > > >
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_18.c b/gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_18.c new file mode 100644 index 0000000000000000000000000000000000000000..9129f82cffe5e0028bbd6b7f0a9ae434388331e3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_18.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-Ofast -msve-vector-bits=256 -mautovec-preference=sve-only -fdump-tree-vect-details" } */ + +#define N 512 +#define START 1 +#define END 505 + +int x[N] __attribute__((aligned(32))); + +int __attribute__((noipa)) +foo (void) +{ + for (int *p = x + START; p < x + END; ++p) + if (*p == 0) + return START; + + return -1; +} + +/* { dg-final { scan-tree-dump "Alignment of access forced using peeling" "vect" } } */ +/* { dg-final { scan-tree-dump-times {Value numbering stmt = vectp_x\.[0-9]+_[0-9]+ = &x \+ 4;} 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times {Value numbering stmt = vectp_x\.[0-9]+_[0-9]+ = vectp_x\.[0-9]+_[0-9]+ \+ 18446744073709551612;} 1 "vect" } } */ diff --git a/gcc/tree-vect-data-refs.cc b/gcc/tree-vect-data-refs.cc index ab850de024bf41ea7635ce7381bcc6acd8fe0c28..8c71865aa0b1c2db7f0b0167dc7ed1db6c6da260 100644 --- a/gcc/tree-vect-data-refs.cc +++ b/gcc/tree-vect-data-refs.cc @@ -5729,7 +5729,13 @@ vect_create_addr_base_for_vector_ref (vec_info *vinfo, stmt_vec_info stmt_info, innermost_loop_behavior *drb = vect_dr_behavior (vinfo, dr_info); tree data_ref_base = unshare_expr (drb->base_address); - tree base_offset = unshare_expr (get_dr_vinfo_offset (vinfo, dr_info, true)); + tree vector_offset = NULL_TREE; + if (loop_vinfo && dr_info->offset) + vector_offset = unshare_expr (dr_info->offset); + tree base_offset = unshare_expr (vector_offset + ? drb->offset + : get_dr_vinfo_offset (vinfo, dr_info, + true)); tree init = unshare_expr (drb->init); if (loop_vinfo) @@ -5767,7 +5773,27 @@ vect_create_addr_base_for_vector_ref (vec_info *vinfo, stmt_vec_info stmt_info, vect_ptr_type = build_pointer_type (TREE_TYPE (DR_REF (dr))); dest = vect_get_new_vect_var (vect_ptr_type, vect_pointer_var, base_name); - addr_base = force_gimple_operand (addr_base, &seq, true, dest); + + /* Keep vectorizer-added offsets separate from the original scalar access + address. Forming "base + scalar offset" first gives the target a better + chance of sharing it with other address calculations, such as the + misalignment check used for masked alignment peeling. */ + if (vector_offset) + { + tree scalar_dest = vect_get_new_vect_var (vect_ptr_type, + vect_pointer_var, base_name); + gimple_seq addr_seq = NULL; + addr_base = force_gimple_operand (addr_base, &addr_seq, true, + scalar_dest); + gimple_seq_add_seq (&seq, addr_seq); + addr_base = fold_build_pointer_plus (addr_base, + fold_convert (sizetype, + vector_offset)); + } + + gimple_seq addr_seq = NULL; + addr_base = force_gimple_operand (addr_base, &addr_seq, true, dest); + gimple_seq_add_seq (&seq, addr_seq); gimple_seq_add_seq (new_stmt_list, seq); if (TREE_CODE (addr_base) == SSA_NAME