From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2129.outbound.protection.outlook.com [40.107.237.129]) by sourceware.org (Postfix) with ESMTPS id 4647C3858D28 for ; Mon, 28 Aug 2023 08:17:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4647C3858D28 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=os.amperecomputing.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=os.amperecomputing.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gHjDfi7rbbFmKzgMkTHaXV4fiNKI0s7W7yleVCeuq6odAZMuAFMTnsd4+ITRJvDQcviVRKqp1zOitCh56NfhqvgG4wQd7gHj1M488DsdBqrKbcxOKsEDbMCnC+YZafd26DKj5sk3ZHv55ZB+BkXv/zjl1nNVndtXLX/0N7Ua5v2sPL2YUd1OSz1AzPZ7IyV9DercaLQ0EyOwgkWP8R9akjoLHbIZs61I4qCmNWJCwbwdneA9DOHymAFUbQ0Gtybji4Jw+v4W3knlKJHR6UH03DGm9foNnAMXN31kidMCFk/ojB1sUf+otklFB4aREDv2STUkfAr6OxR2nAJCMx128A== 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=+N+qsk5Y1PFEkaMwOdC115IRRzfswhW1kcu4Jcj4pik=; b=VuUEidz0wEEJLxaaOzyOWzBvHz5gGQn6lmXq2tHSVSQkgoG/JtYpbXVlBfIYMQjFTsxf9sc434KZ3K/dxs8Rx4UTwTg+1h4WQGV4Knw7JJIw0DUgHmDQ3gG8jIlyOwVm2q43IRgEwVc3FZqv0yEXSYgrpCleJj49HO/s5utFjvTN0F1BP78GzpGg25UTl4Sth0+tdxnw+7tuZUOOvpx/SIpbSgTC4SgJWzDRM3AjTsPdzzNIje89f73l2uQbD4Dq4yaDZDWTGNEF5Te/xJ/lwFVIqklOdhzm6zMLBoCC+ueac4WLRtFM/1iNW45i/AHZvVJ95ggQp/dV/UqAVqUwVg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+N+qsk5Y1PFEkaMwOdC115IRRzfswhW1kcu4Jcj4pik=; b=eg5oioeEAOkNLFb2uowZjgwSGfBCeFz3JnwgpI5Ks1jQTC/NQVS8WV+RxwH7xF5kbXN/RD0THW9PJH6k0F+9sniSLWEMoT/p+GNzOwyGFMz7Z1JH0xKn/bsOK9ERSEpl/Tnj1QU0TY9BDUIeh2D4WBd718ZKDVDILaSOtldS8qQ= Received: from SN6PR01MB4240.prod.exchangelabs.com (2603:10b6:805:ae::22) by CO1PR01MB6519.prod.exchangelabs.com (2603:10b6:303:f1::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.34; Mon, 28 Aug 2023 08:17:30 +0000 Received: from SN6PR01MB4240.prod.exchangelabs.com ([fe80::44ff:531:6d29:85a]) by SN6PR01MB4240.prod.exchangelabs.com ([fe80::44ff:531:6d29:85a%7]) with mapi id 15.20.6699.034; Mon, 28 Aug 2023 08:17:30 +0000 From: Di Zhao OS To: "gcc-patches@gcc.gnu.org" CC: Richard Biener Subject: [PATCH] [tree-optimization/110279] swap operands in reassoc to reduce cross backedge FMA Thread-Topic: [PATCH] [tree-optimization/110279] swap operands in reassoc to reduce cross backedge FMA Thread-Index: AdnZh/Le9F594Tc5S4ekqukOGNY+Cg== Date: Mon, 28 Aug 2023 08:17:29 +0000 Message-ID: Accept-Language: en-US Content-Language: zh-CN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_ActionId=a6eef187-0871-477a-bf79-13888396197c;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_ContentBits=0;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Enabled=true;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Method=Standard;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Name=Confidential (Default);MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_SetDate=2023-08-28T07:56:25Z;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_SiteId=3bc2b170-fd94-476d-b0ce-4229bdc904a7; authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SN6PR01MB4240:EE_|CO1PR01MB6519:EE_ x-ms-office365-filtering-correlation-id: 52c96718-1753-4ec2-c16b-08dba79f38d9 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: pQT5pUTWdFiIddgMUaN6v0pSO+yhDvsaiV9kaxy5NwPQZ9Q4fMCEG60UY2Mq20NhdeX2+ofrGFBe0TQFGSvtToEmR6P64vNj2xUhNnV2hQc7WSoIytNjMZ5EetnBb7sGpp2q7xzyO4Le2pXhh9FEItuXSPH1mW1hn6kvIXT58tjv47UuIGKlUhyzE99xK4uYLVydeZmdspJUhKtd2jKjvm/rllb1vdQx+RyEScPvE7pbc/B90JTeN7QNflVYesP6QlkGsTrfJsLnfUWaKNnQ3+cUOaywtrdXWDeDSdoJpz+ZWcsHWBdLbCPhJO6SeNWG18Ol5UY6fwLB6I6Xlv0B61YyEkYkXR4VBQsbTz9Apq4OqHb7PL0GD0xLjZtb9IasBSviSQwVOmYWZQpYk+8x6T6rIi5Y6Ta2rbTl7uBJHwoWiBlNzA3SopKN26QUpcaKKsPWV0lrRrcgtWBfLOXyf3ytOKpTcl8cQNxe3x3JphLRTwyK5oV3TwxdlWBd7J1dcoX4R7ZrJenGZTxfOfi5YPxNx+DA8lONv59kJZWmpPoYNmI9inWtHQnPXtJvHr3XUKhNuexG29IoJSBwxqmBwOgUwTDn5HN9G6NatxnBlRo= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR01MB4240.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230031)(136003)(346002)(39850400004)(376002)(366004)(396003)(1800799009)(186009)(451199024)(7696005)(6506007)(71200400001)(9686003)(478600001)(2906002)(26005)(966005)(64756008)(316002)(66476007)(8676002)(66946007)(4326008)(8936002)(5660300002)(52536014)(66556008)(76116006)(41300700001)(66446008)(6916009)(33656002)(86362001)(99936003)(38100700002)(38070700005)(55016003)(122000001)(84970400001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?IRSeDD4HRka26StJXp0yjg6ScJwu4Ui2VxPTLwnQzB8c9KJV3BlmNL0Wlf5y?= =?us-ascii?Q?Axcyyr38bhSNvfV4BuwPR+FrvCIO/7SLZ/Fqej+yjrkj6W4QEiH9ad6EOOg7?= =?us-ascii?Q?dDNPUkLIu0ko0/OUYmWv0a59R3S9aHZvCmr9DGpXa8Yn3pXEG4rkWGoNaqHF?= =?us-ascii?Q?VnGR536GiJGm3EF1KacvUpdGapmiamdAFOUtVsJMJ9cF4Fk694iVrzOTnCrf?= =?us-ascii?Q?dc9849/db/HvLcT1Px2L/ni7IaIxPgbaY0somnBwj+QxtL5ZXIqj594Mv8zr?= =?us-ascii?Q?l8BTNlIbJ7Hc/LqSlUnDg0kAvv+L2gHCi8HYjY1yWR65HK6Dy4L0f5zx/u1T?= =?us-ascii?Q?2aHvwwbMkGbCFB9XeT41pB1p05KTedZyE+c8ci0fkr3/Zn/79WswZ7SX9s0F?= =?us-ascii?Q?ww5Snf06kC3j5PtbspisVr3V61UcO3stFga+BHz4EcieZrFApChT13EsQUW7?= =?us-ascii?Q?+OJ5d5KvhISyQw+Kb0dFQBVU2OHvEwCl8nbw3U2OvPATpcH2qDgVn2RmA97C?= =?us-ascii?Q?E850MtcxVVvv7IZBNEtRC8PB4jjkpRcUPyHEyCsIDLOlUc9gThRa21DHLRxT?= =?us-ascii?Q?n4C4E3ggLRZXY7sLsTJ73T8IZIH+aXCyBO66xmwBAtgh8qsYRYxuU1cHiaVl?= =?us-ascii?Q?jB5ggQLbxNLGBbKGQ2QuPrdufzu/2kZ0CwdNTJQA6Y3yPZEoQ5A42y1RSgTI?= =?us-ascii?Q?MsTuS5t9YO5n8rlHleGse5BTBn+4s0wmnvN/T5JxhCKBE7dF/zOzOMxXD19G?= =?us-ascii?Q?Cr8cb7f1lRlZSTTWJKCIpJlC1PYPYza6CDQhnckZKFDg0ARf4C61ihGvHuwI?= =?us-ascii?Q?knztMIRB+xTEGC3Nr8I1cXFaeGOjE9zxSLx5KJ/LScoLr6wX1YZFxcCY7W/n?= =?us-ascii?Q?/Ybc5wX3trPiNhmAMRw33p+xRgP+Fvy8uMDQCghiWGhCe9v4JWWlM03U3R1H?= =?us-ascii?Q?Pn1DoS+D6UxfRn7qjEJ+17B3U0+4QFb2INfsXAk3f3hYpBmB59IGqsmszffa?= =?us-ascii?Q?RozpnWqDABodniqDk5Hsf0OCMBWVwRH4Fw6eFaHv8rBSbTd7+3zLoT+8jk+8?= =?us-ascii?Q?j4XIp+Y6F+1TxZsulV0ygO/lypARN/FYsEfxGnGjGvH3/MmBzEPpoGrs/Mwz?= =?us-ascii?Q?zzyAfmeJN1RVivDP/sefznepQ4zmbvOLfA+MJT2NVknAKWeHARj+BerIcZsA?= =?us-ascii?Q?PM6WczJvvjNl2YNQ55nRPv38nTBb181cG5fiXEy+M3h4rVLhdt71VVCXVOle?= =?us-ascii?Q?2G/x+AJQsFfdMPanzDj6DOLx0+UD5RYyK23mG6Nl2UF7mKpUEMwvv948hB0I?= =?us-ascii?Q?V2wmsgb202jG8lgy39HlamvSOmNCen6ZAh0StynwvVbW0upWqnYUVThcRdfc?= =?us-ascii?Q?p/+uFT0z+IIkBop9ygO0MrR3Eb6h5f33qIAB+TZvW79quvKWurbtshxjNCVI?= =?us-ascii?Q?d7PqtlXlgDHJ8neafcLSRfhRXeMQlKUYuvEzFTFICgj7bLqQ9YjvosI8qazw?= =?us-ascii?Q?umClKujnawh/0gwhhNaFZcsOIsYNerzu5kAdCSVhIjJjvCVxP/7TPccagzoo?= =?us-ascii?Q?c2HyB4zov0PWRBNbiE3j3gGgyJ0dJ2ns3urtuowIs6qrgZ/9vJbMQwbKTLp1?= =?us-ascii?Q?ww=3D=3D?= Content-Type: multipart/mixed; boundary="_002_SN6PR01MB4240A22F29D390F5B96FD057E8E0ASN6PR01MB4240prod_" MIME-Version: 1.0 X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR01MB4240.prod.exchangelabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 52c96718-1753-4ec2-c16b-08dba79f38d9 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Aug 2023 08:17:29.8479 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 87GbqwgwyKSINqBnqsQ5YW2XUJMVjA9NiWFgUwiItc7Qom7sm566A77Uj06tnr+yjHug+4DcP73XfHXHqWc7hQfIiDecaEiMBbg0oLBEz9pR31Y+9JMje1yIc8E9FPaZ X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR01MB6519 X-Spam-Status: No, score=-3.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,TXREP 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_SN6PR01MB4240A22F29D390F5B96FD057E8E0ASN6PR01MB4240prod_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable This patch tries to fix the 2% regression in 510.parest_r on ampere1 in the tracker. (Previous discussion is here: https://gcc.gnu.org/pipermail/gcc-patches/2023-July/624893.html) 1. Add testcases for the problem. For an op list in the form of "acc =3D a * b + c * d + acc", currently reassociation doesn't Swap the operands so that more FMAs can be generated. After widening_mul the result looks like: _1 =3D .FMA(a, b, acc_0); acc_1 =3D .FMA(c, d, _1); While previously (before the "Handle FMA friendly..." patch), widening_mul's result was like: _1 =3D a * b; _2 =3D .FMA (c, d, _1); acc_1 =3D acc_0 + _2; If the code fragment is in a loop, some architecture can execute the latter in parallel, so the performance can be much faster than the former. For the small testcase, the performance gap is over 10% on both ampere1 and neoverse-n1. So the point here is to avoid turning the last statement into FMA, and keep it a PLUS_EXPR as much as possible. (If we are rewriting the op list into parallel, no special treatment is needed, since the last statement after rewrite_expr_tree_parallel will be PLUS_EXPR anyway.) 2. Function result_feeds_back_from_phi_p is to check for cross backedge dependency. Added new enum fma_state to describe the state of FMA candidates. With this patch, there's a 3% improvement in 510.parest_r 1-copy run on ampere1. The compile options are:=20 "-Ofast -mcpu=3Dampere1 -flto --param avoid-fma-max-bits=3D512". Best regards, Di Zhao ---- PR tree-optimization/110279 gcc/ChangeLog: * tree-ssa-reassoc.cc (enum fma_state): New enum to describe the state of FMA candidates for an op list. (rewrite_expr_tree_parallel): Changed boolean=20 parameter to enum type. (result_feeds_back_from_phi_p): New function to check for cross backedge dependency. (rank_ops_for_fma): Return enum fma_state. Added new parameter. (reassociate_bb): If there's backedge dependency in an op list, swap the operands before rewrite_expr_tree. gcc/testsuite/ChangeLog: * gcc.dg/pr110279.c: New test. --_002_SN6PR01MB4240A22F29D390F5B96FD057E8E0ASN6PR01MB4240prod_ Content-Type: application/octet-stream; name="0001-swap-operands-in-reassoc-to-reduce-cross-backedge-FM.patch" Content-Description: 0001-swap-operands-in-reassoc-to-reduce-cross-backedge-FM.patch Content-Disposition: attachment; filename="0001-swap-operands-in-reassoc-to-reduce-cross-backedge-FM.patch"; size=8928; creation-date="Mon, 28 Aug 2023 08:15:16 GMT"; modification-date="Mon, 28 Aug 2023 08:17:29 GMT" Content-Transfer-Encoding: base64 RnJvbSA2NjNmOTgyMmIyZjViNDU4YWU0ZmQwOTgzZWM1OWZkMWViNDc4NzdmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbXB0ZXN0IDxhbXB0ZXN0QGFtcGVyZWNvbXB1dGluZy5jb20+ CkRhdGU6IFdlZCwgMjMgQXVnIDIwMjMgMDE6MjY6MjQgLTA3MDAKU3ViamVjdDogW1BBVENIXSBz d2FwIG9wZXJhbmRzIGluIHJlYXNzb2MgdG8gcmVkdWNlIGNyb3NzIGJhY2tlZGdlIEZNQQoKLS0t CiBnY2MvdGVzdHN1aXRlL2djYy5kZy9wcjExMDI3OS5jIHwgIDYyICsrKysrKysrKysrKysrKysr KwogZ2NjL3RyZWUtc3NhLXJlYXNzb2MuY2MgICAgICAgICB8IDExMSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0tLQogMiBmaWxlcyBjaGFuZ2VkLCAxNjMgaW5zZXJ0aW9ucygrKSwgMTAg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHIx MTAyNzkuYwoKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMTEwMjc5LmMgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy9wcjExMDI3OS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi45ZGM3MjY1OGJmZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3ByMTEwMjc5LmMKQEAgLTAsMCArMSw2MiBAQAorLyogeyBkZy1kbyBjb21waWxl IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU9mYXN0IC0tcGFyYW0gYXZvaWQtZm1hLW1heC1iaXRz PTUxMiAtLXBhcmFtIHRyZWUtcmVhc3NvYy13aWR0aD00IC1mZHVtcC10cmVlLXdpZGVuaW5nX211 bC1kZXRhaWxzIiB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLW1hcmNoPWFybXY4 LjItYSIgfSAqLworCisjZGVmaW5lIExPT1BfQ09VTlQgODAwMDAwMDAwCit0eXBlZGVmIGRvdWJs ZSBkYXRhX2U7CisKKy8qIENoZWNrIHRoYXQgRk1BcyB3aXRoIGJhY2tlZGdlIGRlcGVuZGVuY3kg YXJlIGF2b2lkZWQuIE90aGVyd2lzZSB0aGVyZSB3b24ndAorICAgYmUgRk1BIGdlbmVyYXRlZCB3 aXRoICItLXBhcmFtIGF2b2lkLWZtYS1tYXgtYml0cz01MTIiLiAgICovCisKK2ZvbzEgKGRhdGFf ZSBhLCBkYXRhX2UgYiwgZGF0YV9lIGMsIGRhdGFfZSBkKQoreworICBkYXRhX2UgcmVzdWx0ID0g MDsKKworICBmb3IgKGludCBpYyA9IDA7IGljIDwgTE9PUF9DT1VOVDsgaWMrKykKKyAgICB7Cisg ICAgICByZXN1bHQgKz0gKGEgKiBiICsgYyAqIGQpOworCisgICAgICBhIC09IDAuMTsKKyAgICAg IGIgKz0gMC45OworICAgICAgYyAqPSAxLjAyOworICAgICAgZCAqPSAwLjYxOworICAgIH0KKwor ICByZXR1cm4gcmVzdWx0OworfQorCitmb28yIChkYXRhX2UgYSwgZGF0YV9lIGIsIGRhdGFfZSBj LCBkYXRhX2UgZCkKK3sKKyAgZGF0YV9lIHJlc3VsdCA9IDA7CisKKyAgZm9yIChpbnQgaWMgPSAw OyBpYyA8IExPT1BfQ09VTlQ7IGljKyspCisgICAgeworICAgICAgcmVzdWx0ICs9IGEgKiBiICsg cmVzdWx0ICsgYyAqIGQ7CisKKyAgICAgIGEgLT0gMC4xOworICAgICAgYiArPSAwLjk7CisgICAg ICBjICo9IDEuMDI7CisgICAgICBkICo9IDAuNjE7CisgICAgfQorCisgIHJldHVybiByZXN1bHQ7 Cit9CisKK2ZvbzMgKGRhdGFfZSBhLCBkYXRhX2UgYiwgZGF0YV9lIGMsIGRhdGFfZSBkKQorewor ICBkYXRhX2UgcmVzdWx0ID0gMDsKKworICBmb3IgKGludCBpYyA9IDA7IGljIDwgTE9PUF9DT1VO VDsgaWMrKykKKyAgICB7CisgICAgICByZXN1bHQgKz0gcmVzdWx0ICsgYSAqIGIgKyBjICogZDsK KworICAgICAgYSAtPSAwLjE7CisgICAgICBiICs9IDAuOTsKKyAgICAgIGMgKj0gMS4wMjsKKyAg ICAgIGQgKj0gMC42MTsKKyAgICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJHZW5lcmF0ZWQgRk1BIiAzICJ3aWRlbmluZ19t dWwifSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtcmVhc3NvYy5jYyBiL2djYy90cmVl LXNzYS1yZWFzc29jLmNjCmluZGV4IGVkYTAzYmY5OGE2Li4zNTUyZWU5YzBlNyAxMDA2NDQKLS0t IGEvZ2NjL3RyZWUtc3NhLXJlYXNzb2MuY2MKKysrIGIvZ2NjL3RyZWUtc3NhLXJlYXNzb2MuY2MK QEAgLTU0NzEsNiArNTQ3MSwyNCBAQCBnZXRfcmVhc3NvY2lhdGlvbl93aWR0aCAoaW50IG9wc19u dW0sIGVudW0gdHJlZV9jb2RlIG9wYywKICAgcmV0dXJuIHdpZHRoOwogfQogCisvKiBUaGlzIGVu dW0gZGVzY3JpYmVzIHRoZSBzdGF0ZSBvZiBGTUEgY2FuZGlkYXRlcyBmb3IgYSBsaXN0IG9mIG9w ZXJhbmRzLiAgKi8KKworZW51bSBmbWFfc3RhdGUKK3sKKyAgLyogVGhlcmUgaXMgYXQgbW9zdCBv bmUgRk1BIGNhbmRpZGF0ZSBpbiB0aGUgb3AgbGlzdC4gIEluIHRoaXMgY2FzZSwgbm8KKyAgICAg c3BlY2lhbCB0cmVhdG1lbnQgaXMgbmVlZGVkIHdoZW4gcmV3cml0aW5nIGV4cHJlc3Npb24gdHJl ZS4gICovCisgIEZNQV9TVEFURV9OT05FX09SX1NJTkdMRSA9IDAsCisKKyAgLyogVGhlIHJlc3Vs dCBvZiBvcC1saXN0IGhhcyBjcm9zcyBiYWNrZWRnZSBkZXBlbmRlbmN5LCBhbmQgd2UgbmVlZCB0 byBhdm9pZAorICAgICB0dXJuaW5nIGl0IGludG8gYW4gRk1BLiAgSW4gdGhpcyBjYXNlLCBzd2Fw IHRoZSBvcGVyYW5kcyBpZiB3ZSBhcmUgbm90CisgICAgIHJld3JpdGluZyBpdCBpbnRvIHBhcmFs bGVsLiAgKi8KKyAgRk1BX1NUQVRFX0NST1NTX0JBQ0tFREdFLAorCisgIC8qIFRoZXJlIGFyZSBt dWx0aXBsZSBGTUEgY2FuZGlkYXRlcyBpbiB0aGUgb3AgbGlzdC4gIEF2b2lkIHN3YXBwaW5nIG9w ZXJhbmRzCisgICAgIGluIHRoaXMgY2FzZS4gICovCisgIEZNQV9TVEFURV9NVUxUSVBMRQorfTsK KwogI2RlZmluZSBTUEVDSUFMX0JJQVNFRF9FTkRfU1RNVCAwIC8qIEl0IGlzIHRoZSBlbmQgc3Rt dCBvZiBhbGwgb3BzLiAgKi8KICNkZWZpbmUgQklBU0VEX0VORF9TVE1UIDEgLyogSXQgaXMgdGhl IGVuZCBzdG10IG9mIG5vcm1hbCBvciBiaWFzZWQgb3BzLiAgKi8KICNkZWZpbmUgTk9STUFMX0VO RF9TVE1UIDIgLyogSXQgaXMgdGhlIGVuZCBzdG10IG9mIG5vcm1hbCBvcHMuICAqLwpAQCAtNTUw Nyw3ICs1NTI1LDcgQEAgZ2V0X3JlYXNzb2NpYXRpb25fd2lkdGggKGludCBvcHNfbnVtLCBlbnVt IHRyZWVfY29kZSBvcGMsCiAgICBTU0E2ID0gU1NBNCArIFNTQTU7CiAgKi8KIHN0YXRpYyB2b2lk Ci1yZXdyaXRlX2V4cHJfdHJlZV9wYXJhbGxlbCAoZ2Fzc2lnbiAqc3RtdCwgaW50IHdpZHRoLCBi b29sIGhhc19mbWEsCityZXdyaXRlX2V4cHJfdHJlZV9wYXJhbGxlbCAoZ2Fzc2lnbiAqc3RtdCwg aW50IHdpZHRoLCBmbWFfc3RhdGUgZnMsCiAJCQkgICAgY29uc3QgdmVjPG9wZXJhbmRfZW50cnkg Kj4gJm9wcykKIHsKICAgZW51bSB0cmVlX2NvZGUgb3Bjb2RlID0gZ2ltcGxlX2Fzc2lnbl9yaHNf Y29kZSAoc3RtdCk7CkBAIC01NTgyLDcgKzU2MDAsNyBAQCByZXdyaXRlX2V4cHJfdHJlZV9wYXJh bGxlbCAoZ2Fzc2lnbiAqc3RtdCwgaW50IHdpZHRoLCBib29sIGhhc19mbWEsCiAJfQogCiAgICAg ICAvKiBTd2FwIHRoZSBvcGVyYW5kcyBpZiBubyBGTUEgaW4gdGhlIGNoYWluLiAgKi8KLSAgICAg IGlmIChvcHMxLT5sZW5ndGggKCkgPiAyICYmICFoYXNfZm1hKQorICAgICAgaWYgKG9wczEtPmxl bmd0aCAoKSA+IDIgJiYgZnMgPT0gRk1BX1NUQVRFX05PTkVfT1JfU0lOR0xFKQogCXN3YXBfb3Bz X2Zvcl9iaW5hcnlfc3RtdCAoKm9wczEsIG9wczEtPmxlbmd0aCAoKSAtIDMpOwogCiAgICAgICBp ZiAoaSA8IHdpZHRoX2FjdGl2ZQpAQCAtNjc2Niw3ICs2Nzg0LDY5IEBAIHRyYW5zZm9ybV9zdG10 X3RvX211bHRpcGx5IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpLCBnaW1wbGUgKnN0bXQsCiAg ICAgfQogfQogCisvKiBHaXZlbiB0aGF0IExIUyBpcyB0aGUgcmVzdWx0IFNTQV9OQU1FIG9mIE9Q UywgcmV0dXJucyB3aGV0aGVyIGl0IGhhcyBjcm9zcworICAgYmFja2VkZ2UgZGVwZW5kZW5jeToK KworICAgMS4gTEhTIGlzIGEgcGhpIGFyZ3VtZW50IGluIHRoZSBzYW1lIGJhc2ljIGJsb2NrIGl0 IGlzIGRlZmluZWQuCisKKyAgIDIuIEFuZCwgdGhlIHJlc3VsdCBvZiB0aGUgcGhpIG5vZGUgaXMg dXNlZCBpbiBPUFMuICAqLworCitzdGF0aWMgYm9vbAorcmVzdWx0X2ZlZWRzX2JhY2tfZnJvbV9w aGlfcCAodmVjPG9wZXJhbmRfZW50cnkgKj4gKm9wcywgdHJlZSBsaHMpCit7CisgIGJhc2ljX2Js b2NrIGJiID0gZ2ltcGxlX2JiIChTU0FfTkFNRV9ERUZfU1RNVCAobGhzKSk7CisgIGdpbXBsZV9z dG10X2l0ZXJhdG9yIGdzaTsKKworICAvKiBJdGVyYXRlIG92ZXIgcGhpIGFyZ3VtZW50IGluIHRo ZSBiYXNpYyBibG9jayBMSFMgaXMgZGVmaW5lZC4gICovCisgIGZvciAoZ3NpID0gZ3NpX3N0YXJ0 X3BoaXMgKGJiKTsgIWdzaV9lbmRfcCAoZ3NpKTsgZ3NpX25leHQgKCZnc2kpKQorICAgIHsKKyAg ICAgIGdwaGkgKnBoaSA9IGR5bl9jYXN0PGdwaGkgKj4gKGdzaV9zdG10IChnc2kpKTsKKyAgICAg IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBnaW1wbGVfcGhpX251bV9hcmdzIChwaGkpOyArK2kp CisJeworCSAgdHJlZSBvcCA9IFBISV9BUkdfREVGIChwaGksIGkpOworCSAgaWYgKCEob3AgPT0g bGhzICYmIGdpbXBsZV9waGlfYXJnX2VkZ2UgKHBoaSwgaSktPnNyYyA9PSBiYikpCisJICAgIGNv bnRpbnVlOworCSAgdHJlZSBwaGlfcmVzdWx0ID0gZ2ltcGxlX3BoaV9yZXN1bHQgKHBoaSk7CisJ ICBvcGVyYW5kX2VudHJ5ICpvZTsKKwkgIHVuc2lnbmVkIGludCBqOworCSAgRk9SX0VBQ0hfVkVD X0VMVCAoKm9wcywgaiwgb2UpCisJICAgIHsKKwkgICAgICBpZiAoVFJFRV9DT0RFIChvZS0+b3Ap ICE9IFNTQV9OQU1FKQorCQljb250aW51ZTsKKworCSAgICAgIC8qIFJlc3VsdCBvZiBwaGkgaXMg b3BlcmFuZCBvZiBQTFVTX0VYUFIuICAqLworCSAgICAgIGlmIChvZS0+b3AgPT0gcGhpX3Jlc3Vs dCkKKwkJcmV0dXJuIHRydWU7CisKKwkgICAgICAvKiBDaGVjayBpcyByZXN1bHQgb2YgcGhpIGlz IG9wZXJhbmQgb2YgTVVMVF9FWFBSLiAgKi8KKwkgICAgICBnaW1wbGUgKmRlZl9zdG10ID0gU1NB X05BTUVfREVGX1NUTVQgKG9lLT5vcCk7CisJICAgICAgaWYgKGlzX2dpbXBsZV9hc3NpZ24gKGRl Zl9zdG10KQorCQkgICYmIGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKGRlZl9zdG10KSA9PSBORUdB VEVfRVhQUikKKwkJeworCQkgIHRyZWUgcmhzID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChkZWZfc3Rt dCk7CisJCSAgaWYgKFRSRUVfQ09ERSAocmhzKSA9PSBTU0FfTkFNRSkKKwkJICAgIHsKKwkJICAg ICAgaWYgKHJocyA9PSBwaGlfcmVzdWx0KQorCQkJcmV0dXJuIHRydWU7CisJCSAgICAgIGRlZl9z dG10ID0gU1NBX05BTUVfREVGX1NUTVQgKHJocyk7CisJCSAgICB9CisJCX0KKwkgICAgICBpZiAo aXNfZ2ltcGxlX2Fzc2lnbiAoZGVmX3N0bXQpCisJCSAgJiYgZ2ltcGxlX2Fzc2lnbl9yaHNfY29k ZSAoZGVmX3N0bXQpID09IE1VTFRfRVhQUikKKwkJeworCQkgIGlmIChnaW1wbGVfYXNzaWduX3Jo czEgKGRlZl9zdG10KSA9PSBwaGlfcmVzdWx0CisJCSAgICAgIHx8IGdpbXBsZV9hc3NpZ25fcmhz MiAoZGVmX3N0bXQpID09IHBoaV9yZXN1bHQpCisJCSAgICByZXR1cm4gdHJ1ZTsKKwkJfQorCSAg ICB9CisJfQorICAgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCiAvKiBSZWFycmFuZ2Ugb3BzIG1h eSBoYXZlIG1vcmUgRk1BIHdoZW4gdGhlIGNoYWluIG1heSBoYXMgbW9yZSB0aGFuIDIgRk1Bcy4K KyAgIExIUyBpcyB0aGUgcmVzdWx0IFNTQV9OQU1FIG9mIE9QUy4KKwogICAgUHV0IG5vLW11bHQg b3BzIGFuZCBtdWx0IG9wcyBhbHRlcm5hdGVseSBhdCB0aGUgZW5kIG9mIHRoZSBxdWV1ZSwgd2hp Y2ggaXMKICAgIGNvbmR1Y2l2ZSB0byBnZW5lcmF0aW5nIG1vcmUgRk1BIGFuZCByZWR1Y2luZyB0 aGUgbG9zcyBvZiBGTUEgd2hlbiBicmVha2luZwogICAgdGhlIGNoYWluLgpAQCAtNjc4MSwxNCAr Njg2MSwxNSBAQCB0cmFuc2Zvcm1fc3RtdF90b19tdWx0aXBseSAoZ2ltcGxlX3N0bXRfaXRlcmF0 b3IgKmdzaSwgZ2ltcGxlICpzdG10LAogCiAgICBfNCAgPSAuRk1BIChjXzcoRCksIGRfOChEKSwg XzMpOwogICAgXzExID0gLkZNQSAoYV81KEQpLCBiXzYoRCksIF80KTsgICovCi1zdGF0aWMgYm9v bAotcmFua19vcHNfZm9yX2ZtYSAodmVjPG9wZXJhbmRfZW50cnkgKj4gKm9wcykKK3N0YXRpYyBm bWFfc3RhdGUKK3Jhbmtfb3BzX2Zvcl9mbWEgKHZlYzxvcGVyYW5kX2VudHJ5ICo+ICpvcHMsIHRy ZWUgbGhzKQogewogICBvcGVyYW5kX2VudHJ5ICpvZTsKICAgdW5zaWduZWQgaW50IGk7CiAgIHVu c2lnbmVkIGludCBvcHNfbGVuZ3RoID0gb3BzLT5sZW5ndGggKCk7CiAgIGF1dG9fdmVjPG9wZXJh bmRfZW50cnkgKj4gb3BzX211bHQ7CiAgIGF1dG9fdmVjPG9wZXJhbmRfZW50cnkgKj4gb3BzX290 aGVyczsKKyAgZm1hX3N0YXRlIGZzID0gRk1BX1NUQVRFX05PTkVfT1JfU0lOR0xFOwogCiAgIEZP Ul9FQUNIX1ZFQ19FTFQgKCpvcHMsIGksIG9lKQogICAgIHsKQEAgLTY4MTUsNiArNjg5NiwxNyBA QCByYW5rX29wc19mb3JfZm1hICh2ZWM8b3BlcmFuZF9lbnRyeSAqPiAqb3BzKQogICAgICAyLiBJ ZiBhbGwgb3BzIGFyZSBkZWZpbmVkIHdpdGggbXVsdCwgd2UgZG9uJ3QgbmVlZCB0byByZWFycmFu Z2UgdGhlbS4gICovCiAgIGlmIChvcHNfbXVsdC5sZW5ndGggKCkgPj0gMiAmJiBvcHNfbXVsdC5s ZW5ndGggKCkgIT0gb3BzX2xlbmd0aCkKICAgICB7CisgICAgICAvKiBPbiBzb21lIHBsYXRmb3Jt cywgaWYgdGhlIHJlc3VsdCBoYXMgY3Jvc3MgYmFja2VkZ2UgZGVwZW5kZW5jeSwKKwkgdHJhbnNm b3JtaW5nIGl0IGludG8gYW4gRk1BIGxlYWRzIHRvIHdvcnNlIGRhdGEgcGFyYWxsZWxpc20uICBJ ZiB3ZSdyZQorCSByZXdyaXRpbmcgdGhlIG9wIGxpc3QgdG8gcGFyYWxsZWwgd2UgZG9uJ3QgbmVl ZCB0byB3b3JyeSBhYm91dCB0aGlzLAorCSBvdGhlcndpc2Ugc3dhcCB0aGUgb3BlcmFuZHMuICAq LworICAgICAgaWYgKG1heWJlX2xlICh0cmVlX3RvX3BvbHlfaW50NjQgKFRZUEVfU0laRSAoVFJF RV9UWVBFIChsaHMpKSksCisJCSAgICBwYXJhbV9hdm9pZF9mbWFfbWF4X2JpdHMpCisJICAmJiBy ZXN1bHRfZmVlZHNfYmFja19mcm9tX3BoaV9wIChvcHMsIGxocykpCisJZnMgPSBGTUFfU1RBVEVf Q1JPU1NfQkFDS0VER0U7CisgICAgICBlbHNlCisJZnMgPSBGTUFfU1RBVEVfTVVMVElQTEU7CisK ICAgICAgIC8qIFB1dCBuby1tdWx0IG9wcyBhbmQgbXVsdCBvcHMgYWx0ZXJuYXRlbHkgYXQgdGhl IGVuZCBvZiB0aGUKIAkgcXVldWUsIHdoaWNoIGlzIGNvbmR1Y2l2ZSB0byBnZW5lcmF0aW5nIG1v cmUgRk1BIGFuZCByZWR1Y2luZyB0aGUKIAkgbG9zcyBvZiBGTUEgd2hlbiBicmVha2luZyB0aGUg Y2hhaW4uICAqLwpAQCAtNjgyOSw5ICs2OTIxLDggQEAgcmFua19vcHNfZm9yX2ZtYSAodmVjPG9w ZXJhbmRfZW50cnkgKj4gKm9wcykKIAkgIGlmIChvcGluZGV4ID4gMCkKIAkgICAgb3BpbmRleC0t OwogCX0KLSAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgcmV0dXJuIGZhbHNlOworICByZXR1 cm4gZnM7CiB9CiAvKiBSZWFzc29jaWF0ZSBleHByZXNzaW9ucyBpbiBiYXNpYyBibG9jayBCQiBh bmQgaXRzIHBvc3QtZG9taW5hdG9yIGFzCiAgICBjaGlsZHJlbi4KQEAgLTY5OTcsNyArNzA4OCw3 IEBAIHJlYXNzb2NpYXRlX2JiIChiYXNpY19ibG9jayBiYikKIAkJICBtYWNoaW5lX21vZGUgbW9k ZSA9IFRZUEVfTU9ERSAoVFJFRV9UWVBFIChsaHMpKTsKIAkJICBpbnQgb3BzX251bSA9IG9wcy5s ZW5ndGggKCk7CiAJCSAgaW50IHdpZHRoOwotCQkgIGJvb2wgaGFzX2ZtYSA9IGZhbHNlOworCQkg IGZtYV9zdGF0ZSBmcyA9IEZNQV9TVEFURV9OT05FX09SX1NJTkdMRTsKIAogCQkgIC8qIEZvciBi aW5hcnkgYml0IG9wZXJhdGlvbnMsIGlmIHRoZXJlIGFyZSBhdCBsZWFzdCAzCiAJCSAgICAgb3Bl cmFuZHMgYW5kIHRoZSBsYXN0IG9wZXJhbmQgaW4gT1BTIGlzIGEgY29uc3RhbnQsCkBAIC03MDIw LDcgKzcxMTEsNyBAQCByZWFzc29jaWF0ZV9iYiAoYmFzaWNfYmxvY2sgYmIpCiAJCQkJCQkgICAg ICBvcHRfdHlwZSkKIAkJICAgICAgJiYgKHJoc19jb2RlID09IFBMVVNfRVhQUiB8fCByaHNfY29k ZSA9PSBNSU5VU19FWFBSKSkKIAkJICAgIHsKLQkJICAgICAgaGFzX2ZtYSA9IHJhbmtfb3BzX2Zv cl9mbWEgKCZvcHMpOworCQkgICAgICBmcyA9IHJhbmtfb3BzX2Zvcl9mbWEgKCZvcHMsIGxocyk7 CiAJCSAgICB9CiAKIAkJICAvKiBPbmx5IHJld3JpdGUgdGhlIGV4cHJlc3Npb24gdHJlZSB0byBw YXJhbGxlbCBpbiB0aGUKQEAgLTcwMzcsNyArNzEyOCw3IEBAIHJlYXNzb2NpYXRlX2JiIChiYXNp Y19ibG9jayBiYikKIAkJCQkgd2lkdGgpOwogCQkgICAgICByZXdyaXRlX2V4cHJfdHJlZV9wYXJh bGxlbCAoYXNfYSA8Z2Fzc2lnbiAqPiAoc3RtdCksCiAJCQkJCQkgIHdpZHRoLAotCQkJCQkJICBo YXNfZm1hLAorCQkJCQkJICBmcywKIAkJCQkJCSAgb3BzKTsKIAkJICAgIH0KIAkJICBlbHNlCkBA IC03MDQ2LDcgKzcxMzcsNyBAQCByZWFzc29jaWF0ZV9iYiAoYmFzaWNfYmxvY2sgYmIpCiAJCQkg dG8gbWFrZSBzdXJlIHRoZSBvbmVzIHRoYXQgZ2V0IHRoZSBkb3VibGUKIAkJCSBiaW5hcnkgb3Ag YXJlIGNob3NlbiB3aXNlbHkuICAqLwogCQkgICAgICBpbnQgbGVuID0gb3BzLmxlbmd0aCAoKTsK LQkJICAgICAgaWYgKGxlbiA+PSAzICYmICFoYXNfZm1hKQorCQkgICAgICBpZiAobGVuID49IDMg JiYgZnMgIT0gRk1BX1NUQVRFX01VTFRJUExFKQogCQkJc3dhcF9vcHNfZm9yX2JpbmFyeV9zdG10 IChvcHMsIGxlbiAtIDMpOwogCiAJCSAgICAgIG5ld19saHMgPSByZXdyaXRlX2V4cHJfdHJlZSAo c3RtdCwgcmhzX2NvZGUsIDAsIG9wcywKLS0gCjIuMjUuMQoK --_002_SN6PR01MB4240A22F29D390F5B96FD057E8E0ASN6PR01MB4240prod_--