From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00069.outbound.protection.outlook.com [40.107.0.69]) by sourceware.org (Postfix) with ESMTPS id BA255385840F for ; Thu, 2 Dec 2021 14:13:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org BA255385840F Received: from DU2P250CA0004.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:231::9) by PA4PR08MB6253.eurprd08.prod.outlook.com (2603:10a6:102:e4::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.16; Thu, 2 Dec 2021 14:13:00 +0000 Received: from DB5EUR03FT034.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:231:cafe::a8) by DU2P250CA0004.outlook.office365.com (2603:10a6:10:231::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.16 via Frontend Transport; Thu, 2 Dec 2021 14:13:00 +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 DB5EUR03FT034.mail.protection.outlook.com (10.152.20.87) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.13 via Frontend Transport; Thu, 2 Dec 2021 14:13:00 +0000 Received: ("Tessian outbound dbb52aec1fa6:v110"); Thu, 02 Dec 2021 14:13:00 +0000 X-CR-MTA-TID: 64aa7808 Received: from 942385fd8cc2.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 037E949D-ADA1-4AD2-A879-BA55A08957AA.1; Thu, 02 Dec 2021 14:12:55 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 942385fd8cc2.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 02 Dec 2021 14:12:55 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WpcVGnYF13y3pyKFA+JubQwgg2qEZdyBbp2RsccgKzmLLwcTXnUG87glHjXtRqvjyvt5drDSxPdxv4IXwe5Sg/DamcJnhf34wJ5El4firQnqU++RUi51j0F7bGjNzCqz65f4Nff76ajavc0bRciNT94iY1nqXPsb3c3Qk7WWtni1Lm0eZJFRFSVU2KaLx2a6XgoM1m++DUy8/ylAnFEd1h/cCFNzNRQQuRofgSkXQ4u6sjJAU3xyQvoKi+x0Z97pKiuXRGJ1Bc5bAGI8PlEt1y7gO9uo0k58IjedA8+xqjouG+EnGpvQra80qXHD9YzgxY0fVaBkw3PG+WBuNEkq3Q== 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=ESU7mp0F7XL0s5lN31E9gaemYRH8WEXCe4yW9Q/1QR8=; b=XRKeeGHDCv9Meg5MU1T51Q4tHykbUmqqjXpd5ULX5ZUF/b0SFwAJIszxqj0+72Eb4LfZTrs99PhNmMjlcJQMzFHjV2bDe20J5EU3b+qi45R29+Cl7HZW/QH/o69vJOujiTCvWWBhfmQitO+vE/Bzn8Mb+Rtyr+n/ijmRtYaBKL2/8sNxYgS7pKjaIlCmUtWw/nHqZIUtWzmSuqGL1pWaRRSmcOM3y20EMRMQB1OLug60xFWF/EBcIOTI+E54YhTiYDgn1zECQu0Dph3eMAblhhSAfYeUT+61M5QV7nQrs/GvSLPg/bCp5962p/w0f10aMQoxJqc5qGb6Jng/dd/VWg== 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 VI1PR08MB5327.eurprd08.prod.outlook.com (2603:10a6:803:13b::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.22; Thu, 2 Dec 2021 14:12:53 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::12a:3d2c:81ff:8fcc]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::12a:3d2c:81ff:8fcc%8]) with mapi id 15.20.4734.024; Thu, 2 Dec 2021 14:12:53 +0000 From: Tamar Christina To: Richard Sandiford CC: "jlaw@tachyum.com" , nd , Richard Biener , GCC Patches Subject: RE: [PATCH]middle-end cse: Make sure duplicate elements are not entered into the equivalence set [PR103404] Thread-Topic: [PATCH]middle-end cse: Make sure duplicate elements are not entered into the equivalence set [PR103404] Thread-Index: AQHX5PRZD+XAU+VdDEyXdfalDGWtE6waNYQAgAAAtiCABPGDsA== Date: Thu, 2 Dec 2021 14:12:52 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ts-tracking-id: CFFEE57FA4FDCF4396D418EB5F33D226.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: a34609b6-b926-40f9-9dcf-08d9b59dd936 x-ms-traffictypediagnostic: VI1PR08MB5327:|PA4PR08MB6253: X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:8882;OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: tBxM6Q4+JMR/j/zTUB1zaZfA79QaTEIeWyROEIuzhOb9/EL7w/H2NEP/JRuIuKdwBMZNRIypa68RhsdA57tVppteZ9uCrRVx8Mdn6zFjKxy2ofa108+ZrshygLS6fzVYEnB5aHcGTg+spPSDXmxuFQIyMw//NWvBF4KB0FJrNRQcaur9LKPKG92n7dd4ZVOOMnX7VlUh1BOfZuDXjwVXvQANc+IR7tLvHqtILKj04kTZH2Hp9nWAi9VUHaOaa1xpCWNsBUXM6QpSRjyDhlQ14+PzqtFz2i0VdXntcGbkn/+5xDKvIZwrTOmFtaNhe3EaB6V7sDUSWpPnaQWkOzg5Oe0mt6tBTCkizOlV7woDZHYXvTCKp4I8eT9i7CPMeQY3x5g4EC9/8Leu5xoTLGRZj1d3ZLBdKR/4etYpZti2TBE3cifY4/bF8EEetSFCVhVuBBDVrsLYfnecqyA4opaPCky1mOfAwadImQPlbpKJTEYoYb6E5uJLRhSZMKE/OP7plueWo1Gnod9PeNYW+WcHfTOK4NBaWvdZOnhhiI80uu7ZYnlg4x4szwFQuN33udmyh6zfSquRHlQ1m1Z3ZFZEMhpfGDy7YkYRTSTGfVCnxwPPRyr6zBMBWNAageA3FnySPo2RD9uyZfC4wPoiPcYrK4+YUWsxYKDOrBkB401xaxWI4Eod2P0Bw85I0miMa2B2UyJzZYYkEr7QrFwMR6L9aYE6y+mVK9e8fmWztFq6avztfsUj5iBuJVG6Eab0b86DCe+uCOjc5/h1Eii1GX6BvfAMqXahNpovjI2YboLylK8= 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)(71200400001)(122000001)(6506007)(38100700002)(54906003)(99936003)(8676002)(52536014)(5660300002)(66446008)(7696005)(66556008)(66476007)(66946007)(76116006)(64756008)(6636002)(316002)(2906002)(508600001)(8936002)(9686003)(84970400001)(4326008)(186003)(6862004)(33656002)(55016003)(86362001)(38070700005)(26005); DIR:OUT; SFP:1101; Content-Type: multipart/mixed; boundary="_002_VI1PR08MB5325E4F221414A1DEA034978FF699VI1PR08MB5325eurp_" MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB5327 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: DB5EUR03FT034.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 4845c991-bb6e-43dd-77e2-08d9b59dd494 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YGYjcxAzQ7lP4pTrTxFy0NxoURNc6Tv35x1fLBTRyN0UVyiWGqgFIwmJacDXueXQ075m166BrpcS3YBY3qi68HahfSLffe8lAaLIDt+J9m/cAYOngGbrJlNOECRGPlRDJRCpaYBjRjyTEyhYUTbsthfubVluXESGt+u4crDGYPvZk1kn5uFcUCc3vYRajLI3pcsDHXfzh2/acdYZvmycVMSVhhIWUk8L7lziiaup4SI+yIe06ZlP1j25ZMlEHcwcvbJeuD8Io5JM8zOfTpmfI/8Kg5HYwG0jbysAcrmvYPWLsKt1D6pUBT3rHIHC+nemsoBn/2hhne3BkOJ+RqlRH6MBalkm9dqL2Rd/1UpNpLKylzJ72/2ZYtuvgP2+Bs4an9jKSgaDcVpe8jbnsWL/5fRmyYAPZ75n6qk92IW2txOtZZ1aOs7SiOcJwj1sJ9fg38TSPS8ChZgnVNZSIBBFE/1YcruYwh4uh1LxEjpIi5sTHLP3AksN3lg9nnFkgMSNvaaZj/knT3RaFCBykAdoH8NbNlph0wmuM9DC58O0yOfS93NoHulcycARYmqq3CoNGV4Ow5ewUi1YHGTCehXYzg1Dmms5ebu/BmbFToTAFaAyW9Q76dIYK0bWEkj53Nm+PIACGgvBPTI1kBWHpgPgUrh2TebEdTQxNeqbxIr14fWsWWLdalf4Tv5vgwkTLx6CJO+mgHpVthskGeFWqe0GyWe6BOYfTZwjmYvFyApiw4ETJWP8fbdD79PbAroE+T1jkxrfxzbec8bPU92regYFDomIb5IWykjBRy23MHLAVXk= 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)(336012)(2906002)(7696005)(99936003)(84970400001)(81166007)(86362001)(54906003)(186003)(356005)(47076005)(5660300002)(316002)(26005)(6506007)(70586007)(70206006)(6636002)(508600001)(36860700001)(8676002)(33656002)(8936002)(82310400004)(55016003)(4326008)(235185007)(52536014)(9686003)(6862004); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Dec 2021 14:13:00.8207 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a34609b6-b926-40f9-9dcf-08d9b59dd936 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: DB5EUR03FT034.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6253 X-Spam-Status: No, score=-13.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_SHORT, 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: Thu, 02 Dec 2021 14:13:09 -0000 --_002_VI1PR08MB5325E4F221414A1DEA034978FF699VI1PR08MB5325eurp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi All, He's a respin of the patch which doesn't change the complexity of insert. Richard S, since you approved the original patch could you take a look at t= his fix. --- Hi All, CSE uses equivalence classes to keep track of expressions that all have the= same values at the current point in the program. Normal equivalences through SETs only insert and perform lookups in this se= t but equivalence determined from comparisons, e.g. (insn 46 44 47 7 (set (reg:CCZ 17 flags) (compare:CCZ (reg:SI 105 [ iD.2893 ]) (const_int 0 [0]))) "cse.c":18:22 7 {*cmpsi_ccno_1} (expr_list:REG_DEAD (reg:SI 105 [ iD.2893 ]) (nil))) creates the equivalence EQ on (reg:SI 105 [ iD.2893 ]) and (const_int 0 [0]= ). This causes a merge to happen between the two equivalence sets denoted by (const_int 0 [0]) and (reg:SI 105 [ iD.2893 ]) respectively. The operation happens through merge_equiv_classes however this function has= an invariant that the classes to be merge not contain any duplicates. This is because it frees entries before merging. The given testcase when using the supplied flags trigger an ICE due to the equivalence set being (rr) p dump_class (class1) Equivalence chain for (reg:SI 105 [ iD.2893 ]): (reg:SI 105 [ iD.2893 ]) $3 =3D void (rr) p dump_class (class2) Equivalence chain for (const_int 0 [0]): (const_int 0 [0]) (reg:SI 97 [ _10 ]) (reg:SI 97 [ _10 ]) $4 =3D void This happens because the original INSN being recorded is (insn 18 17 24 2 (set (subreg:V1SI (reg:SI 97 [ _10 ]) 0) (const_vector:V1SI [ (const_int 0 [0]) ])) "cse.c":11:9 1363 {*movv1si_internal} (expr_list:REG_UNUSED (reg:SI 97 [ _10 ]) (nil))) and we end up generating two equivalences. the first one is simply that reg:SI 97 is 0. The second one is that 0 can be extracted from the V1SI, s= o subreg (subreg:V1SI (reg:SI 97) 0) 0 =3D=3D 0. This nested subreg gets fol= ded away to just reg:SI 97 and we re-insert the same equivalence. This patch changes it so that once we figure out the bucket to insert into = we check if the equivalence set already contains the entry and if so just retu= rn the existing entry and exit. While doing so it also calculates the new insertion point such that this co= de does not increase the worse case complexity of insert_with_costs. Bootstrapped Regtested on aarch64-none-linux-gnu, x86_64-pc-linux-gnu and no regressions. Ok for master? Thanks, Tamar gcc/ChangeLog: PR rtl-optimization/103404 * cse.c (insert_with_costs): Check if item exists already before adding a new entry in the equivalence class. gcc/testsuite/ChangeLog: PR rtl-optimization/103404 * gcc.target/i386/pr103404.c: New test. --- inline copy of patch --- diff --git a/gcc/cse.c b/gcc/cse.c index c1c7d0ca27b73c4b944b4719f95fece74e0358d5..be6be52376d3fb328ca6e5cced8= a0456439a9a04 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -1528,6 +1528,7 @@ insert_with_costs (rtx x, struct table_elt *classp, u= nsigned int hash, machine_mode mode, int cost, int reg_cost) { struct table_elt *elt; + struct table_elt *ins_loc =3D NULL, *next =3D NULL; =20 /* If X is a register and we haven't made a quantity for it, something is wrong. */ @@ -1537,6 +1538,51 @@ insert_with_costs (rtx x, struct table_elt *classp, = unsigned int hash, if (REG_P (x) && REGNO (x) < FIRST_PSEUDO_REGISTER) add_to_hard_reg_set (&hard_regs_in_table, GET_MODE (x), REGNO (x)); =20 + /* We cannot allow a duplicate to be entered into the equivalence sets + and so we should perform a check before we do any allocations or + change the buckets and simultaneously determine final insertion + point. */ + if (classp) + { + struct table_elt *p, *tmp; + ins_loc =3D classp->first_same_value; + + /* Check the first element on its own. */ + if (exp_equiv_p (ins_loc->exp, x, 1, false)) + return ins_loc; + + /* And also cost it on its own as the conditions for it are slightly + different from the others. */ + if (preferable (cost, reg_cost, ins_loc->cost, ins_loc->regcost) >= =3D 0) + { + /* Skip over elements that are cheaper than the element being + inserted as unequal costs means it can't be a duplicate. */ + for (p =3D ins_loc; + (next =3D p->next_same_value) + && preferable (next->cost, next->regcost, cost, reg_cost) < 0; + p =3D next) + ; + + /* Record p as the place where we want to insert elt if we are to + insert an element. */ + ins_loc =3D p; + + /* The normal search stops when we encounter an element which has th= e same + costs as us. That's where we need to insert, but we still need to check + the remaining list of equal cost things for a duplicate. */ + for (; p; p =3D tmp) + { + if (exp_equiv_p (p->exp, x, 1, false)) + return p; + + if (preferable (cost, reg_cost, p->cost, p->regcost) <=3D 0) + break; + + tmp =3D p->next_same_value; + } + } + } + /* Put an element for X into the right hash bucket. */ =20 elt =3D free_element_chain; @@ -1579,22 +1625,15 @@ insert_with_costs (rtx x, struct table_elt *classp,= unsigned int hash, } else { - /* Insert not at head of the class. */ - /* Put it after the last element cheaper than X. */ - struct table_elt *p, *next; - - for (p =3D classp; - (next =3D p->next_same_value) && CHEAPER (next, elt); - p =3D next) - ; - - /* Put it after P and before NEXT. */ + /* Insert not at head of the class. + Put it after the last element cheaper than X. + Put it after INS_LOC and before NEXT. */ elt->next_same_value =3D next; if (next) next->prev_same_value =3D elt; =20 - elt->prev_same_value =3D p; - p->next_same_value =3D elt; + elt->prev_same_value =3D ins_loc; + ins_loc->next_same_value =3D elt; elt->first_same_value =3D classp; } } diff --git a/gcc/testsuite/gcc.target/i386/pr103404.c b/gcc/testsuite/gcc.t= arget/i386/pr103404.c new file mode 100644 index 0000000000000000000000000000000000000000..66f33645301db09503fc0977fd0= f061a19e56ea5 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr103404.c @@ -0,0 +1,32 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-Og -fcse-follow-jumps -fno-dce -fno-early-inl= ining -fgcse -fharden-conditional-branches -frerun-cse-after-loop -fno-tree= -ccp -mavx5124fmaps -std=3Dc99 -w" } */ + +typedef unsigned __attribute__((__vector_size__ (4))) U; +typedef unsigned __attribute__((__vector_size__ (16))) V; +typedef unsigned __attribute__((__vector_size__ (64))) W; + +int x, y; + +V v; +W w; + +inline +int bar (U a) +{ + a |=3D x; + W k =3D + __builtin_shufflevector (v, 5 / a, + 2, 4, 0, 2, 4, 1, 0, 1, + 1, 2, 1, 3, 0, 4, 4, 0); + w =3D k; + y =3D 0; +} + +int +foo () +{ + bar ((U){0xffffffff}); + for (unsigned i; i < sizeof (foo);) + ; +} + --_002_VI1PR08MB5325E4F221414A1DEA034978FF699VI1PR08MB5325eurp_ Content-Type: application/octet-stream; name="rb15109.patch" Content-Description: rb15109.patch Content-Disposition: attachment; filename="rb15109.patch"; size=4075; creation-date="Thu, 02 Dec 2021 12:39:00 GMT"; modification-date="Thu, 02 Dec 2021 12:39:00 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jc2UuYyBiL2djYy9jc2UuYwppbmRleCBjMWM3ZDBjYTI3YjczYzRi OTQ0YjQ3MTlmOTVmZWNlNzRlMDM1OGQ1Li5iZTZiZTUyMzc2ZDNmYjMyOGNhNmU1Y2NlZDhhMDQ1 NjQzOWE5YTA0IDEwMDY0NAotLS0gYS9nY2MvY3NlLmMKKysrIGIvZ2NjL2NzZS5jCkBAIC0xNTI4 LDYgKzE1MjgsNyBAQCBpbnNlcnRfd2l0aF9jb3N0cyAocnR4IHgsIHN0cnVjdCB0YWJsZV9lbHQg KmNsYXNzcCwgdW5zaWduZWQgaW50IGhhc2gsCiAJCSAgIG1hY2hpbmVfbW9kZSBtb2RlLCBpbnQg Y29zdCwgaW50IHJlZ19jb3N0KQogewogICBzdHJ1Y3QgdGFibGVfZWx0ICplbHQ7CisgIHN0cnVj dCB0YWJsZV9lbHQgKmluc19sb2MgPSBOVUxMLCAqbmV4dCA9IE5VTEw7CgogICAvKiBJZiBYIGlz IGEgcmVnaXN0ZXIgYW5kIHdlIGhhdmVuJ3QgbWFkZSBhIHF1YW50aXR5IGZvciBpdCwKICAgICAg c29tZXRoaW5nIGlzIHdyb25nLiAgKi8KQEAgLTE1MzcsNiArMTUzOCw1MSBAQCBpbnNlcnRfd2l0 aF9jb3N0cyAocnR4IHgsIHN0cnVjdCB0YWJsZV9lbHQgKmNsYXNzcCwgdW5zaWduZWQgaW50IGhh c2gsCiAgIGlmIChSRUdfUCAoeCkgJiYgUkVHTk8gKHgpIDwgRklSU1RfUFNFVURPX1JFR0lTVEVS KQogICAgIGFkZF90b19oYXJkX3JlZ19zZXQgKCZoYXJkX3JlZ3NfaW5fdGFibGUsIEdFVF9NT0RF ICh4KSwgUkVHTk8gKHgpKTsKCisgIC8qIFdlIGNhbm5vdCBhbGxvdyBhIGR1cGxpY2F0ZSB0byBi ZSBlbnRlcmVkIGludG8gdGhlIGVxdWl2YWxlbmNlIHNldHMKKyAgICAgYW5kIHNvIHdlIHNob3Vs ZCBwZXJmb3JtIGEgY2hlY2sgYmVmb3JlIHdlIGRvIGFueSBhbGxvY2F0aW9ucyBvcgorICAgICBj aGFuZ2UgdGhlIGJ1Y2tldHMgYW5kIHNpbXVsdGFuZW91c2x5IGRldGVybWluZSBmaW5hbCBpbnNl cnRpb24KKyAgICAgcG9pbnQuICAqLworICBpZiAoY2xhc3NwKQorICAgIHsKKyAgICAgIHN0cnVj dCB0YWJsZV9lbHQgKnAsICp0bXA7CisgICAgICBpbnNfbG9jID0gY2xhc3NwLT5maXJzdF9zYW1l X3ZhbHVlOworCisgICAgICAvKiBDaGVjayB0aGUgZmlyc3QgZWxlbWVudCBvbiBpdHMgb3duLiAg Ki8KKyAgICAgIGlmIChleHBfZXF1aXZfcCAoaW5zX2xvYy0+ZXhwLCB4LCAxLCBmYWxzZSkpCisJ cmV0dXJuIGluc19sb2M7CisKKyAgICAgIC8qIEFuZCBhbHNvIGNvc3QgaXQgb24gaXQncyBvd24g YXMgdGhlIGNvbmRpdGlvbnMgZm9yIGl0IGFyZSBzbGlnaHRseQorCSBkaWZmZXJlbnQgZnJvbSB0 aGUgb3RoZXJzLiAgKi8KKyAgICAgIGlmIChwcmVmZXJhYmxlIChjb3N0LCByZWdfY29zdCwgaW5z X2xvYy0+Y29zdCwgaW5zX2xvYy0+cmVnY29zdCkgPj0gMCkKKwl7CisJICAvKiBTa2lwIG92ZXIg ZWxlbWVudHMgdGhhdCBhcmUgY2hlYXBlciB0aGFuIHRoZSBlbGVtZW50IGJlaW5nCisJICAgICBp bnNlcnRlZCBhcyB1bmVxdWFsIGNvc3RzIG1lYW5zIGl0IGNhbid0IGJlIGEgZHVwbGljYXRlLiAg Ki8KKwkgIGZvciAocCA9IGluc19sb2M7CisJICAgICAgIChuZXh0ID0gcC0+bmV4dF9zYW1lX3Zh bHVlKQorCQkgJiYgcHJlZmVyYWJsZSAobmV4dC0+Y29zdCwgbmV4dC0+cmVnY29zdCwgY29zdCwg cmVnX2Nvc3QpIDwgMDsKKwkgICAgICAgcCA9IG5leHQpCisJICAgIDsKKworCSAgLyogUmVjb3Jk IHAgYXMgdGhlIHBsYWNlIHdoZXJlIHdlIHdhbnQgdG8gaW5zZXJ0IGVsdCBpZiB3ZSBhcmUgdG8K KwkgICAgIGluc2VydCBhbiBlbGVtZW50LiAgKi8KKwkgIGluc19sb2MgPSBwOworCisgICAgICAv KiBUaGUgbm9ybWFsIHNlYXJjaCBzdG9wcyB3aGVuIHdlIGVuY291bnRlciBhbiBlbGVtZW50IHdo aWNoIGhhcyB0aGUgc2FtZQorCSBjb3N0cyBhcyB1cy4gIFRoYXQncyB3aGVyZSB3ZSBuZWVkIHRv IGluc2VydCwgYnV0IHdlIHN0aWxsIG5lZWQgdG8gY2hlY2sKKwkgdGhlIHJlbWFpbmluZyBsaXN0 IG9mIGVxdWFsIGNvc3QgdGhpbmdzIGZvciBhIGR1cGxpY2F0ZS4gICovCisgICAgICBmb3IgKDsg cDsgcCA9IHRtcCkKKwl7CisJICBpZiAoZXhwX2VxdWl2X3AgKHAtPmV4cCwgeCwgMSwgZmFsc2Up KQorCSAgICByZXR1cm4gcDsKKworCSAgaWYgKHByZWZlcmFibGUgKGNvc3QsIHJlZ19jb3N0LCBw LT5jb3N0LCBwLT5yZWdjb3N0KSA8PSAwKQorCSAgICBicmVhazsKKworCSAgdG1wID0gcC0+bmV4 dF9zYW1lX3ZhbHVlOworCX0KKyAgICAgIH0KKyAgICB9CisKICAgLyogUHV0IGFuIGVsZW1lbnQg Zm9yIFggaW50byB0aGUgcmlnaHQgaGFzaCBidWNrZXQuICAqLwoKICAgZWx0ID0gZnJlZV9lbGVt ZW50X2NoYWluOwpAQCAtMTU3OSwyMiArMTYyNSwxNSBAQCBpbnNlcnRfd2l0aF9jb3N0cyAocnR4 IHgsIHN0cnVjdCB0YWJsZV9lbHQgKmNsYXNzcCwgdW5zaWduZWQgaW50IGhhc2gsCiAJfQogICAg ICAgZWxzZQogCXsKLQkgIC8qIEluc2VydCBub3QgYXQgaGVhZCBvZiB0aGUgY2xhc3MuICAqLwot CSAgLyogUHV0IGl0IGFmdGVyIHRoZSBsYXN0IGVsZW1lbnQgY2hlYXBlciB0aGFuIFguICAqLwot CSAgc3RydWN0IHRhYmxlX2VsdCAqcCwgKm5leHQ7Ci0KLQkgIGZvciAocCA9IGNsYXNzcDsKLQkg ICAgICAgKG5leHQgPSBwLT5uZXh0X3NhbWVfdmFsdWUpICYmIENIRUFQRVIgKG5leHQsIGVsdCk7 Ci0JICAgICAgIHAgPSBuZXh0KQotCSAgICA7Ci0KLQkgIC8qIFB1dCBpdCBhZnRlciBQIGFuZCBi ZWZvcmUgTkVYVC4gICovCisJICAvKiBJbnNlcnQgbm90IGF0IGhlYWQgb2YgdGhlIGNsYXNzLgor CSAgICAgUHV0IGl0IGFmdGVyIHRoZSBsYXN0IGVsZW1lbnQgY2hlYXBlciB0aGFuIFguCisJICAg ICBQdXQgaXQgYWZ0ZXIgSU5TX0xPQyBhbmQgYmVmb3JlIE5FWFQuICAqLwogCSAgZWx0LT5uZXh0 X3NhbWVfdmFsdWUgPSBuZXh0OwogCSAgaWYgKG5leHQpCiAJICAgIG5leHQtPnByZXZfc2FtZV92 YWx1ZSA9IGVsdDsKCi0JICBlbHQtPnByZXZfc2FtZV92YWx1ZSA9IHA7Ci0JICBwLT5uZXh0X3Nh bWVfdmFsdWUgPSBlbHQ7CisJICBlbHQtPnByZXZfc2FtZV92YWx1ZSA9IGluc19sb2M7CisJICBp bnNfbG9jLT5uZXh0X3NhbWVfdmFsdWUgPSBlbHQ7CiAJICBlbHQtPmZpcnN0X3NhbWVfdmFsdWUg PSBjbGFzc3A7CiAJfQogICAgIH0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L3ByMTAzNDA0LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjEwMzQw NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAuLjY2ZjMzNjQ1MzAxZGIwOTUwM2ZjMDk3N2ZkMGYwNjFhMTllNTZlYTUK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjEwMzQw NC5jCkBAIC0wLDAgKzEsMzIgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLWFk ZGl0aW9uYWwtb3B0aW9ucyAiLU9nIC1mY3NlLWZvbGxvdy1qdW1wcyAtZm5vLWRjZSAtZm5vLWVh cmx5LWlubGluaW5nIC1mZ2NzZSAtZmhhcmRlbi1jb25kaXRpb25hbC1icmFuY2hlcyAtZnJlcnVu LWNzZS1hZnRlci1sb29wIC1mbm8tdHJlZS1jY3AgLW1hdng1MTI0Zm1hcHMgLXN0ZD1jOTkgLXci IH0gKi8KKwordHlwZWRlZiB1bnNpZ25lZCBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18g KDQpKSkgVTsKK3R5cGVkZWYgdW5zaWduZWQgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9f ICgxNikpKSBWOwordHlwZWRlZiB1bnNpZ25lZCBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXpl X18gKDY0KSkpIFc7CisKK2ludCB4LCB5OworCitWIHY7CitXIHc7CisKK2lubGluZQoraW50IGJh ciAoVSBhKQoreworICBhIHw9IHg7CisgIFcgayA9CisgICAgX19idWlsdGluX3NodWZmbGV2ZWN0 b3IgKHYsIDUgLyBhLAorCQkJICAgICAyLCA0LCAwLCAyLCA0LCAxLCAwLCAxLAorCQkJICAgICAx LCAyLCAxLCAzLCAwLCA0LCA0LCAwKTsKKyAgdyA9IGs7CisgIHkgPSAwOworfQorCitpbnQKK2Zv byAoKQoreworICBiYXIgKChVKXsweGZmZmZmZmZmfSk7CisgIGZvciAodW5zaWduZWQgaTsgaSA8 IHNpemVvZiAoZm9vKTspCisgICAgOworfQorCg== --_002_VI1PR08MB5325E4F221414A1DEA034978FF699VI1PR08MB5325eurp_--