From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2074.outbound.protection.outlook.com [40.107.22.74]) by sourceware.org (Postfix) with ESMTPS id B14803857C7F for ; Fri, 5 Nov 2021 11:46:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B14803857C7F Received: from DB6PR0601CA0009.eurprd06.prod.outlook.com (2603:10a6:4:7b::19) by DB9PR08MB7218.eurprd08.prod.outlook.com (2603:10a6:10:2bd::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.11; Fri, 5 Nov 2021 11:46:06 +0000 Received: from DB5EUR03FT033.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:7b:cafe::3c) by DB6PR0601CA0009.outlook.office365.com (2603:10a6:4:7b::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.10 via Frontend Transport; Fri, 5 Nov 2021 11:46:06 +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; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DB5EUR03FT033.mail.protection.outlook.com (10.152.20.76) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4649.14 via Frontend Transport; Fri, 5 Nov 2021 11:46:06 +0000 Received: ("Tessian outbound 4ce13939bd4a:v108"); Fri, 05 Nov 2021 11:46:06 +0000 X-CR-MTA-TID: 64aa7808 Received: from ee51878643e9.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 5A2F36B5-F2BC-4AEE-94D3-7F529038467B.1; Fri, 05 Nov 2021 11:45:57 +0000 Received: from EUR02-VE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ee51878643e9.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 05 Nov 2021 11:45:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JIR8vt+9MjPVmztIFWdQm6fL84L8nxnz45bx+VVnHTApeDAPsopvfICRWsFrXKvDUfGhrM31TntD6ZJB2nblzAsVYr1+0CouBz2EubJHYTYU+RlqvuAbEiaS6Aeqhc/K7EigzQBXIPQCS3bqWllDY186Au94t1qi0ve65YH6gW4ppYtPFqkvqX+97GcGicZxE55EY4ZEWLr+XSa//1RV6NanAqll7R94iriKmNcc/NZv1xQbFg+iAq6L+92R28tmUcziQM4lmmQx2YkbhQIndFoBEgDT3wJMsHCioHLmkaiKeChV26nz5zQd8HQ34BOV9mwB1O+fjBn+XskBlXMo4Q== 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=tUz32T1ySzUPYAXWGYvbpyw88i0ZGM12o5+Na6OWFEs=; b=DfINl7n7DaFc8TMcwYwWQajj/BLWU63yUvuEOFDAbJ0yP9pt+qlTzH7u2TbFFZHGKqm+R62lc5UvMT5KXgK4w1u0jVnUsu+e+DDk9+oBi9GILdwAudrvnVgGBYE84UJ04tqliL5JczuDOYelOtEgkT+6re5Wpy1Nzuw5qz/+gWIE18+Q5/b62HR6fwoMjZWsOfb5/MP0AHmbH0AQ8rX/jnnC95psGhaR82AMpg6DUQNYqubf453Hda7OvSwZ9y7B/doZGOnwHnpA7lZjbvyCG9e7gDIvBNRGO0JA6bcSqs+ef5RLCBRwjrjxpHkO7LifPfuls2yPfAqLcTGQhlMN0A== 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 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by VI1PR08MB4110.eurprd08.prod.outlook.com (2603:10a6:803:e3::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4649.17; Fri, 5 Nov 2021 11:45:41 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::31cf:ea55:2234:c50b]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::31cf:ea55:2234:c50b%7]) with mapi id 15.20.4649.021; Fri, 5 Nov 2021 11:45:39 +0000 From: Tamar Christina To: Richard Biener , Richard Sandiford CC: Richard Biener via Gcc-patches , nd Subject: RE: [PATCH]middle-end Add an RPO pass after successful vectorization Thread-Topic: [PATCH]middle-end Add an RPO pass after successful vectorization Thread-Index: AQHXz/CMBQinBHoVLE+bQuMv+Yr2xavwSpoAgAAAZYCAABHXAIAAG0VpgAAVFgCABEccoA== Date: Fri, 5 Nov 2021 11:45:39 +0000 Message-ID: References: <9nnp8so9-p3nq-r26-3098-s96334191030@fhfr.qr> <045975-5o48-87ns-70pr-39r47q12o3p6@fhfr.qr> In-Reply-To: <045975-5o48-87ns-70pr-39r47q12o3p6@fhfr.qr> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ts-tracking-id: 06B5E933AE3D424582FBBFE713D49C11.0 x-checkrecipientchecked: true Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-publictraffictype: Email X-MS-Office365-Filtering-Correlation-Id: 3c6eeef0-bef8-4609-5703-08d9a051da52 x-ms-traffictypediagnostic: VI1PR08MB4110:|DB9PR08MB7218: X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: vXC+ZTX1RzRm/Ojfj+EnrlHGROPXm1P3TreYkDOB1iqVIO0PGq3QliPiFs8n19paXaByUpmcXhpe+PHyGL8xPGfOVNcd9FlfCUQ7lRrfZnwEJ4dTmbPfrnlafKjced7Iyx/ql2QiPLvrtott6MDGDekDyiJBsraLHq7D5vo4F6pOrWsUy2Cn8mi6AudXgHzOWrjl0KZkVfv7qqvp/C4sJljEMalwFnIMYU3bv/+Harc+w4Pz249LCAMoBB3hr/XMUcsAqJR6M0lXNh9h3mtsLiSP+aJYwlycWyAu4rRfTKuaSrC6bjyOCQHe7w88ia2MjXC9hLNqKGNFJxsdF61sl81nUgZZ/7xEQCoaq+9L+xs2bCh8RR8vTOEb/uYOpb64ke5Bd4ezOr4eF6UUgQNHDdeiQPsVdLgwFxC26UTc5NsEoFKHXMxfwUJpD0dRKW/UIIujSdQHGXmnkWosXk7rcI0mDO9vdgIa+5/BcZJZ1ibZMOSRbnDUXImaz9MWIIKjm6RsXXOm4PCOF6h879H0Xu2LMbR+yBT57inlkPPWfjEpH3APhie6YS0igFR0xhpPEem7Cr00BnVTURB/hKRIgdFGA8ckrYyWOLaHUI9T9q8h3SZcTs3s54Ee9twWTSMOnxH9lJvV93cgBJILOkSssJQQvWCVJPo3tneCpzfs2gUzsGjzbYYqXliewrzmlmqmnqa5L8hsNFd1ky4zfUOERg== 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:(4636009)(366004)(52536014)(8936002)(6636002)(4326008)(186003)(38070700005)(86362001)(2906002)(5660300002)(54906003)(71200400001)(53546011)(6506007)(38100700002)(99936003)(83380400001)(110136005)(8676002)(122000001)(66476007)(26005)(7696005)(316002)(508600001)(55016002)(66556008)(66946007)(76116006)(66446008)(9686003)(64756008)(33656002); DIR:OUT; SFP:1101; Content-Type: multipart/mixed; boundary="_002_VI1PR08MB5325F762A91734BA2CECF36CFF8E9VI1PR08MB5325eurp_" MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB4110 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: DB5EUR03FT033.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 27143f1d-96da-4529-3e20-08d9a051ca2a X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GK0VqHIFWoaPBPWVgYJPq5nA1A31/N7+VoKQRAPihYPkW84HjwOAWCWADGNhiWK+X9sYm5vgmTDEqHpeSHEjTyh1MB0S46BZgFwSTsyN9qBauXVQuCcwaXlgFqjVkpxepeP6PXFZoDdkLa3TaXEubE7pTFcrdHkGQO1ss13h8oXSX+mZc0SK4bDP/cp/bubyaJjSmKx2tRrgvTiiSKvt2yldjEACykCWdWOPw7X9iuXIfTEuP+Jxns5cKZt0+VwlkF62M63itX4L/edl0dttjp/jo3zMHn2wBW3vRQNK49lnNO0tbHRF1Udy5ISLZEqaLfV2ybRWPXWV67JL03yfPKI/J1DbG+TAQK5TElzSIjYRx19e7P2BQ1oyz+NEMTsUgDSXV4n5f5JhGgxBJDZ1TL7roJyBZL8XQMqi2jVnnpZJIE3tcRYYmflrohEOib4BtMwMrIPmIz+oti0PjRhrRs9uS/USaJVFeyvOyfE4juoBDLyqMQzvPLEbAhRfHQxaA9+nWZ4PcV9q0uqoaNTAKDKCgU6qsKOVIiZBIKbP+R7eaKCBQwpB+t5XiISrXBBgG3oFMpGUPFA7Y+zSjuxahLo7NjBNHrzIL60wK0OfDTIXnA1ge4OzpMi+moPvVojOCw2+xbz0VlfQW1il8F1rbR4fs35e5DwIdudIjz5p8zvgTq6HBHhOPEO8ll+Tv1eKgLQ3sQ9TFh0zg+dR+758zg== 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:(4636009)(36840700001)(46966006)(316002)(81166007)(6506007)(110136005)(54906003)(47076005)(53546011)(8936002)(8676002)(508600001)(356005)(33656002)(99936003)(70206006)(36860700001)(7696005)(26005)(70586007)(186003)(6636002)(86362001)(4326008)(9686003)(2906002)(55016002)(52536014)(5660300002)(235185007)(336012)(83380400001)(82310400003); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Nov 2021 11:46:06.5180 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3c6eeef0-bef8-4609-5703-08d9a051da52 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: DB5EUR03FT033.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB7218 X-Spam-Status: No, score=-13.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Nov 2021 11:46:12 -0000 --_002_VI1PR08MB5325F762A91734BA2CECF36CFF8E9VI1PR08MB5325eurp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable > -----Original Message----- > From: Richard Biener > Sent: Tuesday, November 2, 2021 6:22 PM > To: Richard Sandiford > Cc: Richard Biener via Gcc-patches ; Tamar > Christina ; nd > Subject: Re: [PATCH]middle-end Add an RPO pass after successful > vectorization >=20 > On Tue, 2 Nov 2021, Richard Sandiford wrote: >=20 > > Richard Biener via Gcc-patches writes: > > > On Tue, 2 Nov 2021, Tamar Christina wrote: > > > > > >> > -----Original Message----- > > >> > From: Richard Biener > > >> > Sent: Tuesday, November 2, 2021 2:24 PM > > >> > To: Tamar Christina > > >> > Cc: gcc-patches@gcc.gnu.org; nd > > >> > Subject: Re: [PATCH]middle-end Add an RPO pass after successful > > >> > vectorization > > >> > > > >> > On Tue, 2 Nov 2021, Tamar Christina wrote: > > >> > > > >> > > Hi All, > > >> > > > > >> > > Following my current SVE predicate optimization series a > > >> > > problem has presented itself in that the way vector masks are > > >> > > generated for masked operations relies on CSE to share masks > efficiently. > > >> > > > > >> > > The issue however is that masking is done using the & operand > > >> > > and & is associative and so reassoc decides to reassociate the > masked operations. > > >> > > > >> > But it does this for the purpose of canonicalization and thus CSE. > > >> > > >> Yes, but it turns something like > > >> > > >> (a & b) & mask into a & (b & mask). > > >> > > >> When (a & b) is used somewhere else you now lose the CSE. So it's > > >> actually hurting In this case. > > > > > > OK, so that's a known "issue" with reassoc, it doesn't consider > > > global CSE opportunities and I guess it pushes 'mask' to leaf if it > > > is loop carried. > > > > > >> > > > >> > > This makes CSE then unable to CSE an unmasked and a masked > > >> > > operation leading to duplicate operations being performed. > > >> > > > > >> > > To counter this we want to add an RPO pass over the vectorized > > >> > > loop body when vectorization succeeds. This makes it then no > > >> > > longer reliant on the RTL level CSE. > > >> > > > > >> > > I have not added a testcase for this as it requires the changes > > >> > > in my patch series, however the entire series relies on this > > >> > > patch to work so all the tests there cover it. > > >> > > > > >> > > Bootstrapped Regtested on aarch64-none-linux-gnu, > > >> > > x86_64-linux-gnu and no issues. > > >> > > > > >> > > Ok for master? > > >> > > > >> > You are running VN over _all_ loop bodies rather only those > vectorized. > > >> > We loop over vectorized loops earlier for optimizing masked store > sequences. > > >> > I suppose you could hook in there. I'll also notice that we have > > >> > pass_pre_slp_scalar_cleanup which eventually runs plus we have a > late FRE. > > >> > So I don't understand why it doesn't work to CSE later. > > >> > > > >> > > >> Atm, say you have the conditions a > b, and a > b & a > c > > >> > > >> We generate > > >> > > >> mask1 =3D (a > b) & loop_mask > > >> mask2 =3D (a > b & a > c) & loop_mask > > >> > > >> with the intention that mask1 can be re-used in mask2. > > >> > > >> Reassoc changes this to mask2 =3D a > b & (a > c & loop_mask) > > >> > > >> Which has now unmasked (a > b) in mask2, which leaves us unable to > > >> combine the mask1 and mask2. It doesn't generate incorrect code, ju= st > inefficient. > > >> > > >> > for (i =3D 1; i < number_of_loops (cfun); i++) > > >> > { > > >> > loop_vec_info loop_vinfo; > > >> > bool has_mask_store; > > >> > > > >> > loop =3D get_loop (cfun, i); > > >> > if (!loop || !loop->aux) > > >> > continue; > > >> > loop_vinfo =3D (loop_vec_info) loop->aux; > > >> > has_mask_store =3D LOOP_VINFO_HAS_MASK_STORE (loop_vinfo); > > >> > delete loop_vinfo; > > >> > if (has_mask_store > > >> > && targetm.vectorize.empty_mask_is_expensive > (IFN_MASK_STORE)) > > >> > optimize_mask_stores (loop); > > >> > loop->aux =3D NULL; > > >> > } > > >> > > > >> > > >> Ah thanks, I'll make the changes. > > > > > > Note I think that full-blown CSE is a bit overkill just to counter a > > > deficient reassoc (or VN). At least it is supposed to be "cheap" > > > and can be conditionalized on loop masks being used as well. > > > > Not sure we should make this conditional on loop masks being used. > > It seems either that: > > > > (a) the vectoriser is supposed to avoid creating code that has folding > > or VN opportunities, in which case we need to generate the vectoris= ed > > code in a smarter way or > > > > (b) the vectoriser is allowed to create code that has folding or VN > > opportunities, in which case it would be good to have a defined > > place to get rid of them. >=20 > It's certainly (b), and the definitive place to get rid of those is the p= ost-loop > optimizer FRE pass. That just happens to be after a reassoc pass which > makes FRE run into the pre-existing issue that we fail to capture all (or= the > best) possible CSE opportunity from separate associatable chains. >=20 > > I'm just worried that if we make it conditional on loop masks, we > > could see cases that in which non-loop-mask stuff is optimised > > differently based on whether the loop has masks or not. E.g. > > we might get worse code with an unpredicated main loop and a > > predicated epilogue compared to a predicated main loop. >=20 > Sure. Note for loop vectorization we can indeed reasonably easy CSE the > main body and RPO VN should be O(region size) and cheap enough for this > case (we could even add an extra cheap entry for single basic-blocks). F= or BB > vectorization we have to rely on the full function FRE pass though. >=20 I've moved the code so it works only on the vector loops. I don't think the= re needs to be any code change to handle single BB efficiently no? the walk stop at = the loop exit block so it's already optimal in the case, unless I misunderstood? Bootstrapped Regtested on aarch64-none-linux-gnu, x86_64-linux-gnu and no issues. Ok for master? Thanks, Tamar gcc/ChangeLog: * tree-vectorizer.c (vectorize_loops): Do local CSE through RPVN upon successful vectorization. --- inline copy of patch --- diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c index edb7538a67f00cd80a608ee82510cf437fe88083..9d8015ea35984963db1ddb90af3= 2935d08c8a0e8 100644 --- a/gcc/tree-vectorizer.c +++ b/gcc/tree-vectorizer.c @@ -81,7 +81,7 @@ along with GCC; see the file COPYING3. If not see #include "gimple-pretty-print.h" #include "opt-problem.h" #include "internal-fn.h" - +#include "tree-ssa-sccvn.h" =20 /* Loop or bb location, with hotness information. */ dump_user_location_t vect_location; @@ -1298,6 +1298,20 @@ vectorize_loops (void) if (has_mask_store && targetm.vectorize.empty_mask_is_expensive (IFN_MASK_STORE)) optimize_mask_stores (loop); + + bitmap exit_bbs; + /* Perform local CSE, this esp. helps because we emit code for + predicates that need to be shared for optimal predicate usage. + However reassoc will re-order them and prevent CSE from working + as it should. CSE only the loop body, not the entry. */ + exit_bbs =3D BITMAP_ALLOC (NULL); + bitmap_set_bit (exit_bbs, single_exit (loop)->dest->index); + bitmap_set_bit (exit_bbs, loop->latch->index); + + do_rpo_vn (cfun, loop_preheader_edge (loop), exit_bbs); + + BITMAP_FREE (exit_bbs); + loop->aux =3D NULL; } --_002_VI1PR08MB5325F762A91734BA2CECF36CFF8E9VI1PR08MB5325eurp_ Content-Type: application/octet-stream; name="rb15007.patch" Content-Description: rb15007.patch Content-Disposition: attachment; filename="rb15007.patch"; size=1245; creation-date="Fri, 05 Nov 2021 11:45:27 GMT"; modification-date="Fri, 05 Nov 2021 11:40:24 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3Rvcml6ZXIuYyBiL2djYy90cmVlLXZlY3Rvcml6ZXIu YwppbmRleCBlZGI3NTM4YTY3ZjAwY2Q4MGE2MDhlZTgyNTEwY2Y0MzdmZTg4MDgzLi45ZDgwMTVl YTM1OTg0OTYzZGIxZGRiOTBhZjMyOTM1ZDA4YzhhMGU4IDEwMDY0NAotLS0gYS9nY2MvdHJlZS12 ZWN0b3JpemVyLmMKKysrIGIvZ2NjL3RyZWUtdmVjdG9yaXplci5jCkBAIC04MSw3ICs4MSw3IEBA IGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5j bHVkZSAiZ2ltcGxlLXByZXR0eS1wcmludC5oIgogI2luY2x1ZGUgIm9wdC1wcm9ibGVtLmgiCiAj aW5jbHVkZSAiaW50ZXJuYWwtZm4uaCIKLQorI2luY2x1ZGUgInRyZWUtc3NhLXNjY3ZuLmgiCiAK IC8qIExvb3Agb3IgYmIgbG9jYXRpb24sIHdpdGggaG90bmVzcyBpbmZvcm1hdGlvbi4gICovCiBk dW1wX3VzZXJfbG9jYXRpb25fdCB2ZWN0X2xvY2F0aW9uOwpAQCAtMTI5OCw2ICsxMjk4LDIwIEBA IHZlY3Rvcml6ZV9sb29wcyAodm9pZCkKICAgICAgIGlmIChoYXNfbWFza19zdG9yZQogCSAgJiYg dGFyZ2V0bS52ZWN0b3JpemUuZW1wdHlfbWFza19pc19leHBlbnNpdmUgKElGTl9NQVNLX1NUT1JF KSkKIAlvcHRpbWl6ZV9tYXNrX3N0b3JlcyAobG9vcCk7CisKKyAgICAgIGJpdG1hcCBleGl0X2Ji czsKKyAgICAgIC8qIFBlcmZvcm0gbG9jYWwgQ1NFLCB0aGlzIGVzcC4gaGVscHMgYmVjYXVzZSB3 ZSBlbWl0IGNvZGUgZm9yCisJIHByZWRpY2F0ZXMgdGhhdCBuZWVkIHRvIGJlIHNoYXJlZCBmb3Ig b3B0aW1hbCBwcmVkaWNhdGUgdXNhZ2UuCisJIEhvd2V2ZXIgcmVhc3NvYyB3aWxsIHJlLW9yZGVy IHRoZW0gYW5kIHByZXZlbnQgQ1NFIGZyb20gd29ya2luZworCSBhcyBpdCBzaG91bGQuICBDU0Ug b25seSB0aGUgbG9vcCBib2R5LCBub3QgdGhlIGVudHJ5LiAgKi8KKyAgICAgIGV4aXRfYmJzID0g QklUTUFQX0FMTE9DIChOVUxMKTsKKyAgICAgIGJpdG1hcF9zZXRfYml0IChleGl0X2Jicywgc2lu Z2xlX2V4aXQgKGxvb3ApLT5kZXN0LT5pbmRleCk7CisgICAgICBiaXRtYXBfc2V0X2JpdCAoZXhp dF9iYnMsIGxvb3AtPmxhdGNoLT5pbmRleCk7CisKKyAgICAgIGRvX3Jwb192biAoY2Z1biwgbG9v cF9wcmVoZWFkZXJfZWRnZSAobG9vcCksIGV4aXRfYmJzKTsKKworICAgICAgQklUTUFQX0ZSRUUg KGV4aXRfYmJzKTsKKwogICAgICAgbG9vcC0+YXV4ID0gTlVMTDsKICAgICB9CiAK --_002_VI1PR08MB5325F762A91734BA2CECF36CFF8E9VI1PR08MB5325eurp_--