From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2061.outbound.protection.outlook.com [40.107.6.61]) by sourceware.org (Postfix) with ESMTPS id 05BA43858D3C for ; Fri, 6 Oct 2023 02:23:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 05BA43858D3C 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=MAZxnE43D4vS1Crt97uPMXAGhvRbAFhP498w/piDwRQ=; b=u6TeXDPBY67ZfqVZ8WsUCtCm47gG+Qaja4JWLmZwwAaCrbvo4JicLvuvyYLvRbY1AW9N/ARPHvGOuUjBqChW0Fj17zRV7mdWe7CNxBcMA+i9DheBGBGuTTXD3JqiLhVRCPcSlEDjSyTeLDZ3q5yb1+x5VEYPWDy0gnFvHzanhjc= Received: from AS9PR06CA0429.eurprd06.prod.outlook.com (2603:10a6:20b:49e::12) by AS8PR08MB6056.eurprd08.prod.outlook.com (2603:10a6:20b:299::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.35; Fri, 6 Oct 2023 02:23:17 +0000 Received: from AM7EUR03FT005.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:49e:cafe::77) by AS9PR06CA0429.outlook.office365.com (2603:10a6:20b:49e::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.36 via Frontend Transport; Fri, 6 Oct 2023 02:23:16 +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 AM7EUR03FT005.mail.protection.outlook.com (100.127.140.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.29 via Frontend Transport; Fri, 6 Oct 2023 02:23:16 +0000 Received: ("Tessian outbound d219f9a4f5c9:v211"); Fri, 06 Oct 2023 02:23:16 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: aa5c6297550b2f14 X-CR-MTA-TID: 64aa7808 Received: from 1a7f42d8d53c.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 1DAC4D09-3626-440D-92FD-3CB16068B7CD.1; Fri, 06 Oct 2023 02:23:09 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 1a7f42d8d53c.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 06 Oct 2023 02:23:09 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jniXaWM0u5AH/o+3l9q/i7LdsgxeRNsnPwd6izN8B4v7hdImOq4Ct++Ic5IaLepUX6BTxnDDNfT9qh+PW7mSix7TyLoGd+sxpDOJh0n5gYL9cIW4Lc7SUXKnR1fnLwHdPFl5t3n0kgLuK+qyL39O1LdKZD5GcyoCtL1UFAyk94yV0EbHYfJzDB1E5+lzRj2xxsmTO/jlXbjq2mrfmkcnIo3GmDAGnWjz9xJZLmVjuoQ1nBYmz+XujTtSZ+XZOCavebWg/4iwNKAia8z59w2OsW9YRsjWxc4SufdO57gBao3cAXc7srgu4CoLX6PF6AwqcTvUwAYR4WDQVjCJEg3xbw== 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=MAZxnE43D4vS1Crt97uPMXAGhvRbAFhP498w/piDwRQ=; b=QhGv54ZREmVOyGGjg+hySN4+i7+SVZGEMjqknqtiVoeojTNoeyzN+lR2pkjlSMfL5RaskveURJfEb6qYa4R5QLbOHUVSQWb6KNvNBDxKJ+VWIOfvvhcRjlU8L31CdeG2W+O70K9r567Qan48T5nQcrHalKljzX5+iNWvzXDWJlj4frGLGiitWOaYa32KWKChRrfYqRSaG+GXJVmpzf7R1N98/hCoHe9XXUcnadg0nN7KFM06c7HaKLjJlvUDOMx3QE+l597nefEmvWVh3Wje6N5/F4gapYWqq6Bd+j/wyRv9sFsM5TAjRs2EJ+B8CE0EUC1JWARdlr4cgpVCd2RuLQ== 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=MAZxnE43D4vS1Crt97uPMXAGhvRbAFhP498w/piDwRQ=; b=u6TeXDPBY67ZfqVZ8WsUCtCm47gG+Qaja4JWLmZwwAaCrbvo4JicLvuvyYLvRbY1AW9N/ARPHvGOuUjBqChW0Fj17zRV7mdWe7CNxBcMA+i9DheBGBGuTTXD3JqiLhVRCPcSlEDjSyTeLDZ3q5yb1+x5VEYPWDy0gnFvHzanhjc= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by DU0PR08MB9155.eurprd08.prod.outlook.com (2603:10a6:10:416::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.38; Fri, 6 Oct 2023 02:23:06 +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; Fri, 6 Oct 2023 02:23:06 +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: AQHZ9S1sAApQkqVeFk2GOXr6jrXFlbA2fFeAgAAwEcCAATtKgIAAB41QgAAGkACAA0FxEIAACuuAgADKgvA= Date: Fri, 6 Oct 2023 02:23:06 +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_|DU0PR08MB9155:EE_|AM7EUR03FT005:EE_|AS8PR08MB6056:EE_ X-MS-Office365-Filtering-Correlation-Id: ace9ae52-f73c-423e-77f9-08dbc6133304 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: KMnjeYgikbIbZ0KnvVGEwcqlSETa4sjqdC8jb4qaqxuIDgCsDMA9Mnx7UjinUX6x4408RpE6QkFOhF1pG8S6vnKL5EdMYyrYVCxlRKp2qCni3Edi25fc4aqlTcwGIh91QonPAirtEwOLjj73FCpv6GNpThUCcYEElUnucNB9Vjf1EuXthsKuRrh7F9LkaDGetZpct+rzFqAUVMSssUqvqiT+S5TwpoW3tI2CUuZvE1ACYlchHZRDqkHEEzT+u+7KDe2ydrScAY89CORHnkLCGF4znekPSef1Ybp4deGsuJv26LCaJuWCXYCvl92vWDCfCFVRSEMhtsekWDPg8b7Pb6rQtZ8D+ASDpex/qL2fH+M8HIIAGOh5/CyFMyGg2XCpc6fdhK6ULyrobTAsSaojA19s/W7M/3UR+zHNxjIeDfae7iIgpj49DW+BPKQD+HHOd1dGv3pXvSf0yrzd9G8uBQxiX3WHYxG/MVZjsultupqzBa1EDDsMK8qopQJqEuNndOz3EnH2q8E9+C8sdS8uvH6xsj4g7iKHyJlNRECVrZ1jxJGxpUhkIsGOWM50eTJGveUUXX2qg9Xk4yPQqOqr0lLqcCCF8ECiD+MtvSzBBcbErThoBtvXylABGCO95Bj8 X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB5325.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39860400002)(396003)(366004)(346002)(136003)(376002)(230922051799003)(186009)(1800799009)(64100799003)(451199024)(6916009)(316002)(8936002)(66476007)(66556008)(66946007)(64756008)(54906003)(76116006)(66446008)(41300700001)(2906002)(83380400001)(5660300002)(8676002)(4326008)(478600001)(9686003)(6506007)(7696005)(71200400001)(55016003)(26005)(99936003)(122000001)(38070700005)(38100700002)(52536014)(86362001)(33656002);DIR:OUT;SFP:1101; Content-Type: multipart/mixed; boundary="_002_VI1PR08MB5325D2898E3FBED916C22D1BFFC9AVI1PR08MB5325eurp_" MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB9155 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: AM7EUR03FT005.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 59273e35-071f-42cd-854a-08dbc6132cec X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: MdMPKJIr8IWgUn+2pn0uhIE1XjlCZ37dlfOUUzDtieejGaszf1TfQFB3H5Oy/2ytz12fqH9tLLVfCI3i4Y246le1CB4bIvRIf2ZSNpyI7Jz0kRqJULlVLI6LpawRofv7OgDI4l35GbQib+BEwPuGJyB3Qjx4OEYsdE6bCxHu3RVN3o5aSrLHxyAJRho9PhZP5eEbAqLkDTw5AcWuQODxULtdc0BN1Qvfdi/fecqg5s5fvGqD58xssWXP0PDCd5xN5AmGU/4VTzog1Dy0n5BQKXLYXlUvfohuanu5+9m2BiabI0cnrnJDsmPOOl/97iaHmBcq5ZxbLTp+tv+qFg6Rpkb9Wm52dw2qonH/FV/0nBHLRkOMCtcp4q5NAY06fW1BkKnXo5vSckcLzfkAffLog2zjnnl889dMKo3FQmbbBun0ZT1uSfooUu7wFeIi++VBAIoTwSzHzPsNitoxYyAUq/9P0h1LdfSRptB6idexGxs+vOHPUyDtu9OVy1qGEs8exCAFhHjalAXoXg5/0qz1336u9mRfHs4yUDvsUQ0F4hBAlcBRP9S+HK1GDNnGN+FnTloDleI4D3BPdgqnYfKrraWkLxQ6e05Jkxu8lXhp9RFO75K41ZQrQ7hM4oHcPookelKQfoiBhgX7LPQCHMqU3bZPgUEnTF/SkQ3IPtkEFQ6obc6yZ+1Uz90mTtd/i92Z09a5t7a+BjuG5/r/7W7tOtwwlVywGhkF4dWi4O4f+ZTmiyM50RWIEy8X8yTood9X 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)(136003)(376002)(39860400002)(396003)(346002)(230922051799003)(1800799009)(64100799003)(186009)(451199024)(82310400011)(40470700004)(36840700001)(46966006)(107886003)(478600001)(82740400003)(6506007)(7696005)(26005)(8936002)(336012)(83380400001)(2906002)(47076005)(5660300002)(54906003)(52536014)(70206006)(4326008)(41300700001)(6862004)(316002)(70586007)(8676002)(235185007)(9686003)(36860700001)(86362001)(356005)(99936003)(81166007)(33656002)(40480700001)(55016003)(40460700003);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Oct 2023 02:23:16.4885 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ace9ae52-f73c-423e-77f9-08dbc6133304 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: AM7EUR03FT005.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6056 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_VI1PR08MB5325D2898E3FBED916C22D1BFFC9AVI1PR08MB5325eurp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable >=20 > On Thu, Oct 05, 2023 at 02:01:40PM +0000, Tamar Christina wrote: > > gcc/ChangeLog: > > > > * tree-if-conv.cc (INCLUDE_ALGORITHM): Remove. > > (typedef struct ifcvt_arg_entry): New. > > (cmp_arg_entry): New. > > (gen_phi_arg_condition, gen_phi_nest_statement, > > predicate_scalar_phi): Use them. >=20 > > - /* Compute phi_arg_map. */ > > + /* Compute phi_arg_map, determine the list of unique PHI args and th= e > indices > > + where they are in the PHI node. The indices will be used to dete= rmine > > + the conditions to apply and their complexity. */ > > + auto_vec unique_args (num_args); > > for (i =3D 0; i < num_args; i++) > > { > > tree arg; > > > > arg =3D gimple_phi_arg_def (phi, i); > > if (!phi_arg_map.get (arg)) > > - args.quick_push (arg); > > + unique_args.quick_push (arg); > > phi_arg_map.get_or_insert (arg).safe_push (i); > > } >=20 > I meant instead of using another vector (unique_args) just do > args.quick_push ({ arg, 0, 0, NULL }); > above (to avoid needing another allocation etc.). >=20 Arggs.. Sorry I completely misunderstood what you meant.. It should be fixe= d now. Also realized I forgot to comment the compare function as you asked before. -- 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 (INCLUDE_ALGORITHM): Remove. (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 f76e0d8f2e6e0f59073fa8484b0b2c7a6cdc9783..a0c11cf5e30b1127166e1a51371= f6521a22c45f2 100644 --- a/gcc/tree-if-conv.cc +++ b/gcc/tree-if-conv.cc @@ -80,7 +80,6 @@ along with GCC; see the file COPYING3. If not see :; */ =20 -#define INCLUDE_ALGORITHM #include "config.h" #include "system.h" #include "coretypes.h" @@ -1937,11 +1936,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; @@ -1951,11 +1971,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)) { @@ -2020,22 +2040,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_"); @@ -2055,6 +2074,36 @@ gen_phi_nest_statement (gphi *phi, gimple_stmt_itera= tor *gsi, return lhs; } =20 +/* When flattening a PHI node we have a choice of which conditions to test= to + for all the paths from the start of the dominator block of the BB with = the + PHI node. If the PHI node has X arguments we have to only test X - 1 + conditions as the last one is implicit. It does matter which condition= s we + test first. We should test the shortest condition first (distance here= is + measures in the number of logical operators in the condition) and the + longest one last. This allows us to skip testing the most expensive + condition. To accomplish this we need to sort the conditions. P1 and = P2 + are sorted first based on the number of logical operations (num_compare= s) + and then by how often they occur in the PHI node. */ + +static int +cmp_arg_entry (const void *p1, const void *p2, void * /* data. */) +{ + 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 @@ -2180,58 +2229,55 @@ predicate_scalar_phi (gphi *phi, gimple_stmt_iterat= or *gsi) 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); + args.safe_push ({ arg, 0, 0, NULL }); 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 (unsigned i =3D 0; i < args.length (); i++) { unsigned int len =3D 0; - for (int index : phi_arg_map.get (args[i])) + vec *indices =3D phi_arg_map.get (args[i].arg); + for (int index : *indices) { 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 indices->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[i].num_compares =3D len; + args[i].occurs =3D occur; + args[i].indexes =3D indices; } =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.stablesort (cmp_arg_entry, NULL); =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) @@ -2245,8 +2291,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. */ @@ -2262,8 +2308,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_VI1PR08MB5325D2898E3FBED916C22D1BFFC9AVI1PR08MB5325eurp_ Content-Type: application/octet-stream; name="rb17797.patch" Content-Description: rb17797.patch Content-Disposition: attachment; filename="rb17797.patch"; size=8770; creation-date="Fri, 06 Oct 2023 02:21:03 GMT"; modification-date="Fri, 06 Oct 2023 02:23:06 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy90cmVlLWlmLWNvbnYuY2MgYi9nY2MvdHJlZS1pZi1jb252LmNjCmlu ZGV4IGY3NmUwZDhmMmU2ZTBmNTkwNzNmYTg0ODRiMGIyYzdhNmNkYzk3ODMuLmEwYzExY2Y1ZTMw YjExMjcxNjZlMWE1MTM3MWY2NTIxYTIyYzQ1ZjIgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLWlmLWNv bnYuY2MKKysrIGIvZ2NjL3RyZWUtaWYtY29udi5jYwpAQCAtODAsNyArODAsNiBAQCBhbG9uZyB3 aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogICAgICA8TDE4Pjo7 CiAqLwogCi0jZGVmaW5lIElOQ0xVREVfQUxHT1JJVEhNCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj aW5jbHVkZSAic3lzdGVtLmgiCiAjaW5jbHVkZSAiY29yZXR5cGVzLmgiCkBAIC0xOTM3LDExICsx OTM2LDMyIEBAIGdlbl9zaW1wbGlmaWVkX2NvbmRpdGlvbiAodHJlZSBjb25kLCBzY2FsYXJfY29u ZF9tYXNrZWRfc2V0X3R5cGUgJmNvbmRfc2V0KQogICByZXR1cm4gY29uZDsKIH0KIAorLyogU3Ry dWN0dXJlIHVzZWQgdG8gdHJhY2sgbWV0YS1kYXRhIG9uIFBISSBhcmd1bWVudHMgdXNlZCB0byBn ZW5lcmF0ZQorICAgbW9zdCBlZmZpY2llbnQgY29tcGFyaXNvbiBzZXF1ZW5jZSB0byBzbGF0dGVu IGEgUEhJIG5vZGUuICAqLworCit0eXBlZGVmIHN0cnVjdCBpZmN2dF9hcmdfZW50cnkKK3sKKyAg LyogVGhlIFBISSBub2RlIGFyZ3VtZW50IHZhbHVlLiAgKi8KKyAgdHJlZSBhcmc7CisKKyAgLyog VGhlIG51bWJlciBvZiBjb21wYXJlcyByZXF1aXJlZCB0byByZWFjaCB0aGlzIFBISSBub2RlIGZy b20gc3RhcnQgb2YgdGhlCisgICAgIEJCIGJlaW5nIGlmLWNvbnZlcnRlZC4gICovCisgIHVuc2ln bmVkIG51bV9jb21wYXJlczsKKworICAvKiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMgUEhJIG5v ZGUgYXJndW1lbnQgYXBwZWFycyBpbiB0aGUgY3VycmVudCBQSEkKKyAgICAgbm9kZS4gICovCisg IHVuc2lnbmVkIG9jY3VyczsKKworICAvKiBUaGUgaW5kaWNlcyBhdCB3aGljaCB0aGlzIFBISSBh cmcgb2NjdXJzIGluc2lkZSB0aGUgUEhJIG5vZGUuICAqLworICB2ZWMgPGludD4gKmluZGV4ZXM7 Cit9IGlmY3Z0X2FyZ19lbnRyeV90OworCiAvKiBQcm9kdWNlIGNvbmRpdGlvbiBmb3IgYWxsIG9j Y3VycmVuY2VzIG9mIEFSRyBpbiBQSEkgbm9kZS4gIFNldCAqSU5WRVJUCiAgICBhcyB0byB3aGV0 aGVyIHRoZSBjb25kaXRpb24gaXMgaW52ZXJ0ZWQuICAqLwogCiBzdGF0aWMgdHJlZQotZ2VuX3Bo aV9hcmdfY29uZGl0aW9uIChncGhpICpwaGksIHZlYzxpbnQ+ICpvY2N1ciwgZ2ltcGxlX3N0bXRf aXRlcmF0b3IgKmdzaSwKK2dlbl9waGlfYXJnX2NvbmRpdGlvbiAoZ3BoaSAqcGhpLCBpZmN2dF9h cmdfZW50cnlfdCAmYXJnLAorCQkgICAgICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwKIAkJ ICAgICAgIHNjYWxhcl9jb25kX21hc2tlZF9zZXRfdHlwZSAmY29uZF9zZXQsIGJvb2wgKmludmVy dCkKIHsKICAgaW50IGxlbjsKQEAgLTE5NTEsMTEgKzE5NzEsMTEgQEAgZ2VuX3BoaV9hcmdfY29u ZGl0aW9uIChncGhpICpwaGksIHZlYzxpbnQ+ICpvY2N1ciwgZ2ltcGxlX3N0bXRfaXRlcmF0b3Ig KmdzaSwKICAgZWRnZSBlOwogCiAgICppbnZlcnQgPSBmYWxzZTsKLSAgbGVuID0gb2NjdXItPmxl bmd0aCAoKTsKKyAgbGVuID0gYXJnLmluZGV4ZXMtPmxlbmd0aCAoKTsKICAgZ2NjX2Fzc2VydCAo bGVuID4gMCk7CiAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKICAgICB7Ci0gICAgICBlID0g Z2ltcGxlX3BoaV9hcmdfZWRnZSAocGhpLCAoKm9jY3VyKVtpXSk7CisgICAgICBlID0gZ2ltcGxl X3BoaV9hcmdfZWRnZSAocGhpLCAoKmFyZy5pbmRleGVzKVtpXSk7CiAgICAgICBjID0gYmJfcHJl ZGljYXRlIChlLT5zcmMpOwogICAgICAgaWYgKGlzX3RydWVfcHJlZGljYXRlIChjKSkKIAl7CkBA IC0yMDIwLDIyICsyMDQwLDIxIEBAIGdlbl9waGlfYXJnX2NvbmRpdGlvbiAoZ3BoaSAqcGhpLCB2 ZWM8aW50PiAqb2NjdXIsIGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksCiBzdGF0aWMgdHJlZQog Z2VuX3BoaV9uZXN0X3N0YXRlbWVudCAoZ3BoaSAqcGhpLCBnaW1wbGVfc3RtdF9pdGVyYXRvciAq Z3NpLAogCQkJc2NhbGFyX2NvbmRfbWFza2VkX3NldF90eXBlICZjb25kX3NldCwgdHJlZSB0eXBl LAotCQkJaGFzaF9tYXA8dHJlZV9vcGVyYW5kX2hhc2gsIGF1dG9fdmVjPGludD4+ICZwaGlfYXJn X21hcCwKLQkJCWdpbXBsZSAqKnJlc19zdG10LCB0cmVlIGxoczAsIHZlYzx0cmVlPiAmYXJncywK LQkJCXVuc2lnbmVkIGlkeCkKKwkJCWdpbXBsZSAqKnJlc19zdG10LCB0cmVlIGxoczAsCisJCQl2 ZWM8c3RydWN0IGlmY3Z0X2FyZ19lbnRyeT4gJmFyZ3MsIHVuc2lnbmVkIGlkeCkKIHsKICAgaWYg KGlkeCA9PSBhcmdzLmxlbmd0aCAoKSkKLSAgICByZXR1cm4gYXJnc1tpZHggLSAxXTsKKyAgICBy ZXR1cm4gYXJnc1tpZHggLSAxXS5hcmc7CiAKLSAgdmVjPGludD4gKmluZGV4ZXMgPSBwaGlfYXJn X21hcC5nZXQgKGFyZ3NbaWR4IC0gMV0pOwogICBib29sIGludmVydDsKLSAgdHJlZSBjb25kID0g Z2VuX3BoaV9hcmdfY29uZGl0aW9uIChwaGksIGluZGV4ZXMsIGdzaSwgY29uZF9zZXQsICZpbnZl cnQpOwotICB0cmVlIGFyZzEgPSBnZW5fcGhpX25lc3Rfc3RhdGVtZW50IChwaGksIGdzaSwgY29u ZF9zZXQsIHR5cGUsIHBoaV9hcmdfbWFwLAotCQkJCSAgICAgIHJlc19zdG10LCBsaHMwLCBhcmdz LCBpZHggKyAxKTsKKyAgdHJlZSBjb25kID0gZ2VuX3BoaV9hcmdfY29uZGl0aW9uIChwaGksIGFy Z3NbaWR4IC0gMV0sIGdzaSwgY29uZF9zZXQsCisJCQkJICAgICAmaW52ZXJ0KTsKKyAgdHJlZSBh cmcxID0gZ2VuX3BoaV9uZXN0X3N0YXRlbWVudCAocGhpLCBnc2ksIGNvbmRfc2V0LCB0eXBlLCBy ZXNfc3RtdCwgbGhzMCwKKwkJCQkgICAgICBhcmdzLCBpZHggKyAxKTsKIAogICB1bnNpZ25lZCBw cmV2ID0gaWR4OwogICB1bnNpZ25lZCBjdXJyID0gcHJldiAtIDE7Ci0gIHRyZWUgYXJnMCA9IGFy Z3NbY3Vycl07CisgIHRyZWUgYXJnMCA9IGFyZ3NbY3Vycl0uYXJnOwogICB0cmVlIHJocywgbGhz OwogICBpZiAoaWR4ID4gMSkKICAgICBsaHMgPSBtYWtlX3RlbXBfc3NhX25hbWUgKHR5cGUsIE5V TEwsICJfaWZjXyIpOwpAQCAtMjA1NSw2ICsyMDc0LDM2IEBAIGdlbl9waGlfbmVzdF9zdGF0ZW1l bnQgKGdwaGkgKnBoaSwgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwKICAgcmV0dXJuIGxoczsK IH0KIAorLyogV2hlbiBmbGF0dGVuaW5nIGEgUEhJIG5vZGUgd2UgaGF2ZSBhIGNob2ljZSBvZiB3 aGljaCBjb25kaXRpb25zIHRvIHRlc3QgdG8KKyAgIGZvciBhbGwgdGhlIHBhdGhzIGZyb20gdGhl IHN0YXJ0IG9mIHRoZSBkb21pbmF0b3IgYmxvY2sgb2YgdGhlIEJCIHdpdGggdGhlCisgICBQSEkg bm9kZS4gIElmIHRoZSBQSEkgbm9kZSBoYXMgWCBhcmd1bWVudHMgd2UgaGF2ZSB0byBvbmx5IHRl c3QgWCAtIDEKKyAgIGNvbmRpdGlvbnMgYXMgdGhlIGxhc3Qgb25lIGlzIGltcGxpY2l0LiAgSXQg ZG9lcyBtYXR0ZXIgd2hpY2ggY29uZGl0aW9ucyB3ZQorICAgdGVzdCBmaXJzdC4gIFdlIHNob3Vs ZCB0ZXN0IHRoZSBzaG9ydGVzdCBjb25kaXRpb24gZmlyc3QgKGRpc3RhbmNlIGhlcmUgaXMKKyAg IG1lYXN1cmVzIGluIHRoZSBudW1iZXIgb2YgbG9naWNhbCBvcGVyYXRvcnMgaW4gdGhlIGNvbmRp dGlvbikgYW5kIHRoZQorICAgbG9uZ2VzdCBvbmUgbGFzdC4gIFRoaXMgYWxsb3dzIHVzIHRvIHNr aXAgdGVzdGluZyB0aGUgbW9zdCBleHBlbnNpdmUKKyAgIGNvbmRpdGlvbi4gIFRvIGFjY29tcGxp c2ggdGhpcyB3ZSBuZWVkIHRvIHNvcnQgdGhlIGNvbmRpdGlvbnMuICBQMSBhbmQgUDIKKyAgIGFy ZSBzb3J0ZWQgZmlyc3QgYmFzZWQgb24gdGhlIG51bWJlciBvZiBsb2dpY2FsIG9wZXJhdGlvbnMg KG51bV9jb21wYXJlcykKKyAgIGFuZCB0aGVuIGJ5IGhvdyBvZnRlbiB0aGV5IG9jY3VyIGluIHRo ZSBQSEkgbm9kZS4gICovCisKK3N0YXRpYyBpbnQKK2NtcF9hcmdfZW50cnkgKGNvbnN0IHZvaWQg KnAxLCBjb25zdCB2b2lkICpwMiwgdm9pZCAqIC8qIGRhdGEuICAqLykKK3sKKyAgY29uc3QgaWZj dnRfYXJnX2VudHJ5IHN2YWwxID0gKihjb25zdCBpZmN2dF9hcmdfZW50cnkgKilwMTsKKyAgY29u c3QgaWZjdnRfYXJnX2VudHJ5IHN2YWwyID0gKihjb25zdCBpZmN2dF9hcmdfZW50cnkgKilwMjsK KworICBpZiAoc3ZhbDEubnVtX2NvbXBhcmVzIDwgc3ZhbDIubnVtX2NvbXBhcmVzKQorICAgIHJl dHVybiAtMTsKKyAgZWxzZSBpZiAoc3ZhbDEubnVtX2NvbXBhcmVzID4gc3ZhbDIubnVtX2NvbXBh cmVzKQorICAgIHJldHVybiAxOworCisgIGlmIChzdmFsMS5vY2N1cnMgPCBzdmFsMi5vY2N1cnMp CisgICAgcmV0dXJuIC0xOworICBlbHNlIGlmIChzdmFsMS5vY2N1cnMgPiBzdmFsMi5vY2N1cnMp CisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKIC8qIFJlcGxhY2UgYSBzY2FsYXIg UEhJIG5vZGUgd2l0aCBhIENPTkRfRVhQUiB1c2luZyBDT05EIGFzIGNvbmRpdGlvbi4KICAgIFRo aXMgcm91dGluZSBjYW4gaGFuZGxlIFBISSBub2RlcyB3aXRoIG1vcmUgdGhhbiB0d28gYXJndW1l bnRzLgogCkBAIC0yMTgwLDU4ICsyMjI5LDU1IEBAIHByZWRpY2F0ZV9zY2FsYXJfcGhpIChncGhp ICpwaGksIGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2kpCiAgIGhhc2hfbWFwPHRyZWVfb3BlcmFu ZF9oYXNoLCBhdXRvX3ZlYzxpbnQ+ID4gcGhpX2FyZ19tYXA7CiAgIHVuc2lnbmVkIGludCBudW1f YXJncyA9IGdpbXBsZV9waGlfbnVtX2FyZ3MgKHBoaSk7CiAgIC8qIFZlY3RvciBvZiBkaWZmZXJl bnQgUEhJIGFyZ3VtZW50IHZhbHVlcy4gICovCi0gIGF1dG9fdmVjPHRyZWU+IGFyZ3MgKG51bV9h cmdzKTsKKyAgYXV0b192ZWM8aWZjdnRfYXJnX2VudHJ5X3Q+IGFyZ3M7CiAKLSAgLyogQ29tcHV0 ZSBwaGlfYXJnX21hcC4gICovCisgIC8qIENvbXB1dGUgcGhpX2FyZ19tYXAsIGRldGVybWluZSB0 aGUgbGlzdCBvZiB1bmlxdWUgUEhJIGFyZ3MgYW5kIHRoZSBpbmRpY2VzCisgICAgIHdoZXJlIHRo ZXkgYXJlIGluIHRoZSBQSEkgbm9kZS4gIFRoZSBpbmRpY2VzIHdpbGwgYmUgdXNlZCB0byBkZXRl cm1pbmUKKyAgICAgdGhlIGNvbmRpdGlvbnMgdG8gYXBwbHkgYW5kIHRoZWlyIGNvbXBsZXhpdHku ICAqLwogICBmb3IgKGkgPSAwOyBpIDwgbnVtX2FyZ3M7IGkrKykKICAgICB7CiAgICAgICB0cmVl IGFyZzsKIAogICAgICAgYXJnID0gZ2ltcGxlX3BoaV9hcmdfZGVmIChwaGksIGkpOwogICAgICAg aWYgKCFwaGlfYXJnX21hcC5nZXQgKGFyZykpCi0JYXJncy5xdWlja19wdXNoIChhcmcpOworCWFy Z3Muc2FmZV9wdXNoICh7IGFyZywgMCwgMCwgTlVMTCB9KTsKICAgICAgIHBoaV9hcmdfbWFwLmdl dF9vcl9pbnNlcnQgKGFyZykuc2FmZV9wdXNoIChpKTsKICAgICB9CiAKLSAgLyogRGV0ZXJtaW5l IGVsZW1lbnQgd2l0aCBtYXggbnVtYmVyIG9mIG9jY3VycmVuY2VzIGFuZCBjb21wbGV4aXR5LiAg TG9va2luZyBhdCBvbmx5Ci0gICAgIG51bWJlciBvZiBvY2N1cnJlbmNlcyBhcyBhIG1lYXN1cmUg Zm9yIGNvbXBsZXhpdHkgaXNuJ3QgZW5vdWdoIGFzIGFsbCB1c2FnZXMgY2FuCi0gICAgIGJlIHVu aXF1ZSBidXQgdGhlIGNvbXBhcmlzb25zIHRvIHJlYWNoIHRoZSBQSEkgbm9kZSBkaWZmZXIgcGVy IGJyYW5jaC4gICovCi0gIHR5cGVkZWYgc3RkOjpwYWlyIDx0cmVlLCBzdGQ6OnBhaXIgPHVuc2ln bmVkLCB1bnNpZ25lZD4+IEFyZ0VudHJ5OwotICBhdXRvX3ZlYzxBcmdFbnRyeT4gYXJnc0tWOwot ICBmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGggKCk7IGkrKykKKyAgLyogRGV0ZXJtaW5lIGVs ZW1lbnQgd2l0aCBtYXggbnVtYmVyIG9mIG9jY3VycmVuY2VzIGFuZCBjb21wbGV4aXR5LiAgTG9v a2luZworICAgICBhdCBvbmx5IG51bWJlciBvZiBvY2N1cnJlbmNlcyBhcyBhIG1lYXN1cmUgZm9y IGNvbXBsZXhpdHkgaXNuJ3QgZW5vdWdoIGFzCisgICAgIGFsbCB1c2FnZXMgY2FuIGJlIHVuaXF1 ZSBidXQgdGhlIGNvbXBhcmlzb25zIHRvIHJlYWNoIHRoZSBQSEkgbm9kZSBkaWZmZXIKKyAgICAg cGVyIGJyYW5jaC4gICovCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aCAo KTsgaSsrKQogICAgIHsKICAgICAgIHVuc2lnbmVkIGludCBsZW4gPSAwOwotICAgICAgZm9yIChp bnQgaW5kZXggOiBwaGlfYXJnX21hcC5nZXQgKGFyZ3NbaV0pKQorICAgICAgdmVjPGludD4gKmlu ZGljZXMgPSBwaGlfYXJnX21hcC5nZXQgKGFyZ3NbaV0uYXJnKTsKKyAgICAgIGZvciAoaW50IGlu ZGV4IDogKmluZGljZXMpCiAJewogCSAgZWRnZSBlID0gZ2ltcGxlX3BoaV9hcmdfZWRnZSAocGhp LCBpbmRleCk7CiAJICBsZW4gKz0gZ2V0X2JiX251bV9wcmVkaWNhdGVfc3RtdHMgKGUtPnNyYyk7 CiAJfQogCi0gICAgICB1bnNpZ25lZCBvY2N1ciA9IHBoaV9hcmdfbWFwLmdldCAoYXJnc1tpXSkt Pmxlbmd0aCAoKTsKKyAgICAgIHVuc2lnbmVkIG9jY3VyID0gaW5kaWNlcy0+bGVuZ3RoICgpOwog ICAgICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKIAlmcHJp bnRmIChkdW1wX2ZpbGUsICJSYW5raW5nICVkIGFzIGxlbj0lZCwgaWR4PSVkXG4iLCBpLCBsZW4s IG9jY3VyKTsKLSAgICAgIGFyZ3NLVi5zYWZlX3B1c2ggKHsgYXJnc1tpXSwgeyBsZW4sIG9jY3Vy IH19KTsKKyAgICAgIGFyZ3NbaV0ubnVtX2NvbXBhcmVzID0gbGVuOworICAgICAgYXJnc1tpXS5v Y2N1cnMgPSBvY2N1cjsKKyAgICAgIGFyZ3NbaV0uaW5kZXhlcyA9IGluZGljZXM7CiAgICAgfQog CiAgIC8qIFNvcnQgZWxlbWVudHMgYmFzZWQgb24gcmFua2luZ3MgQVJHUy4gICovCi0gIHN0ZDo6 c29ydChhcmdzS1YuYmVnaW4oKSwgYXJnc0tWLmVuZCgpLCBbXShjb25zdCBBcmdFbnRyeSAmbGVm dCwKLQkJCQkJICAgICBjb25zdCBBcmdFbnRyeSAmcmlnaHQpIHsKLSAgICByZXR1cm4gbGVmdC5z ZWNvbmQgPCByaWdodC5zZWNvbmQ7Ci0gIH0pOwotCi0gIGZvciAoaSA9IDA7IGkgPCBhcmdzLmxl bmd0aCAoKTsgaSsrKQotICAgIGFyZ3NbaV0gPSBhcmdzS1ZbaV0uZmlyc3Q7CisgIGFyZ3Muc3Rh Ymxlc29ydCAoY21wX2FyZ19lbnRyeSwgTlVMTCk7CiAKICAgLyogSGFuZGxlIG9uZSBzcGVjaWFs IGNhc2Ugd2hlbiBudW1iZXIgb2YgYXJndW1lbnRzIHdpdGggZGlmZmVyZW50IHZhbHVlcwogICAg ICBpcyBlcXVhbCAyIGFuZCBvbmUgYXJndW1lbnQgaGFzIHRoZSBvbmx5IG9jY3VycmVuY2UuICBT dWNoIFBISSBjYW4gYmUKICAgICAgaGFuZGxlZCBhcyBpZiB3b3VsZCBoYXZlIG9ubHkgMiBhcmd1 bWVudHMuICAqLwotICBpZiAoYXJncy5sZW5ndGggKCkgPT0gMiAmJiBwaGlfYXJnX21hcC5nZXQg KGFyZ3NbMF0pLT5sZW5ndGggKCkgPT0gMSkKKyAgaWYgKGFyZ3MubGVuZ3RoICgpID09IDIKKyAg ICAgICYmIGFyZ3NbMF0uaW5kZXhlcy0+bGVuZ3RoICgpID09IDEpCiAgICAgewotICAgICAgdmVj PGludD4gKmluZGV4ZXM7Ci0gICAgICBpbmRleGVzID0gcGhpX2FyZ19tYXAuZ2V0IChhcmdzWzBd KTsKLSAgICAgIGluZGV4MCA9ICgqaW5kZXhlcylbMF07Ci0gICAgICBhcmcwID0gYXJnc1swXTsK LSAgICAgIGFyZzEgPSBhcmdzWzFdOworICAgICAgaW5kZXgwID0gKCphcmdzWzBdLmluZGV4ZXMp WzBdOworICAgICAgYXJnMCA9IGFyZ3NbMF0uYXJnOworICAgICAgYXJnMSA9IGFyZ3NbMV0uYXJn OwogICAgICAgZSA9IGdpbXBsZV9waGlfYXJnX2VkZ2UgKHBoaSwgaW5kZXgwKTsKICAgICAgIGNv bmQgPSBiYl9wcmVkaWNhdGUgKGUtPnNyYyk7CiAgICAgICBpZiAoVFJFRV9DT0RFIChjb25kKSA9 PSBUUlVUSF9OT1RfRVhQUikKQEAgLTIyNDUsOCArMjI5MSw4IEBAIHByZWRpY2F0ZV9zY2FsYXJf cGhpIChncGhpICpwaGksIGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2kpCiAgICAgICBpZiAoIShp c19jb25kX3NjYWxhcl9yZWR1Y3Rpb24gKHBoaSwgJnJlZHVjLCBhcmcwICwgYXJnMSwKIAkJCQkg ICAgICAmb3AwLCAmb3AxLCB0cnVlLCAmaGFzX25vcCwgJm5vcF9yZWR1YykpKQogCXJocyA9IGZv bGRfYnVpbGRfY29uZF9leHByIChUUkVFX1RZUEUgKHJlcyksIHVuc2hhcmVfZXhwciAoY29uZCks Ci0JCQkJICAgIHN3YXA/IGFyZzEgOiBhcmcwLAotCQkJCSAgICBzd2FwPyBhcmcwIDogYXJnMSk7 CisJCQkJICAgIHN3YXAgPyBhcmcxIDogYXJnMCwKKwkJCQkgICAgc3dhcCA/IGFyZzAgOiBhcmcx KTsKICAgICAgIGVsc2UKIAl7CiAJICAvKiBDb252ZXJ0IHJlZHVjdGlvbiBzdG10IGludG8gdmVj dG9yaXphYmxlIGZvcm0uICAqLwpAQCAtMjI2Miw4ICsyMzA4LDggQEAgcHJlZGljYXRlX3NjYWxh cl9waGkgKGdwaGkgKnBoaSwgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSkKICAgICB7CiAgICAg ICAvKiBDb21tb24gY2FzZS4gICovCiAgICAgICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKGdpbXBs ZV9waGlfcmVzdWx0IChwaGkpKTsKLSAgICAgIGdlbl9waGlfbmVzdF9zdGF0ZW1lbnQgKHBoaSwg Z3NpLCBjb25kX3NldCwgdHlwZSwgcGhpX2FyZ19tYXAsCi0JCQkgICAgICAmbmV3X3N0bXQsIHJl cywgYXJncywgMSk7CisgICAgICBnZW5fcGhpX25lc3Rfc3RhdGVtZW50IChwaGksIGdzaSwgY29u ZF9zZXQsIHR5cGUsICZuZXdfc3RtdCwgcmVzLAorCQkJICAgICAgYXJncywgMSk7CiAgICAgfQog CiAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCg== --_002_VI1PR08MB5325D2898E3FBED916C22D1BFFC9AVI1PR08MB5325eurp_--