From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2050.outbound.protection.outlook.com [40.107.8.50]) by sourceware.org (Postfix) with ESMTPS id 85C283858D37 for ; Mon, 20 Nov 2023 21:54:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 85C283858D37 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 85C283858D37 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.8.50 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1700517285; cv=pass; b=Ve4D5iB263V5s+m5xSgPyMEu3ErgtCCmG5mIkzVQH3hRZCRKACW7fLudy7uDUM8kEooUM5oRW7AdMtm8V9jlyumdXTWOyss3wzZVWZrUIEH41GDflfnwx+XQqyIe619+B7zLloLnXL/lD2IyPjWBF5EwIlkWlheXNhiMz6f2HvA= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1700517285; c=relaxed/simple; bh=UnDzvMKRiJh/FCHIwBfzhyu5mpnl38cQPzh+vgOKC6g=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=GlBYtliNcWxczD4n2Km9z3Zw/lISNwm0gzsyTCKP8iS13PdyLh4/R5pjnM0AACwkKftcVRxEwHlsO4SCsBq0T5b85HaotY1mhsC3GP144+bz9uiPK1jBhsu3z6c7Qi9SXfWKSdD4wvsOFFe3lx3xFCAb4ENTCQzSHkfkGANtjiA= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=OEdKoYxV/hgC9g2Lf+I4pnOF6CSzwMxRLVDw+CrDnAAyrZ5EYAN3V5oq0oubwmLZHERAvJk0Qm3XQq6k9T0yl0L96522UvBOTDNiPE+3wnqEsfZFtaSRkPHiRTTM1fqQpP/42641LYzHxCTSDOTXXJHA6Lp67+d3O56vNupAwucmW3jibWFi3f+YmGBhbgB0FY1ekm365kIHZVTRPfuUPycHqENZKRq26uER3tQbD+Pe803GyyKTmE7pgd5C6DjJbdpB9QThXXiTCaQUeKhZKaKoFMg0CIcxVJAbOITzlmeWles/U8FHdsXKvQ1BmTmorZgATIiGrE+CIjxReX5Nfg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=zVdmHLpgzoxxRkew6sTH9N5HyFNLwrwQajhhFYM84FY=; b=og1Q+1A8PwPlk1BrlvwAud32zFWBu/WeuTe22/K2wXwGkv1t4jS4n9YDo569BMwyAa5yVlUn6VWPzdMV/BKmKMsdPeBghvFBTtrQpoKbVypxdyaRHOE38k7p0TRhZGfM9Dhc3kUaCHDmMiVcvJBxmkRVx+momi+VoG/xASaCPa9G1QlMu6INQnz/FdrNUeI7BLz8WYpYNp37iqMjAdOtHphSvwyLq8z6RvZM9bRkBM48EZEYmF0PpVOmNX/e9A8FqHEHiAEZTTldoOyyxcglWaFo5lfINkLgoEewSFADCfNCVj2kNbqps21DQq4W4ohaj5/tTgxnB9xOvU7b1SONjw== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) 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=armh.onmicrosoft.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=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zVdmHLpgzoxxRkew6sTH9N5HyFNLwrwQajhhFYM84FY=; b=pz63gJIRaEXiWVEfmz356XoYugfDKxfxgjeUG1NskKOqvIckVrqBwAhqhbB+fIlP3ru0FyAopfs2eD7DjdnipXAoqpcTB0yBXE7CfhhjTYWA+dSZZtnjoM4MSH6bVmVuXBUveJtb2gR4k9gup8kHhm56r0Lg+a0Txl158AkNE1k= Received: from AS8P251CA0004.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:2f2::21) by DB9PR08MB8410.eurprd08.prod.outlook.com (2603:10a6:10:3d6::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7002.26; Mon, 20 Nov 2023 21:54:35 +0000 Received: from AM2PEPF0001C712.eurprd05.prod.outlook.com (2603:10a6:20b:2f2:cafe::5e) by AS8P251CA0004.outlook.office365.com (2603:10a6:20b:2f2::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7002.28 via Frontend Transport; Mon, 20 Nov 2023 21:54:35 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM2PEPF0001C712.mail.protection.outlook.com (10.167.16.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7025.12 via Frontend Transport; Mon, 20 Nov 2023 21:54:35 +0000 Received: ("Tessian outbound 8289ea11ec17:v228"); Mon, 20 Nov 2023 21:54:35 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 0c8a8079db82f5ae X-CR-MTA-TID: 64aa7808 Received: from 1162ebc7f055.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id CC93F950-A124-44C3-84B2-BC2CEDD9EE9D.1; Mon, 20 Nov 2023 21:54:28 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 1162ebc7f055.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Mon, 20 Nov 2023 21:54:28 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fQSqQqfrJcUIFxX6nmby/THnY8zFSSB29Y1QEAj61hVffxoFHHlRkp/Thiy3uYF/aRSAJfZ5ZMRgstYJ8qI9Yp0+Bl3JSA08nSUQjf6YzeoJbuiEQvCxoadslLOwGURoRbgRVNLKlLTV+98guJXggzlXqS54ugwAUyAvFVkoJpFpTHD1FStxb+9mJweTbT08URnJDdydEIPvNNBlU6ybl+FgZ3Opu95OggdfjQ4/Rh+z9osFsIH1T+UDKFivAmIgt3CbFxF7P3UfKZEwB4TfzGoiEcQ0DCx94rVGlGWMcfPF2dKiD1+/9fxgmaig7NjU4aB4SQtC740Wj6pQYw7WOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=zVdmHLpgzoxxRkew6sTH9N5HyFNLwrwQajhhFYM84FY=; b=QAuHZspmWWbBRyi/TQ8zRbwDMDTDVPVUKiQUA3kzvG08AJ5GwK6ugg6RHEHIWQV2JoJTtUFWhWDIITJjULsM6TZT4IWjH9AONPAo6L5kKGtvVA+ZqaGiQA0e4lo/2fbYhj477k5mPvwGJzlL1cL5JVUNrOsMrQUlGA1+kXm+rh41IM7AZ9zXbIheSe3eP89JCD/Sjsc24SSc7MaIN0lz7zsiPAm5sBWXqYV1ktDegOo/VRrgR6fhVELWkOWwkAKtLUyta9PhgrQvGTTe1xQRmEVnXkvMee8ppuDuyaRTw4xooqLE18Dw0iQvr74q8yeUg5L4oj69cR5XMv7ykrYZTA== 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=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zVdmHLpgzoxxRkew6sTH9N5HyFNLwrwQajhhFYM84FY=; b=pz63gJIRaEXiWVEfmz356XoYugfDKxfxgjeUG1NskKOqvIckVrqBwAhqhbB+fIlP3ru0FyAopfs2eD7DjdnipXAoqpcTB0yBXE7CfhhjTYWA+dSZZtnjoM4MSH6bVmVuXBUveJtb2gR4k9gup8kHhm56r0Lg+a0Txl158AkNE1k= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by GV2PR08MB8097.eurprd08.prod.outlook.com (2603:10a6:150:75::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7002.26; Mon, 20 Nov 2023 21:54:26 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::9679:2ab0:99c6:54a3]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::9679:2ab0:99c6:54a3%6]) with mapi id 15.20.7002.028; Mon, 20 Nov 2023 21:54:26 +0000 From: Tamar Christina To: Richard Biener CC: "gcc-patches@gcc.gnu.org" , nd , "jlaw@ventanamicro.com" Subject: RE: [PATCH 7/21]middle-end: update IV update code to support early breaks and arbitrary exits Thread-Topic: [PATCH 7/21]middle-end: update IV update code to support early breaks and arbitrary exits Thread-Index: AQHaEIRUWLSyh++pSEG+iB4lA+c+BLB6jLQwgADZ7QCAAAD4UIAABQiAgAALGkCAAVnUgIAAAkUAgAAK9ACAAAX/4IAAC6cAgAACTBCAAA/GgIAACPOwgAAC2ICAAA3PkIAAN+aQgAENK8CAAByrgIAFWK8A Date: Mon, 20 Nov 2023 21:54:26 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|GV2PR08MB8097:EE_|AM2PEPF0001C712:EE_|DB9PR08MB8410:EE_ X-MS-Office365-Filtering-Correlation-Id: a9c5a027-a6d3-4f8c-3e6a-08dbea134916 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: rzDETD1ivvbAdKpHqgGSBb+sX1xDxwLe+WhiW5OacPQkWXms2TfYpZQZg+41/qi2KjWT32IOVjBZ5ZW4Z0EDrYU0MNHUkK8peqJYbeS0Ba/N6o8ygw5rhK/f8D/uU/E1qL6XOxget09691wsLApV2gSIv9trR5PhGHBlexxZinufwpfWkc6MhNpd4N23RqmEXWxyacdXmarV/8mCgUtp/piXX1BmZv7Ak+pKvdIxRrCVBK+wWXvSfuaViCQDNHRamvReNPJTlb1l26cfBFTNMqg++MdEB/YRtqxuHTNAQV6XGJu1o+tA8RVlQEHR9DZKP/IMAjpQcomBtrU3EXKW0fWfqFfX8FxtPm7RzrZLwxQuaQth6g1fevhg02U3D2T18lW9p8l/zBTNiV1HHbXUOoJ2qPZ1zsHFSRuguhi0Zl5lpHmOXZV6EZuX5lrE0biJx00BF0RSANTUScaXM2rHajcddz7JM8SD6OS2TZnu2uWg/dvnpNLDmkWiNjTTzMHrnrI2vda4PA14ObWYBvdecxgswXfXoil9bRr5RHnTEvZIZhMx4/ZMthwcfsD+mTCuruJPtxwcF5fsTzgGOp/ypNXFOK4On6oHPauQMPpq6Ll0v/CZnO2oTRRWpmpdOSY7 X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB5325.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39860400002)(396003)(366004)(376002)(346002)(136003)(230922051799003)(64100799003)(451199024)(1800799012)(186009)(2906002)(55016003)(41300700001)(8936002)(4326008)(8676002)(52536014)(15650500001)(5660300002)(66476007)(66556008)(64756008)(66946007)(316002)(6916009)(66446008)(54906003)(76116006)(122000001)(99936003)(38100700002)(9686003)(6506007)(7696005)(71200400001)(86362001)(478600001)(38070700009)(83380400001)(33656002)(26005);DIR:OUT;SFP:1101; Content-Type: multipart/mixed; boundary="_002_VI1PR08MB532523DE52774A7F51B8BB65FFB4AVI1PR08MB5325eurp_" MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB8097 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM2PEPF0001C712.eurprd05.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 53894fe1-0c01-40d0-5802-08dbea13439a X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0KzAhMbflagbIn3P5V5B5MH/MY/xbybQjHYS8upWptLY6r6BNzQSQ9sDhMaPE5/6r7oNZGX78P3ihtEp1tAUQRgjnqYf9m8nztgeLyyTKN6g/liyDi7JQnBw6a/xBubh3ScJXPyh7pYwAsDCKdzKFDhs9fkiaMy9I2xkunH4SPfIS+vkudtA+Awk+e6e9nspZK1uY/n5eHW1X/mWaE3LvbonzB+vNAfpoAPwhBrt53U3Cr17m12Fjs3AWzObUsbO90HE7rTcMgkRuiZXLbCxPO2G41/7S/dhcIqlFnQiw/WsZ+W4Dd36yc+mu+Ovq0XZSQVMQyLnYp+LFmNLZkZUc3u28E0uod6aeqC9+JEC90viyvJo8KsT2X9x7nMJsMR0n/sgGqhF/LJW+VY54iZE1ZoxMp9FBGJA0rTi7rs4Ga4KjK1ItY57umel/JaaUA3BRHo3aDR6Iah5oLM6QrbBA1BkCAsDgi2CBglMqhwpIrzx8Qxn3DSqKIbvm+76o6HOIaapWJ8A1zfuZBgqj48+Olv2kA00Hxtb7vi31hDevRfD0/5NKqKW9g8YXKw9qJh6mI4zYspRuzm6BdjGl9jhMUB1nq+o8XRr46Z8AnjyXMIfWwi7Mdlf5xk+CwZiSTPZPBmpo7xUgb7BcJafqpJMyqO0L2IlxcjPI5pMFjNsOZONJEglECJ1tFqptlkolPDRI1X3TKqaYHQYKfZDOyw14iFSjrv20ZlsU7RzvrTmQ0U8qOmicvZNbg7NBQsfYvX1 X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230031)(4636009)(376002)(346002)(396003)(136003)(39860400002)(230922051799003)(451199024)(186009)(64100799003)(82310400011)(1800799012)(40470700004)(46966006)(36840700001)(82740400003)(83380400001)(336012)(86362001)(33656002)(40460700003)(36860700001)(81166007)(47076005)(99936003)(356005)(70206006)(41300700001)(70586007)(54906003)(8676002)(6862004)(52536014)(316002)(8936002)(4326008)(55016003)(15650500001)(5660300002)(235185007)(2906002)(9686003)(40480700001)(6506007)(7696005)(107886003)(26005)(478600001);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Nov 2023 21:54:35.3748 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a9c5a027-a6d3-4f8c-3e6a-08dbea134916 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM2PEPF0001C712.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB8410 X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --_002_VI1PR08MB532523DE52774A7F51B8BB65FFB4AVI1PR08MB5325eurp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable > > > > Ok, so I currently have the following solution. Let me know if you > > agree with it and I'll polish it up today and tomorrow and respin thing= s. > > > > 1. During vect_update_ivs_after_vectorizer we no longer touch any PHIs > aside from > > Just updating IVtemps with the expected remaining iteration count. >=20 > OK >=20 > > 2. During vect_transform_loop after vectorizing any induction or reduct= ion I > call vectorizable_live_operation > > For any phi node that still has any usages in the early exit merge= block. >=20 > OK, I suppose you need to amend the vectorizable_live_operation API to te= ll it > it works for the early exits or the main exit (and not complain when > !STMT_VINFO_LIVE_P for the early exit case). >=20 > > 3. vectorizable_live_operation is taught to have to materialize the > > same PHI in multiple exits >=20 > For the main exit you'd get here via STMT_VINFO_LIVE_P handling and > vect_update_ivs_after_vectorizer would handle the rest. For the early ex= its I > think you only have to materialize once (in the merge block)? >=20 > > 4. vectorizable_reduction or maybe vect_create_epilog_for_reduction nee= d > to be modified to for early exits materialize > > The previous iteration value. >=20 > I think you need to only touch vect_create_epilog_for_reduction, the earl= y exit > merge block needs another reduction epilog. Well, in theory just another > vector to reduce but not sure if the control flow supports having the sam= e > actual epilog for both the main and the early exits. >=20 > Richard. Good morning, Here's the much cleaner respun patch: This changes the PHI node updates to support early breaks. It has to support both the case where the loop's exit matches the normal lo= op exit and one where the early exit is "inverted", i.e. it's an early exit ed= ge. In the latter case we must always restart the loop for VF iterations. For = an early exit the reason is obvious, but there are cases where the "normal" ex= it is located before the early one. This exit then does a check on ivtmp resu= lting in us leaving the loop since it thinks we're done. In these case we may still have side-effects to perform so we also go to th= e scalar loop. For the "normal" exit niters has already been adjusted for peeling, for the early exits we must find out how many iterations we actually did. So we ha= ve to recalculate the new position for each exit. For the "inverse" case I know what to do, but I wanted to ask where you wan= ted it. For inverted cases like ./gcc/testsuite/gcc.dg/vect/vect-early-break_7= 0.c the requirement is that any PHI value aside from the IV needs to be the val= ue of the early exit. i.e. the value of the incomplete exit as there's no iter= ation that is "complete". The IV should become: niters - (((niters / vf) - 1) * vf) So e.g. on a loop with niters =3D 17 and VF 4 it becomes 17 - (((17 / 4) - 1) * 4))) =3D 5. This addresses the odd +step you had co= mmented on before. To do these two I can either modify vect_update_ivs_after_vectorizer, or ad= d a smaller utility function that patched up this case if we want to keep vect_update_ivs_after_vectorizer simple. Which do you prefer? Thanks, Tamar gcc/ChangeLog: * tree-vect-loop-manip.cc (vect_set_loop_condition_normal): Hide unused. (vect_update_ivs_after_vectorizer): Support early break. (vect_do_peeling): Use it. (vect_is_loop_exit_latch_pred): New. * tree-vectorizer.h (vect_is_loop_exit_latch_pred): New. --- inline copy of patch --- diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc index 5ab883fdeebf1917979fe44eb16356aaef637df7..5751aa6295ca052534cef1984a2= 6c65994a57389 100644 --- a/gcc/tree-vect-loop-manip.cc +++ b/gcc/tree-vect-loop-manip.cc @@ -1200,7 +1200,7 @@ vect_set_loop_condition_partial_vectors_avx512 (class= loop *loop, loop handles exactly VF scalars per iteration. */ =20 static gcond * -vect_set_loop_condition_normal (loop_vec_info loop_vinfo, edge exit_edge, +vect_set_loop_condition_normal (loop_vec_info /* loop_vinfo */, edge exit_= edge, class loop *loop, tree niters, tree step, tree final_iv, bool niters_maybe_zero, gimple_stmt_iterator loop_cond_gsi) @@ -1407,6 +1407,17 @@ vect_set_loop_condition (class loop *loop, edge loop= _e, loop_vec_info loop_vinfo (gimple *) cond_stmt); } =20 +/* Determine if the exit choosen by the loop vectorizer differs from the + natural loop exit. i.e. if the exit leads to the loop patch or not. + When this happens we need to flip the understanding of main and other + exits by peeling and IV updates. */ + +bool +vect_is_loop_exit_latch_pred (edge loop_exit, class loop *loop) +{ + return single_pred (loop->latch) =3D=3D loop_exit->src; +} + /* Given LOOP this function generates a new copy of it and puts it on E which is either the entry or exit of LOOP. If SCALAR_LOOP is non-NULL, assume LOOP and SCALAR_LOOP are equivalent and copy the @@ -2134,6 +2145,10 @@ vect_can_advance_ivs_p (loop_vec_info loop_vinfo) The phi args associated with the edge UPDATE_E in the bb UPDATE_E->dest are updated accordingly. =20 + - MULTIPLE_EXIT - Indicates whether the scalar loop needs to restart = the + iteration count where the vector loop began. + - EXIT_BB - The basic block to insert any new statement for UPDATE_E = into. + Assumption 1: Like the rest of the vectorizer, this function assumes a single loop exit that has a single predecessor. =20 @@ -2152,17 +2167,14 @@ vect_can_advance_ivs_p (loop_vec_info loop_vinfo) =20 static void vect_update_ivs_after_vectorizer (loop_vec_info loop_vinfo, - tree niters, edge update_e) + tree niters, edge update_e, + bool multiple_exit, basic_block exit_bb) { gphi_iterator gsi, gsi1; class loop *loop =3D LOOP_VINFO_LOOP (loop_vinfo); basic_block update_bb =3D update_e->dest; - - basic_block exit_bb =3D LOOP_VINFO_IV_EXIT (loop_vinfo)->dest; - - /* Make sure there exists a single-predecessor exit bb: */ - gcc_assert (single_pred_p (exit_bb)); - gcc_assert (single_succ_edge (exit_bb) =3D=3D update_e); + gcond *cond =3D get_loop_exit_condition (LOOP_VINFO_IV_EXIT (loop_vinfo)= ); + gimple_stmt_iterator last_gsi =3D gsi_last_bb (exit_bb); =20 for (gsi =3D gsi_start_phis (loop->header), gsi1 =3D gsi_start_phis (upd= ate_bb); !gsi_end_p (gsi) && !gsi_end_p (gsi1); @@ -2172,7 +2184,6 @@ vect_update_ivs_after_vectorizer (loop_vec_info loop_= vinfo, tree step_expr, off; tree type; tree var, ni, ni_name; - gimple_stmt_iterator last_gsi; =20 gphi *phi =3D gsi.phi (); gphi *phi1 =3D gsi1.phi (); @@ -2204,11 +2215,27 @@ vect_update_ivs_after_vectorizer (loop_vec_info loo= p_vinfo, enum vect_induction_op_type induction_type =3D STMT_VINFO_LOOP_PHI_EVOLUTION_TYPE (phi_info); =20 - if (induction_type =3D=3D vect_step_op_add) + tree iv_var =3D PHI_ARG_DEF_FROM_EDGE (phi, loop_latch_edge (loop)); + /* create_iv always places it on the LHS. Alternatively we can set = a + property during create_iv to identify it. */ + bool ivtemp =3D gimple_cond_lhs (cond) =3D=3D iv_var; + if (multiple_exit && ivtemp) + { + type =3D TREE_TYPE (gimple_phi_result (phi)); + ni =3D build_int_cst (type, LOOP_VINFO_VECT_FACTOR (loop_vinfo)); + } + else if (induction_type =3D=3D vect_step_op_add) { + tree stype =3D TREE_TYPE (step_expr); - off =3D fold_build2 (MULT_EXPR, stype, - fold_convert (stype, niters), step_expr); + + /* Early exits always use last iter value not niters. */ + if (multiple_exit) + continue; + else + off =3D fold_build2 (MULT_EXPR, stype, + fold_convert (stype, niters), step_expr); + if (POINTER_TYPE_P (type)) ni =3D fold_build_pointer_plus (init_expr, off); else @@ -2227,9 +2254,9 @@ vect_update_ivs_after_vectorizer (loop_vec_info loop_= vinfo, =20 var =3D create_tmp_var (type, "tmp"); =20 - last_gsi =3D gsi_last_bb (exit_bb); gimple_seq new_stmts =3D NULL; ni_name =3D force_gimple_operand (ni, &new_stmts, false, var); + /* Exit_bb shouldn't be empty. */ if (!gsi_end_p (last_gsi)) { @@ -3324,8 +3351,31 @@ vect_do_peeling (loop_vec_info loop_vinfo, tree nite= rs, tree nitersm1, niters_vector_mult_vf steps. */ gcc_checking_assert (vect_can_advance_ivs_p (loop_vinfo)); update_e =3D skip_vector ? e : loop_preheader_edge (epilog); + edge alt_exit; + if (LOOP_VINFO_EARLY_BREAKS (loop_vinfo)) + { + for (auto exit : get_loop_exit_edges (loop)) + if (exit !=3D LOOP_VINFO_IV_EXIT (loop_vinfo)) + { + alt_exit =3D single_succ_edge (exit->dest); + break; + } + update_e =3D single_succ_edge (e->dest); + } + bool inversed_iv + =3D !vect_is_loop_exit_latch_pred (LOOP_VINFO_IV_EXIT (loop_vinfo), + LOOP_VINFO_LOOP (loop_vinfo)); + + /* Update the main exit first. */ vect_update_ivs_after_vectorizer (loop_vinfo, niters_vector_mult_vf, - update_e); + update_e, inversed_iv, + LOOP_VINFO_IV_EXIT (loop_vinfo)->dest); + + /* And then update the early exits, we only need to update the alt e= xit + merge edge, but have to find it first. */ + if (LOOP_VINFO_EARLY_BREAKS (loop_vinfo)) + vect_update_ivs_after_vectorizer (loop_vinfo, niters_vector_mult_vf, + alt_exit, true, alt_exit->src); =20 if (skip_epilog) { diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 39aa4d1250efe308acccf484d370f8adfd1ba843..22a8c3d384d7ae1ca93079b64f2= d40821b4a3c56 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -2224,6 +2224,7 @@ extern dump_user_location_t find_loop_location (class= loop *); extern bool vect_can_advance_ivs_p (loop_vec_info); extern void vect_update_inits_of_drs (loop_vec_info, tree, tree_code); extern edge vec_init_loop_exit_info (class loop *); +extern bool vect_is_loop_exit_latch_pred (edge, class loop *); =20 /* In tree-vect-stmts.cc. */ extern tree get_related_vectype_for_scalar_type (machine_mode, tree, --_002_VI1PR08MB532523DE52774A7F51B8BB65FFB4AVI1PR08MB5325eurp_ Content-Type: application/octet-stream; name="rb17967 (1).patch" Content-Description: rb17967 (1).patch Content-Disposition: attachment; filename="rb17967 (1).patch"; size=6494; creation-date="Mon, 20 Nov 2023 21:54:09 GMT"; modification-date="Mon, 20 Nov 2023 21:54:26 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3QtbG9vcC1tYW5pcC5jYyBiL2djYy90cmVlLXZlY3Qt bG9vcC1tYW5pcC5jYwppbmRleCA1YWI4ODNmZGVlYmYxOTE3OTc5ZmU0NGViMTYzNTZhYWVmNjM3 ZGY3Li41NzUxYWE2Mjk1Y2EwNTI1MzRjZWYxOTg0YTI2YzY1OTk0YTU3Mzg5IDEwMDY0NAotLS0g YS9nY2MvdHJlZS12ZWN0LWxvb3AtbWFuaXAuY2MKKysrIGIvZ2NjL3RyZWUtdmVjdC1sb29wLW1h bmlwLmNjCkBAIC0xMjAwLDcgKzEyMDAsNyBAQCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9wYXJ0 aWFsX3ZlY3RvcnNfYXZ4NTEyIChjbGFzcyBsb29wICpsb29wLAogICAgbG9vcCBoYW5kbGVzIGV4 YWN0bHkgVkYgc2NhbGFycyBwZXIgaXRlcmF0aW9uLiAgKi8KIAogc3RhdGljIGdjb25kICoKLXZl Y3Rfc2V0X2xvb3BfY29uZGl0aW9uX25vcm1hbCAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBl ZGdlIGV4aXRfZWRnZSwKK3ZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX25vcm1hbCAobG9vcF92ZWNf aW5mbyAvKiBsb29wX3ZpbmZvICovLCBlZGdlIGV4aXRfZWRnZSwKIAkJCQljbGFzcyBsb29wICps b29wLCB0cmVlIG5pdGVycywgdHJlZSBzdGVwLAogCQkJCXRyZWUgZmluYWxfaXYsIGJvb2wgbml0 ZXJzX21heWJlX3plcm8sCiAJCQkJZ2ltcGxlX3N0bXRfaXRlcmF0b3IgbG9vcF9jb25kX2dzaSkK QEAgLTE0MDcsNiArMTQwNywxNyBAQCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbiAoY2xhc3MgbG9v cCAqbG9vcCwgZWRnZSBsb29wX2UsIGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbwogCQkgICAgIChn aW1wbGUgKikgY29uZF9zdG10KTsKIH0KIAorLyogRGV0ZXJtaW5lIGlmIHRoZSBleGl0IGNob29z ZW4gYnkgdGhlIGxvb3AgdmVjdG9yaXplciBkaWZmZXJzIGZyb20gdGhlCisgICBuYXR1cmFsIGxv b3AgZXhpdC4gIGkuZS4gaWYgdGhlIGV4aXQgbGVhZHMgdG8gdGhlIGxvb3AgcGF0Y2ggb3Igbm90 LgorICAgV2hlbiB0aGlzIGhhcHBlbnMgd2UgbmVlZCB0byBmbGlwIHRoZSB1bmRlcnN0YW5kaW5n IG9mIG1haW4gYW5kIG90aGVyCisgICBleGl0cyBieSBwZWVsaW5nIGFuZCBJViB1cGRhdGVzLiAg Ki8KKworYm9vbAordmVjdF9pc19sb29wX2V4aXRfbGF0Y2hfcHJlZCAoZWRnZSBsb29wX2V4aXQs IGNsYXNzIGxvb3AgKmxvb3ApCit7CisgIHJldHVybiBzaW5nbGVfcHJlZCAobG9vcC0+bGF0Y2gp ID09IGxvb3BfZXhpdC0+c3JjOworfQorCiAvKiBHaXZlbiBMT09QIHRoaXMgZnVuY3Rpb24gZ2Vu ZXJhdGVzIGEgbmV3IGNvcHkgb2YgaXQgYW5kIHB1dHMgaXQKICAgIG9uIEUgd2hpY2ggaXMgZWl0 aGVyIHRoZSBlbnRyeSBvciBleGl0IG9mIExPT1AuICBJZiBTQ0FMQVJfTE9PUCBpcwogICAgbm9u LU5VTEwsIGFzc3VtZSBMT09QIGFuZCBTQ0FMQVJfTE9PUCBhcmUgZXF1aXZhbGVudCBhbmQgY29w eSB0aGUKQEAgLTIxMzQsNiArMjE0NSwxMCBAQCB2ZWN0X2Nhbl9hZHZhbmNlX2l2c19wIChsb29w X3ZlY19pbmZvIGxvb3BfdmluZm8pCiAgICAgICAgICAgICAgICAgICBUaGUgcGhpIGFyZ3MgYXNz b2NpYXRlZCB3aXRoIHRoZSBlZGdlIFVQREFURV9FIGluIHRoZSBiYgogICAgICAgICAgICAgICAg ICAgVVBEQVRFX0UtPmRlc3QgYXJlIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCiAKKyAgICAgLSBNVUxU SVBMRV9FWElUIC0gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNjYWxhciBsb29wIG5lZWRzIHRvIHJl c3RhcnQgdGhlCisJCSAgICAgICBpdGVyYXRpb24gY291bnQgd2hlcmUgdGhlIHZlY3RvciBsb29w IGJlZ2FuLgorICAgICAtIEVYSVRfQkIgLSBUaGUgYmFzaWMgYmxvY2sgdG8gaW5zZXJ0IGFueSBu ZXcgc3RhdGVtZW50IGZvciBVUERBVEVfRSBpbnRvLgorCiAgICAgIEFzc3VtcHRpb24gMTogTGlr ZSB0aGUgcmVzdCBvZiB0aGUgdmVjdG9yaXplciwgdGhpcyBmdW5jdGlvbiBhc3N1bWVzCiAgICAg IGEgc2luZ2xlIGxvb3AgZXhpdCB0aGF0IGhhcyBhIHNpbmdsZSBwcmVkZWNlc3Nvci4KIApAQCAt MjE1MiwxNyArMjE2NywxNCBAQCB2ZWN0X2Nhbl9hZHZhbmNlX2l2c19wIChsb29wX3ZlY19pbmZv IGxvb3BfdmluZm8pCiAKIHN0YXRpYyB2b2lkCiB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfdmVjdG9y aXplciAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLAotCQkJCSAgdHJlZSBuaXRlcnMsIGVkZ2Ug dXBkYXRlX2UpCisJCQkJICB0cmVlIG5pdGVycywgZWRnZSB1cGRhdGVfZSwKKwkJCQkgIGJvb2wg bXVsdGlwbGVfZXhpdCwgYmFzaWNfYmxvY2sgZXhpdF9iYikKIHsKICAgZ3BoaV9pdGVyYXRvciBn c2ksIGdzaTE7CiAgIGNsYXNzIGxvb3AgKmxvb3AgPSBMT09QX1ZJTkZPX0xPT1AgKGxvb3Bfdmlu Zm8pOwogICBiYXNpY19ibG9jayB1cGRhdGVfYmIgPSB1cGRhdGVfZS0+ZGVzdDsKLQotICBiYXNp Y19ibG9jayBleGl0X2JiID0gTE9PUF9WSU5GT19JVl9FWElUIChsb29wX3ZpbmZvKS0+ZGVzdDsK LQotICAvKiBNYWtlIHN1cmUgdGhlcmUgZXhpc3RzIGEgc2luZ2xlLXByZWRlY2Vzc29yIGV4aXQg YmI6ICAqLwotICBnY2NfYXNzZXJ0IChzaW5nbGVfcHJlZF9wIChleGl0X2JiKSk7Ci0gIGdjY19h c3NlcnQgKHNpbmdsZV9zdWNjX2VkZ2UgKGV4aXRfYmIpID09IHVwZGF0ZV9lKTsKKyAgZ2NvbmQg KmNvbmQgPSBnZXRfbG9vcF9leGl0X2NvbmRpdGlvbiAoTE9PUF9WSU5GT19JVl9FWElUIChsb29w X3ZpbmZvKSk7CisgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGxhc3RfZ3NpID0gZ3NpX2xhc3RfYmIg KGV4aXRfYmIpOwogCiAgIGZvciAoZ3NpID0gZ3NpX3N0YXJ0X3BoaXMgKGxvb3AtPmhlYWRlciks IGdzaTEgPSBnc2lfc3RhcnRfcGhpcyAodXBkYXRlX2JiKTsKICAgICAgICAhZ3NpX2VuZF9wIChn c2kpICYmICFnc2lfZW5kX3AgKGdzaTEpOwpAQCAtMjE3Miw3ICsyMTg0LDYgQEAgdmVjdF91cGRh dGVfaXZzX2FmdGVyX3ZlY3Rvcml6ZXIgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywKICAgICAg IHRyZWUgc3RlcF9leHByLCBvZmY7CiAgICAgICB0cmVlIHR5cGU7CiAgICAgICB0cmVlIHZhciwg bmksIG5pX25hbWU7Ci0gICAgICBnaW1wbGVfc3RtdF9pdGVyYXRvciBsYXN0X2dzaTsKIAogICAg ICAgZ3BoaSAqcGhpID0gZ3NpLnBoaSAoKTsKICAgICAgIGdwaGkgKnBoaTEgPSBnc2kxLnBoaSAo KTsKQEAgLTIyMDQsMTEgKzIyMTUsMjcgQEAgdmVjdF91cGRhdGVfaXZzX2FmdGVyX3ZlY3Rvcml6 ZXIgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywKICAgICAgIGVudW0gdmVjdF9pbmR1Y3Rpb25f b3BfdHlwZSBpbmR1Y3Rpb25fdHlwZQogCT0gU1RNVF9WSU5GT19MT09QX1BISV9FVk9MVVRJT05f VFlQRSAocGhpX2luZm8pOwogCi0gICAgICBpZiAoaW5kdWN0aW9uX3R5cGUgPT0gdmVjdF9zdGVw X29wX2FkZCkKKyAgICAgIHRyZWUgaXZfdmFyID0gUEhJX0FSR19ERUZfRlJPTV9FREdFIChwaGks IGxvb3BfbGF0Y2hfZWRnZSAobG9vcCkpOworICAgICAgLyogY3JlYXRlX2l2IGFsd2F5cyBwbGFj ZXMgaXQgb24gdGhlIExIUy4gIEFsdGVybmF0aXZlbHkgd2UgY2FuIHNldCBhCisJIHByb3BlcnR5 IGR1cmluZyBjcmVhdGVfaXYgdG8gaWRlbnRpZnkgaXQuICAqLworICAgICAgYm9vbCBpdnRlbXAg PSBnaW1wbGVfY29uZF9saHMgKGNvbmQpID09IGl2X3ZhcjsKKyAgICAgIGlmIChtdWx0aXBsZV9l eGl0ICYmIGl2dGVtcCkKKwl7CisJICB0eXBlID0gVFJFRV9UWVBFIChnaW1wbGVfcGhpX3Jlc3Vs dCAocGhpKSk7CisJICBuaSA9IGJ1aWxkX2ludF9jc3QgKHR5cGUsIExPT1BfVklORk9fVkVDVF9G QUNUT1IgKGxvb3BfdmluZm8pKTsKKwl9CisgICAgICBlbHNlIGlmIChpbmR1Y3Rpb25fdHlwZSA9 PSB2ZWN0X3N0ZXBfb3BfYWRkKQogCXsKKwogCSAgdHJlZSBzdHlwZSA9IFRSRUVfVFlQRSAoc3Rl cF9leHByKTsKLQkgIG9mZiA9IGZvbGRfYnVpbGQyIChNVUxUX0VYUFIsIHN0eXBlLAotCQkJICAg ICBmb2xkX2NvbnZlcnQgKHN0eXBlLCBuaXRlcnMpLCBzdGVwX2V4cHIpOworCisJICAvKiBFYXJs eSBleGl0cyBhbHdheXMgdXNlIGxhc3QgaXRlciB2YWx1ZSBub3Qgbml0ZXJzLiAqLworCSAgaWYg KG11bHRpcGxlX2V4aXQpCisJICAgIGNvbnRpbnVlOworCSAgZWxzZQorCSAgICBvZmYgPSBmb2xk X2J1aWxkMiAoTVVMVF9FWFBSLCBzdHlwZSwKKwkJCSAgICAgICBmb2xkX2NvbnZlcnQgKHN0eXBl LCBuaXRlcnMpLCBzdGVwX2V4cHIpOworCiAJICBpZiAoUE9JTlRFUl9UWVBFX1AgKHR5cGUpKQog CSAgICBuaSA9IGZvbGRfYnVpbGRfcG9pbnRlcl9wbHVzIChpbml0X2V4cHIsIG9mZik7CiAJICBl bHNlCkBAIC0yMjI3LDkgKzIyNTQsOSBAQCB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfdmVjdG9yaXpl ciAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLAogCiAgICAgICB2YXIgPSBjcmVhdGVfdG1wX3Zh ciAodHlwZSwgInRtcCIpOwogCi0gICAgICBsYXN0X2dzaSA9IGdzaV9sYXN0X2JiIChleGl0X2Ji KTsKICAgICAgIGdpbXBsZV9zZXEgbmV3X3N0bXRzID0gTlVMTDsKICAgICAgIG5pX25hbWUgPSBm b3JjZV9naW1wbGVfb3BlcmFuZCAobmksICZuZXdfc3RtdHMsIGZhbHNlLCB2YXIpOworCiAgICAg ICAvKiBFeGl0X2JiIHNob3VsZG4ndCBiZSBlbXB0eS4gICovCiAgICAgICBpZiAoIWdzaV9lbmRf cCAobGFzdF9nc2kpKQogCXsKQEAgLTMzMjQsOCArMzM1MSwzMSBAQCB2ZWN0X2RvX3BlZWxpbmcg KGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsCiAJ IG5pdGVyc192ZWN0b3JfbXVsdF92ZiBzdGVwcy4gICovCiAgICAgICBnY2NfY2hlY2tpbmdfYXNz ZXJ0ICh2ZWN0X2Nhbl9hZHZhbmNlX2l2c19wIChsb29wX3ZpbmZvKSk7CiAgICAgICB1cGRhdGVf ZSA9IHNraXBfdmVjdG9yID8gZSA6IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGVwaWxvZyk7CisgICAg ICBlZGdlIGFsdF9leGl0OworICAgICAgaWYgKExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29w X3ZpbmZvKSkKKwl7CisJICBmb3IgKGF1dG8gZXhpdCA6IGdldF9sb29wX2V4aXRfZWRnZXMgKGxv b3ApKQorCSAgICBpZiAoZXhpdCAhPSBMT09QX1ZJTkZPX0lWX0VYSVQgKGxvb3BfdmluZm8pKQor CSAgICAgIHsKKwkJYWx0X2V4aXQgPSBzaW5nbGVfc3VjY19lZGdlIChleGl0LT5kZXN0KTsKKwkJ YnJlYWs7CisJICAgICAgfQorCSAgdXBkYXRlX2UgPSBzaW5nbGVfc3VjY19lZGdlIChlLT5kZXN0 KTsKKwl9CisgICAgICBib29sIGludmVyc2VkX2l2CisJPSAhdmVjdF9pc19sb29wX2V4aXRfbGF0 Y2hfcHJlZCAoTE9PUF9WSU5GT19JVl9FWElUIChsb29wX3ZpbmZvKSwKKwkJCQkJIExPT1BfVklO Rk9fTE9PUCAobG9vcF92aW5mbykpOworCisgICAgICAvKiBVcGRhdGUgdGhlIG1haW4gZXhpdCBm aXJzdC4gICovCiAgICAgICB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfdmVjdG9yaXplciAobG9vcF92 aW5mbywgbml0ZXJzX3ZlY3Rvcl9tdWx0X3ZmLAotCQkJCQl1cGRhdGVfZSk7CisJCQkJCXVwZGF0 ZV9lLCBpbnZlcnNlZF9pdiwKKwkJCQkJTE9PUF9WSU5GT19JVl9FWElUIChsb29wX3ZpbmZvKS0+ ZGVzdCk7CisKKyAgICAgIC8qIEFuZCB0aGVuIHVwZGF0ZSB0aGUgZWFybHkgZXhpdHMsIHdlIG9u bHkgbmVlZCB0byB1cGRhdGUgdGhlIGFsdCBleGl0CisJIG1lcmdlIGVkZ2UsIGJ1dCBoYXZlIHRv IGZpbmQgaXQgZmlyc3QuICAqLworICAgICAgaWYgKExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChs b29wX3ZpbmZvKSkKKwl2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfdmVjdG9yaXplciAobG9vcF92aW5m bywgbml0ZXJzX3ZlY3Rvcl9tdWx0X3ZmLAorCQkJCQkgIGFsdF9leGl0LCB0cnVlLCBhbHRfZXhp dC0+c3JjKTsKIAogICAgICAgaWYgKHNraXBfZXBpbG9nKQogCXsKZGlmZiAtLWdpdCBhL2djYy90 cmVlLXZlY3Rvcml6ZXIuaCBiL2djYy90cmVlLXZlY3Rvcml6ZXIuaAppbmRleCAzOWFhNGQxMjUw ZWZlMzA4YWNjY2Y0ODRkMzcwZjhhZGZkMWJhODQzLi4yMmE4YzNkMzg0ZDdhZTFjYTkzMDc5YjY0 ZjJkNDA4MjFiNGEzYzU2IDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0b3JpemVyLmgKKysrIGIv Z2NjL3RyZWUtdmVjdG9yaXplci5oCkBAIC0yMjI0LDYgKzIyMjQsNyBAQCBleHRlcm4gZHVtcF91 c2VyX2xvY2F0aW9uX3QgZmluZF9sb29wX2xvY2F0aW9uIChjbGFzcyBsb29wICopOwogZXh0ZXJu IGJvb2wgdmVjdF9jYW5fYWR2YW5jZV9pdnNfcCAobG9vcF92ZWNfaW5mbyk7CiBleHRlcm4gdm9p ZCB2ZWN0X3VwZGF0ZV9pbml0c19vZl9kcnMgKGxvb3BfdmVjX2luZm8sIHRyZWUsIHRyZWVfY29k ZSk7CiBleHRlcm4gZWRnZSB2ZWNfaW5pdF9sb29wX2V4aXRfaW5mbyAoY2xhc3MgbG9vcCAqKTsK K2V4dGVybiBib29sIHZlY3RfaXNfbG9vcF9leGl0X2xhdGNoX3ByZWQgKGVkZ2UsIGNsYXNzIGxv b3AgKik7CiAKIC8qIEluIHRyZWUtdmVjdC1zdG10cy5jYy4gICovCiBleHRlcm4gdHJlZSBnZXRf cmVsYXRlZF92ZWN0eXBlX2Zvcl9zY2FsYXJfdHlwZSAobWFjaGluZV9tb2RlLCB0cmVlLAo= --_002_VI1PR08MB532523DE52774A7F51B8BB65FFB4AVI1PR08MB5325eurp_--