From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2043.outbound.protection.outlook.com [40.107.105.43]) by sourceware.org (Postfix) with ESMTPS id 307013858D39 for ; Tue, 3 Oct 2023 10:27:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 307013858D39 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=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=ly9s6MSha/dDbfPQ6A94+Ph8HfF6Epv69FbndUhrtlY=; b=DQpJx8qoyMJ0gfHkyFRlD9rylF9vPK87obD7gmeEU4kJ2eC5fqDcgFWT0G/dmKwB5ErZswyazbUALbF2Nk/Q1X9BSBJz6eMrTy4y4SmH9OQD/pCdFt6Dao/A0Sw4nrPPCGt+N9TPRlTXl4Hldr8elJZ7VRaK5l9kIzJxwgZb9ek= Received: from DU2PR04CA0351.eurprd04.prod.outlook.com (2603:10a6:10:2b4::10) by PA4PR08MB6143.eurprd08.prod.outlook.com (2603:10a6:102:ed::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.28; Tue, 3 Oct 2023 10:27:26 +0000 Received: from DBAEUR03FT042.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:2b4:cafe::c) by DU2PR04CA0351.outlook.office365.com (2603:10a6:10:2b4::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.33 via Frontend Transport; Tue, 3 Oct 2023 10:27:25 +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 DBAEUR03FT042.mail.protection.outlook.com (100.127.142.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.21 via Frontend Transport; Tue, 3 Oct 2023 10:27:25 +0000 Received: ("Tessian outbound ab4fc72d2cd4:v211"); Tue, 03 Oct 2023 10:27:25 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 382d06dd2ba4283c X-CR-MTA-TID: 64aa7808 Received: from 477ef938f84d.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 135E0317-9D1E-46DD-BAFA-D21C6F34F077.1; Tue, 03 Oct 2023 10:27:18 +0000 Received: from EUR02-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 477ef938f84d.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 03 Oct 2023 10:27:18 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cLfRfDK04/+UDfS5fgViQCptoCmnbkPFfKqIIQiE1TSIn9e4q+GWuVLGdUo6WgpE0wwKsfltpKrHOVZd5GjbUyMnTT/hsHOeasGWWPZG2mOedMxgWyqu+481ULH1ndnmQdu3ySYpgJkaPtLhgoS9imA0cYu/kcwhM33HLwzp3uoQXzZUSwBfWp6z3GEwqgHoic1zvCjVpSQwdQBDjYojCVjb+s9W4JXH13O2HPC03BZUNtzEtt/379Ksdc6d8qdfCPBHeOJ3W3Fakpzp2L0y+ypPKs/OPWaHNi59cXbp6KU/TdOKR8rNIQzl5M0PhTEZLtr2WY1rs3lwGExM6VBiVA== 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=ly9s6MSha/dDbfPQ6A94+Ph8HfF6Epv69FbndUhrtlY=; b=UoIc6lDSfelVjVN/nEvAPAfVvWYTVumBE+QK3wypGRXINmbT+AOIF1rL4ZX7YuvFahB5uvGzvb+if6C/qYbW14XCbPXXK1nmdR7wFW3lGQTJWjoucoMt8XhDDj/JGCakAT1demjo9oUDSZRq3VvY6eni7puvSI3X40+4UFg0fO9FhGw3VPPmJJkwJey0EwynpoNKuBlPzD3882H7LLQSPCf5Z9aBv2WBl9BYdCLDcNeuId3XxOZJ7lgIleZ7YowEE/A0fTiUTT2aWy1NjHAydZfSpaLDlSymuJ04qhJcMVyJJCJX56178ITWNjYr+wfNxpQPmkS2pn6NVGF95P9eaQ== 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=ly9s6MSha/dDbfPQ6A94+Ph8HfF6Epv69FbndUhrtlY=; b=DQpJx8qoyMJ0gfHkyFRlD9rylF9vPK87obD7gmeEU4kJ2eC5fqDcgFWT0G/dmKwB5ErZswyazbUALbF2Nk/Q1X9BSBJz6eMrTy4y4SmH9OQD/pCdFt6Dao/A0Sw4nrPPCGt+N9TPRlTXl4Hldr8elJZ7VRaK5l9kIzJxwgZb9ek= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by AS8PR08MB6695.eurprd08.prod.outlook.com (2603:10a6:20b:399::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.33; Tue, 3 Oct 2023 10:27:16 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::662f:8e26:1bf8:aaa1]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::662f:8e26:1bf8:aaa1%7]) with mapi id 15.20.6838.033; Tue, 3 Oct 2023 10:27:16 +0000 From: Tamar Christina To: Jakub Jelinek CC: "gcc-patches@gcc.gnu.org" , nd , "jwakely@redhat.com" Subject: RE: [PATCH]middle-end: Recursively check is_trivially_copyable_or_pair in vec.h Thread-Topic: [PATCH]middle-end: Recursively check is_trivially_copyable_or_pair in vec.h Thread-Index: AQHZ9S1sAApQkqVeFk2GOXr6jrXFlbA2fFeAgAAwEcA= Date: Tue, 3 Oct 2023 10:27:16 +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_|AS8PR08MB6695:EE_|DBAEUR03FT042:EE_|PA4PR08MB6143:EE_ X-MS-Office365-Filtering-Correlation-Id: 3c20dd5e-a4ca-4801-0ba2-08dbc3fb562e 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: 9lbORf7WEpzL7kfl90Mn28a92Eq20cT270nLs6ZPznQj7EFA9xmO32HXalqQL/qx2N9YSgQchpyEejxlf7YnqFM9RsSlA37BfmMf9eRzunDY8Rq3pgin1Z2LU0Yd4cvHupQM6GZbQjkO48XlKPCN/bkDlDF5NIPrav9r1J4IUwY0s3MzcwpFFYjkkNGLf68maU6cKrdZwH6h++Lf1f5uA0p1DO1Dt1KfgoZHElRSwtezbtOhg8ZTQszk8fRAr5zt/LHRysS3fuas2fORJktg3k07blSpgUCcU6MQEfOfmGTcaY2zP1r0aj9sspP0SmHI1bWvuh4MBRVIfOKJxVGs3+lyKh8xin+HI9hOzeoX9WMIspcLzyFqGeivDcS+4Ztatqqdgg1LtNxpCfTipd/j57N3M9U3FpHk7dbWNyM6miJYAzmQyEZ2zbUvMneVu3TqoxuVkEiD9GHx54p1hHIIBK/yUNHaNfBARCsxjpKvOieh2PimasLlxh1L4ZSSVwCcNuAa+Y+BsDAQHTn5CXRbJi5BtaI1Qq0KTl8X6QlVlns2DwT8bIpoKji3p21+2x+z5glseHKwION923Fb4vUDPBAOrFjgaT2gwltsITJH/N1x76FyZzbD0L1+VU18lXX0 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)(366004)(396003)(39860400002)(376002)(136003)(346002)(230922051799003)(64100799003)(186009)(451199024)(1800799009)(83380400001)(33656002)(52536014)(5660300002)(86362001)(26005)(53546011)(4326008)(71200400001)(7696005)(8676002)(6506007)(122000001)(8936002)(9686003)(99936003)(55016003)(38100700002)(38070700005)(2906002)(316002)(478600001)(41300700001)(66946007)(66556008)(6916009)(64756008)(66446008)(66476007)(54906003)(76116006);DIR:OUT;SFP:1101; Content-Type: multipart/mixed; boundary="_002_VI1PR08MB5325A6559815D56154B4A209FFC4AVI1PR08MB5325eurp_" MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6695 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: DBAEUR03FT042.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 610b8656-17ff-4ca0-67e6-08dbc3fb50de X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mtp/7BhdwwOAp5HbGZb+RgzzmzMIYxpQDNkRRS+HeE23D6TgOja6Vj4JFwAkP3J4P08lNzrQ5HrWwYjvLUR9VWS9oU6M5jEoY8hUKZG4e7e6PWh3qa2y7+Z2/PSvqtpXXBEvmqQeiicz4dlJ7XJvdD1SIS9IeiDM5m+S7eC1AwLA6vXOMEbRfbefjS28/trQVsywuUaOhIhhQUcmznnS2zPKilkpM/ASPdVgm12UiJKdxiNA94fPG/pcb1+FxZz43RaStWBk7IESxcxAnIZXd5Xu7/w8tjuCcBWU1iB4I3U5L9mj0kbwww2FTTDvXInSwXOOERVb+9YbVXw1Le3DAiZznz76yf46qRcQeUbNlXJbU5+TVrvYPzDBCdJoKA1ZDnGKgYEMoakmi8RJ2xgpsduiWy5jpbL4seTEO9S9Ed80Oar62JTGJr5SrU3bw4i4cfAbmU89CpNVC7pIJ+xbHRi8XeaGMrANBA6no1q79emSuMcKxenPrxv5p3o8LIkcExIROHp2Rm5WxWnBSbdO2GTdy1cvqfpcB2qw476iPMbwcuOFlm/r6uk58eTh5ze+d3/AfA+is59jHz9J2SIDe0vGvM0Ij2BuENgMcAU/OYxFzvdOhSEI7x3f8Y7XHOdxtiqgv09LbGiArbvVwq7cPek63d+GhjeqY2OzVXlM6mn1BoTfBmA9EUHIvALEqNe7OskdNXUrUbD7DZli4LEg5WJObuq/O8qXQ1YFl7jCgosGaXcGWvNYYjA8qrmaqWbw 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)(39860400002)(346002)(396003)(136003)(230922051799003)(64100799003)(451199024)(82310400011)(1800799009)(186009)(36840700001)(40470700004)(46966006)(107886003)(40460700003)(55016003)(40480700001)(53546011)(7696005)(478600001)(6506007)(47076005)(36860700001)(99936003)(235185007)(86362001)(356005)(82740400003)(336012)(81166007)(70586007)(5660300002)(26005)(8936002)(9686003)(83380400001)(41300700001)(33656002)(54906003)(8676002)(316002)(70206006)(2906002)(52536014)(4326008)(6862004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Oct 2023 10:27:25.2810 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3c20dd5e-a4ca-4801-0ba2-08dbc3fb562e 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: DBAEUR03FT042.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6143 X-Spam-Status: No, score=-12.4 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,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_VI1PR08MB5325A6559815D56154B4A209FFC4AVI1PR08MB5325eurp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable > -----Original Message----- > From: Jakub Jelinek > Sent: Monday, October 2, 2023 2:21 PM > To: Tamar Christina > Cc: gcc-patches@gcc.gnu.org; nd ; jwakely@redhat.com > Subject: Re: [PATCH]middle-end: Recursively check > is_trivially_copyable_or_pair in vec.h >=20 > On Mon, Oct 02, 2023 at 01:38:53PM +0100, Tamar Christina wrote: > > Hi All, > > > > I recently committed a patch that uses a nested std::pair in the second > argument. > > It temporarily adds a second ranking variable for sorting and then late= r drops > it. > > > > This hits the newly added assert in vec.h. This assert made some > > relaxation for std::pair but doesn't allow this case through. The > > patch allows a recursive std::pair in the second argument which fixes > bootstrap. >=20 > I must say I still don't understand why using a struct ifcvt_arg_entry { = tree arg; > unsigned len, occur; }; with comments describing what the members mean > wouldn't be a better fix, in the sorting function what exactly means > x{1,2}.second.first and x{1,2}.second.second isn't easily understandable, > neither from the identifiers nor from any comments. > Seems because you use 2 separate vectors, one with just tree elements and > another with those tree elements + 2 unsigned values cached from it for t= he > sorting purpose and then rewrite the original tree vector after sorting, = I don't > really see why nested std::pair would be a better match for it than a nam= ed > structure. Furthermore, why populate args first, then compute the extra = 2 > integers in another loop pushing to argsKV and finally overwrite args wit= h > sorted values? Can't the first loop push tree with the 2 integers alread= y? > what is the point of not using this structure later on when both args and > argsKV vectors are live until the end of the same function? > Can't you either pass that argsKV to others, having just one vector, or a= t least > release the other vector when you don't really need it? > Formatting style, swap? arg1 : arg0 isn't correctly formatted, missing sp= ace > before ?. >=20 > Also, ArgEntry is CamelCase which we (usually) don't use in GCC and > additionally doesn't seem to be unique enough for ODR purposes. > Ditto argsKV. >=20 Hi All, This refactors the code to remove the args cache and index lookups in favor of a single structure. It also again, removes the use of std::sort as previously requested but avoids the new asserts in trunk. Bootstrapped Regtested on aarch64-none-linux-gnu, x86_64-linux-gnu and no issues. Ok for master? Thanks, Tamar gcc/ChangeLog: * tree-if-conv.cc (typedef struct ifcvt_arg_entry): New. (cmp_arg_entry): New. (gen_phi_arg_condition, gen_phi_nest_statement, predicate_scalar_phi): Use them. --- inline copy of patch ---- diff --git a/gcc/tree-if-conv.cc b/gcc/tree-if-conv.cc index a8c915913aed267edfb3ebd2c530aeca7cf51832..f7037bd42494b3982d2efd593ba= 276812b8d2f4f 100644 --- a/gcc/tree-if-conv.cc +++ b/gcc/tree-if-conv.cc @@ -1927,11 +1927,32 @@ gen_simplified_condition (tree cond, scalar_cond_ma= sked_set_type &cond_set) return cond; } =20 +/* Structure used to track meta-data on PHI arguments used to generate + most efficient comparison sequence to slatten a PHI node. */ + +typedef struct ifcvt_arg_entry +{ + /* The PHI node argument value. */ + tree arg; + + /* The number of compares required to reach this PHI node from start of = the + BB being if-converted. */ + unsigned num_compares; + + /* The number of times this PHI node argument appears in the current PHI + node. */ + unsigned occurs; + + /* The indices at which this PHI arg occurs inside the PHI node. */ + vec indexes; +} ifcvt_arg_entry_t; + /* Produce condition for all occurrences of ARG in PHI node. Set *INVERT as to whether the condition is inverted. */ =20 static tree -gen_phi_arg_condition (gphi *phi, vec *occur, gimple_stmt_iterator *g= si, +gen_phi_arg_condition (gphi *phi, ifcvt_arg_entry_t &arg, + gimple_stmt_iterator *gsi, scalar_cond_masked_set_type &cond_set, bool *invert) { int len; @@ -1941,11 +1962,11 @@ gen_phi_arg_condition (gphi *phi, vec *occur, = gimple_stmt_iterator *gsi, edge e; =20 *invert =3D false; - len =3D occur->length (); + len =3D arg.indexes.length (); gcc_assert (len > 0); for (i =3D 0; i < len; i++) { - e =3D gimple_phi_arg_edge (phi, (*occur)[i]); + e =3D gimple_phi_arg_edge (phi, arg.indexes[i]); c =3D bb_predicate (e->src); if (is_true_predicate (c)) { @@ -2010,22 +2031,21 @@ gen_phi_arg_condition (gphi *phi, vec *occur, = gimple_stmt_iterator *gsi, static tree gen_phi_nest_statement (gphi *phi, gimple_stmt_iterator *gsi, scalar_cond_masked_set_type &cond_set, tree type, - hash_map> &phi_arg_map, - gimple **res_stmt, tree lhs0, vec &args, - unsigned idx) + gimple **res_stmt, tree lhs0, + vec &args, unsigned idx) { if (idx =3D=3D args.length ()) - return args[idx - 1]; + return args[idx - 1].arg; =20 - vec *indexes =3D phi_arg_map.get (args[idx - 1]); bool invert; - tree cond =3D gen_phi_arg_condition (phi, indexes, gsi, cond_set, &inver= t); - tree arg1 =3D gen_phi_nest_statement (phi, gsi, cond_set, type, phi_arg_= map, - res_stmt, lhs0, args, idx + 1); + tree cond =3D gen_phi_arg_condition (phi, args[idx - 1], gsi, cond_set, + &invert); + tree arg1 =3D gen_phi_nest_statement (phi, gsi, cond_set, type, res_stmt= , lhs0, + args, idx + 1); =20 unsigned prev =3D idx; unsigned curr =3D prev - 1; - tree arg0 =3D args[curr]; + tree arg0 =3D args[curr].arg; tree rhs, lhs; if (idx > 1) lhs =3D make_temp_ssa_name (type, NULL, "_ifc_"); @@ -2045,6 +2065,25 @@ gen_phi_nest_statement (gphi *phi, gimple_stmt_itera= tor *gsi, return lhs; } =20 +static int +cmp_arg_entry (const void *p1, const void *p2) +{ + const ifcvt_arg_entry sval1 =3D *(const ifcvt_arg_entry *)p1; + const ifcvt_arg_entry sval2 =3D *(const ifcvt_arg_entry *)p2; + + if (sval1.num_compares < sval2.num_compares) + return -1; + else if (sval1.num_compares > sval2.num_compares) + return 1; + + if (sval1.occurs < sval2.occurs) + return -1; + else if (sval1.occurs > sval2.occurs) + return 1; + + return 0; +} + /* Replace a scalar PHI node with a COND_EXPR using COND as condition. This routine can handle PHI nodes with more than two arguments. =20 @@ -2167,61 +2206,53 @@ predicate_scalar_phi (gphi *phi, gimple_stmt_iterat= or *gsi) /* Create hashmap for PHI node which contain vector of argument indexes having the same value. */ bool swap =3D false; - hash_map > phi_arg_map; + hash_map > phi_arg_map; unsigned int num_args =3D gimple_phi_num_args (phi); /* Vector of different PHI argument values. */ - auto_vec args (num_args); + auto_vec args; =20 - /* Compute phi_arg_map. */ + /* Compute phi_arg_map, determine the list of unique PHI args and the in= dices + where they are in the PHI node. The indices will be used to determin= e + the conditions to apply and their complexity. */ for (i =3D 0; i < num_args; i++) { tree arg; =20 arg =3D gimple_phi_arg_def (phi, i); - if (!phi_arg_map.get (arg)) - args.quick_push (arg); phi_arg_map.get_or_insert (arg).safe_push (i); } =20 - /* Determine element with max number of occurrences and complexity. Loo= king at only - number of occurrences as a measure for complexity isn't enough as all= usages can - be unique but the comparisons to reach the PHI node differ per branch= . */ - typedef std::pair > ArgEntry; - auto_vec argsKV; - for (i =3D 0; i < args.length (); i++) + /* Determine element with max number of occurrences and complexity. Loo= king + at only number of occurrences as a measure for complexity isn't enoug= h as + all usages can be unique but the comparisons to reach the PHI node di= ffer + per branch. */ + for (auto entry : phi_arg_map) { unsigned int len =3D 0; - for (int index : phi_arg_map.get (args[i])) + for (int index : entry.second) { edge e =3D gimple_phi_arg_edge (phi, index); len +=3D get_bb_num_predicate_stmts (e->src); } =20 - unsigned occur =3D phi_arg_map.get (args[i])->length (); + unsigned occur =3D entry.second.length (); if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, "Ranking %d as len=3D%d, idx=3D%d\n", i, len, occur); - argsKV.safe_push ({ args[i], { len, occur }}); + args.safe_push ({ entry.first, len, occur, entry.second }); } =20 /* Sort elements based on rankings ARGS. */ - std::sort(argsKV.begin(), argsKV.end(), [](const ArgEntry &left, - const ArgEntry &right) { - return left.second < right.second; - }); - - for (i =3D 0; i < args.length (); i++) - args[i] =3D argsKV[i].first; + args.qsort (cmp_arg_entry); =20 /* Handle one special case when number of arguments with different value= s is equal 2 and one argument has the only occurrence. Such PHI can be handled as if would have only 2 arguments. */ - if (args.length () =3D=3D 2 && phi_arg_map.get (args[0])->length () =3D= =3D 1) + if (args.length () =3D=3D 2 + && args[0].indexes.length () =3D=3D 1) { - vec *indexes; - indexes =3D phi_arg_map.get (args[0]); - index0 =3D (*indexes)[0]; - arg0 =3D args[0]; - arg1 =3D args[1]; + index0 =3D args[0].indexes[0]; + arg0 =3D args[0].arg; + arg1 =3D args[1].arg; e =3D gimple_phi_arg_edge (phi, index0); cond =3D bb_predicate (e->src); if (TREE_CODE (cond) =3D=3D TRUTH_NOT_EXPR) @@ -2235,8 +2266,8 @@ predicate_scalar_phi (gphi *phi, gimple_stmt_iterator= *gsi) if (!(is_cond_scalar_reduction (phi, &reduc, arg0 , arg1, &op0, &op1, true, &has_nop, &nop_reduc))) rhs =3D fold_build_cond_expr (TREE_TYPE (res), unshare_expr (cond), - swap? arg1 : arg0, - swap? arg0 : arg1); + swap ? arg1 : arg0, + swap ? arg0 : arg1); else { /* Convert reduction stmt into vectorizable form. */ @@ -2252,8 +2283,8 @@ predicate_scalar_phi (gphi *phi, gimple_stmt_iterator= *gsi) { /* Common case. */ tree type =3D TREE_TYPE (gimple_phi_result (phi)); - gen_phi_nest_statement (phi, gsi, cond_set, type, phi_arg_map, - &new_stmt, res, args, 1); + gen_phi_nest_statement (phi, gsi, cond_set, type, &new_stmt, res, + args, 1); } =20 if (dump_file && (dump_flags & TDF_DETAILS)) --_002_VI1PR08MB5325A6559815D56154B4A209FFC4AVI1PR08MB5325eurp_ Content-Type: application/octet-stream; name="rb17797.patch" Content-Description: rb17797.patch Content-Disposition: attachment; filename="rb17797.patch"; size=7840; creation-date="Tue, 03 Oct 2023 10:26:50 GMT"; modification-date="Tue, 03 Oct 2023 10:27:16 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy90cmVlLWlmLWNvbnYuY2MgYi9nY2MvdHJlZS1pZi1jb252LmNjCmlu ZGV4IGE4YzkxNTkxM2FlZDI2N2VkZmIzZWJkMmM1MzBhZWNhN2NmNTE4MzIuLmY3MDM3YmQ0MjQ5 NGIzOTgyZDJlZmQ1OTNiYTI3NjgxMmI4ZDJmNGYgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLWlmLWNv bnYuY2MKKysrIGIvZ2NjL3RyZWUtaWYtY29udi5jYwpAQCAtMTkyNywxMSArMTkyNywzMiBAQCBn ZW5fc2ltcGxpZmllZF9jb25kaXRpb24gKHRyZWUgY29uZCwgc2NhbGFyX2NvbmRfbWFza2VkX3Nl dF90eXBlICZjb25kX3NldCkKICAgcmV0dXJuIGNvbmQ7CiB9CiAKKy8qIFN0cnVjdHVyZSB1c2Vk IHRvIHRyYWNrIG1ldGEtZGF0YSBvbiBQSEkgYXJndW1lbnRzIHVzZWQgdG8gZ2VuZXJhdGUKKyAg IG1vc3QgZWZmaWNpZW50IGNvbXBhcmlzb24gc2VxdWVuY2UgdG8gc2xhdHRlbiBhIFBISSBub2Rl LiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgaWZjdnRfYXJnX2VudHJ5Cit7CisgIC8qIFRoZSBQSEkg bm9kZSBhcmd1bWVudCB2YWx1ZS4gICovCisgIHRyZWUgYXJnOworCisgIC8qIFRoZSBudW1iZXIg b2YgY29tcGFyZXMgcmVxdWlyZWQgdG8gcmVhY2ggdGhpcyBQSEkgbm9kZSBmcm9tIHN0YXJ0IG9m IHRoZQorICAgICBCQiBiZWluZyBpZi1jb252ZXJ0ZWQuICAqLworICB1bnNpZ25lZCBudW1fY29t cGFyZXM7CisKKyAgLyogVGhlIG51bWJlciBvZiB0aW1lcyB0aGlzIFBISSBub2RlIGFyZ3VtZW50 IGFwcGVhcnMgaW4gdGhlIGN1cnJlbnQgUEhJCisgICAgIG5vZGUuICAqLworICB1bnNpZ25lZCBv Y2N1cnM7CisKKyAgLyogVGhlIGluZGljZXMgYXQgd2hpY2ggdGhpcyBQSEkgYXJnIG9jY3VycyBp bnNpZGUgdGhlIFBISSBub2RlLiAgKi8KKyAgdmVjIDxpbnQ+IGluZGV4ZXM7Cit9IGlmY3Z0X2Fy Z19lbnRyeV90OworCiAvKiBQcm9kdWNlIGNvbmRpdGlvbiBmb3IgYWxsIG9jY3VycmVuY2VzIG9m IEFSRyBpbiBQSEkgbm9kZS4gIFNldCAqSU5WRVJUCiAgICBhcyB0byB3aGV0aGVyIHRoZSBjb25k aXRpb24gaXMgaW52ZXJ0ZWQuICAqLwogCiBzdGF0aWMgdHJlZQotZ2VuX3BoaV9hcmdfY29uZGl0 aW9uIChncGhpICpwaGksIHZlYzxpbnQ+ICpvY2N1ciwgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdz aSwKK2dlbl9waGlfYXJnX2NvbmRpdGlvbiAoZ3BoaSAqcGhpLCBpZmN2dF9hcmdfZW50cnlfdCAm YXJnLAorCQkgICAgICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwKIAkJICAgICAgIHNjYWxh cl9jb25kX21hc2tlZF9zZXRfdHlwZSAmY29uZF9zZXQsIGJvb2wgKmludmVydCkKIHsKICAgaW50 IGxlbjsKQEAgLTE5NDEsMTEgKzE5NjIsMTEgQEAgZ2VuX3BoaV9hcmdfY29uZGl0aW9uIChncGhp ICpwaGksIHZlYzxpbnQ+ICpvY2N1ciwgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwKICAgZWRn ZSBlOwogCiAgICppbnZlcnQgPSBmYWxzZTsKLSAgbGVuID0gb2NjdXItPmxlbmd0aCAoKTsKKyAg bGVuID0gYXJnLmluZGV4ZXMubGVuZ3RoICgpOwogICBnY2NfYXNzZXJ0IChsZW4gPiAwKTsKICAg Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQogICAgIHsKLSAgICAgIGUgPSBnaW1wbGVfcGhpX2Fy Z19lZGdlIChwaGksICgqb2NjdXIpW2ldKTsKKyAgICAgIGUgPSBnaW1wbGVfcGhpX2FyZ19lZGdl IChwaGksIGFyZy5pbmRleGVzW2ldKTsKICAgICAgIGMgPSBiYl9wcmVkaWNhdGUgKGUtPnNyYyk7 CiAgICAgICBpZiAoaXNfdHJ1ZV9wcmVkaWNhdGUgKGMpKQogCXsKQEAgLTIwMTAsMjIgKzIwMzEs MjEgQEAgZ2VuX3BoaV9hcmdfY29uZGl0aW9uIChncGhpICpwaGksIHZlYzxpbnQ+ICpvY2N1ciwg Z2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwKIHN0YXRpYyB0cmVlCiBnZW5fcGhpX25lc3Rfc3Rh dGVtZW50IChncGhpICpwaGksIGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksCiAJCQlzY2FsYXJf Y29uZF9tYXNrZWRfc2V0X3R5cGUgJmNvbmRfc2V0LCB0cmVlIHR5cGUsCi0JCQloYXNoX21hcDx0 cmVlX29wZXJhbmRfaGFzaCwgYXV0b192ZWM8aW50Pj4gJnBoaV9hcmdfbWFwLAotCQkJZ2ltcGxl ICoqcmVzX3N0bXQsIHRyZWUgbGhzMCwgdmVjPHRyZWU+ICZhcmdzLAotCQkJdW5zaWduZWQgaWR4 KQorCQkJZ2ltcGxlICoqcmVzX3N0bXQsIHRyZWUgbGhzMCwKKwkJCXZlYzxzdHJ1Y3QgaWZjdnRf YXJnX2VudHJ5PiAmYXJncywgdW5zaWduZWQgaWR4KQogewogICBpZiAoaWR4ID09IGFyZ3MubGVu Z3RoICgpKQotICAgIHJldHVybiBhcmdzW2lkeCAtIDFdOworICAgIHJldHVybiBhcmdzW2lkeCAt IDFdLmFyZzsKIAotICB2ZWM8aW50PiAqaW5kZXhlcyA9IHBoaV9hcmdfbWFwLmdldCAoYXJnc1tp ZHggLSAxXSk7CiAgIGJvb2wgaW52ZXJ0OwotICB0cmVlIGNvbmQgPSBnZW5fcGhpX2FyZ19jb25k aXRpb24gKHBoaSwgaW5kZXhlcywgZ3NpLCBjb25kX3NldCwgJmludmVydCk7Ci0gIHRyZWUgYXJn MSA9IGdlbl9waGlfbmVzdF9zdGF0ZW1lbnQgKHBoaSwgZ3NpLCBjb25kX3NldCwgdHlwZSwgcGhp X2FyZ19tYXAsCi0JCQkJICAgICAgcmVzX3N0bXQsIGxoczAsIGFyZ3MsIGlkeCArIDEpOworICB0 cmVlIGNvbmQgPSBnZW5fcGhpX2FyZ19jb25kaXRpb24gKHBoaSwgYXJnc1tpZHggLSAxXSwgZ3Np LCBjb25kX3NldCwKKwkJCQkgICAgICZpbnZlcnQpOworICB0cmVlIGFyZzEgPSBnZW5fcGhpX25l c3Rfc3RhdGVtZW50IChwaGksIGdzaSwgY29uZF9zZXQsIHR5cGUsIHJlc19zdG10LCBsaHMwLAor CQkJCSAgICAgIGFyZ3MsIGlkeCArIDEpOwogCiAgIHVuc2lnbmVkIHByZXYgPSBpZHg7CiAgIHVu c2lnbmVkIGN1cnIgPSBwcmV2IC0gMTsKLSAgdHJlZSBhcmcwID0gYXJnc1tjdXJyXTsKKyAgdHJl ZSBhcmcwID0gYXJnc1tjdXJyXS5hcmc7CiAgIHRyZWUgcmhzLCBsaHM7CiAgIGlmIChpZHggPiAx KQogICAgIGxocyA9IG1ha2VfdGVtcF9zc2FfbmFtZSAodHlwZSwgTlVMTCwgIl9pZmNfIik7CkBA IC0yMDQ1LDYgKzIwNjUsMjUgQEAgZ2VuX3BoaV9uZXN0X3N0YXRlbWVudCAoZ3BoaSAqcGhpLCBn aW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpLAogICByZXR1cm4gbGhzOwogfQogCitzdGF0aWMgaW50 CitjbXBfYXJnX2VudHJ5IChjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCit7CisgIGNv bnN0IGlmY3Z0X2FyZ19lbnRyeSBzdmFsMSA9ICooY29uc3QgaWZjdnRfYXJnX2VudHJ5ICopcDE7 CisgIGNvbnN0IGlmY3Z0X2FyZ19lbnRyeSBzdmFsMiA9ICooY29uc3QgaWZjdnRfYXJnX2VudHJ5 ICopcDI7CisKKyAgaWYgKHN2YWwxLm51bV9jb21wYXJlcyA8IHN2YWwyLm51bV9jb21wYXJlcykK KyAgICByZXR1cm4gLTE7CisgIGVsc2UgaWYgKHN2YWwxLm51bV9jb21wYXJlcyA+IHN2YWwyLm51 bV9jb21wYXJlcykKKyAgICByZXR1cm4gMTsKKworICBpZiAoc3ZhbDEub2NjdXJzIDwgc3ZhbDIu b2NjdXJzKQorICAgIHJldHVybiAtMTsKKyAgZWxzZSBpZiAoc3ZhbDEub2NjdXJzID4gc3ZhbDIu b2NjdXJzKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCiAvKiBSZXBsYWNlIGEg c2NhbGFyIFBISSBub2RlIHdpdGggYSBDT05EX0VYUFIgdXNpbmcgQ09ORCBhcyBjb25kaXRpb24u CiAgICBUaGlzIHJvdXRpbmUgY2FuIGhhbmRsZSBQSEkgbm9kZXMgd2l0aCBtb3JlIHRoYW4gdHdv IGFyZ3VtZW50cy4KIApAQCAtMjE2Nyw2MSArMjIwNiw1MyBAQCBwcmVkaWNhdGVfc2NhbGFyX3Bo aSAoZ3BoaSAqcGhpLCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpKQogICAvKiBDcmVhdGUgaGFz aG1hcCBmb3IgUEhJIG5vZGUgd2hpY2ggY29udGFpbiB2ZWN0b3Igb2YgYXJndW1lbnQgaW5kZXhl cwogICAgICBoYXZpbmcgdGhlIHNhbWUgdmFsdWUuICAqLwogICBib29sIHN3YXAgPSBmYWxzZTsK LSAgaGFzaF9tYXA8dHJlZV9vcGVyYW5kX2hhc2gsIGF1dG9fdmVjPGludD4gPiBwaGlfYXJnX21h cDsKKyAgaGFzaF9tYXA8dHJlZV9vcGVyYW5kX2hhc2gsIHZlYzxpbnQ+ID4gcGhpX2FyZ19tYXA7 CiAgIHVuc2lnbmVkIGludCBudW1fYXJncyA9IGdpbXBsZV9waGlfbnVtX2FyZ3MgKHBoaSk7CiAg IC8qIFZlY3RvciBvZiBkaWZmZXJlbnQgUEhJIGFyZ3VtZW50IHZhbHVlcy4gICovCi0gIGF1dG9f dmVjPHRyZWU+IGFyZ3MgKG51bV9hcmdzKTsKKyAgYXV0b192ZWM8aWZjdnRfYXJnX2VudHJ5X3Q+ IGFyZ3M7CiAKLSAgLyogQ29tcHV0ZSBwaGlfYXJnX21hcC4gICovCisgIC8qIENvbXB1dGUgcGhp X2FyZ19tYXAsIGRldGVybWluZSB0aGUgbGlzdCBvZiB1bmlxdWUgUEhJIGFyZ3MgYW5kIHRoZSBp bmRpY2VzCisgICAgIHdoZXJlIHRoZXkgYXJlIGluIHRoZSBQSEkgbm9kZS4gIFRoZSBpbmRpY2Vz IHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUKKyAgICAgdGhlIGNvbmRpdGlvbnMgdG8gYXBwbHkg YW5kIHRoZWlyIGNvbXBsZXhpdHkuICAqLwogICBmb3IgKGkgPSAwOyBpIDwgbnVtX2FyZ3M7IGkr KykKICAgICB7CiAgICAgICB0cmVlIGFyZzsKIAogICAgICAgYXJnID0gZ2ltcGxlX3BoaV9hcmdf ZGVmIChwaGksIGkpOwotICAgICAgaWYgKCFwaGlfYXJnX21hcC5nZXQgKGFyZykpCi0JYXJncy5x dWlja19wdXNoIChhcmcpOwogICAgICAgcGhpX2FyZ19tYXAuZ2V0X29yX2luc2VydCAoYXJnKS5z YWZlX3B1c2ggKGkpOwogICAgIH0KIAotICAvKiBEZXRlcm1pbmUgZWxlbWVudCB3aXRoIG1heCBu dW1iZXIgb2Ygb2NjdXJyZW5jZXMgYW5kIGNvbXBsZXhpdHkuICBMb29raW5nIGF0IG9ubHkKLSAg ICAgbnVtYmVyIG9mIG9jY3VycmVuY2VzIGFzIGEgbWVhc3VyZSBmb3IgY29tcGxleGl0eSBpc24n dCBlbm91Z2ggYXMgYWxsIHVzYWdlcyBjYW4KLSAgICAgYmUgdW5pcXVlIGJ1dCB0aGUgY29tcGFy aXNvbnMgdG8gcmVhY2ggdGhlIFBISSBub2RlIGRpZmZlciBwZXIgYnJhbmNoLiAgKi8KLSAgdHlw ZWRlZiBzdGQ6OnBhaXIgPHRyZWUsIHN0ZDo6cGFpciA8dW5zaWduZWQsIHVuc2lnbmVkPj4gQXJn RW50cnk7Ci0gIGF1dG9fdmVjPEFyZ0VudHJ5PiBhcmdzS1Y7Ci0gIGZvciAoaSA9IDA7IGkgPCBh cmdzLmxlbmd0aCAoKTsgaSsrKQorICAvKiBEZXRlcm1pbmUgZWxlbWVudCB3aXRoIG1heCBudW1i ZXIgb2Ygb2NjdXJyZW5jZXMgYW5kIGNvbXBsZXhpdHkuICBMb29raW5nCisgICAgIGF0IG9ubHkg bnVtYmVyIG9mIG9jY3VycmVuY2VzIGFzIGEgbWVhc3VyZSBmb3IgY29tcGxleGl0eSBpc24ndCBl bm91Z2ggYXMKKyAgICAgYWxsIHVzYWdlcyBjYW4gYmUgdW5pcXVlIGJ1dCB0aGUgY29tcGFyaXNv bnMgdG8gcmVhY2ggdGhlIFBISSBub2RlIGRpZmZlcgorICAgICBwZXIgYnJhbmNoLiAgKi8KKyAg Zm9yIChhdXRvIGVudHJ5IDogcGhpX2FyZ19tYXApCiAgICAgewogICAgICAgdW5zaWduZWQgaW50 IGxlbiA9IDA7Ci0gICAgICBmb3IgKGludCBpbmRleCA6IHBoaV9hcmdfbWFwLmdldCAoYXJnc1tp XSkpCisgICAgICBmb3IgKGludCBpbmRleCA6IGVudHJ5LnNlY29uZCkKIAl7CiAJICBlZGdlIGUg PSBnaW1wbGVfcGhpX2FyZ19lZGdlIChwaGksIGluZGV4KTsKIAkgIGxlbiArPSBnZXRfYmJfbnVt X3ByZWRpY2F0ZV9zdG10cyAoZS0+c3JjKTsKIAl9CiAKLSAgICAgIHVuc2lnbmVkIG9jY3VyID0g cGhpX2FyZ19tYXAuZ2V0IChhcmdzW2ldKS0+bGVuZ3RoICgpOworICAgICAgdW5zaWduZWQgb2Nj dXIgPSBlbnRyeS5zZWNvbmQubGVuZ3RoICgpOwogICAgICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVt cF9mbGFncyAmIFRERl9ERVRBSUxTKSkKIAlmcHJpbnRmIChkdW1wX2ZpbGUsICJSYW5raW5nICVk IGFzIGxlbj0lZCwgaWR4PSVkXG4iLCBpLCBsZW4sIG9jY3VyKTsKLSAgICAgIGFyZ3NLVi5zYWZl X3B1c2ggKHsgYXJnc1tpXSwgeyBsZW4sIG9jY3VyIH19KTsKKyAgICAgIGFyZ3Muc2FmZV9wdXNo ICh7IGVudHJ5LmZpcnN0LCBsZW4sIG9jY3VyLCBlbnRyeS5zZWNvbmQgfSk7CiAgICAgfQogCiAg IC8qIFNvcnQgZWxlbWVudHMgYmFzZWQgb24gcmFua2luZ3MgQVJHUy4gICovCi0gIHN0ZDo6c29y dChhcmdzS1YuYmVnaW4oKSwgYXJnc0tWLmVuZCgpLCBbXShjb25zdCBBcmdFbnRyeSAmbGVmdCwK LQkJCQkJICAgICBjb25zdCBBcmdFbnRyeSAmcmlnaHQpIHsKLSAgICByZXR1cm4gbGVmdC5zZWNv bmQgPCByaWdodC5zZWNvbmQ7Ci0gIH0pOwotCi0gIGZvciAoaSA9IDA7IGkgPCBhcmdzLmxlbmd0 aCAoKTsgaSsrKQotICAgIGFyZ3NbaV0gPSBhcmdzS1ZbaV0uZmlyc3Q7CisgIGFyZ3MucXNvcnQg KGNtcF9hcmdfZW50cnkpOwogCiAgIC8qIEhhbmRsZSBvbmUgc3BlY2lhbCBjYXNlIHdoZW4gbnVt YmVyIG9mIGFyZ3VtZW50cyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMKICAgICAgaXMgZXF1YWwgMiBh bmQgb25lIGFyZ3VtZW50IGhhcyB0aGUgb25seSBvY2N1cnJlbmNlLiAgU3VjaCBQSEkgY2FuIGJl CiAgICAgIGhhbmRsZWQgYXMgaWYgd291bGQgaGF2ZSBvbmx5IDIgYXJndW1lbnRzLiAgKi8KLSAg aWYgKGFyZ3MubGVuZ3RoICgpID09IDIgJiYgcGhpX2FyZ19tYXAuZ2V0IChhcmdzWzBdKS0+bGVu Z3RoICgpID09IDEpCisgIGlmIChhcmdzLmxlbmd0aCAoKSA9PSAyCisgICAgICAmJiBhcmdzWzBd LmluZGV4ZXMubGVuZ3RoICgpID09IDEpCiAgICAgewotICAgICAgdmVjPGludD4gKmluZGV4ZXM7 Ci0gICAgICBpbmRleGVzID0gcGhpX2FyZ19tYXAuZ2V0IChhcmdzWzBdKTsKLSAgICAgIGluZGV4 MCA9ICgqaW5kZXhlcylbMF07Ci0gICAgICBhcmcwID0gYXJnc1swXTsKLSAgICAgIGFyZzEgPSBh cmdzWzFdOworICAgICAgaW5kZXgwID0gYXJnc1swXS5pbmRleGVzWzBdOworICAgICAgYXJnMCA9 IGFyZ3NbMF0uYXJnOworICAgICAgYXJnMSA9IGFyZ3NbMV0uYXJnOwogICAgICAgZSA9IGdpbXBs ZV9waGlfYXJnX2VkZ2UgKHBoaSwgaW5kZXgwKTsKICAgICAgIGNvbmQgPSBiYl9wcmVkaWNhdGUg KGUtPnNyYyk7CiAgICAgICBpZiAoVFJFRV9DT0RFIChjb25kKSA9PSBUUlVUSF9OT1RfRVhQUikK QEAgLTIyMzUsOCArMjI2Niw4IEBAIHByZWRpY2F0ZV9zY2FsYXJfcGhpIChncGhpICpwaGksIGdp bXBsZV9zdG10X2l0ZXJhdG9yICpnc2kpCiAgICAgICBpZiAoIShpc19jb25kX3NjYWxhcl9yZWR1 Y3Rpb24gKHBoaSwgJnJlZHVjLCBhcmcwICwgYXJnMSwKIAkJCQkgICAgICAmb3AwLCAmb3AxLCB0 cnVlLCAmaGFzX25vcCwgJm5vcF9yZWR1YykpKQogCXJocyA9IGZvbGRfYnVpbGRfY29uZF9leHBy IChUUkVFX1RZUEUgKHJlcyksIHVuc2hhcmVfZXhwciAoY29uZCksCi0JCQkJICAgIHN3YXA/IGFy ZzEgOiBhcmcwLAotCQkJCSAgICBzd2FwPyBhcmcwIDogYXJnMSk7CisJCQkJICAgIHN3YXAgPyBh cmcxIDogYXJnMCwKKwkJCQkgICAgc3dhcCA/IGFyZzAgOiBhcmcxKTsKICAgICAgIGVsc2UKIAl7 CiAJICAvKiBDb252ZXJ0IHJlZHVjdGlvbiBzdG10IGludG8gdmVjdG9yaXphYmxlIGZvcm0uICAq LwpAQCAtMjI1Miw4ICsyMjgzLDggQEAgcHJlZGljYXRlX3NjYWxhcl9waGkgKGdwaGkgKnBoaSwg Z2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSkKICAgICB7CiAgICAgICAvKiBDb21tb24gY2FzZS4g ICovCiAgICAgICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKGdpbXBsZV9waGlfcmVzdWx0IChwaGkp KTsKLSAgICAgIGdlbl9waGlfbmVzdF9zdGF0ZW1lbnQgKHBoaSwgZ3NpLCBjb25kX3NldCwgdHlw ZSwgcGhpX2FyZ19tYXAsCi0JCQkgICAgICAmbmV3X3N0bXQsIHJlcywgYXJncywgMSk7CisgICAg ICBnZW5fcGhpX25lc3Rfc3RhdGVtZW50IChwaGksIGdzaSwgY29uZF9zZXQsIHR5cGUsICZuZXdf c3RtdCwgcmVzLAorCQkJICAgICAgYXJncywgMSk7CiAgICAgfQogCiAgIGlmIChkdW1wX2ZpbGUg JiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCg== --_002_VI1PR08MB5325A6559815D56154B4A209FFC4AVI1PR08MB5325eurp_--