From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 74317 invoked by alias); 14 Jun 2017 13:08:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 74268 invoked by uid 89); 14 Jun 2017 13:08:02 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: EUR01-VE1-obe.outbound.protection.outlook.com Received: from mail-ve1eur01on0084.outbound.protection.outlook.com (HELO EUR01-VE1-obe.outbound.protection.outlook.com) (104.47.1.84) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 14 Jun 2017 13:07:59 +0000 Received: from VI1PR0802MB2176.eurprd08.prod.outlook.com (10.172.12.21) by VI1PR0802MB2175.eurprd08.prod.outlook.com (10.172.12.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1178.14; Wed, 14 Jun 2017 13:08:00 +0000 Received: from VI1PR0802MB2176.eurprd08.prod.outlook.com ([fe80::f40e:e091:2971:fd94]) by VI1PR0802MB2176.eurprd08.prod.outlook.com ([fe80::f40e:e091:2971:fd94%16]) with mapi id 15.01.1178.013; Wed, 14 Jun 2017 13:08:00 +0000 From: Bin Cheng To: "gcc-patches@gcc.gnu.org" CC: nd Subject: [PATCH GCC][2/2]Refine CFG and bound information for split loops Date: Wed, 14 Jun 2017 13:08:00 -0000 Message-ID: authentication-results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=arm.com; x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;VI1PR0802MB2175;7:/oeYZOz56jEeEJnbjw9bBdtcX8BFZIkn1TvCAVI+TpcipIsMKMMEqty0QY2EqPmie7lAuohyD0vx/j2YyKuhM19A3wNxhUMZbpEkXvPcoSnnq1hXV1ABJ8MkdvMc1z7QyZ6LrVr1sw6fkMwzHtxYpy+17UefDwasfFxFNJiHjrNS+zYnTtz5IZqXYbKR7YQ3iTA0org9PUYDH70+DhxZ9fZQoWQuDA2Ze/nDag0QrtwFrznSPJPtK92ZaoMl3uKnpk/5+McTTIL3zka3QDspVytoeEI4nWaOsXWhEEFyMzGTMY/VjZmCM5ICf1NuzKATWRhl9uEJaLLXvn7CFA+ojw== x-ms-office365-filtering-correlation-id: b9f3fac8-8e22-4a86-3c19-08d4b3266231 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254075)(48565401081)(201703131423075)(201703031133081)(201702281549075);SRVR:VI1PR0802MB2175; x-ms-traffictypediagnostic: VI1PR0802MB2175: nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(102415395)(6040450)(601004)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(3002001)(10201501046)(93006095)(93001095)(6055026)(6041248)(20161123560025)(20161123555025)(20161123562025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:VI1PR0802MB2175;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:VI1PR0802MB2175; x-forefront-prvs: 033857D0BD x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(39400400002)(39450400003)(39410400002)(39840400002)(377424004)(2906002)(3280700002)(2351001)(3660700001)(25786009)(2900100001)(7696004)(72206003)(14454004)(478600001)(50986999)(99936001)(54356999)(102836003)(6116002)(5660300001)(6916009)(6506006)(6436002)(7736002)(110136004)(33656002)(8936002)(8676002)(81166006)(4326008)(53936002)(9686003)(99286003)(5640700003)(55016002)(189998001)(38730400002)(5250100002)(305945005)(86362001)(74316002)(2501003);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR0802MB2175;H:VI1PR0802MB2176.eurprd08.prod.outlook.com;FPR:;SPF:None;MLV:sfv;LANG:en; spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: multipart/mixed; boundary="_002_VI1PR0802MB21764A3511EE944657C64543E7C30VI1PR0802MB2176_" MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Jun 2017 13:08:00.2043 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2175 X-IsSubscribed: yes X-SW-Source: 2017-06/txt/msg01037.txt.bz2 --_002_VI1PR0802MB21764A3511EE944657C64543E7C30VI1PR0802MB2176_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-length: 1614 Hi, Loop split currently generates below control flow graph for split loops: + + .------ guard1 ------. + v v + pre1(loop1) .---------->pre2(loop2) + | | | + .--->h1 | h2<----. + | | | | | + | ex1---. | .---ex2 | + | / v | | \ | + '---l1 guard2---' | l2---' + | | + | | + '--->join<---' + In which, + LOOP2 is the second loop after split, GUARD1 and GUARD2 are the two bbs + controling if loop2 should be executed. Take added test case as an example, the second loop only iterates for 1 tim= e, as a result, the CFG and loop niter bound information can be refined. In g= eneral, guard1/guard2 can be folded to true/false if loop2's niters is known at com= pilation time. This patch does such improvement by analyzing and refining niters of loop2; as well as using that information to simplify CFG. With this patch, the second split loop as in test can be completely unrolled by later passes. Bootstrap and test on x86_64 and AArch64. Is it OK? Thanks, bin 2017-06-12 Bin Cheng * tree-ssa-loop-split.c (compute_new_first_bound): Compute and return bound information for the second split loop. (adjust_loop_split): New function. (split_loop): Update calls to above functions. gcc/testsuite/ChangeLog 2017-06-12 Bin Cheng * gcc.dg/loop-split-1.c: New test.= --_002_VI1PR0802MB21764A3511EE944657C64543E7C30VI1PR0802MB2176_ Content-Type: text/plain; name="0002-lsplit-refine-cfg-niter-bound-20170601.txt" Content-Description: 0002-lsplit-refine-cfg-niter-bound-20170601.txt Content-Disposition: attachment; filename="0002-lsplit-refine-cfg-niter-bound-20170601.txt"; size=11709; creation-date="Wed, 14 Jun 2017 13:05:59 GMT"; modification-date="Wed, 14 Jun 2017 13:05:59 GMT" Content-Transfer-Encoding: base64 Content-length: 15873 RnJvbSA2MTg1NWM3NGM3ZGI2MTc4MDA4ZjAwNzE5OGFlZGVlOWEwM2YxM2U2 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWtlciA8YW1rZXJA YW1rZXItbGFwdG9wLihub25lKT4KRGF0ZTogU3VuLCA0IEp1biAyMDE3IDAy OjI2OjM0ICswODAwClN1YmplY3Q6IFtQQVRDSCAyLzJdIGxzcGxpdC1yZWZp bmUtY2ZnLW5pdGVyLWJvdW5kLTIwMTcwNjAxLnR4dAoKLS0tCiBnY2MvdGVz dHN1aXRlL2djYy5kZy9sb29wLXNwbGl0LTEuYyB8ICAxNiArKysKIGdjYy90 cmVlLXNzYS1sb29wLXNwbGl0LmMgICAgICAgICAgIHwgMTk3ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0tLQogMiBmaWxlcyBjaGFuZ2Vk LCAxOTQgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvbG9vcC1zcGxpdC0x LmMKCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9sb29wLXNw bGl0LTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2xvb3Atc3BsaXQtMS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZDNlMDQK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9sb29w LXNwbGl0LTEuYwpAQCAtMCwwICsxLDE2IEBACisvKiB7IGRnLWRvIGNvbXBp bGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLWZzcGxpdC1sb29wcyAt ZmR1bXAtdHJlZS1sc3BsaXQtZGV0YWlscyIgfSAqLworCitpbnQgZm9vIChp bnQgKmEsIGludCAqYiwgaW50IGxlbikKK3sKKyAgaW50IGs7CisgIGZvciAo ayA9IDE7IGsgPD0gbGVuOyBrKyspCisgICAgeworICAgICAgYVtrXSsrOwor CisgICAgICBpZiAoayA8IGxlbikKKwliW2tdKys7CisgICAgfQorfQorCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIlRoZSBzZWNvbmQgc3Bs aXQgbG9vcCBpdGVyYXRlcyBhdCAwIGxhdGNoIHRpbWVzLiIgImxzcGxpdCIg fSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtbG9vcC1zcGxpdC5j IGIvZ2NjL3RyZWUtc3NhLWxvb3Atc3BsaXQuYwppbmRleCBmOGZlOGU2Li43 M2M3ZGMyIDEwMDY0NAotLS0gYS9nY2MvdHJlZS1zc2EtbG9vcC1zcGxpdC5j CisrKyBiL2djYy90cmVlLXNzYS1sb29wLXNwbGl0LmMKQEAgLTM2NCwxMCAr MzY0LDkgQEAgY29ubmVjdF9sb29wcyAoc3RydWN0IGxvb3AgKmxvb3AxLCBz dHJ1Y3QgbG9vcCAqbG9vcDIpCiAKIC8qIFRoaXMgcmV0dXJucyB0aGUgbmV3 IGJvdW5kIGZvciBpdGVyYXRpb25zIGdpdmVuIHRoZSBvcmlnaW5hbCBpdGVy YXRpb24KICAgIHNwYWNlIGluIE5JVEVSLCBhbiBhcmJpdHJhcnkgbmV3IGJv dW5kIEJPUkRFUiwgYXNzdW1lZCB0byBiZSBzb21lCi0gICBjb21wYXJpc29u IHZhbHVlIHdpdGggYSBkaWZmZXJlbnQgSVYsIHRoZSBpbml0aWFsIHZhbHVl IEdVQVJEX0lOSVQgb2YKLSAgIHRoYXQgb3RoZXIgSVYsIGFuZCB0aGUgY29t cGFyaXNvbiBjb2RlIEdVQVJEX0NPREUgdGhhdCBjb21wYXJlcwotICAgdGhh dCBvdGhlciBJViB3aXRoIEJPUkRFUi4gIFdlIHJldHVybiBhbiBTU0EgbmFt ZSwgYW5kIHBsYWNlIGFueQotICAgbmVjZXNzYXJ5IHN0YXRlbWVudHMgZm9y IHRoYXQgY29tcHV0YXRpb24gaW50byAqU1RNVFMuCisgICBjb21wYXJpc29u IHZhbHVlIHdpdGggYSBkaWZmZXJlbnQgSVYsIHRoZSBpbml0aWFsIHZhbHVl IEdVQVJEX0lOSVQgYW5kCisgICBTVEVQIG9mIHRoZSBvdGhlciBJViwgYW5k IHRoZSBjb21wYXJpc29uIGNvZGUgR1VBUkRfQ09ERSB0aGF0IGNvbXBhcmVz CisgICB0aGF0IG90aGVyIElWIHdpdGggQk9SREVSLgogCiAgICBGb3IgZXhh bXBsZSBmb3Igc3VjaCBhIGxvb3A6CiAKQEAgLTM4NywyOCArMzg2LDQxIEBA IGNvbm5lY3RfbG9vcHMgKHN0cnVjdCBsb29wICpsb29wMSwgc3RydWN0IGxv b3AgKmxvb3AyKQogCiAgICBEZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbiBv ZiB0aGUgSVZzIGFuZCBpZiB0aGUgZXhpdCB0ZXN0cwogICAgYXJlIHN0cmlj dCBvciBub24tc3RyaWN0IHdlIG5lZWQgdG8gdXNlIE1JTiBvciBNQVgsCi0g ICBhbmQgYWRkIG9yIHN1YnRyYWN0IDEuICBUaGlzIHJvdXRpbmUgY29tcHV0 ZXMgbmV3ZW5kIGFib3ZlLiAgKi8KKyAgIGFuZCBhZGQgb3Igc3VidHJhY3Qg MS4gIFRoaXMgcm91dGluZSBjb21wdXRlcyBuZXdlbmQgYWJvdmUuCisKKyAg IEFmdGVyIGNvbXB1dGluZyB0aGUgbmV3IGJvdW5kIChvbiBqKSwgd2UgbWF5 IGJlIGFibGUgdG8gY29tcGFyZSB0aGUKKyAgIGZpcnN0IGxvb3AncyBpdGVy YXRpb24gc3BhY2UgYWdhaW5zdCB0aGUgb3JpZ2luYWwgbG9vcCdzLiAgSWYg aXQgaXMKKyAgIGNvbXBhcmFibGUgYXQgY29tcGlsYXRpb24gdGltZSwgd2Ug bWF5IGJlIGFibGUgdG8gY29tcHV0ZSB0aGUgbml0ZXIKKyAgIGJvdW5kIG9m IHRoZSBzZWNvbmQgbG9vcC4gIFJlY29yZCB0aGUgc2Vjb25kIGxvb3AncyBp dGVyYXRpb24gYm91bmQKKyAgIHRvIFNFQ09ORF9MT09QX05JVEVSX0JPVU5E IHdoaWNoIGhhcyBiZWxvdyBtZWFuaW5nOgorCisgICAgIC0zOiBEb24ndCBr bm93IGFueXRoaW5nIGFib3V0IHRoZSBzZWNvbmQgbG9vcDsKKyAgICAgLTI6 IFRoZSBzZWNvbmQgbG9vcCBtdXN0IG5vdCBiZSBleGVjdXRlZDsKKyAgICAg LTE6IFRoZSBzZWNvbmQgbG9vcCBtdXN0IGJlIGV4ZWN1dGVkLCBidXQgbml0 ZXIgYm91bmQgaXMgdW5rbm93bjsKKyAgICAgIG46IFRoZSBzZWNvbmQgbG9v cCBtdXN0IGJlIGV4ZWN1dGVkLCBuaXRlciBib3VuZCBpcyBuICg+PSAwKTsK KworICAgTm90ZSB3ZSBjb21wdXRlIG5pdGVyIGJvdW5kIGZvciB0aGUgc2Vj b25kIGxvb3AncyBsYXRjaC4gICovCiAKIHN0YXRpYyB0cmVlCi1jb21wdXRl X25ld19maXJzdF9ib3VuZCAoZ2ltcGxlX3NlcSAqc3RtdHMsIHN0cnVjdCB0 cmVlX25pdGVyX2Rlc2MgKm5pdGVyLAotCQkJIHRyZWUgYm9yZGVyLAotCQkJ IGVudW0gdHJlZV9jb2RlIGd1YXJkX2NvZGUsIHRyZWUgZ3VhcmRfaW5pdCkK K2NvbXB1dGVfbmV3X2ZpcnN0X2JvdW5kIChzdHJ1Y3QgdHJlZV9uaXRlcl9k ZXNjICpuaXRlciwgdHJlZSBib3JkZXIsCisJCQkgZW51bSB0cmVlX2NvZGUg Z3VhcmRfY29kZSwgdHJlZSBndWFyZF9pbml0LAorCQkJIHRyZWUgc3RlcCwg SE9TVF9XSURFX0lOVCAqc2Vjb25kX2xvb3Bfbml0ZXJfYm91bmQpCiB7Ci0g IC8qIFRoZSBuaXRlciBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGFmdGVyLWlu Y3JlbWVudCBJViwgd2UgbmVlZAotICAgICB0aGUgbG9vcC1lbnRlciBiYXNl LCBzbyBzdWJ0cmFjdCBTVEVQIG9uY2UuICAqLwogICB0cmVlIGNvbnRyb2xi YXNlID0gbml0ZXItPmNvbnRyb2wuYmFzZTsKICAgdHJlZSBjb250cm9sc3Rl cCA9IG5pdGVyLT5jb250cm9sLnN0ZXA7CiAgIHRyZWUgZW5kZGlmZiwgZW5k ID0gbml0ZXItPmJvdW5kOwogICB0cmVlIHR5cGU7CiAKLSAgLyogQ29tcHV0 ZSBlbmQtYmVnLiAgKi8KKyAgLyogQ29tcHV0ZSBlbmQtYmVnLgorICAgICBO b3RlIHRoZSBuaXRlciBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGFmdGVyLWlu Y3JlbWVudCBJViwgd2UgbmVlZCB0aGUKKyAgICAgbG9vcC1lbnRlciBiYXNl LCBzbyBzdWJ0cmFjdCBTVEVQIG9uY2UuICAqLwogICBpZiAoUE9JTlRFUl9U WVBFX1AgKFRSRUVfVFlQRSAoY29udHJvbGJhc2UpKSkKICAgICB7CiAgICAg ICBjb250cm9sc3RlcCA9IGZvbGRfYnVpbGQxIChORUdBVEVfRVhQUiwKIAkJ CQkgVFJFRV9UWVBFIChjb250cm9sc3RlcCksIGNvbnRyb2xzdGVwKTsKICAg ICAgIGVuZGRpZmYgPSBmb2xkX2J1aWxkX3BvaW50ZXJfcGx1cyAoY29udHJv bGJhc2UsIGNvbnRyb2xzdGVwKTsKIAotICAgICAgdHlwZSA9IHVuc2lnbmVk X3R5cGVfZm9yIChlbmRkaWZmKTsKKyAgICAgIHR5cGUgPSB1bnNpZ25lZF90 eXBlX2ZvciAoVFJFRV9UWVBFIChlbmRkaWZmKSk7CiAgICAgICBlbmRkaWZm ID0gZm9sZF9idWlsZDEgKE5FR0FURV9FWFBSLCB0eXBlLCBmb2xkX2NvbnZl cnQgKHR5cGUsIGVuZGRpZmYpKTsKICAgICAgIGVuZCA9IGZvbGRfY29udmVy dCAodHlwZSwgZW5kKTsKICAgICAgIGVuZGRpZmYgPSBmb2xkX2J1aWxkMiAo UExVU19FWFBSLCB0eXBlLCBlbmQsIGVuZGRpZmYpOwpAQCAtNDMyLDE1ICs0 NDQsMTYgQEAgY29tcHV0ZV9uZXdfZmlyc3RfYm91bmQgKGdpbXBsZV9zZXEg KnN0bXRzLCBzdHJ1Y3QgdHJlZV9uaXRlcl9kZXNjICpuaXRlciwKICAgLyog RGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlIElWcyB0aGUgbmV3 IGJvdW5kIGZvciB0aGUgZmlyc3QKICAgICAgbG9vcCBpcyB0aGUgbWluaW11 bSBvciBtYXhpbXVtIG9mIG9sZCBib3VuZCBhbmQgYm9yZGVyLgogICAgICBB bHNvLCBpZiB0aGUgZ3VhcmQgY29uZGl0aW9uIGlzbid0IHN0cmljdGx5IGxl c3Mgb3IgZ3JlYXRlciwKLSAgICAgd2UgbmVlZCB0byBhZGp1c3QgdGhlIGJv dW5kLiAgKi8gCisgICAgIHdlIG5lZWQgdG8gYWRqdXN0IHRoZSBib3VuZC4g ICovCiAgIGludCBhZGRib3VuZCA9IDA7Ci0gIGVudW0gdHJlZV9jb2RlIG1p bm1heDsKKyAgZW51bSB0cmVlX2NvZGUgbWlubWF4LCBjbXBfY29kZTsKICAg aWYgKG5pdGVyLT5jbXAgPT0gTFRfRVhQUikKICAgICB7CiAgICAgICAvKiBH VCBhbmQgTEUgYXJlIHRoZSBzYW1lLCBpbnZlcnRlZC4gICovCiAgICAgICBp ZiAoZ3VhcmRfY29kZSA9PSBHVF9FWFBSIHx8IGd1YXJkX2NvZGUgPT0gTEVf RVhQUikKIAlhZGRib3VuZCA9IC0xOwogICAgICAgbWlubWF4ID0gTUlOX0VY UFI7CisgICAgICBjbXBfY29kZSA9IExUX0VYUFI7CiAgICAgfQogICBlbHNl CiAgICAgewpAQCAtNDQ4LDYgKzQ2MSw3IEBAIGNvbXB1dGVfbmV3X2ZpcnN0 X2JvdW5kIChnaW1wbGVfc2VxICpzdG10cywgc3RydWN0IHRyZWVfbml0ZXJf ZGVzYyAqbml0ZXIsCiAgICAgICBpZiAoZ3VhcmRfY29kZSA9PSBHRV9FWFBS IHx8IGd1YXJkX2NvZGUgPT0gTFRfRVhQUikKIAlhZGRib3VuZCA9IDE7CiAg ICAgICBtaW5tYXggPSBNQVhfRVhQUjsKKyAgICAgIGNtcF9jb2RlID0gR1Rf RVhQUjsKICAgICB9CiAKICAgaWYgKGFkZGJvdW5kKQpAQCAtNDYyLDggKzQ3 NiwxNDggQEAgY29tcHV0ZV9uZXdfZmlyc3RfYm91bmQgKGdpbXBsZV9zZXEg KnN0bXRzLCBzdHJ1Y3QgdHJlZV9uaXRlcl9kZXNjICpuaXRlciwKIAkJCSAg ICAgIGJ1aWxkX2ludF9jc3QgKHR5cGUsIGFkZGJvdW5kKSk7CiAgICAgfQog Ci0gIG5ld2JvdW5kID0gZm9sZF9idWlsZDIgKG1pbm1heCwgVFJFRV9UWVBF IChib3JkZXIpLCBib3JkZXIsIG5ld2JvdW5kKTsKLSAgcmV0dXJuIGZvcmNl X2dpbXBsZV9vcGVyYW5kIChuZXdib3VuZCwgc3RtdHMsIHRydWUsIE5VTExf VFJFRSk7CisgIHRyZWUgY21wX3JzbHQgPSBmb2xkX2J1aWxkMiAoY21wX2Nv ZGUsIGJvb2xlYW5fdHlwZV9ub2RlLCBib3JkZXIsIG5ld2JvdW5kKTsKKyAg LyogT25seSBoYW5kbGUgc2ltcGxlIGNhc2Ugd2l0aCB1bml0IHN0ZXAuICAq LworICBpZiAod2k6OmVxX3AgKHdpOjphYnMgKHN0ZXApLCAxKQorICAgICAg JiYgY21wX3JzbHQgIT0gTlVMTF9UUkVFICYmIGludGVnZXJfbm9uemVyb3Ag KGNtcF9yc2x0KSkKKyAgICB7CisgICAgICBpZiAoaW50ZWdlcl9ub256ZXJv cCAoY21wX3JzbHQpKQorCXsKKwkgIHRyZWUgbml0ZXJfdHlwZSwgZGlmZjsK KworCSAgbml0ZXJfdHlwZSA9IHVuc2lnbmVkX3R5cGVfZm9yIChUUkVFX1RZ UEUgKG5ld2JvdW5kKSk7CisJICAvKiBUaGUgc3BsaXQgY29uZGl0aW9uIGlu ZGljYXRlcyBzbWFsbGVyIGl0ZXJhdGlvbiBzcGFjZSB0aGFuIHRoZQorCSAg ICAgb3JpZ2luYWwgbG9vcCwgc28gdGhlIHNlY29uZCBsb29wIG11c3QgYmUg ZXhlY3V0ZWQuICAqLworCSAgaWYgKGNtcF9jb2RlID09IExUX0VYUFIpCisJ ICAgIGRpZmYgPSBmb2xkX2J1aWxkMiAoTUlOVVNfRVhQUiwgbml0ZXJfdHlw ZSwKKwkJCQlmb2xkX2NvbnZlcnQgKG5pdGVyX3R5cGUsIG5ld2JvdW5kKSwK KwkJCQlmb2xkX2NvbnZlcnQgKG5pdGVyX3R5cGUsIGJvcmRlcikpOworCSAg ZWxzZQorCSAgICBkaWZmID0gZm9sZF9idWlsZDIgKE1JTlVTX0VYUFIsIG5p dGVyX3R5cGUsCisJCQkJZm9sZF9jb252ZXJ0IChuaXRlcl90eXBlLCBib3Jk ZXIpLAorCQkJCWZvbGRfY29udmVydCAobml0ZXJfdHlwZSwgbmV3Ym91bmQp KTsKKworCSAgLyogQ2hlY2sgaWYgbml0ZXIgY2FuIGJlIGNvbXB1dGVkLiAg Ki8KKwkgIGlmICh0cmVlX2ZpdHNfc2h3aV9wIChkaWZmKSAmJiAhdHJlZV9p bnRfY3N0X3NpZ25fYml0IChkaWZmKSkKKwkgICAgKnNlY29uZF9sb29wX25p dGVyX2JvdW5kID0gdHJlZV90b19zaHdpIChkaWZmKSAtIDE7CisJICBlbHNl CisJICAgICpzZWNvbmRfbG9vcF9uaXRlcl9ib3VuZCA9IC0xOworCisJICBy ZXR1cm4gYm9yZGVyOworCX0KKyAgICAgIGVsc2UgaWYgKGludGVnZXJfemVy b3AgKGNtcF9yc2x0KSkKKwl7CisJICAvKiBUaGUgc3BsaXQgY29uZGl0aW9u IGluZGljYXRlcyBsYXJnZXIgaXRlcmF0aW9uIHNwYWNlIHRoYW4gdGhlCisJ ICAgICBvaWdpbmFsIGxvb3AsIHNvIHRoZSBzZWNvbmQgbG9vcCBtdXN0IG5v dCBiZSBleGVjdXRlZC4gICovCisJICAqc2Vjb25kX2xvb3Bfbml0ZXJfYm91 bmQgPSAtMjsKKwkgIHJldHVybiBuZXdib3VuZDsKKwl9CisgICAgfQorCisg IGNtcF9yc2x0ID0gZm9sZF9idWlsZDIgKEVRX0VYUFIsIGJvb2xlYW5fdHlw ZV9ub2RlLCBib3JkZXIsIG5ld2JvdW5kKTsKKyAgaWYgKGNtcF9yc2x0ICE9 IE5VTExfVFJFRSAmJiBpbnRlZ2VyX25vbnplcm9wIChjbXBfcnNsdCkpCisg ICAgeworICAgICAgLyogVGhlIHNwbGl0IGNvbmRpdGlvbiBpbmRpY2F0ZXMg dGhlIHNhbWUgaXRlcmF0aW9uIHNwYWNlIGFzIHRoZQorCSBvcmlnaW5hbCBz cGFjZSwgc28gdGhlIHNlY29uZCBsb29wIG11c3Qgbm90IGJlIGV4ZWN1dGVk LiAgKi8KKyAgICAgICpzZWNvbmRfbG9vcF9uaXRlcl9ib3VuZCA9IC0yOwor ICAgICAgcmV0dXJuIGJvcmRlcjsKKyAgICB9CisgICpzZWNvbmRfbG9vcF9u aXRlcl9ib3VuZCA9IC0zOworICByZXR1cm4gZm9sZF9idWlsZDIgKG1pbm1h eCwgVFJFRV9UWVBFIChib3JkZXIpLCBib3JkZXIsIG5ld2JvdW5kKTsKK30K KworLyogV2UgaGF2ZSBiZWxvdyBjb250cm9sIGZsb3cgZ3JhcGggYWZ0ZXIg dmVyc2lvbmluZyB0aGUgb3JpZ2luYWwgbG9vcDoKKworICAgICAgICAgICAg ICAgLi0tLS0tLSBndWFyZDEgIC0tLS0tLS4KKyAgICAgICAgICAgICAgIHYg ICAgICAgICAgICAgICAgICAgICB2CisgICAgICAgICBwcmUxKGxvb3AxKSAg ICAuLS0tLS0tLS0tLT5wcmUyKGxvb3AyKQorICAgICAgICAgICAgICB8ICAg ICAgICAgfCAgICAgICAgICAgIHwKKyAgICAgICAgLi0tLT5oMSAgICAgICAg IHwgICAgICAgICAgIGgyPC0tLS0uCisgICAgICAgIHwgICAgIHwgICAgICAg ICB8ICAgICAgICAgICAgfCAgICAgfAorICAgICAgICB8ICAgIGV4MS0tLS4g ICAgfCAgICAgICAuLS0tZXgyICAgIHwKKyAgICAgICAgfCAgICAvICAgICB2 ICAgIHwgICAgICAgfCAgICAgXCAgICB8CisgICAgICAgICctLS1sMSBndWFy ZDItLS0nICAgICAgIHwgICAgIGwyLS0tJworICAgICAgICAgICAgICAgICAg IHwgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgfCAgICAgICAg ICAgIHwKKyAgICAgICAgICAgICAgICAgICAnLS0tPmpvaW48LS0tJworCisg ICBMT09QMiBpcyB0aGUgc2Vjb25kIGxvb3AgYWZ0ZXIgc3BsaXQsIEdVQVJE MSBhbmQgR1VBUkQyIGFyZSB0aGUgdHdvIGJicworICAgY29udHJvbGluZyBp ZiBsb29wMiBzaG91bGQgYmUgZXhlY3V0ZWQuICBTRUNPTkRfTE9PUF9OSVRF Ul9CT1VORCBpcyB0aGUKKyAgIG5pdGVyIGJvdW5kIGZvciBMT09QMidzIGxh dGNoIHdoaWNoIGhhcyBiZWxvdyBtZWFuaW5nOgorCisgICAgIC0zOiBEb24n dCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBzZWNvbmQgbG9vcDsKKyAgICAg LTI6IFRoZSBzZWNvbmQgbG9vcCBtdXN0IG5vdCBiZSBleGVjdXRlZDsKKyAg ICAgLTE6IFRoZSBzZWNvbmQgbG9vcCBtdXN0IGJlIGV4ZWN1dGVkLCBidXQg bml0ZXIgYm91bmQgaXMgdW5rbm93bjsKKyAgICAgIG46IFRoZSBzZWNvbmQg bG9vcCBtdXN0IGJlIGV4ZWN1dGVkLCBuaXRlciBib3VuZCBpcyBuICg+PSAw KS4KKworICAgV2l0aCB0aGUgaW5mb3JtYXRpb24sIHRoaXMgZnVuY3Rpb24g Zm9sZHMgR1VBUkQxIGFuZCBHVUFSRDIgdG8gdHJ1ZSBvcgorICAgZmFsc2Ug c28gdGhhdCBMT09QMiBpcyBhbHdheXMgZXhlY3V0ZWQgb3Igc2tpcHBlZC4g IEl0IGFsc28gc2V0cyB1cHBlcgorICAgYm91bmQgZm9yIExPT1AyJ3Mgbml0 ZXIuICAqLworCitzdGF0aWMgdm9pZAorYWRqdXN0X2xvb3Bfc3BsaXQgKHN0 cnVjdCBsb29wICpsb29wMiwKKwkJICAgYmFzaWNfYmxvY2sgZ3VhcmQxLCBi YXNpY19ibG9jayBndWFyZDIsCisJCSAgIEhPU1RfV0lERV9JTlQgc2Vjb25k X2xvb3Bfbml0ZXJfYm91bmQpCit7CisgIGlmIChzZWNvbmRfbG9vcF9uaXRl cl9ib3VuZCA9PSAtMykKKyAgICByZXR1cm47CisKKyAgZ2NvbmQgKmNvbmQx ID0gYXNfYTxnY29uZCAqPiAobGFzdF9zdG10IChndWFyZDEpKTsKKyAgZ2Nv bmQgKmNvbmQyID0gYXNfYTxnY29uZCAqPiAobGFzdF9zdG10IChndWFyZDIp KTsKKworICBnY2NfYXNzZXJ0IChFREdFX0NPVU5UIChndWFyZDEtPnN1Y2Nz KSA9PSAyKTsKKyAgZ2NjX2Fzc2VydCAoRURHRV9DT1VOVCAoZ3VhcmQyLT5z dWNjcykgPT0gMik7CisgIGVkZ2UgZSA9IEVER0VfU1VDQyAoZ3VhcmQyLCAw KTsKKyAgaWYgKGUtPmRlc3QgIT0gbG9vcF9wcmVoZWFkZXJfZWRnZSAobG9v cDIpLT5zcmMpCisgICAgeworICAgICAgZSA9IEVER0VfU1VDQyAoZ3VhcmQy LCAxKTsKKyAgICAgIGdjY19hc3NlcnQgKGUtPmRlc3QgPT0gbG9vcF9wcmVo ZWFkZXJfZWRnZSAobG9vcDIpLT5zcmMpOworICAgIH0KKworICBib29sIGlu dmVydF9jb25kMiA9IChlLT5mbGFncyAmIEVER0VfRkFMU0VfVkFMVUUpOwor CisgIC8qIExvb3AyIHNob3VsZCBuZXZlciBiZSBleGVjdXRlZC4gICovCisg IGlmIChzZWNvbmRfbG9vcF9uaXRlcl9ib3VuZCA9PSAtMikKKyAgICB7Cisg ICAgICBnaW1wbGVfY29uZF9tYWtlX3RydWUgKGNvbmQxKTsKKyAgICAgIGlm IChpbnZlcnRfY29uZDIpCisJZ2ltcGxlX2NvbmRfbWFrZV90cnVlIChjb25k Mik7CisgICAgICBlbHNlCisJZ2ltcGxlX2NvbmRfbWFrZV9mYWxzZSAoY29u ZDIpOworCisgICAgICB1cGRhdGVfc3RtdCAoY29uZDEpOworICAgICAgdXBk YXRlX3N0bXQgKGNvbmQyKTsKKworICAgICAgaWYgKGR1bXBfZmlsZSAmJiAo ZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKwlmcHJpbnRmIChkdW1wX2Zp bGUsICI7OyBUaGUgc2Vjb25kIHNwbGl0IGxvb3AgaXMgbmV2ZXIgZXhlY3V0 ZWQuXG4iKTsKKworICAgICAgcmV0dXJuOworICAgIH0KKyAgLyogTG9vcDIg bXVzdCBiZSBleGVjdXRlZCBmb3IgdW5rbm93biB0aW1lcy4gICovCisgIGlm IChzZWNvbmRfbG9vcF9uaXRlcl9ib3VuZCA9PSAtMSkKKyAgICB7CisgICAg ICBpZiAoaW52ZXJ0X2NvbmQyKQorCWdpbXBsZV9jb25kX21ha2VfZmFsc2Ug KGNvbmQyKTsKKyAgICAgIGVsc2UKKwlnaW1wbGVfY29uZF9tYWtlX3RydWUg KGNvbmQyKTsKKworICAgICAgdXBkYXRlX3N0bXQgKGNvbmQyKTsKKyAgICAg IHJldHVybjsKKyAgICB9CisKKyAgLyogTG9vcDIgbXVzdCBiZSBleGVjdXRl ZCBmb3Iga25vd24gdGltZXMuICAqLworICBnY2NfYXNzZXJ0IChzZWNvbmRf bG9vcF9uaXRlcl9ib3VuZCA+PSAwKTsKKyAgaWYgKGludmVydF9jb25kMikK KyAgICBnaW1wbGVfY29uZF9tYWtlX2ZhbHNlIChjb25kMik7CisgIGVsc2UK KyAgICBnaW1wbGVfY29uZF9tYWtlX3RydWUgKGNvbmQyKTsKKworICB1cGRh dGVfc3RtdCAoY29uZDIpOworICByZWNvcmRfbml0ZXJfYm91bmQgKGxvb3Ay LCBzZWNvbmRfbG9vcF9uaXRlcl9ib3VuZCwgdHJ1ZSwgdHJ1ZSk7CisKKyAg aWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkK KyAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICI7OyBUaGUgc2Vjb25kIHNwbGl0 IGxvb3AgaXRlcmF0ZXMgYXQgJWkgbGF0Y2giCisJICAgICAiIHRpbWVzLlxu IiwgKGludCltYXhfbG9vcF9pdGVyYXRpb25zX2ludCAobG9vcDIpKTsKIH0K IAogLyogQ2hlY2tzIGlmIExPT1AgY29udGFpbnMgYW4gY29uZGl0aW9uYWwg YmxvY2sgd2hvc2UgY29uZGl0aW9uCkBAIC01MzYsNyArNjkwLDcgQEAgc3Bs aXRfbG9vcCAoc3RydWN0IGxvb3AgKmxvb3AxLCBzdHJ1Y3QgdHJlZV9uaXRl cl9kZXNjICpuaXRlcikKIAkJCQkJICAgIHN0bXRzMik7CiAJdHJlZSBjb25k ID0gYnVpbGQyIChndWFyZF9jb2RlLCBib29sZWFuX3R5cGVfbm9kZSwgZ3Vh cmRfaW5pdCwgYm9yZGVyKTsKIAlpZiAoIWluaXRpYWxfdHJ1ZSkKLQkgIGNv bmQgPSBmb2xkX2J1aWxkMSAoVFJVVEhfTk9UX0VYUFIsIGJvb2xlYW5fdHlw ZV9ub2RlLCBjb25kKTsgCisJICBjb25kID0gZm9sZF9idWlsZDEgKFRSVVRI X05PVF9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwgY29uZCk7CiAKIAkvKiBO b3cgdmVyc2lvbiB0aGUgbG9vcCwgcGxhY2luZyBsb29wMiBhZnRlciBsb29w MSBjb25uZWN0aW5nCiAJICAgdGhlbSwgYW5kIGZpeCB1cCBTU0EgZm9ybSBm b3IgdGhhdC4gICovCkBAIC01NTgsMTMgKzcxMiwxOCBAQCBzcGxpdF9sb29w IChzdHJ1Y3QgbG9vcCAqbG9vcDEsIHN0cnVjdCB0cmVlX25pdGVyX2Rlc2Mg Km5pdGVyKQogCSAgIENvbXB1dGUgdGhlIG5ldyBib3VuZCBmb3IgdGhlIGd1 YXJkaW5nIElWIGFuZCBwYXRjaCB0aGUKIAkgICBsb29wIGV4aXQgdG8gdXNl IGl0IGluc3RlYWQgb2Ygb3JpZ2luYWwgSVYgYW5kIGJvdW5kLiAgKi8KIAln aW1wbGVfc2VxIHN0bXRzID0gTlVMTDsKLQl0cmVlIG5ld2VuZCA9IGNvbXB1 dGVfbmV3X2ZpcnN0X2JvdW5kICgmc3RtdHMsIG5pdGVyLCBib3JkZXIsCi0J CQkJCSAgICAgICBndWFyZF9jb2RlLCBndWFyZF9pbml0KTsKKwlIT1NUX1dJ REVfSU5UIHNlY29uZF9sb29wX25pdGVyX2JvdW5kOworCXRyZWUgbmV3ZW5k ID0gY29tcHV0ZV9uZXdfZmlyc3RfYm91bmQgKG5pdGVyLCBib3JkZXIsIGd1 YXJkX2NvZGUsCisJCQkJCSAgICAgICBndWFyZF9pbml0LCBpdi5zdGVwLAor CQkJCQkgICAgICAgJnNlY29uZF9sb29wX25pdGVyX2JvdW5kKTsKKwluZXdl bmQgPSBmb3JjZV9naW1wbGVfb3BlcmFuZCAobmV3ZW5kLCAmc3RtdHMsIHRy dWUsIE5VTExfVFJFRSk7CiAJaWYgKHN0bXRzKQogCSAgZ3NpX2luc2VydF9z ZXFfb25fZWRnZV9pbW1lZGlhdGUgKGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxv b3AxKSwKIAkJCQkJICAgIHN0bXRzKTsKIAl0cmVlIGd1YXJkX25leHQgPSBQ SElfQVJHX0RFRl9GUk9NX0VER0UgKHBoaSwgbG9vcF9sYXRjaF9lZGdlIChs b29wMSkpOwogCXBhdGNoX2xvb3BfZXhpdCAobG9vcDEsIGd1YXJkX3N0bXQs IGd1YXJkX25leHQsIG5ld2VuZCwgaW5pdGlhbF90cnVlKTsKKwlhZGp1c3Rf bG9vcF9zcGxpdCAobG9vcDIsIGNvbmRfYmIsIG5ld19lLT5zcmMsCisJCQkg ICBzZWNvbmRfbG9vcF9uaXRlcl9ib3VuZCk7CiAKIAkvKiBGaW5hbGx5IHBh dGNoIG91dCB0aGUgdHdvIGNvcGllcyBvZiB0aGUgY29uZGl0aW9uIHRvIGJl IGFsd2F5cwogCSAgIHRydWUvZmFsc2UgKG9yIG9wcG9zaXRlKS4gICovCi0t IAoxLjkuMQoK --_002_VI1PR0802MB21764A3511EE944657C64543E7C30VI1PR0802MB2176_--