From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 51132 invoked by alias); 10 Aug 2017 21:15:06 -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 51018 invoked by uid 89); 10 Aug 2017 21:15:00 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:2489 X-HELO: EUR01-DB5-obe.outbound.protection.outlook.com Received: from mail-db5eur01on0058.outbound.protection.outlook.com (HELO EUR01-DB5-obe.outbound.protection.outlook.com) (104.47.2.58) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 10 Aug 2017 21:14:58 +0000 Received: from HE1PR0802MB2377.eurprd08.prod.outlook.com (10.172.129.19) by HE1PR0802MB2377.eurprd08.prod.outlook.com (10.172.129.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1341.17; Thu, 10 Aug 2017 21:14:55 +0000 Received: from HE1PR0802MB2377.eurprd08.prod.outlook.com ([fe80::488f:54de:6ff0:fdec]) by HE1PR0802MB2377.eurprd08.prod.outlook.com ([fe80::488f:54de:6ff0:fdec%18]) with mapi id 15.01.1341.017; Thu, 10 Aug 2017 21:14:55 +0000 From: Michael Collison To: "gcc-patches@gcc.gnu.org" CC: nd Subject: [PATCH][compare-elim] Merge zero-comparisons with normal ops Date: Thu, 10 Aug 2017 22:03:00 -0000 Message-ID: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Michael.Collison@arm.com; x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;HE1PR0802MB2377;6:llqHmiyd3jKD6luyTCzNq/7slA9O7Y9oTj2OSE69DAVJai4J364J4CDq6TpORqEjjcMxOgvO2FYQXQTQBn4+PJmOeQdh0EIrJ2WCUwXI6VipC7hbH0pc6hzmWb12IGFS+Lm++3An06CKhkvb49tmdODv4dBZ6BFEaZrOiQISwsr2oljQt721xxOPeTL0rMrz0if8+GVxrx+DwojP+NWlJqvM6XmW1unG+VHnOW7Ndv51xd+dhGMy3+0T+tQHQ5eO5c2HUYjHtELP9q9dlGUciAck06/e3uvx2Hs0OpMny/GLbBnh4NLnx3Yz+xhix9VHvEIUrSnU7qDlHLijWclT7g==;5:MGKZ6ea11Oig2VEkSd8EGX60ivZcbwa8uaDbSmuRtU8k/5zZ5774vQyzwO2PRjSr55Ia8SjF+i1FPtcm/XrBpH5Mi+885xXNQzUY6iloBchRy+Wf3FmjE/nPr0IHHu7TjJck4GmLGtDVLDjp5s5vBA==;24:ECtbJWTei3IDa62X7oWLB2qMTOClmR/1tl0Y4/tGV26IEd6AucNvnselypex6/5HLtD4fCJ3iid1Fq3hRq7dTPMb9SzRZBEX6dEz4aL6hwI=;7:KIDsKOFm5NqRMjnP2tk2SHhA2l1VY1fKvQz14LNWJiIogeHMNjb/2jHtmJI73uYitsL90DKgo9rf49dn8KofsC+qnHGAGUdM6fqlKN7xeVMsooMb6kYp27d+rLQ46QMbw2tcOjWQ/FSvG6obpRELK6gDAQ+UbhUmgIsS2nn4HTFsZakY/nvxUYN583u6Gb6BOqQfJMLNX43J1B6z8pTtXCLLeCbvh2EprwiHzAvQXVA= x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-correlation-id: 102008b5-a285-4889-30a1-08d4e034d90d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(300000502095)(300135100095)(22001)(2017030254152)(48565401081)(300000503095)(300135400095)(2017052603031)(49563074)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:HE1PR0802MB2377; x-ms-traffictypediagnostic: HE1PR0802MB2377: nodisclaimer: True x-exchange-antispam-report-test: UriScan:(180628864354917); x-microsoft-antispam-prvs: x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(102415395)(6040450)(601004)(2401047)(5005006)(8121501046)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(3002001)(6055026)(6041248)(20161123562025)(20161123560025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:HE1PR0802MB2377;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:HE1PR0802MB2377; x-forefront-prvs: 03950F25EC x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(39860400002)(53754006)(189002)(199003)(377424004)(9686003)(50986999)(6506006)(2906002)(8676002)(105586002)(110136004)(6116002)(54356999)(2351001)(14454004)(53936002)(101416001)(5660300001)(99936001)(68736007)(55016002)(3846002)(102836003)(99286003)(33656002)(6916009)(5250100002)(74316002)(7696004)(2501003)(7736002)(72206003)(4326008)(6436002)(25786009)(97736004)(3280700002)(106356001)(305945005)(478600001)(8936002)(66066001)(3660700001)(81166006)(5640700003)(2900100001)(189998001)(81156014)(86362001);DIR:OUT;SFP:1101;SCL:1;SRVR:HE1PR0802MB2377;H:HE1PR0802MB2377.eurprd08.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: multipart/mixed; boundary="_002_HE1PR0802MB2377CC3CF0D995F4BC869D2595880HE1PR0802MB2377_" MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Aug 2017 21:14:54.8492 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2377 X-SW-Source: 2017-08/txt/msg00769.txt.bz2 --_002_HE1PR0802MB2377CC3CF0D995F4BC869D2595880HE1PR0802MB2377_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 2569 Hi all, One issue that we keep encountering on aarch64 is GCC not making good use o= f the flag-setting arithmetic instructions like ADDS, SUBS, ANDS etc. that perform an arithmetic operation and compare= the result against zero. They are represented in a fairly standard way in the backend as PARALLEL pa= tterns: (parallel [(set (reg x1) (op (reg x2) (reg x3))) (set (reg cc) (compare (op (reg x2) (reg x3)) (const_int 0)))]) GCC isn't forming these from separate arithmetic and comparison instruction= s as aggressively as it could. A particular pain point is when the result of the arithmetic insn is used b= efore the comparison instruction. The testcase in this patch is one such example where we have: (insn 7 35 33 2 (set (reg/v:SI 0 x0 [orig:73 ] [73]) (plus:SI (reg:SI 0 x0 [ x ]) (reg:SI 1 x1 [ y ]))) "comb.c":3 95 {*addsi3_aarch64} (nil)) (insn 33 7 34 2 (set (reg:SI 1 x1 [77]) (plus:SI (reg/v:SI 0 x0 [orig:73 ] [73]) (const_int 2 [0x2]))) "comb.c":4 95 {*addsi3_aarch64} (nil)) (insn 34 33 17 2 (set (reg:CC 66 cc) (compare:CC (reg/v:SI 0 x0 [orig:73 ] [73]) (const_int 0 [0]))) "comb.c":4 391 {cmpsi} (nil)) This scares combine away as x0 is used in insn 33 as well as the comparison= in insn 34. I think the compare-elim pass can help us here. This patch extends it by handling comparisons against zero, finding the def= ining instruction of the compare and merging the comparison with the defining instruction into a PARALLEL th= at will hopefully match the form described above. If between the comparison and the defining insn we find an= instruction that uses the condition registers or any control flow we bail out, and we don't cross basic blocks. This simple technique allows us to catch cases such as this example. Bootstrapped and tested on arm-none-linux-gnueabihf, aarch64-none-linux-gnu= and x86_64. Ok for trunk? 2017-08-05 Kyrylo Tkachov Michael Collison * compare-elim.c: Include emit-rtl.h. (can_merge_compare_into_arith): New function. (try_validate_parallel): Likewise. (try_merge_compare): Likewise. (try_eliminate_compare): Call the above when no previous clobber is available. (execute_compare_elim_after_reload): Add DF_UD_CHAIN and DF_DU_CHAIN dataflow problems. 2017-08-05 Kyrylo Tkachov Michael Collison =09=20=20=20=20 * gcc.target/aarch64/cmpelim_mult_uses_1.c: New test. --_002_HE1PR0802MB2377CC3CF0D995F4BC869D2595880HE1PR0802MB2377_ Content-Type: application/octet-stream; name="pr5198v1.patch" Content-Description: pr5198v1.patch Content-Disposition: attachment; filename="pr5198v1.patch"; size=6340; creation-date="Thu, 10 Aug 2017 21:11:56 GMT"; modification-date="Thu, 10 Aug 2017 21:10:16 GMT" Content-Transfer-Encoding: base64 Content-length: 8597 ZGlmZiAtLWdpdCBhL2djYy9jb21wYXJlLWVsaW0uYyBiL2djYy9jb21wYXJl LWVsaW0uYwppbmRleCA3ZTU1N2EyLi5jNjVkMTU1IDEwMDY0NAotLS0gYS9n Y2MvY29tcGFyZS1lbGltLmMKKysrIGIvZ2NjL2NvbXBhcmUtZWxpbS5jCkBA IC02NSw2ICs2NSw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUg Q09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAidG1fcC5oIgogI2lu Y2x1ZGUgImluc24tY29uZmlnLmgiCiAjaW5jbHVkZSAicmVjb2cuaCIKKyNp bmNsdWRlICJlbWl0LXJ0bC5oIgogI2luY2x1ZGUgImNmZ3J0bC5oIgogI2lu Y2x1ZGUgInRyZWUtcGFzcy5oIgogI2luY2x1ZGUgImRvbXdhbGsuaCIKQEAg LTU3OSw2ICs1ODAsMTQ1IEBAIGVxdWl2YWxlbnRfcmVnX2F0X3N0YXJ0IChy dHggcmVnLCBydHhfaW5zbiAqZW5kLCBydHhfaW5zbiAqc3RhcnQpCiAgIHJl dHVybiByZWc7CiB9CiAKKy8qIFJldHVybiB0cnVlIGlmIGl0IGlzIG9rYXkg dG8gbWVyZ2UgdGhlIGNvbXBhcmlzb24gQ01QX0lOU04gd2l0aAorICAgdGhl IGluc3RydWN0aW9uIEFSSVRIX0lOU04uICBCb3RoIGluc3RydWN0aW9ucyBh cmUgYXNzdW1lZCB0byBiZSBpbiB0aGUKKyAgIHNhbWUgYmFzaWMgYmxvY2sg d2l0aCBBUklUSF9JTlNOIGFwcGVhcmluZyBiZWZvcmUgQ01QX0lOU04uICBU aGlzIGNoZWNrcworICAgdGhhdCB0aGVyZSBhcmUgbm8gdXNlcyBvciBkZWZz IG9mIHRoZSBjb25kaXRpb24gZmxhZ3Mgb3IgY29udHJvbCBmbG93CisgICBj aGFuZ2VzIGJldHdlZW4gdGhlIHR3byBpbnN0cnVjdGlvbnMuICAqLworCitz dGF0aWMgYm9vbAorY2FuX21lcmdlX2NvbXBhcmVfaW50b19hcml0aCAocnR4 X2luc24gKmNtcF9pbnNuLCBydHhfaW5zbiAqYXJpdGhfaW5zbikKK3sKKyAg Zm9yIChydHhfaW5zbiAqaW5zbiA9IFBSRVZfSU5TTiAoY21wX2luc24pOwor ICAgICAgIGluc24gJiYgaW5zbiAhPSBhcml0aF9pbnNuOworICAgICAgIGlu c24gPSBQUkVWX0lOU04gKGluc24pKQorICAgIHsKKyAgICAgIGlmICghTk9O REVCVUdfSU5TTl9QIChpbnNuKSkKKwljb250aW51ZTsKKyAgICAgIC8qIEJh aWwgaWYgdGhlcmUgYXJlIGp1bXBzIG9yIGNhbGxzIGluIGJldHdlZW4uICAq LworICAgICAgaWYgKCFOT05KVU1QX0lOU05fUCAoaW5zbikpCisJcmV0dXJu IGZhbHNlOworCisgICAgICBkZl9yZWYgcmVmOworICAgICAgLyogRmluZCBh IFVTRSBvZiB0aGUgZmxhZ3MgcmVnaXN0ZXIuICAqLworICAgICAgRk9SX0VB Q0hfSU5TTl9VU0UgKHJlZiwgaW5zbikKKwlpZiAoREZfUkVGX1JFR05PIChy ZWYpID09IHRhcmdldG0uZmxhZ3NfcmVnbnVtKQorCSAgcmV0dXJuIGZhbHNl OworCisgICAgICAvKiBGaW5kIGEgREVGIG9mIHRoZSBmbGFncyByZWdpc3Rl ci4gICovCisgICAgICBGT1JfRUFDSF9JTlNOX0RFRiAocmVmLCBpbnNuKQor CWlmIChERl9SRUZfUkVHTk8gKHJlZikgPT0gdGFyZ2V0bS5mbGFnc19yZWdu dW0pCisJICByZXR1cm4gZmFsc2U7CisgICAgfQorICByZXR1cm4gdHJ1ZTsK K30KKworLyogR2l2ZW4gdHdvIFNFVCBleHByZXNzaW9ucywgU0VUX0EgYW5k IFNFVF9CIGRldGVybWluZSB3aGV0aGVyIHRoZXkgZm9ybQorICAgYSByZWNv Z25pemFibGUgcGF0dGVybiB3aGVuIGVtaXR0ZWQgaW4gcGFyYWxsZWwuICBS ZXR1cm4gdGhhdCBwYXJhbGxlbAorICAgaWYgc28uICBPdGhlcndpc2UgcmV0 dXJuIE5VTEwuICBUaGlzIHRyaWVzIGJvdGggcGVybXV0YXRpb25zIG9mIFNF VF9BCisgICBhbmQgU0VUX0Igd2l0aGluIHRoZSBQQVJBTExFTC4gICovCisK K3N0YXRpYyBydHgKK3RyeV92YWxpZGF0ZV9wYXJhbGxlbCAocnR4IHNldF9h LCBydHggc2V0X2IpCit7CisgIHJ0eCBwYXIKKyAgICA9IGdlbl9ydHhfUEFS QUxMRUwgKFZPSURtb2RlLCBnZW5fcnR2ZWMgKDIsIHNldF9hLCBzZXRfYikp OworICBydHhfaW5zbiAqc2VxOworICBzdGFydF9zZXF1ZW5jZSAoKTsKKyAg c2VxID0gZW1pdF9pbnNuIChwYXIpOworICBlbmRfc2VxdWVuY2UgKCk7Cisg IGlmIChyZWNvZ19tZW1vaXplZCAoc2VxKSA+IDApCisgICAgcmV0dXJuIHBh cjsKKworICBwYXIgPSBnZW5fcnR4X1BBUkFMTEVMIChWT0lEbW9kZSwgZ2Vu X3J0dmVjICgyLCBzZXRfYiwgc2V0X2EpKTsKKyAgc3RhcnRfc2VxdWVuY2Ug KCk7CisgIHNlcSA9IGVtaXRfaW5zbiAocGFyKTsKKyAgZW5kX3NlcXVlbmNl ICgpOworICByZXR1cm4gcmVjb2dfbWVtb2l6ZWQgKHNlcSkgPiAwID8gcGFy IDogTlVMTF9SVFg7Cit9CisKKy8qIEZvciBhIGNvbXBhcmlzb24gaW5zdHJ1 Y3Rpb24gZGVzY3JpYmVkIGJ5IENNUCBjaGVjayBpZiBpdCBjb21wYXJlcyBh CisgICByZWdpc3RlciB3aXRoIHplcm8gaS5lLiBpdCBpcyBvZiB0aGUgZm9y bSBDQyA6PSBDTVAgUjEsIDAuCisgICBJZiBpdCBpcywgZmluZCB0aGUgaW5z dHJ1Y3Rpb24gZGVmaW5pbmcgUjEgKHNheSBJMSkgYW5kIHRyeSB0byBjcmVh dGUgYQorICAgUEFSQUxMRUwgY29uc2lzdGluZyBvZiBJMSBhbmQgdGhlIGNv bXBhcmlzb24sIHJlcHJlc2VudGluZyBhIGZsYWctc2V0dGluZworICAgYXJp dGhtZXRpYyBpbnN0cnVjdGlvbi4gIEV4YW1wbGU6CisgICBJMTogUjEgOj0g UjIgKyBSMworICAgPGluc3RydWN0aW9ucyB0aGF0IGRvbid0IHJlYWQgdGhl IGNvbmRpdGlvbiByZWdpc3Rlcj4KKyAgIEkyOiBDQyA6PSBDTVAgUjEgMAor ICAgSTIgY2FuIGJlIG1lcmdlZCB3aXRoIEkxIGludG86CisgICBJMTogeyBS MSA6PSBSMiArIFIzIDsgQ0MgOj0gQ01QIChSMiArIFIzKSAwIH0KKyAgIFRo aXMgY2F0Y2hlcyBjYXNlcyB3aGVyZSBSMSBpcyB1c2VkIGJldHdlZW4gSTEg YW5kIEkyIGFuZCB0aGVyZWZvcmUKKyAgIGNvbWJpbmUgYW5kIG90aGVyIFJU TCBvcHRpbWlzYXRpb25zIHdpbGwgbm90IHRyeSB0byBwcm9wYWdhdGUgaXQg aW50bworICAgSTIuICBSZXR1cm4gdHJ1ZSBpZiB3ZSBzdWNjZWVkZWQgaW4g bWVyZ2luZyBDTVAuICAqLworCitzdGF0aWMgYm9vbAordHJ5X21lcmdlX2Nv bXBhcmUgKHN0cnVjdCBjb21wYXJpc29uICpjbXApCit7CisgIHJ0eF9pbnNu ICpjbXBfaW5zbiA9IGNtcC0+aW5zbjsKKworICBpZiAoIVJFR19QIChjbXAt PmluX2EpIHx8IGNtcC0+aW5fYiAhPSBjb25zdDBfcnR4KQorICAgIHJldHVy biBmYWxzZTsKKyAgcnR4IGluX2EgPSBjbXAtPmluX2E7CisgIGlmICghaW5f YSkKKyAgICByZXR1cm4gZmFsc2U7CisgIGRmX3JlZiB1c2U7CisKKyAgRk9S X0VBQ0hfSU5TTl9VU0UgKHVzZSwgY21wX2luc24pCisgICAgaWYgKERGX1JF Rl9SRUdOTyAodXNlKSA9PSBSRUdOTyAoaW5fYSkpCisgICAgICBicmVhazsK KyAgaWYgKCF1c2UpCisgICAgcmV0dXJuIGZhbHNlOworCisgIHN0cnVjdCBk Zl9saW5rICpyZWZfY2hhaW47CisgIHJlZl9jaGFpbiA9IERGX1JFRl9DSEFJ TiAodXNlKTsKKyAgaWYgKCFyZWZfY2hhaW4gfHwgIXJlZl9jaGFpbi0+cmVm CisgICAgICB8fCAhREZfUkVGX0lOU05fSU5GTyAocmVmX2NoYWluLT5yZWYp IHx8IHJlZl9jaGFpbi0+bmV4dCAhPSBOVUxMKQorICAgIHJldHVybiBmYWxz ZTsKKworICBydHhfaW5zbiAqZGVmX2luc24gPSBERl9SRUZfSU5TTiAocmVm X2NoYWluLT5yZWYpOworICAvKiBXZSBmb3VuZCB0aGUgaW5zbiB0aGF0IGRl ZmluZXMgaW5fYS4gIE9ubHkgY29uc2lkZXIgdGhlIGNhc2VzIHdoZXJlCisg ICAgIGl0IGlzIGluIHRoZSBzYW1lIGJsb2NrIGFzIHRoZSBjb21wYXJpc29u LiAgKi8KKyAgaWYgKEJMT0NLX0ZPUl9JTlNOIChjbXBfaW5zbikgIT0gQkxP Q0tfRk9SX0lOU04gKGRlZl9pbnNuKSkKKyAgICByZXR1cm4gZmFsc2U7CisK KyAgcnR4IHNldCA9IHNpbmdsZV9zZXQgKGRlZl9pbnNuKTsKKyAgaWYgKCFz ZXQpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGlmICghY2FuX21lcmdlX2Nv bXBhcmVfaW50b19hcml0aCAoY21wX2luc24sIGRlZl9pbnNuKSkKKyAgICBy ZXR1cm4gZmFsc2U7CisKKyAgcnR4IHNyYyA9IFNFVF9TUkMgKHNldCk7Cisg IHJ0eCBmbGFncyA9IG1heWJlX3NlbGVjdF9jY19tb2RlIChjbXAsIHNyYywg Q09OU1QwX1JUWCAoR0VUX01PREUgKHNyYykpKTsKKyAgaWYgKCFmbGFncykK KyAgICB7CisgICAgLyogV2UgbWF5IGFscmVhZHkgaGF2ZSBhIGNoYW5nZSBn cm91cCBnb2luZyB0aHJvdWdoIG1heWJlX3NlbGVjdF9jY19tb2RlLgorICAg ICAgIERpc2NhcmQgaXQgcHJvcGVybHkuICAqLworICAgICAgY2FuY2VsX2No YW5nZXMgKDApOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBy dHggZmxhZ19zZXQKKyAgICA9IGdlbl9ydHhfU0VUIChmbGFncywgZ2VuX3J0 eF9DT01QQVJFIChHRVRfTU9ERSAoZmxhZ3MpLAorCQkJCQkgICBjb3B5X3J0 eCAoc3JjKSwKKwkJCQkJICAgQ09OU1QwX1JUWCAoR0VUX01PREUgKHNyYykp KSk7CisgIHJ0eCBhcml0aF9zZXQgPSBjb3B5X3J0eCAoUEFUVEVSTiAoZGVm X2luc24pKTsKKyAgcnR4IHBhciA9IHRyeV92YWxpZGF0ZV9wYXJhbGxlbCAo ZmxhZ19zZXQsIGFyaXRoX3NldCk7CisgIGlmICghcGFyKQorICAgIHsKKyAg ICAgIC8qIFdlIG1heSBhbHJlYWR5IGhhdmUgYSBjaGFuZ2UgZ3JvdXAgZ29p bmcgdGhyb3VnaCBtYXliZV9zZWxlY3RfY2NfbW9kZS4KKwkgRGlzY2FyZCBp dCBwcm9wZXJseS4gICovCisgICAgICBjYW5jZWxfY2hhbmdlcyAoMCk7Cisg ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICBpZiAoIWFwcGx5X2NoYW5n ZV9ncm91cCAoKSkKKyAgICByZXR1cm4gZmFsc2U7CisgIGVtaXRfaW5zbl9h ZnRlciAocGFyLCBkZWZfaW5zbik7CisgIGRlbGV0ZV9pbnNuIChkZWZfaW5z bik7CisgIGRlbGV0ZV9pbnNuIChjbXAtPmluc24pOworICByZXR1cm4gdHJ1 ZTsKK30KKwogLyogQXR0ZW1wdCB0byByZXBsYWNlIGEgY29tcGFyaXNvbiB3 aXRoIGEgcHJpb3IgYXJpdGhtZXRpYyBpbnNuIHRoYXQgY2FuCiAgICBjb21w dXRlIHRoZSBzYW1lIGZsYWdzIHZhbHVlIGFzIHRoZSBjb21wYXJpc29uIGl0 c2VsZi4gIFJldHVybiB0cnVlIGlmCiAgICBzdWNjZXNzZnVsLCBoYXZpbmcg bWFkZSBhbGwgcnRsIG1vZGlmaWNhdGlvbnMgbmVjZXNzYXJ5LiAgKi8KQEAg LTU4OCw3ICs3MjgsOSBAQCB0cnlfZWxpbWluYXRlX2NvbXBhcmUgKHN0cnVj dCBjb21wYXJpc29uICpjbXApCiB7CiAgIHJ0eCBmbGFncywgaW5fYSwgaW5f YiwgY21wX3NyYzsKIAotICAvKiBXZSBtdXN0IGhhdmUgZm91bmQgYW4gaW50 ZXJlc3RpbmcgImNsb2JiZXIiIHByZWNlZGluZyB0aGUgY29tcGFyZS4gICov CisgIGlmICh0cnlfbWVyZ2VfY29tcGFyZSAoY21wKSkKKyAgICByZXR1cm4g dHJ1ZTsKKwogICBpZiAoY21wLT5wcmV2X2Nsb2JiZXIgPT0gTlVMTCkKICAg ICByZXR1cm4gZmFsc2U7CiAKQEAgLTcxNCw2ICs4NTYsNyBAQCB0cnlfZWxp bWluYXRlX2NvbXBhcmUgKHN0cnVjdCBjb21wYXJpc29uICpjbXApCiBzdGF0 aWMgdW5zaWduZWQgaW50CiBleGVjdXRlX2NvbXBhcmVfZWxpbV9hZnRlcl9y ZWxvYWQgKHZvaWQpCiB7CisgIGRmX2NoYWluX2FkZF9wcm9ibGVtIChERl9V RF9DSEFJTiArIERGX0RVX0NIQUlOKTsKICAgZGZfYW5hbHl6ZSAoKTsKIAog ICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghYWxsX2NvbXBhcmVzLmV4aXN0cyAo KSk7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFy Y2g2NC9jbXBlbGltX211bHRfdXNlc18xLmMgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvYWFyY2g2NC9jbXBlbGltX211bHRfdXNlc18xLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUzYzM4OAotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0 L2NtcGVsaW1fbXVsdF91c2VzXzEuYwpAQCAtMCwwICsxLDE3IEBACisvKiB7 IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIiIH0g Ki8KKworLyogWCBpcyBib3RoIGNvbXBhcmVkIGFnYWluc3QgemVybyBhbmQg dXNlZC4gIE1ha2Ugc3VyZSB3ZSBjYW4gc3RpbGwKKyAgIGdlbmVyYXRlIGFu IEFERFMgYW5kIGF2b2lkIGFuIGV4cGxpY2l0IGNvbXBhcmlzb24gYWdhaW5z dCB6ZXJvLiAgKi8KKworaW50Citmb28gKGludCB4LCBpbnQgeSkKK3sKKyAg eCArPSB5OworICBpZiAoeCAhPSAwKQorICAgIHggPSB4ICsgMjsKKyAgcmV0 dXJuIHg7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10 aW1lcyAiYWRkc1xcdHdcWzAtOVxdKywgd1xbMC05XF0rLCB3XFswLTlcXSsi IDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90 ICJjbXBcXHR3XFswLTlcXSssIDAiIH0gfSAqLwotLSAKMS45LjEKCg== --_002_HE1PR0802MB2377CC3CF0D995F4BC869D2595880HE1PR0802MB2377_--