From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25068 invoked by alias); 6 Sep 2017 09:55:34 -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 24994 invoked by uid 89); 6 Sep 2017 09:55:34 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.7 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,KAM_LOTSOFHASH,RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=importance X-HELO: foss.arm.com Received: from foss.arm.com (HELO foss.arm.com) (217.140.101.70) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 06 Sep 2017 09:55:31 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BB9A013D5; Wed, 6 Sep 2017 02:55:29 -0700 (PDT) Received: from [10.2.206.195] (e112997-lin.cambridge.arm.com [10.2.206.195]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 90F033F3E1; Wed, 6 Sep 2017 02:55:28 -0700 (PDT) Subject: Re: [PATCH] Factor out division by squares and remove division around comparisons (2/2) From: Jackson Woodruff To: Richard Biener Cc: wilco.dijkstra@arm.com, kyrylo.tkachov@foss.arm.com, "Joseph S. Myers" , GCC Patches References: Message-ID: Date: Wed, 06 Sep 2017 09:55:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------C5E35EAAFF9D0D6C190CE192" X-IsSubscribed: yes X-SW-Source: 2017-09/txt/msg00334.txt.bz2 This is a multi-part message in MIME format. --------------C5E35EAAFF9D0D6C190CE192 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-length: 3061 Hi all, A minor improvement came to mind while updating other parts of this patch. I've updated a testcase to make it more clear and a condition now uses a call to is_division_by rather than manually checking those conditions. Jackson On 08/30/2017 05:32 PM, Jackson Woodruff wrote: > Hi all, > > I've attached a new version of the patch in response to a few of Wilco's > comments in person. > > The end product of the pass is still the same, but I have fixed several > bugs. > > Now tested independently of the other patches. > > On 08/15/2017 03:07 PM, Richard Biener wrote: >> On Thu, Aug 10, 2017 at 4:10 PM, Jackson Woodruff >> wrote: >>> Hi all, >>> >>> The patch implements the some of the division optimizations discussed in >>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71026 . >>> >>> We now reassociate (as discussed in the bug report): >>> >>>      x / (y * y) -> x  * (1 / y) * (1 / y) >>> >>> If it is reasonable to do so. This is done with >>> -funsafe-math-optimizations. >>> >>> Bootstrapped and regtested with part (1/2). OK for trunk? >> >> I believe your enhancement shows the inherent weakness of >> CSE of reciprocals in that it works from the defs.  It will >> handle x / (y * y) but not x / (y * y * y). >> >> I think a rewrite of this mini-pass is warranted. > > I suspect that there might be more to gain by of handling the case of > x / (y * z) rather than the case of x / (y**n), but I agree that this > pass could do more. > >> >> Richard. >> >>> Jackson >>> >>> gcc/ >>> >>> 2017-08-03  Jackson Woodruff  >>> >>>          PR 71026/tree-optimization >>>          * tree-ssa-math-opts (is_division_by_square, >>>          is_square_of, insert_sqaure_reciprocals): New. >>>          (insert_reciprocals): Change to insert reciprocals >>>          before a division by a square. >>>          (execute_cse_reciprocals_1): Change to consider >>>          division by a square. >>> >>> >>> gcc/testsuite >>> >>> 2017-08-03  Jackson Woodruff  >>> >>>          PR 71026/tree-optimization >>>          * gcc.dg/associate_division_1.c: New. >>> > > Thanks, > > Jackson. > > Updated ChangeLog: > > gcc/ > > 2017-08-30  Jackson Woodruff  > >     PR 71026/tree-optimization >     * tree-ssa-math-opts (is_division_by_square, is_square_of): New. >     (insert_reciprocals): Change to insert reciprocals >     before a division by a square and to insert the square >     of a reciprocal. >     (execute_cse_reciprocals_1): Change to consider >     division by a square. >     (register_division_in): Add importance parameter. > > gcc/testsuite > > 2017-08-30  Jackson Woodruff  > >     PR 71026/tree-optimization >     * gcc.dg/extract_recip_3.c: New. >     * gcc.dg/extract_recip_4.c: New. >     * gfortran.dg/extract_recip_1.f: New. --------------C5E35EAAFF9D0D6C190CE192 Content-Type: text/plain; charset=UTF-8; name="patchfile-2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="patchfile-2" Content-length: 19159 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2V4dHJhY3RfcmVj aXBfMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZXh0cmFjdF9yZWNpcF8z LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWQ5ZjJkYzM2ZjFlNjk1Y2Vj YTFmNTBiYzc4ZjRhYzRmYmIyZTc4NwotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL2V4dHJhY3RfcmVjaXBfMy5jCkBAIC0wLDAg KzEsMzAgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9w dGlvbnMgIi1PZmFzdCAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8KKwor ZmxvYXQKK2V4dHJhY3Rfc3F1YXJlIChmbG9hdCAqYSwgZmxvYXQgKmIsIGZs b2F0IHgsIGZsb2F0IHkpCit7CisgICphID0gMyAvICh5ICogeSk7CisgICpi ID0gNSAvICh5ICogeSk7CisKKyAgcmV0dXJuIHggLyAoeSAqIHkpOworfQor CisvKiBEb24ndCBleHBlY3QgdGhlICdwb3dtdWx0JyAoY2FsY3VsYXRpb24g b2YgeSAqIHkpCisgICB0byBiZSBkZWxldGVkIHVudGlsIGEgbGF0ZXIgcGFz cywgc28gbG9vayBmb3Igb25lCisgICBtb3JlIG11bHRpcGxpY2F0aW9uIHRo YW4gc3RyaWN0bHkgbmVjZXNzYXJ5LiAgKi8KK2Zsb2F0CitleHRyYWN0X3Jl Y2lwIChmbG9hdCAqYSwgZmxvYXQgKmIsIGZsb2F0IHgsIGZsb2F0IHksIGZs b2F0IHopCit7CisgICphID0gNyAvIHk7CisgICpiID0geCAvICh5ICogeSk7 CisKKyAgcmV0dXJuIHogLyB5OworfQorCisvKiA0IEZvciB0aGUgcG9pbnRl cnMgdG8gYSwgYiwgNCBtdWx0aXBsaWNhdGlvbnMgaW4gJ2V4dHJhY3Rfc3F1 YXJlJywKKyAgIDQgbXVsdGlwbGljYXRpb25zIGluICdleHRyYWN0X3JlY2lw JyBleHBlY3RlZC4gICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAtdGltZXMgIiBcXCogIiAxMiAib3B0aW1pemVkIiB9IH0gKi8KKworLyog MSBkaXZpc2lvbiBpbiAnZXh0cmFjdF9zcXVhcmUnLCAxIGRpdmlzaW9uIGlu ICdleHRyYWN0X3JlY2lwJy4gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcC10aW1lcyAiIC8gIiAyICJvcHRpbWl6ZWQiIH0gfSAqLwpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZXh0cmFjdF9yZWNpcF80 LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9leHRyYWN0X3JlY2lwXzQuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MzEwNWM2MGNlZDVjMjY3MWYzNzkz ZDc2NDgyYzM1NTAyNzEyYTJjCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvZXh0cmFjdF9yZWNpcF80LmMKQEAgLTAsMCArMSwz NSBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9u cyAiLU9mYXN0IC1mZHVtcC10cmVlLW9wdGltaXplZCIgfSAqLworCisvKiBE b24ndCBleHBlY3QgYW55IG9mIHRoZXNlIGRpdmlzaW9ucyB0byBiZSBleHRy YWN0ZWQuICAqLworZG91YmxlIGYgKGRvdWJsZSB4LCBpbnQgcCkKK3sKKyAg aWYgKHAgPiAwKQorICAgIHsKKyAgICAgIHJldHVybiAxLjAvKHggKiB4KTsK KyAgICB9CisKKyAgaWYgKHAgPiAtMSkKKyAgICB7CisgICAgICByZXR1cm4g eCAqIHggKiB4OworICAgIH0KKyAgcmV0dXJuICAxLjAgLyh4KTsKK30KKwor LyogRXhwZWN0IGEgcmVjaXByb2NhbCB0byBiZSBleHRyYWN0ZWQgaGVyZS4g ICovCitkb3VibGUgZyAoZG91YmxlICphLCBkb3VibGUgeCwgZG91YmxlIHkp Cit7CisgICphID0gMyAvIHk7CisgIGRvdWJsZSBrID0geCAvICh5ICogeSk7 CisKKyAgaWYgKHkgKiB5ID09IDIuMCkKKyAgICByZXR1cm4gayArIDEgLyB5 OworICBlbHNlCisgICAgcmV0dXJuIGsgLSAxIC8geTsKK30KKworLyogRXhw ZWN0IDIgZGl2aXNpb25zIGluICdmJyBhbmQgMSBpbiAnZycuICAqLworLyog eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIgLyAiIDMgIm9w dGltaXplZCIgfSB9ICovCisvKiBFeHBlY3QgMyBtdWx0aXBsaWNhdGlvbnMg aW4gJ2YnIGFuZCA0IGluICdnJy4gIEFsc28KKyAgIGV4cGVjdCBvbmUgZm9y IHRoZSBwb2ludCB0byBhLiAgKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcC10aW1lcyAiIFxcKiAiIDggIm9wdGltaXplZCIgfSB9ICovCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2V4dHJhY3Rf cmVjaXBfMS5mIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9leHRyYWN0 X3JlY2lwXzEuZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lY2YwNTE4OTc3 M2I2YzJmNDYyMjI4NTdmZDg4ZmQwMTBiZmRmMzQ4Ci0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9leHRyYWN0X3JlY2lw XzEuZgpAQCAtMCwwICsxLDE5IEBACishIHsgZGctZG8gY29tcGlsZSB9Cish IHsgZGctb3B0aW9ucyAiLU9mYXN0IC1mZHVtcC10cmVlLW9wdGltaXplZCIg fQorCisgICAgICBTVUJST1VUSU5FIEYoTixYLFksWixBLEIpCisgICAgICAg ICAgRElNRU5TSU9OIFgoMCw0KSwgWSg0KSwgWig0KQorICAgICAgICAgIFJF QUwsIElOVEVOVChJTk9VVCkgOjogQSwgQgorCisgICAgICAgICAgQSA9IDEg LyBZKE4pKlkoTikKKworICAgICAgICAgIERPIEkgPSAxLCBOVgorICAgICAg ICAgIFgoSSwgSSkgPSAxICsgWChJLCBJKQorICAgICAgICAgIEVORERPCisK KyAgICAgICAgICBaKDEpID0gIEIgLyBZKE4pCisgICAgICAgICAgWigyKSA9 ICBOIC8gWShOKQorICAgICAgICAgIFJFVFVSTgorICAgICAgRU5ECisKKyEg eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIgLyAiIDEgIm9w dGltaXplZCIgfSB9CmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtbWF0aC1v cHRzLmMgYi9nY2MvdHJlZS1zc2EtbWF0aC1vcHRzLmMKaW5kZXggZGYwYmNk NmQ0NTkxMTkyNDNhNjlmYzY1MmU3NjFmOTBkNTc0Y2E3OC4uNTQyY2RhNWEw MjZkMmFkYjJjNDE5NTUzZDE5NTRhNzAwODU3MzM3NSAxMDA2NDQKLS0tIGEv Z2NjL3RyZWUtc3NhLW1hdGgtb3B0cy5jCisrKyBiL2djYy90cmVlLXNzYS1t YXRoLW9wdHMuYwpAQCAtMTI3LDYgKzEyNywxMCBAQCBzdHJ1Y3Qgb2NjdXJy ZW5jZSB7CiAgICAgIGluc2VydGVkIGluIEJCLiAgKi8KICAgdHJlZSByZWNp cF9kZWY7CiAKKyAgLyogSWYgbm9uLU5VTEwsIHRoZSBTU0FfTkFNRSBob2xk aW5nIHRoZSBkZWZpbml0aW9uIGZvciBhIHNxdWFyZWQKKyAgICAgcmVjaXBy b2NhbCBpbnNlcnRlZCBpbiBCQi4gICovCisgIHRyZWUgc3F1YXJlX3JlY2lw X2RlZjsKKwogICAvKiBJZiBub24tTlVMTCwgdGhlIEdJTVBMRV9BU1NJR04g Zm9yIGEgcmVjaXByb2NhbCBjb21wdXRhdGlvbiB0aGF0CiAgICAgIHdhcyBp bnNlcnRlZCBpbiBCQi4gICovCiAgIGdpbXBsZSAqcmVjaXBfZGVmX3N0bXQ7 CkBAIC0yODIsMTAgKzI4NiwxNCBAQCBpbnNlcnRfYmIgKHN0cnVjdCBvY2N1 cnJlbmNlICpuZXdfb2NjLCBiYXNpY19ibG9jayBpZG9tLAogICAqcF9oZWFk ID0gbmV3X29jYzsKIH0KIAotLyogUmVnaXN0ZXIgdGhhdCB3ZSBmb3VuZCBh IGRpdmlzaW9uIGluIEJCLiAgKi8KKy8qIFJlZ2lzdGVyIHRoYXQgd2UgZm91 bmQgYSBkaXZpc2lvbiBpbiBCQi4KKyAgIElNUE9SVEFOQ0UgaXMgYSBtZWFz dXJlIG9mIGhvdyBtdWNoIHdlaWdodGluZyB0byBnaXZlCisgICB0aGF0IGRp dmlzaW9uLiAgVXNlIElNUE9SVEFOQ0UgPSAyIHRvIHJlZ2lzdGVyIGEgc2lu Z2xlCisgICBkaXZpc2lvbi4gIElmIHRoZSBkaXZpc2lvbiBpcyBnb2luZyB0 byBiZSBmb3VuZCBtdWx0aXBsZQorICAgdGltZXMgdXNlIDEgKGFzIGl0IGlz IHdpdGggc3F1YXJlcykuICAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXJl Z2lzdGVyX2RpdmlzaW9uX2luIChiYXNpY19ibG9jayBiYikKK3JlZ2lzdGVy X2RpdmlzaW9uX2luIChiYXNpY19ibG9jayBiYiwgaW50IGltcG9ydGFuY2Up CiB7CiAgIHN0cnVjdCBvY2N1cnJlbmNlICpvY2M7CiAKQEAgLTI5Nyw3ICsz MDUsNyBAQCByZWdpc3Rlcl9kaXZpc2lvbl9pbiAoYmFzaWNfYmxvY2sgYmIp CiAgICAgfQogCiAgIG9jYy0+YmJfaGFzX2RpdmlzaW9uID0gdHJ1ZTsKLSAg b2NjLT5udW1fZGl2aXNpb25zKys7CisgIG9jYy0+bnVtX2RpdmlzaW9ucyAr PSBpbXBvcnRhbmNlOwogfQogCiAKQEAgLTM0MCw2ICszNDgsMzkgQEAgaXNf ZGl2aXNpb25fYnkgKGdpbXBsZSAqdXNlX3N0bXQsIHRyZWUgZGVmKQogCSAm JiBnaW1wbGVfYXNzaWduX3JoczEgKHVzZV9zdG10KSAhPSBkZWY7CiB9CiAK Ky8qIFJldHVybiB3aGV0aGVyIFVTRV9TVE1UIGlzIERFRiAqIERFRi4gICov CitzdGF0aWMgaW5saW5lIGJvb2wKK2lzX3NxdWFyZV9vZiAoZ2ltcGxlICp1 c2Vfc3RtdCwgdHJlZSBkZWYpCit7CisgIGlmIChnaW1wbGVfY29kZSAodXNl X3N0bXQpID09IEdJTVBMRV9BU1NJR04KKyAgICAgICYmIGdpbXBsZV9hc3Np Z25fcmhzX2NvZGUgKHVzZV9zdG10KSA9PSBNVUxUX0VYUFIpCisgICAgewor ICAgICAgdHJlZSBvcDAgPSBnaW1wbGVfYXNzaWduX3JoczEgKHVzZV9zdG10 KTsKKyAgICAgIHRyZWUgb3AxID0gZ2ltcGxlX2Fzc2lnbl9yaHMyICh1c2Vf c3RtdCk7CisKKyAgICAgIHJldHVybiBvcDAgPT0gb3AxICYmIG9wMCA9PSBk ZWY7CisgICAgfQorICByZXR1cm4gMDsKK30KKworLyogUmV0dXJuIHdoZXRo ZXIgVVNFX1NUTVQgaXMgYSBmbG9hdGluZy1wb2ludCBkaXZpc2lvbiBieQor ICAgREVGICogREVGLiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraXNfZGl2 aXNpb25fYnlfc3F1YXJlIChnaW1wbGUgKnVzZV9zdG10LCB0cmVlIGRlZikK K3sKKyAgaWYgKGdpbXBsZV9jb2RlICh1c2Vfc3RtdCkgPT0gR0lNUExFX0FT U0lHTgorICAgICAgJiYgZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAodXNlX3N0 bXQpID09IFJESVZfRVhQUgorICAgICAgJiYgZ2ltcGxlX2Fzc2lnbl9yaHMx ICh1c2Vfc3RtdCkgIT0gZ2ltcGxlX2Fzc2lnbl9yaHMyICh1c2Vfc3RtdCkp CisgICAgeworICAgICAgdHJlZSBkZW5vbWluYXRvciA9IGdpbXBsZV9hc3Np Z25fcmhzMiAodXNlX3N0bXQpOworICAgICAgaWYgKFRSRUVfQ09ERSAoZGVu b21pbmF0b3IpID09IFNTQV9OQU1FKQorCXsKKwkgIHJldHVybiBpc19zcXVh cmVfb2YgKFNTQV9OQU1FX0RFRl9TVE1UIChkZW5vbWluYXRvciksIGRlZik7 CisJfQorICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKIC8qIFdhbGsgdGhlIHN1 YnNldCBvZiB0aGUgZG9taW5hdG9yIHRyZWUgcm9vdGVkIGF0IE9DQywgc2V0 dGluZyB0aGUKICAgIFJFQ0lQX0RFRiBmaWVsZCB0byBhIGRlZmluaXRpb24g b2YgMS4wIC8gREVGIHRoYXQgY2FuIGJlIHVzZWQgaW4KICAgIHRoZSBnaXZl biBiYXNpYyBibG9jay4gIFRoZSBmaWVsZCBtYXkgYmUgbGVmdCBOVUxMLCBv ZiBjb3Vyc2UsCkBAIC0zNDcsMjAgKzM4OCwyNyBAQCBpc19kaXZpc2lvbl9i eSAoZ2ltcGxlICp1c2Vfc3RtdCwgdHJlZSBkZWYpCiAKICAgIERFRl9CU0kg aXMgYW4gaXRlcmF0b3IgcG9pbnRpbmcgYXQgdGhlIHN0YXRlbWVudCBkZWZp bmluZyBERUYuCiAgICBJZiBSRUNJUF9ERUYgaXMgc2V0LCBhIGRvbWluYXRv ciBhbHJlYWR5IGhhcyBhIGNvbXB1dGF0aW9uIHRoYXQgY2FuCi0gICBiZSB1 c2VkLiAgKi8KKyAgIGJlIHVzZWQuCisKKyAgIElmIHNob3VsZF9pbnNlcnRf c3F1YXJlX3JlY2lwIGlzIHNldCwgdGhlbiB0aGlzIGFsc28gaW5zZXJ0cwor ICAgdGhlIHNxdWFyZSBvZiB0aGUgcmVjaXByb2NhbCBpbW1lZGlhdGVseSBh ZnRlciB0aGUgZGVmaW5pdGlvbgorICAgb2YgdGhlIHJlY2lwcm9jYWwuICAq LwogCiBzdGF0aWMgdm9pZAogaW5zZXJ0X3JlY2lwcm9jYWxzIChnaW1wbGVf c3RtdF9pdGVyYXRvciAqZGVmX2dzaSwgc3RydWN0IG9jY3VycmVuY2UgKm9j YywKLQkJICAgIHRyZWUgZGVmLCB0cmVlIHJlY2lwX2RlZiwgaW50IHRocmVz aG9sZCkKKwkJICAgIHRyZWUgZGVmLCB0cmVlIHJlY2lwX2RlZiwgdHJlZSBz cXVhcmVfcmVjaXBfZGVmLAorCQkgICAgaW50IHNob3VsZF9pbnNlcnRfc3F1 YXJlX3JlY2lwLCBpbnQgdGhyZXNob2xkKQogewogICB0cmVlIHR5cGU7Ci0g IGdhc3NpZ24gKm5ld19zdG10OworICBnYXNzaWduICpuZXdfc3RtdCwgKm5l d19zcXVhcmVfc3RtdDsKICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgZ3NpOwog ICBzdHJ1Y3Qgb2NjdXJyZW5jZSAqb2NjX2NoaWxkOwogCiAgIGlmICghcmVj aXBfZGVmCiAgICAgICAmJiAob2NjLT5iYl9oYXNfZGl2aXNpb24gfHwgIWZs YWdfdHJhcHBpbmdfbWF0aCkKLSAgICAgICYmIG9jYy0+bnVtX2RpdmlzaW9u cyA+PSB0aHJlc2hvbGQpCisgICAgICAvKiBEaXZpZGUgYnkgdHdvIGFzIGFs bCBkaXZpc2lvbnMgYXJlIGNvdW50ZWQgdHdpY2UgaW4KKwkgdGhlIGNvc3Rp bmcgbG9vcC4gICovCisgICAgICAmJiBvY2MtPm51bV9kaXZpc2lvbnMgLyAy ID49IHRocmVzaG9sZCkKICAgICB7CiAgICAgICAvKiBNYWtlIGEgdmFyaWFi bGUgd2l0aCB0aGUgcmVwbGFjZW1lbnQgYW5kIHN1YnN0aXR1dGUgaXQuICAq LwogICAgICAgdHlwZSA9IFRSRUVfVFlQRSAoZGVmKTsKQEAgLTM2OCwyOSAr NDE2LDQ0IEBAIGluc2VydF9yZWNpcHJvY2FscyAoZ2ltcGxlX3N0bXRfaXRl cmF0b3IgKmRlZl9nc2ksIHN0cnVjdCBvY2N1cnJlbmNlICpvY2MsCiAgICAg ICBuZXdfc3RtdCA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKHJlY2lwX2RlZiwg UkRJVl9FWFBSLAogCQkJCSAgICAgIGJ1aWxkX29uZV9jc3QgKHR5cGUpLCBk ZWYpOwogCisgICAgICBpZiAoc2hvdWxkX2luc2VydF9zcXVhcmVfcmVjaXAp CisJeworCSAgc3F1YXJlX3JlY2lwX2RlZiA9IGNyZWF0ZV90bXBfcmVnICh0 eXBlLCAicG93bXVsdF9yZWNpcHRtcCIpOworCSAgbmV3X3NxdWFyZV9zdG10 ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAoc3F1YXJlX3JlY2lwX2RlZiwgTVVM VF9FWFBSLAorCQkJCQkJIHJlY2lwX2RlZiwgcmVjaXBfZGVmKTsKKwl9CisK ICAgICAgIGlmIChvY2MtPmJiX2hhc19kaXZpc2lvbikKLSAgICAgICAgewot ICAgICAgICAgIC8qIENhc2UgMTogaW5zZXJ0IGJlZm9yZSBhbiBleGlzdGlu ZyBkaXZpc2lvbi4gICovCi0gICAgICAgICAgZ3NpID0gZ3NpX2FmdGVyX2xh YmVscyAob2NjLT5iYik7Ci0gICAgICAgICAgd2hpbGUgKCFnc2lfZW5kX3Ag KGdzaSkgJiYgIWlzX2RpdmlzaW9uX2J5IChnc2lfc3RtdCAoZ3NpKSwgZGVm KSkKKwl7CisJICAvKiBDYXNlIDE6IGluc2VydCBiZWZvcmUgYW4gZXhpc3Rp bmcgZGl2aXNpb24uICAqLworCSAgZ3NpID0gZ3NpX2FmdGVyX2xhYmVscyAo b2NjLT5iYik7CisJICB3aGlsZSAoIWdzaV9lbmRfcCAoZ3NpKQorCQkgJiYg KCFpc19kaXZpc2lvbl9ieSAoZ3NpX3N0bXQgKGdzaSksIGRlZikpCisJCSAm JiAoIWlzX2RpdmlzaW9uX2J5X3NxdWFyZSAoZ3NpX3N0bXQgKGdzaSksIGRl ZikpKQogCSAgICBnc2lfbmV4dCAoJmdzaSk7CiAKLSAgICAgICAgICBnc2lf aW5zZXJ0X2JlZm9yZSAoJmdzaSwgbmV3X3N0bXQsIEdTSV9TQU1FX1NUTVQp OwotICAgICAgICB9CisJICBnc2lfaW5zZXJ0X2JlZm9yZSAoJmdzaSwgbmV3 X3N0bXQsIEdTSV9TQU1FX1NUTVQpOworCX0KICAgICAgIGVsc2UgaWYgKGRl Zl9nc2kgJiYgb2NjLT5iYiA9PSBkZWZfZ3NpLT5iYikKLSAgICAgICAgewot ICAgICAgICAgIC8qIENhc2UgMjogaW5zZXJ0IHJpZ2h0IGFmdGVyIHRoZSBk ZWZpbml0aW9uLiAgTm90ZSB0aGF0IHRoaXMgd2lsbAorCXsKKwkgIC8qIENh c2UgMjogaW5zZXJ0IHJpZ2h0IGFmdGVyIHRoZSBkZWZpbml0aW9uLiAgTm90 ZSB0aGF0IHRoaXMgd2lsbAogCSAgICAgbmV2ZXIgaGFwcGVuIGlmIHRoZSBk ZWZpbml0aW9uIHN0YXRlbWVudCBjYW4gdGhyb3csIGJlY2F1c2UgaW4KIAkg ICAgIHRoYXQgY2FzZSB0aGUgc29sZSBzdWNjZXNzb3Igb2YgdGhlIHN0YXRl bWVudCdzIGJhc2ljIGJsb2NrIHdpbGwKIAkgICAgIGRvbWluYXRlIGFsbCB0 aGUgdXNlcyBhcyB3ZWxsLiAgKi8KLSAgICAgICAgICBnc2lfaW5zZXJ0X2Fm dGVyIChkZWZfZ3NpLCBuZXdfc3RtdCwgR1NJX05FV19TVE1UKTsKLSAgICAg ICAgfQorCSAgZ3NpID0gKmRlZl9nc2k7CisJICBnc2lfaW5zZXJ0X2FmdGVy IChkZWZfZ3NpLCBuZXdfc3RtdCwgR1NJX05FV19TVE1UKTsKKwl9CiAgICAg ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvKiBDYXNlIDM6IGluc2Vy dCBpbiBhIGJhc2ljIGJsb2NrIG5vdCBjb250YWluaW5nIGRlZnMvdXNlcy4g ICovCi0gICAgICAgICAgZ3NpID0gZ3NpX2FmdGVyX2xhYmVscyAob2NjLT5i Yik7Ci0gICAgICAgICAgZ3NpX2luc2VydF9iZWZvcmUgKCZnc2ksIG5ld19z dG10LCBHU0lfU0FNRV9TVE1UKTsKLSAgICAgICAgfQorCXsKKwkgIC8qIENh c2UgMzogaW5zZXJ0IGluIGEgYmFzaWMgYmxvY2sgbm90IGNvbnRhaW5pbmcg ZGVmcy91c2VzLiAgKi8KKwkgIGdzaSA9IGdzaV9hZnRlcl9sYWJlbHMgKG9j Yy0+YmIpOworCSAgZ3NpX2luc2VydF9iZWZvcmUgKCZnc2ksIG5ld19zdG10 LCBHU0lfU0FNRV9TVE1UKTsKKwl9CisKKyAgICAgIC8qIFJlZ2FyZGxlc3Mg b2Ygd2hpY2ggY2FzZSB0aGUgcmVjaXByb2NhbCBhcyBpbnNlcnRlZCBpbiwK Kwkgd2UgaW5zZXJ0IHRoZSBzcXVhcmUgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhl IHJlY2lwcm9jYWwuICAqLworICAgICAgaWYgKHNob3VsZF9pbnNlcnRfc3F1 YXJlX3JlY2lwKQorCWdzaV9pbnNlcnRfYmVmb3JlICgmZ3NpLCBuZXdfc3F1 YXJlX3N0bXQsIEdTSV9TQU1FX1NUTVQpOwogCiAgICAgICByZWNpcHJvY2Fs X3N0YXRzLnJkaXZzX2luc2VydGVkKys7CiAKQEAgLTM5OCw4ICs0NjEsMzIg QEAgaW5zZXJ0X3JlY2lwcm9jYWxzIChnaW1wbGVfc3RtdF9pdGVyYXRvciAq ZGVmX2dzaSwgc3RydWN0IG9jY3VycmVuY2UgKm9jYywKICAgICB9CiAKICAg b2NjLT5yZWNpcF9kZWYgPSByZWNpcF9kZWY7CisgIG9jYy0+c3F1YXJlX3Jl Y2lwX2RlZiA9IHNxdWFyZV9yZWNpcF9kZWY7CiAgIGZvciAob2NjX2NoaWxk ID0gb2NjLT5jaGlsZHJlbjsgb2NjX2NoaWxkOyBvY2NfY2hpbGQgPSBvY2Nf Y2hpbGQtPm5leHQpCi0gICAgaW5zZXJ0X3JlY2lwcm9jYWxzIChkZWZfZ3Np LCBvY2NfY2hpbGQsIGRlZiwgcmVjaXBfZGVmLCB0aHJlc2hvbGQpOworICAg IGluc2VydF9yZWNpcHJvY2FscyAoZGVmX2dzaSwgb2NjX2NoaWxkLCBkZWYs IHJlY2lwX2RlZiwKKwkJCXNxdWFyZV9yZWNpcF9kZWYsIHNob3VsZF9pbnNl cnRfc3F1YXJlX3JlY2lwLAorCQkJdGhyZXNob2xkKTsKK30KKworLyogUmVw bGFjZSBvY2N1cnJlbmNlcyBvZiBleHByIC8gKHggKiB4KSB3aXRoIGV4cHIg KiAoKDEgLyB4KSAqICgxIC8geCkpLgorICAgVGFrZSBhcyBhcmd1bWVudCB0 aGUgdXNlIGZvciAoeCAqIHgpLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAor cmVwbGFjZV9yZWNpcHJvY2FsX3NxdWFyZXMgKHVzZV9vcGVyYW5kX3AgdXNl X3ApCit7CisgIGdpbXBsZSAqdXNlX3N0bXQgPSBVU0VfU1RNVCAodXNlX3Ap OworICBiYXNpY19ibG9jayBiYiA9IGdpbXBsZV9iYiAodXNlX3N0bXQpOwor ICBzdHJ1Y3Qgb2NjdXJyZW5jZSAqb2NjID0gKHN0cnVjdCBvY2N1cnJlbmNl ICopIGJiLT5hdXg7CisKKyAgaWYgKG9wdGltaXplX2JiX2Zvcl9zcGVlZF9w IChiYikgJiYgb2NjLT5zcXVhcmVfcmVjaXBfZGVmCisgICAgICAmJiBvY2Mt PnJlY2lwX2RlZikKKyAgICB7CisgICAgICBnaW1wbGVfc3RtdF9pdGVyYXRv ciBnc2kgPSBnc2lfZm9yX3N0bXQgKHVzZV9zdG10KTsKKyAgICAgIGdpbXBs ZV9hc3NpZ25fc2V0X3Joc19jb2RlICh1c2Vfc3RtdCwgTVVMVF9FWFBSKTsK KyAgICAgIGdpbXBsZV9hc3NpZ25fc2V0X3JoczIgKHVzZV9zdG10LCBvY2Mt PnNxdWFyZV9yZWNpcF9kZWYpOworICAgICAgU0VUX1VTRSAodXNlX3AsIG9j Yy0+c3F1YXJlX3JlY2lwX2RlZik7CisgICAgICBmb2xkX3N0bXRfaW5wbGFj ZSAoJmdzaSk7CisgICAgICB1cGRhdGVfc3RtdCAodXNlX3N0bXQpOworICAg IH0KIH0KIAogCkBAIC00NjAsMzIgKzU0Nyw4NSBAQCBmcmVlX2JiIChzdHJ1 Y3Qgb2NjdXJyZW5jZSAqb2NjKQogc3RhdGljIHZvaWQKIGV4ZWN1dGVfY3Nl X3JlY2lwcm9jYWxzXzEgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpkZWZfZ3Np LCB0cmVlIGRlZikKIHsKLSAgdXNlX29wZXJhbmRfcCB1c2VfcDsKLSAgaW1t X3VzZV9pdGVyYXRvciB1c2VfaXRlcjsKKyAgdXNlX29wZXJhbmRfcCB1c2Vf cCwgc3F1YXJlX3VzZV9wOworICBpbW1fdXNlX2l0ZXJhdG9yIHVzZV9pdGVy LCBzcXVhcmVfdXNlX2l0ZXI7CisgIHRyZWUgc3F1YXJlX2RlZjsKICAgc3Ry dWN0IG9jY3VycmVuY2UgKm9jYzsKLSAgaW50IGNvdW50ID0gMCwgdGhyZXNo b2xkOworICBpbnQgY291bnQgPSAwOworICBpbnQgdGhyZXNob2xkOworICBp bnQgc3F1YXJlX3JlY2lwX2NvdW50ID0gMDsKKyAgaW50IHNxcnRfcmVjaXBf Y291bnQgPSAwOwogCiAgIGdjY19hc3NlcnQgKEZMT0FUX1RZUEVfUCAoVFJF RV9UWVBFIChkZWYpKSAmJiBpc19naW1wbGVfcmVnIChkZWYpKTsKKyAgdGhy ZXNob2xkID0gdGFyZ2V0bS5taW5fZGl2aXNpb25zX2Zvcl9yZWNpcF9tdWwg KFRZUEVfTU9ERSAoVFJFRV9UWVBFIChkZWYpKSk7CisKKyAgLyogSWYgdGhp cyBpcyBhIHNxdWFyZSAoeCAqIHgpLCB3ZSBzaG91bGQgY2hlY2sgd2hldGhl ciB0aGVyZSBhcmUgYW55CisgICAgIGVub3VnaCBkaXZpc2lvbnMgYnkgeCBv biBpdCdzIG93biB0byB3YXJyYW50IHdhaXRpbmcgZm9yIHRoYXQgcGFzcy4g ICovCisgIGlmIChUUkVFX0NPREUgKGRlZikgPT0gU1NBX05BTUUpCisgICAg eworICAgICAgZ2ltcGxlICpkZWZfc3RtdCA9IFNTQV9OQU1FX0RFRl9TVE1U IChkZWYpOworCisgICAgICBpZiAoaXNfZ2ltcGxlX2Fzc2lnbiAoZGVmX3N0 bXQpCisJICAmJiBnaW1wbGVfYXNzaWduX3Joc19jb2RlIChkZWZfc3RtdCkg PT0gTVVMVF9FWFBSCisJICAmJiBnaW1wbGVfYXNzaWduX3JoczEgKGRlZl9z dG10KSA9PSBnaW1wbGVfYXNzaWduX3JoczIgKGRlZl9zdG10KSkKKwl7CisJ ICAvKiBUaGlzIHN0YXRlbWVudCBpcyBhIHNxdWFyZSBvZiBzb21ldGhpbmcu ICBXZSBzaG91bGQgdGFrZSB0aGlzCisJICAgICBpbiB0byBhY2NvdW50LCBh cyBpdCBtYXkgYmUgbW9yZSBwcm9maXRhYmxlIHRvIG5vdCBleHRyYWN0CisJ ICAgICB0aGUgcmVjaXByb2NhbCBoZXJlLiAgKi8KKwkgIHRyZWUgb3AwID0g Z2ltcGxlX2Fzc2lnbl9yaHMxIChkZWZfc3RtdCk7CisJICBGT1JfRUFDSF9J TU1fVVNFX0ZBU1QgKHVzZV9wLCB1c2VfaXRlciwgb3AwKQorCSAgICB7CisJ ICAgICAgZ2ltcGxlICp1c2Vfc3RtdCA9IFVTRV9TVE1UICh1c2VfcCk7CisJ ICAgICAgaWYgKGlzX2RpdmlzaW9uX2J5ICh1c2Vfc3RtdCwgb3AwKSkKKwkJ c3FydF9yZWNpcF9jb3VudCArKzsKKwkgICAgfQorCX0KKyAgICB9CiAKICAg Rk9SX0VBQ0hfSU1NX1VTRV9GQVNUICh1c2VfcCwgdXNlX2l0ZXIsIGRlZikK ICAgICB7CiAgICAgICBnaW1wbGUgKnVzZV9zdG10ID0gVVNFX1NUTVQgKHVz ZV9wKTsKICAgICAgIGlmIChpc19kaXZpc2lvbl9ieSAodXNlX3N0bXQsIGRl ZikpCiAJewotCSAgcmVnaXN0ZXJfZGl2aXNpb25faW4gKGdpbXBsZV9iYiAo dXNlX3N0bXQpKTsKKwkgIHJlZ2lzdGVyX2RpdmlzaW9uX2luIChnaW1wbGVf YmIgKHVzZV9zdG10KSwgMik7CiAJICBjb3VudCsrOwogCX0KKworICAgICAg aWYgKGlzX3NxdWFyZV9vZiAodXNlX3N0bXQsIGRlZikpCisJeworCSAgc3F1 YXJlX2RlZiA9IGdpbXBsZV9hc3NpZ25fbGhzICh1c2Vfc3RtdCk7CisJICBG T1JfRUFDSF9JTU1fVVNFX0ZBU1QgKHNxdWFyZV91c2VfcCwgc3F1YXJlX3Vz ZV9pdGVyLCBzcXVhcmVfZGVmKQorCSAgICB7CisJICAgICAgZ2ltcGxlICpz cXVhcmVfdXNlX3N0bXQgPSBVU0VfU1RNVCAoc3F1YXJlX3VzZV9wKTsKKwkg ICAgICBpZiAoaXNfZGl2aXNpb25fYnkgKHNxdWFyZV91c2Vfc3RtdCwgc3F1 YXJlX2RlZikpCisJCXsKKwkJICAvKiBIYWx2ZSB0aGUgcmVsYXRpdmUgaW1w b3J0YW5jZSBhcyB0aGlzIGlzIGNhbGxlZCB0d2ljZQorCQkgICAgIGZvciBl YWNoIGRpdmlzaW9uIGJ5IGEgc3F1YXJlLiAgKi8KKwkJICByZWdpc3Rlcl9k aXZpc2lvbl9pbiAoZ2ltcGxlX2JiIChzcXVhcmVfdXNlX3N0bXQpLCAxKTsK KwkJICBzcXVhcmVfcmVjaXBfY291bnQgKys7CisJCX0KKwkgICAgfQorCX0K ICAgICB9CiAKKyAgLyogU3F1YXJlIHJlY2lwcm9jYWxzIHdpbGwgaGF2ZSBi ZWVuIGNvdW50ZWQgdHdpY2UuICAqLworICBzcXVhcmVfcmVjaXBfY291bnQg Lz0gMjsKKworICBpZiAoc3FydF9yZWNpcF9jb3VudCA+IHNxdWFyZV9yZWNp cF9jb3VudCkKKyAgICAvKiBJdCB3aWxsIGJlIG1vcmUgcHJvZml0YWJsZSB0 byBleHRyYWN0IGEgMSAvIHggZXhwcmVzc2lvbiBsYXRlciwKKyAgICAgICBz byBpdCBpcyBub3Qgd29ydGggYXR0ZW1wdGluZyB0byBleHRyYWN0IDEgLyAo eCAqIHgpIG5vdy4gICovCisgICAgcmV0dXJuOworCiAgIC8qIERvIHRoZSBl eHBlbnNpdmUgcGFydCBvbmx5IGlmIHdlIGNhbiBob3BlIHRvIG9wdGltaXpl IHNvbWV0aGluZy4gICovCi0gIHRocmVzaG9sZCA9IHRhcmdldG0ubWluX2Rp dmlzaW9uc19mb3JfcmVjaXBfbXVsIChUWVBFX01PREUgKFRSRUVfVFlQRSAo ZGVmKSkpOwotICBpZiAoY291bnQgPj0gdGhyZXNob2xkKQorICBpZiAoY291 bnQgKyBzcXVhcmVfcmVjaXBfY291bnQgPj0gdGhyZXNob2xkCisgICAgICAm JiBjb3VudCA+PSAxKQogICAgIHsKICAgICAgIGdpbXBsZSAqdXNlX3N0bXQ7 CiAgICAgICBmb3IgKG9jYyA9IG9jY19oZWFkOyBvY2M7IG9jYyA9IG9jYy0+ bmV4dCkKIAl7CiAJICBjb21wdXRlX21lcml0IChvY2MpOwotCSAgaW5zZXJ0 X3JlY2lwcm9jYWxzIChkZWZfZ3NpLCBvY2MsIGRlZiwgTlVMTCwgdGhyZXNo b2xkKTsKKwkgIGluc2VydF9yZWNpcHJvY2FscyAoZGVmX2dzaSwgb2NjLCBk ZWYsIE5VTEwsIE5VTEwsCisJCQkgICAgICBzcXVhcmVfcmVjaXBfY291bnQs IHRocmVzaG9sZCk7CiAJfQogCiAgICAgICBGT1JfRUFDSF9JTU1fVVNFX1NU TVQgKHVzZV9zdG10LCB1c2VfaXRlciwgZGVmKQpAQCAtNDk1LDYgKzYzNSwy NyBAQCBleGVjdXRlX2NzZV9yZWNpcHJvY2Fsc18xIChnaW1wbGVfc3RtdF9p dGVyYXRvciAqZGVmX2dzaSwgdHJlZSBkZWYpCiAJICAgICAgRk9SX0VBQ0hf SU1NX1VTRV9PTl9TVE1UICh1c2VfcCwgdXNlX2l0ZXIpCiAJCXJlcGxhY2Vf cmVjaXByb2NhbCAodXNlX3ApOwogCSAgICB9CisJICBlbHNlIGlmIChzcXVh cmVfcmVjaXBfY291bnQgPiAwCisJCSAgICYmIGlzX3NxdWFyZV9vZiAodXNl X3N0bXQsIGRlZikpCisJICAgIHsKKwkgICAgICBGT1JfRUFDSF9JTU1fVVNF X09OX1NUTVQgKHVzZV9wLCB1c2VfaXRlcikKKwkJeworCQkgIC8qIEZpbmQg YWxsIHVzZXMgb2YgdGhlIHNxdWFyZSB0aGF0IGFyZSBkaXZpc2lvbnMgYW5k CisJCSAgICogcmVwbGFjZSB0aGVtIGJ5IG11bHRpcGxpY2F0aW9ucyB3aXRo IHRoZSBpbnZlcnNlLiAgKi8KKwkJICBpbW1fdXNlX2l0ZXJhdG9yIHNxdWFy ZV9pdGVyYXRvcjsKKwkJICBnaW1wbGUgKnBvd211bHRfdXNlX3N0bXQgPSBV U0VfU1RNVCAodXNlX3ApOworCQkgIHRyZWUgcG93bXVsdF9kZWZfbmFtZSA9 IGdpbXBsZV9hc3NpZ25fbGhzIChwb3dtdWx0X3VzZV9zdG10KTsKKworCQkg IEZPUl9FQUNIX0lNTV9VU0VfU1RNVCAocG93bXVsdF91c2Vfc3RtdCwKKwkJ CQkJIHNxdWFyZV9pdGVyYXRvciwgcG93bXVsdF9kZWZfbmFtZSkKKwkJICAg IEZPUl9FQUNIX0lNTV9VU0VfT05fU1RNVCAoc3F1YXJlX3VzZV9wLCBzcXVh cmVfaXRlcmF0b3IpCisJCSAgICAgIHsKKwkJCWdpbXBsZSAqcG93bXVsdF91 c2Vfc3RtdCA9IFVTRV9TVE1UIChzcXVhcmVfdXNlX3ApOworCQkJaWYgKGlz X2RpdmlzaW9uX2J5IChwb3dtdWx0X3VzZV9zdG10LCBwb3dtdWx0X2RlZl9u YW1lKSkKKwkJCSAgcmVwbGFjZV9yZWNpcHJvY2FsX3NxdWFyZXMgKHNxdWFy ZV91c2VfcCk7CisJCSAgICAgIH0KKwkJfQorCSAgICB9CiAJfQogICAgIH0K IAo= --------------C5E35EAAFF9D0D6C190CE192--