From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 106057 invoked by alias); 22 Aug 2017 15:13:08 -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 106022 invoked by uid 89); 22 Aug 2017 15:13:08 -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,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=integrating, 94 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 22 Aug 2017 15:13:04 +0000 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 120C9C058EC2 for ; Tue, 22 Aug 2017 15:13:03 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 120C9C058EC2 Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=law@redhat.com Received: from localhost.localdomain (ovpn-116-59.phx2.redhat.com [10.3.116.59]) by smtp.corp.redhat.com (Postfix) with ESMTP id CC0A17E66D for ; Tue, 22 Aug 2017 15:13:02 +0000 (UTC) From: Jeff Law To: gcc-patches Subject: [PATCH][PR tree-optimization/81741] Throttle recording conditional equivalences Message-ID: Date: Tue, 22 Aug 2017 15:43:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------07EFFE1F750F492B9E8EAC83" X-IsSubscribed: yes X-SW-Source: 2017-08/txt/msg01281.txt.bz2 This is a multi-part message in MIME format. --------------07EFFE1F750F492B9E8EAC83 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Content-length: 2100 This patch addresses some issues with conditional equivalences. First, it stops recording blindly recording conditional equivalences. Which leads to regressions... So for certain binary expressions (for example x - y), if we lookup the expression in the hash table and miss, we do a second lookup to see if we have x == y in the hash table. If so, then even though we don't know the exact values of x and y, we can still provide a constant result. I considered doing this in DOM rather than in the hash table lookup routines, but then we'd have to duplicate the functionality in the DOM/VRP threader. Integrating the alternate lookup in the hash table avoids that pitfall and turned out to be easy. I've added a variety of new tests to verify this functionality (extensions of pr71947 testcases). For a conditional equivalence where the cost of computing one of the SSA_NAMEs is higher than the other (as seen with 81741), we do record the equivalence, but arrange it that we will replace the expensive name with the cheap name. Obviously, I use the code from 81741 for the testcase here. However, there are still cases where we have a conditional equivalence and the names have the same cost to compute. A greatly simplified example can be found in gcc.dg/tree-ssa/20030922-2.c. I've simply xfailed this test. To fix it we need to build a second set of tables that are essentially the conditional equivalences, without setting SSA_NAME_VALUE (SSA_NAME_VALUE is what drives const/copy propagation in DOM). That's actually fairly easy and not terribly costly. What gets ugly is we have to consult this second set of tables when doing simplifications. Worse yet, we have to run through each operand's conditional equivalences, substitute it in and try to simplify. It just don't expect it to hit enough to justify that pain. The net result is we should stop ping-ponging copy propagations that arise from conditional equivalences at the loss of some minor optimizations in code similar to 20030922-2.c. Bootstrapped and regression tested on x86_64. Installing on the trunk. Jeff --------------07EFFE1F750F492B9E8EAC83 Content-Type: text/plain; charset=UTF-8; name="Q" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="Q" Content-length: 19691 Y29tbWl0IDQ0ZDAxMjY2YWZmNTU4M2IzYjZkYjMwMTU4MTk0NjU2Y2ZlODhj YWUKQXV0aG9yOiBKZWZmIExhdyA8bGF3QHJlZGhhdC5jb20+CkRhdGU6ICAg VHVlIEF1ZyAyMiAwOToxMDowMiAyMDE3IC0wNjAwCgogICAgICAgICAgICBQ UiB0cmVlLW9wdGltaXphdGlvbi84MTc0MQogICAgICAgICAgICBQUiB0cmVl LW9wdGltaXphdGlvbi83MTk0NwogICAgICAgICAgICAqIHRyZWUtc3NhLWRv bS5jOiBJbmNsdWRlIHRyZWUtaW5saW5lLmguCiAgICAgICAgICAgIChyZWNv cmRfdGVtcG9yYXJ5X2VxdWl2YWxlbmNlcyk6IE9ubHkgcmVjb3JkIFNTQV9O QU1FID0gU1NBX05BTUUKICAgICAgICAgICAgZXF1aXZhbGVuY2VzIGlmIG9u ZSBpcyBtb3JlIGV4cGVuc2l2ZSB0byBjb21wdXRlIHRoYW4gdGhlIG90aGVy LgogICAgICAgICAgICAqIHRyZWUtc3NhLXNjb3BlZHRhYmxlcy5oIChjbGFz cyBjb25zdF9vcl9jb3BpZXMpOiBNYWtlCiAgICAgICAgICAgIHJlY29yZF9j b25zdF9vcl9jb3B5X3JhdyBtZXRob2QgcHJpdmF0ZS4KICAgICAgICAgICAg KGNsYXNzIGF2YWlsX2V4cHJzX3N0YWNrKTogTmV3IG1ldGhvZCBzaW1wbGlm eV9iaW5hcnlfb3BlcmF0aW9uLgogICAgICAgICAgICAqIHRyZWUtc3NhLXNj b3BlZHRhYmxlcy5jIChhdmFpbF9leHByc19zdGFjazo6bG9va3VwX2F2YWls X2V4cHIpOiBDYWxsCiAgICAgICAgICAgIGF2YWlsX2V4cHJzX3N0YWNrOjpz aW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uIGFzIG5lZWRlZC4KICAgICAgICAg ICAgKGF2YWlsX2V4cHJzX3N0YWNrOjpzaW1wbGlmeV9iaW5hcnlfb3BlcmF0 aW9uKTogTmV3IGZ1bmN0aW9uLgogICAgCiAgICAgICAgICAgIFBSIHRyZWUt b3B0aW1pemF0aW9uLzgxNzQxCiAgICAgICAgICAgIFBSIHRyZWUtb3B0aW1p emF0aW9uLzcxOTQ3CiAgICAgICAgICAgICogZ2NjLmRnL3RyZWUtc3NhL3By ODE3NDEuYzogTmV3IHRlc3QuCiAgICAgICAgICAgICogZ2NjLmRnL3RyZWUt c3NhL3ByNzE5NDctNy5jOiBOZXcgdGVzdC4KICAgICAgICAgICAgKiBnY2Mu ZGcvdHJlZS1zc2EvcHI3MTk0Ny04LmM6IE5ldyB0ZXN0LgogICAgICAgICAg ICAqIGdjYy5kZy90cmVlLXNzYS9wcjcxOTQ3LTkuYzogTmV3IHRlc3QuCiAg ICAgICAgICAgICogZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDEtMS5jOiBUd2Vh ayBleHBlY3RlZCBvdXRwdXQuCiAgICAgICAgICAgICogZ2NjLmRnL3RyZWUt c3NhL3ByNzE5NDEtMi5jOiBUd2VhayBleHBlY3RlZCBvdXRwdXQuCiAgICAg ICAgICAgICogZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDEtMy5jOiBUd2VhayBl eHBlY3RlZCBvdXRwdXQuCiAgICAgICAgICAgICogZ2NjLmRnL3RyZWUtc3Nh LzIwMDMwOTIyLTIuYzogeGZhaWwuCgpkaWZmIC0tZ2l0IGEvZ2NjL0NoYW5n ZUxvZyBiL2djYy9DaGFuZ2VMb2cKaW5kZXggYWI4NWMwNzRmMjQuLjliOTQx YWY3NGM2IDEwMDY0NAotLS0gYS9nY2MvQ2hhbmdlTG9nCisrKyBiL2djYy9D aGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNy0wOC0yMiAgSmVmZiBM YXcgIDxsYXdAcmVkaGF0LmNvbT4KKworCVBSIHRyZWUtb3B0aW1pemF0aW9u LzgxNzQxCisJUFIgdHJlZS1vcHRpbWl6YXRpb24vNzE5NDcKKwkqIHRyZWUt c3NhLWRvbS5jOiBJbmNsdWRlIHRyZWUtaW5saW5lLmguCisJKHJlY29yZF90 ZW1wb3JhcnlfZXF1aXZhbGVuY2VzKTogT25seSByZWNvcmQgU1NBX05BTUUg PSBTU0FfTkFNRQorCWVxdWl2YWxlbmNlcyBpZiBvbmUgaXMgbW9yZSBleHBl bnNpdmUgdG8gY29tcHV0ZSB0aGFuIHRoZSBvdGhlci4KKwkqIHRyZWUtc3Nh LXNjb3BlZHRhYmxlcy5oIChjbGFzcyBjb25zdF9vcl9jb3BpZXMpOiBNYWtl CisJcmVjb3JkX2NvbnN0X29yX2NvcHlfcmF3IG1ldGhvZCBwcml2YXRlLgor CShjbGFzcyBhdmFpbF9leHByc19zdGFjayk6IE5ldyBtZXRob2Qgc2ltcGxp ZnlfYmluYXJ5X29wZXJhdGlvbi4KKwkqIHRyZWUtc3NhLXNjb3BlZHRhYmxl cy5jIChhdmFpbF9leHByc19zdGFjazo6bG9va3VwX2F2YWlsX2V4cHIpOiBD YWxsCisJYXZhaWxfZXhwcnNfc3RhY2s6OnNpbXBsaWZ5X2JpbmFyeV9vcGVy YXRpb24gYXMgbmVlZGVkLgorCShhdmFpbF9leHByc19zdGFjazo6c2ltcGxp ZnlfYmluYXJ5X29wZXJhdGlvbik6IE5ldyBmdW5jdGlvbi4KKwogMjAxNy0w OC0yMiAgU2ViYXN0aWFuIEh1YmVyICA8c2ViYXN0aWFuLmh1YmVyQGVtYmVk ZGVkLWJyYWlucy5kZT4KIAogCSogY29uZmlnLmdjYyAocG93ZXJwYy0qLXJ0 ZW1zKik6IEFkZCByczYwMDAvbGludXg2NC5vcHQuCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL0NoYW5nZUxvZyBiL2djYy90ZXN0c3VpdGUvQ2hhbmdl TG9nCmluZGV4IDE3NzMzNTE5ZTBiLi41MzFkMGY5NWFlNyAxMDA2NDQKLS0t IGEvZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2cKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0wOC0yMiAgSmVm ZiBMYXcgIDxsYXdAcmVkaGF0LmNvbT4KKworCVBSIHRyZWUtb3B0aW1pemF0 aW9uLzgxNzQxCisJUFIgdHJlZS1vcHRpbWl6YXRpb24vNzE5NDcKKwkqIGdj Yy5kZy90cmVlLXNzYS9wcjgxNzQxLmM6IE5ldyB0ZXN0LgorCSogZ2NjLmRn L3RyZWUtc3NhL3ByNzE5NDctNy5jOiBOZXcgdGVzdC4KKwkqIGdjYy5kZy90 cmVlLXNzYS9wcjcxOTQ3LTguYzogTmV3IHRlc3QuCisJKiBnY2MuZGcvdHJl ZS1zc2EvcHI3MTk0Ny05LmM6IE5ldyB0ZXN0LgorCSogZ2NjLmRnL3RyZWUt c3NhL3ByNzE5NDEtMS5jOiBUd2VhayBleHBlY3RlZCBvdXRwdXQuCisJKiBn Y2MuZGcvdHJlZS1zc2EvcHI3MTk0MS0yLmM6IFR3ZWFrIGV4cGVjdGVkIG91 dHB1dC4KKwkqIGdjYy5kZy90cmVlLXNzYS9wcjcxOTQxLTMuYzogVHdlYWsg ZXhwZWN0ZWQgb3V0cHV0LgorCSogZ2NjLmRnL3RyZWUtc3NhLzIwMDMwOTIy LTIuYzogeGZhaWwuCisKIDIwMTctMDgtMjIgIFl2YW4gUm91eCAgPHl2YW4u cm91eEBsaW5hcm8ub3JnPgogCiAgICAgICAgIFBSIGMrKy84MDI4NwpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvMjAwMzA5 MjItMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvMjAwMzA5 MjItMi5jCmluZGV4IDE2Yzc5ZGE5NTIxLi4xNzJmMjAzY2Y4ZSAxMDA2NDQK LS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvMjAwMzA5MjIt Mi5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhLzIwMDMw OTIyLTIuYwpAQCAtMjAsNCArMjAsNiBAQCByZ25fcmFuayAocnR4IGluc24x LCBydHggaW5zbjIpCiB9CiAKIC8qIFRoZXJlIHNob3VsZCBiZSB0d28gSUYg Y29uZGl0aW9uYWxzLiAgKi8KLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAiaWYgIiAyICJkb20yIiB9IH0gKi8KKy8qIFdlIG5vIGxv bmdlciByZWNvcmQgdGhlIGNvbmRpdGlvbmFsIGVxdWl2YWxlbmNlIGJ5IGRl c2lnbiwgdGh1cyB3ZQorICAgYXJlIHVuYWJsZSB0byBzaW1wbGlmeSB0aGUg M3JkIGNvbmRpdGlvbmFsIGF0IGNvbXBpbGUgdGltZS4gICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImlmICIgMiAiZG9tMiIg eyB4ZmFpbCAqLSotKiB9IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI3MTk0Ny0xLmMgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy90cmVlLXNzYS9wcjcxOTQ3LTEuYwppbmRleCBiMDMzNDk1 NDZmZC4uYWM4MjcxY2M1NzQgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctMS5jCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctMS5jCkBAIC0xNCw2ICsxNCw2 IEBAIGludCBmKGludCB4LCBpbnQgeSkKICAgIHJldHVybiByZXQ7CiB9CiAK LS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiRm9sZGVkIHRvOiBy ZXRfXFswLTlcXSsgPSAwOyIgICJkb20yIiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcCAiUmVwbGFjZWQgcmVkdW5kYW50IGV4cHIg XFteXHJcblxdKiB3aXRoIC4wLiIgICJkb20yIiB9IH0gKi8KIAogCmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjcxOTQ3 LTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDct Mi5jCmluZGV4IGRlOGY4OGI4OGQ3Li5iMmMwOWNiYjAyMSAxMDA2NDQKLS0t IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI3MTk0Ny0yLmMK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI3MTk0Ny0y LmMKQEAgLTEzLDQgKzEzLDQgQEAgaW50IGYoaW50IHgsIGludCB5KQogICBy ZXR1cm4gcmV0OwogfQogCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAgIkZvbGRlZCB0bzogcmV0X1xbMC05XF0rID0gMDsiICAiZG9tMiIgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIlJlcGxhY2Vk IHJlZHVuZGFudCBleHByIFxbXlxyXG5cXSogd2l0aCAuMC4iICAiZG9tMiIg fSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVl LXNzYS9wcjcxOTQ3LTMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUt c3NhL3ByNzE5NDctMy5jCmluZGV4IGU3OTg0N2Y4M2M4Li4yMzE2ZjdlMWMw NCAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Ev cHI3MTk0Ny0zLmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1z c2EvcHI3MTk0Ny0zLmMKQEAgLTksNCArOSw1IEBAIGludCBmKGludCB4LCBp bnQgeSkKICAgcmV0dXJuIHJldDsKIH0KIAotLyogeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wICJGb2xkZWQgdG86IHJldF9cWzAtOVxdKyA9IDA7IiAg ImRvbTIiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w ICJSZXBsYWNlZCByZWR1bmRhbnQgZXhwciBcW15cclxuXF0qIHdpdGggLjAu IiAgImRvbTIiIH0gfSAqLworCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy5kZy90cmVlLXNzYS9wcjcxOTQ3LTcuYyBiL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctNy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iNDRjMDY0YWEyMwotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzE5 NDctNy5jCkBAIC0wLDAgKzEsMTcgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9 ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZm5vLXRyZWUtdnJwIC1mZHVt cC10cmVlLWRvbS1kZXRhaWxzIiB9ICovCisKKworaW50IGYoaW50IHgsIGlu dCB5KQoreworICBpbnQgcmV0OworICBpZiAoeCA9PSB5KQorICAgIHJldCA9 IHggJSB5OworICBlbHNlCisgICAgcmV0ID0gMTsKKworICByZXR1cm4gcmV0 OworfQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJSZXBsYWNl ZCByZWR1bmRhbnQgZXhwciBcW15cclxuXF0qIHdpdGggLjAuIiAgImRvbTIi IH0gfSAqLworCisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3RyZWUtc3NhL3ByNzE5NDctOC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dHJlZS1zc2EvcHI3MTk0Ny04LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjI2ZTVhYmJkYzI5Ci0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI3MTk0Ny04LmMK QEAgLTAsMCArMSwxNyBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLU8yIC1mbm8tdHJlZS12cnAgLWZkdW1wLXRyZWUt ZG9tLWRldGFpbHMiIH0gKi8KKworCitpbnQgZihpbnQgeCwgaW50IHkpCit7 CisgIGludCByZXQ7CisgIGlmICh4ID09IHkpCisgICAgcmV0ID0geCAvIHk7 CisgIGVsc2UKKyAgICByZXQgPSAwOworCisgIHJldHVybiByZXQ7Cit9Cisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIlJlcGxhY2VkIHJlZHVu ZGFudCBleHByIFxbXlxyXG5cXSogd2l0aCAuMS4iICAiZG9tMiIgfSB9ICov CisKKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1z c2EvcHI3MTk0Ny05LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNz YS9wcjcxOTQ3LTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uMjJiNjhkNWVkZTAKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjcxOTQ3LTkuYwpAQCAtMCww ICsxLDE3IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1v cHRpb25zICItTzIgLWZuby10cmVlLXZycCAtZmR1bXAtdHJlZS1kb20tZGV0 YWlscyIgfSAqLworCisKK2ludCBmKGludCB4LCBpbnQgeSkKK3sKKyAgaW50 IHJldDsKKyAgaWYgKHggPT0geSkKKyAgICByZXQgPSB4ICYgeTsKKyAgZWxz ZQorICAgIHJldCA9IDA7CisKKyAgcmV0dXJuIHJldDsKK30KKy8qIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiUmVwbGFjZWQgcmVkdW5kYW50IGV4 cHIgXFteXHJcblxdKiB3aXRoIC5cKHh8eVwpLiIgICJkb20yIiB9IH0gKi8K KworCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNz YS9wcjgxNzQxLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9w cjgxNzQxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmExNjJjM2NmNThmCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI4MTc0MS5jCkBAIC0wLDAgKzEsMjIg QEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii1PMiAtdyAtZmR1bXAtdHJlZS1kb20yLWRldGFpbHMiIH0gKi8KKworI2lu Y2x1ZGUgPHN0cmluZy5oPgorCit0eXBlZGVmIHN0cnVjdCBzdHJpbmdfcyB7 CisgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgYWxsb2M7CisgIGNoYXIgKnB0cjsK K30gc3RyaW5nX3RbMV07CisKKyMgZGVmaW5lIE1fQVNTVU1FKHgpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoISBfX2J1aWx0 aW5fY29uc3RhbnRfcCAoISEoeCkgfHwgISh4KSkgfHwgKHgpID8gICAgICBc CisgICAodm9pZCkgMCA6IF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpKQorCitp bnQgZihzdHJpbmdfdCBzKQoreworICBNX0FTU1VNRShzdHJsZW4ocy0+cHRy KSA9PSBzLT5zaXplKTsKKyAgcmV0dXJuIHMtPnNpemU7Cit9CisKKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInN0cmxlbiIgfSB9ICov CisKZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1kb20uYyBiL2djYy90cmVl LXNzYS1kb20uYwppbmRleCA0OTRiNDcyZTEyMS4uNDA3YTRlZjk3ZDIgMTAw NjQ0Ci0tLSBhL2djYy90cmVlLXNzYS1kb20uYworKysgYi9nY2MvdHJlZS1z c2EtZG9tLmMKQEAgLTMyLDYgKzMyLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNl ZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJj Zmdsb29wLmgiCiAjaW5jbHVkZSAiZ2ltcGxlLWZvbGQuaCIKICNpbmNsdWRl ICJ0cmVlLWVoLmgiCisjaW5jbHVkZSAidHJlZS1pbmxpbmUuaCIKICNpbmNs dWRlICJnaW1wbGUtaXRlcmF0b3IuaCIKICNpbmNsdWRlICJ0cmVlLWNmZy5o IgogI2luY2x1ZGUgInRyZWUtaW50by1zc2EuaCIKQEAgLTc3NiwxNiArNzc3 LDI3IEBAIHJlY29yZF90ZW1wb3JhcnlfZXF1aXZhbGVuY2VzIChlZGdlIGUs CiAKICAgICAgIC8qIFJlY29yZCB0aGUgc2ltcGxlIE5BTUUgPSBWQUxVRSBl cXVpdmFsZW5jZS4gICovCiAgICAgICB0cmVlIHJocyA9IGVkZ2VfaW5mby0+ cmhzOwotICAgICAgcmVjb3JkX2VxdWFsaXR5IChsaHMsIHJocywgY29uc3Rf YW5kX2NvcGllcyk7CiAKLSAgICAgIC8qIFdlIGFscmVhZHkgcmVjb3JkZWQg dGhhdCBMSFMgPSBSSFMsIHdpdGggY2Fub25pY2FsaXphdGlvbiwKLQkgdmFs dWUgY2hhaW4gZm9sbG93aW5nLCBldGMuCisgICAgICAvKiBJZiB0aGlzIGlz IGEgU1NBX05BTUUgPSBTU0FfTkFNRSBlcXVpdmFsZW5jZSBhbmQgb25lIG9w ZXJhbmQgaXMKKwkgY2hlYXBlciB0byBjb21wdXRlIHRoYW4gdGhlIG90aGVy LCB0aGVuIHNldCB1cCB0aGUgZXF1aXZhbGVuY2UKKwkgc3VjaCB0aGF0IHdl IHJlcGxhY2UgdGhlIGV4cGVuc2l2ZSBvbmUgd2l0aCB0aGUgY2hlYXAgb25l LgogCi0JIFdlIGFsc28gd2FudCB0byByZWNvcmQgUkhTID0gTEhTLCBidXQg d2l0aG91dCBhbnkgY2Fub25pY2FsaXphdGlvbgotCSBvciB2YWx1ZSBjaGFp biBmb2xsb3dpbmcuICAqLwotICAgICAgaWYgKFRSRUVfQ09ERSAocmhzKSA9 PSBTU0FfTkFNRSkKLQljb25zdF9hbmRfY29waWVzLT5yZWNvcmRfY29uc3Rf b3JfY29weV9yYXcgKHJocywgbGhzLAotCQkJCQkJICAgIFNTQV9OQU1FX1ZB TFVFIChyaHMpKTsKKwkgSWYgdGhleSBhcmUgdGhlIHNhbWUgY29zdCB0byBj b21wdXRlLCB0aGVuIGRvIG5vdCByZWNvcmQgYW55dGhpbmcuICAqLworICAg ICAgaWYgKFRSRUVfQ09ERSAobGhzKSA9PSBTU0FfTkFNRSAmJiBUUkVFX0NP REUgKHJocykgPT0gU1NBX05BTUUpCisJeworCSAgZ2ltcGxlICpyaHNfZGVm ID0gU1NBX05BTUVfREVGX1NUTVQgKHJocyk7CisJICBpbnQgcmhzX2Nvc3Qg PSBlc3RpbWF0ZV9udW1faW5zbnMgKHJoc19kZWYsICZlbmlfc2l6ZV93ZWln aHRzKTsKKworCSAgZ2ltcGxlICpsaHNfZGVmID0gU1NBX05BTUVfREVGX1NU TVQgKGxocyk7CisJICBpbnQgbGhzX2Nvc3QgPSBlc3RpbWF0ZV9udW1faW5z bnMgKGxoc19kZWYsICZlbmlfc2l6ZV93ZWlnaHRzKTsKKworCSAgaWYgKHJo c19jb3N0ID4gbGhzX2Nvc3QpCisJICAgIHJlY29yZF9lcXVhbGl0eSAocmhz LCBsaHMsIGNvbnN0X2FuZF9jb3BpZXMpOworCSAgZWxzZSBpZiAocmhzX2Nv c3QgPCBsaHNfY29zdCkKKwkgICAgcmVjb3JkX2VxdWFsaXR5IChsaHMsIHJo cywgY29uc3RfYW5kX2NvcGllcyk7CisJfQorICAgICAgZWxzZQorCXJlY29y ZF9lcXVhbGl0eSAobGhzLCByaHMsIGNvbnN0X2FuZF9jb3BpZXMpOwogCiAg ICAgICAvKiBJZiBMSFMgaXMgYW4gU1NBX05BTUUgYW5kIFJIUyBpcyBhIGNv bnN0YW50IGludGVnZXIgYW5kIExIUyB3YXMKIAkgc2V0IHZpYSBhIHdpZGVu aW5nIHR5cGUgY29udmVyc2lvbiwgdGhlbiB3ZSBtYXkgYmUgYWJsZSB0byBy ZWNvcmQKZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1zY29wZWR0YWJsZXMu YyBiL2djYy90cmVlLXNzYS1zY29wZWR0YWJsZXMuYwppbmRleCA3YjljYTc4 YTg3OC4uNmUxZmQ1ODI4MTQgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXNzYS1z Y29wZWR0YWJsZXMuYworKysgYi9nY2MvdHJlZS1zc2Etc2NvcGVkdGFibGVz LmMKQEAgLTExNiw2ICsxMTYsMTAyIEBAIHZ1c2VfZXEgKGFvX3JlZiAqLCB0 cmVlIHZ1c2UxLCB1bnNpZ25lZCBpbnQgY250LCB2b2lkICpkYXRhKQogICBy ZXR1cm4gTlVMTDsKIH0KIAorLyogV2UgbG9va2VkIGZvciBTVE1UIGluIHRo ZSBoYXNoIHRhYmxlLCBidXQgZGlkIG5vdCBmaW5kIGl0LgorCisgICBJZiBT VE1UIGlzIGFuIGFzc2lnbm1lbnQgZnJvbSBhIGJpbmFyeSBvcGVyYXRvciwg d2UgbWF5IGtub3cgc29tZXRoaW5nCisgICBhYm91dCB0aGUgb3BlcmFuZHMg cmVsYXRpb25zaGlwIHRvIGVhY2ggb3RoZXIgd2hpY2ggd291bGQgYWxsb3cK KyAgIHVzIHRvIGRlcml2ZSBhIGNvbnN0YW50IHZhbHVlIGZvciB0aGUgUkhT IG9mIFNUTVQuICAqLworCit0cmVlCithdmFpbF9leHByc19zdGFjazo6c2lt cGxpZnlfYmluYXJ5X29wZXJhdGlvbiAoZ2ltcGxlICpzdG10LAorCQkJCQkg ICAgICBjbGFzcyBleHByX2hhc2hfZWx0IGVsZW1lbnQpCit7CisgIGlmIChp c19naW1wbGVfYXNzaWduIChzdG10KSkKKyAgICB7CisgICAgICBzdHJ1Y3Qg aGFzaGFibGVfZXhwciAqZXhwciA9IGVsZW1lbnQuZXhwciAoKTsKKyAgICAg IGlmIChleHByLT5raW5kID09IEVYUFJfQklOQVJZKQorCXsKKwkgIGVudW0g dHJlZV9jb2RlIGNvZGUgPSBleHByLT5vcHMuYmluYXJ5Lm9wOworCisJICBz d2l0Y2ggKGNvZGUpCisJICAgIHsKKwkgICAgLyogRm9yIHRoZXNlIGNhc2Vz LCBpZiB3ZSBrbm93IHRoZSBvcGVyYW5kcworCSAgICAgICBhcmUgZXF1YWws IHRoZW4gd2Uga25vdyB0aGUgcmVzdWx0LiAgKi8KKwkgICAgY2FzZSBNSU5f RVhQUjoKKwkgICAgY2FzZSBNQVhfRVhQUjoKKwkgICAgY2FzZSBCSVRfSU9S X0VYUFI6CisJICAgIGNhc2UgQklUX0FORF9FWFBSOgorCSAgICBjYXNlIEJJ VF9YT1JfRVhQUjoKKwkgICAgY2FzZSBNSU5VU19FWFBSOgorCSAgICBjYXNl IFRSVU5DX0RJVl9FWFBSOgorCSAgICBjYXNlIENFSUxfRElWX0VYUFI6CisJ ICAgIGNhc2UgRkxPT1JfRElWX0VYUFI6CisJICAgIGNhc2UgUk9VTkRfRElW X0VYUFI6CisJICAgIGNhc2UgRVhBQ1RfRElWX0VYUFI6CisJICAgIGNhc2Ug VFJVTkNfTU9EX0VYUFI6CisJICAgIGNhc2UgQ0VJTF9NT0RfRVhQUjoKKwkg ICAgY2FzZSBGTE9PUl9NT0RfRVhQUjoKKwkgICAgY2FzZSBST1VORF9NT0Rf RVhQUjoKKwkgICAgICB7CisJCS8qIEJ1aWxkIGEgc2ltcGxlIGVxdWFsaXR5 IGV4cHIgYW5kIHF1ZXJ5IHRoZSBoYXNoIHRhYmxlCisJCSAgIGZvciBpdC4g ICovCisJCXN0cnVjdCBoYXNoYWJsZV9leHByIGV4cHI7CisJCWV4cHIudHlw ZSA9IGJvb2xlYW5fdHlwZV9ub2RlOworCQlleHByLmtpbmQgPSBFWFBSX0JJ TkFSWTsKKwkJZXhwci5vcHMuYmluYXJ5Lm9wID0gRVFfRVhQUjsKKwkJZXhw ci5vcHMuYmluYXJ5Lm9wbmQwID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChzdG10 KTsKKwkJZXhwci5vcHMuYmluYXJ5Lm9wbmQxID0gZ2ltcGxlX2Fzc2lnbl9y aHMyIChzdG10KTsKKwkJY2xhc3MgZXhwcl9oYXNoX2VsdCBlbGVtZW50MiAo JmV4cHIsIE5VTExfVFJFRSk7CisJCWV4cHJfaGFzaF9lbHQgKipzbG90CisJ CSAgPSBtX2F2YWlsX2V4cHJzLT5maW5kX3Nsb3QgKCZlbGVtZW50MiwgTk9f SU5TRVJUKTsKKwkJdHJlZSByZXN1bHRfdHlwZSA9IFRSRUVfVFlQRSAoZ2lt cGxlX2Fzc2lnbl9saHMgKHN0bXQpKTsKKworCQkvKiBJZiB0aGUgcXVlcnkg d2FzIHN1Y2Nlc3NmdWwgYW5kIHJldHVybmVkIGEgbm9uemVybworCQkgICBy ZXN1bHQsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSBvcGVyYW5kcyBvZiB0aGUg YmluYXJ5CisJCSAgIGV4cHJlc3Npb24gYXJlIHRoZSBzYW1lLiAgSW4gbWFu eSBjYXNlcyB0aGlzIGFsbG93cworCQkgICB1cyB0byBjb21wdXRlIGEgY29u c3RhbnQgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uCisJCSAgIGF0IGNvbXBp bGUgdGltZSwgZXZlbiBpZiB3ZSBkbyBub3Qga25vdyB0aGUgZXhhY3QKKwkJ ICAgdmFsdWVzIG9mIHRoZSBvcGVyYW5kcy4gICovCisJCWlmIChzbG90ICYm ICpzbG90ICYmIGludGVnZXJfb25lcCAoKCpzbG90KS0+bGhzICgpKSkKKwkJ ICB7CisJCSAgICBzd2l0Y2ggKGNvZGUpCisJCSAgICAgIHsKKwkJICAgICAg Y2FzZSBNSU5fRVhQUjoKKwkJICAgICAgY2FzZSBNQVhfRVhQUjoKKwkJICAg ICAgY2FzZSBCSVRfSU9SX0VYUFI6CisJCSAgICAgIGNhc2UgQklUX0FORF9F WFBSOgorCQkJcmV0dXJuIGdpbXBsZV9hc3NpZ25fcmhzMSAoc3RtdCk7CisK KwkJICAgICAgY2FzZSBCSVRfWE9SX0VYUFI6CisJCSAgICAgIGNhc2UgTUlO VVNfRVhQUjoKKwkJICAgICAgY2FzZSBUUlVOQ19NT0RfRVhQUjoKKwkJICAg ICAgY2FzZSBDRUlMX01PRF9FWFBSOgorCQkgICAgICBjYXNlIEZMT09SX01P RF9FWFBSOgorCQkgICAgICBjYXNlIFJPVU5EX01PRF9FWFBSOgorCQkJcmV0 dXJuIGJ1aWxkX3plcm9fY3N0IChyZXN1bHRfdHlwZSk7CisKKwkJICAgICAg Y2FzZSBUUlVOQ19ESVZfRVhQUjoKKwkJICAgICAgY2FzZSBDRUlMX0RJVl9F WFBSOgorCQkgICAgICBjYXNlIEZMT09SX0RJVl9FWFBSOgorCQkgICAgICBj YXNlIFJPVU5EX0RJVl9FWFBSOgorCQkgICAgICBjYXNlIEVYQUNUX0RJVl9F WFBSOgorCQkJcmV0dXJuIGJ1aWxkX29uZV9jc3QgKHJlc3VsdF90eXBlKTsK KworCQkgICAgICBkZWZhdWx0OgorCQkJZ2NjX3VucmVhY2hhYmxlICgpOwor CQkgICAgICB9CisJCSAgfQorCQlicmVhazsKKwkgICAgICB9CisKKwkgICAg ICBkZWZhdWx0OgorCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgIHJl dHVybiBOVUxMX1RSRUU7Cit9CisKIC8qIFNlYXJjaCBmb3IgYW4gZXhpc3Rp bmcgaW5zdGFuY2Ugb2YgU1RNVCBpbiB0aGUgQVZBSUxfRVhQUlNfU1RBQ0sg dGFibGUuCiAgICBJZiBmb3VuZCwgcmV0dXJuIGl0cyBMSFMuIE90aGVyd2lz ZSBpbnNlcnQgU1RNVCBpbiB0aGUgdGFibGUgYW5kCiAgICByZXR1cm4gTlVM TF9UUkVFLgpAQCAtMTYwLDYgKzI1NiwxMiBAQCBhdmFpbF9leHByc19zdGFj azo6bG9va3VwX2F2YWlsX2V4cHIgKGdpbXBsZSAqc3RtdCwgYm9vbCBpbnNl cnQsIGJvb2wgdGJhYV9wKQogICAgIH0KICAgZWxzZSBpZiAoKnNsb3QgPT0g TlVMTCkKICAgICB7CisgICAgICAvKiBJZiB3ZSBkaWQgbm90IGZpbmQgdGhl IGV4cHJlc3Npb24gaW4gdGhlIGhhc2ggdGFibGUsIHdlIG1heSBzdGlsbAor CSBiZSBhYmxlIHRvIHByb2R1Y2UgYSByZXN1bHQgZm9yIHNvbWUgZXhwcmVz c2lvbnMuICAqLworICAgICAgdHJlZSBhbHQgPSBhdmFpbF9leHByc19zdGFj azo6c2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbiAoc3RtdCwgZWxlbWVudCk7 CisgICAgICBpZiAoYWx0KQorCXJldHVybiBhbHQ7CisKICAgICAgIGNsYXNz IGV4cHJfaGFzaF9lbHQgKmVsZW1lbnQyID0gbmV3IGV4cHJfaGFzaF9lbHQg KGVsZW1lbnQpOwogICAgICAgKnNsb3QgPSBlbGVtZW50MjsKIApkaWZmIC0t Z2l0IGEvZ2NjL3RyZWUtc3NhLXNjb3BlZHRhYmxlcy5oIGIvZ2NjL3RyZWUt c3NhLXNjb3BlZHRhYmxlcy5oCmluZGV4IGRmMzA0YWVkYmY0Li5lM2Q3YmZm NjkxMyAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLXNjb3BlZHRhYmxlcy5o CisrKyBiL2djYy90cmVlLXNzYS1zY29wZWR0YWJsZXMuaApAQCAtMTU2LDYg KzE1NiwxMSBAQCBjbGFzcyBhdmFpbF9leHByc19zdGFjawogICB2ZWM8c3Rk OjpwYWlyPGV4cHJfaGFzaF9lbHRfdCwgZXhwcl9oYXNoX2VsdF90PiA+IG1f c3RhY2s7CiAgIGhhc2hfdGFibGU8ZXhwcl9lbHRfaGFzaGVyPiAqbV9hdmFp bF9leHByczsKIAorICAvKiBGb3Igc29tZSBhc3NpZ25tZW50cyB3aGVyZSB0 aGUgUkhTIGlzIGEgYmluYXJ5IG9wZXJhdG9yLCBpZiB3ZSBrbm93CisgICAg IGEgZXF1YWxpdHkgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIG9wZXJhbmRz LCB3ZSBtYXkgYmUgYWJsZSB0byBjb21wdXRlCisgICAgIGEgcmVzdWx0LCBl dmVuIGlmIHdlIGRvbid0IGtub3cgdGhlIGV4YWN0IHZhbHVlIG9mIHRoZSBv cGVyYW5kcy4gICovCisgIHRyZWUgc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlv biAoZ2ltcGxlICosIGNsYXNzIGV4cHJfaGFzaF9lbHQpOworCiAgIC8qIFdl IGRvIG5vdCBhbGxvdyBjb3B5aW5nIHRoaXMgb2JqZWN0IG9yIGluaXRpYWxp emluZyBvbmUKICAgICAgZnJvbSBhbm90aGVyLiAgKi8KICAgYXZhaWxfZXhw cnNfc3RhY2smIG9wZXJhdG9yPSAoY29uc3QgYXZhaWxfZXhwcnNfc3RhY2sm KTsKQEAgLTE4NSwxMCArMTkwLDYgQEAgY2xhc3MgY29uc3RfYW5kX2NvcGll cwogICAgICBtYXkgZm9sbG93IHRoZSB2YWx1ZSBjaGFpbiBmb3IgdGhlIFJI Uy4gICovCiAgIHZvaWQgcmVjb3JkX2NvbnN0X29yX2NvcHkgKHRyZWUsIHRy ZWUpOwogCi0gIC8qIFJlY29yZCBhIHNpbmdsZSBjb25zdC9jb3B5IHBhaXIg dGhhdCBjYW4gYmUgdW53b3VuZC4gIFRoaXMgdmVyc2lvbgotICAgICBkb2Vz IG5vdCBmb2xsb3cgdGhlIHZhbHVlIGNoYWluIGZvciB0aGUgUkhTLiAgKi8K LSAgdm9pZCByZWNvcmRfY29uc3Rfb3JfY29weV9yYXcgKHRyZWUsIHRyZWUs IHRyZWUpOwotCiAgIC8qIFNwZWNpYWwgZW50cnkgcG9pbnQgd2hlbiB3ZSB3 YW50IHRvIHByb3ZpZGUgYW4gZXhwbGljaXQgcHJldmlvdXMKICAgICAgdmFs dWUgZm9yIHRoZSBmaXJzdCBhcmd1bWVudC4gIFRyeSB0byBnZXQgcmlkIG9m IHRoaXMgaW4gdGhlIGZ1dHVyZS4gCiAKQEAgLTE5Niw2ICsxOTcsMTAgQEAg Y2xhc3MgY29uc3RfYW5kX2NvcGllcwogICB2b2lkIHJlY29yZF9jb25zdF9v cl9jb3B5ICh0cmVlLCB0cmVlLCB0cmVlKTsKIAogIHByaXZhdGU6CisgIC8q IFJlY29yZCBhIHNpbmdsZSBjb25zdC9jb3B5IHBhaXIgdGhhdCBjYW4gYmUg dW53b3VuZC4gIFRoaXMgdmVyc2lvbgorICAgICBkb2VzIG5vdCBmb2xsb3cg dGhlIHZhbHVlIGNoYWluIGZvciB0aGUgUkhTLiAgKi8KKyAgdm9pZCByZWNv cmRfY29uc3Rfb3JfY29weV9yYXcgKHRyZWUsIHRyZWUsIHRyZWUpOworCiAg IHZlYzx0cmVlPiBtX3N0YWNrOwogICBjb25zdF9hbmRfY29waWVzJiBvcGVy YXRvcj0gKGNvbnN0IGNvbnN0X2FuZF9jb3BpZXMmKTsKICAgY29uc3RfYW5k X2NvcGllcyAoY2xhc3MgY29uc3RfYW5kX2NvcGllcyAmKTsK --------------07EFFE1F750F492B9E8EAC83--