From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8188 invoked by alias); 20 May 2015 14:00:29 -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 8138 invoked by uid 89); 20 May 2015 14:00:28 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.7 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-ob0-f178.google.com Received: from mail-ob0-f178.google.com (HELO mail-ob0-f178.google.com) (209.85.214.178) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Wed, 20 May 2015 14:00:22 +0000 Received: by obblk2 with SMTP id lk2so37317963obb.0 for ; Wed, 20 May 2015 07:00:20 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.202.172.196 with SMTP id v187mr26979182oie.51.1432130420198; Wed, 20 May 2015 07:00:20 -0700 (PDT) Received: by 10.202.58.4 with HTTP; Wed, 20 May 2015 07:00:20 -0700 (PDT) In-Reply-To: References: Date: Wed, 20 May 2015 14:10:00 -0000 Message-ID: Subject: Re: [PATCH] Simple optimization for MASK_STORE. From: Yuri Rumyantsev To: Richard Biener Cc: gcc-patches , Igor Zamyatin Content-Type: multipart/mixed; boundary=001a113ce342f85b78051683d86b X-SW-Source: 2015-05/txt/msg01838.txt.bz2 --001a113ce342f85b78051683d86b Content-Type: text/plain; charset=UTF-8 Content-length: 1470 Hi All, Here is updated patch to optimize mask stores. The main goal of it is to avoid execution of mask store if its mask is zero vector since loads that follow it can be blocked. The following changes were done: 1. A test on sink legality was added - it simply prohibits to cross statements with non-null vdef or vuse. 2. New phi node is created in join block for moved MASK_STORE statements. 3. Test was changed to check that 2 MASK_STORE statements are not moved to the same block. 4. New field was added to loop_vec_info structure to mark loops having MASK_STORE's. Any comments will be appreciated. Yuri. 2015-05-20 Yuri Rumyantsev * config/i386/i386.c: Include files stringpool.h and tree-ssanames.h. (ix86_vectorize_is_zero_vector): New function. (TARGET_VECTORIZE_IS_ZERO_VECTOR): New target macro * doc/tm.texi.in: Add @hook TARGET_VECTORIZE_IS_ZERO_VECTOR. * doc/tm.texi: Updated. * target.def (is_zero_vector): New DEFHOOK. * tree-vect-stmts.c : Include tree-into-ssa.h. (vectorizable_mask_load_store): Initialize has_mask_store field. (is_valid_sink): New function. (optimize_mask_stores): New function. * tree-vectorizer.c (vectorize_loops): Invoke optimaze_mask_stores for loops having masked stores. * tree-vectorizer.h (loop_vec_info): Add new has_mask_store field and correspondent macros. (optimize_mask_stores): Update prototype. gcc/testsuite/ChangeLog: * gcc.target/i386/avx2-vect-mask-store-move1.c: New test. --001a113ce342f85b78051683d86b Content-Type: application/octet-stream; name="patch.2" Content-Disposition: attachment; filename="patch.2" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i9wtggqc0 Content-length: 17007 SW5kZXg6IGNvbmZpZy9pMzg2L2kzODYuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBjb25maWcvaTM4Ni9pMzg2LmMJKHJldmlzaW9uIDIyMjI4OCkK KysrIGNvbmZpZy9pMzg2L2kzODYuYwkod29ya2luZyBjb3B5KQpAQCAtMTE1 LDYgKzExNSw4IEBACiAjaW5jbHVkZSAidHJlZS1pdGVyYXRvci5oIgogI2lu Y2x1ZGUgInRyZWUtY2hrcC5oIgogI2luY2x1ZGUgInJ0bC1jaGtwLmgiCisj aW5jbHVkZSAic3RyaW5ncG9vbC5oIgorI2luY2x1ZGUgInRyZWUtc3NhbmFt ZXMuaCIKIAogc3RhdGljIHJ0eCBsZWdpdGltaXplX2RsbGltcG9ydF9zeW1i b2wgKHJ0eCwgYm9vbCk7CiBzdGF0aWMgcnR4IGxlZ2l0aW1pemVfcGVfY29m Zl9leHRlcm5fZGVjbCAocnR4LCBib29sKTsKQEAgLTQwOTg4LDYgKzQwOTkw LDQ3IEBACiAgIHJldHVybiBpeDg2X2dldF9idWlsdGluIChjb2RlKTsKIH0K IAorLyogUmV0dXJucyB0cnVlIGlmIFNPVVJDRSB0eXBlIGlzIHN1cHBvcnRl ZCBieSBidWlsdGluIHB0ZXN0LgorICAgTkFNRSBpcyBsaHMgb2YgY3JlYXRl ZCBwdGVzdCBjYWxsLiAgQWxsIGNyZWF0ZWQgc3RhdGVtZW50cyBhcmUgYWRk ZWQKKyAgIHRvIEdTLiAgKi8KKworc3RhdGljIGJvb2wKK2l4ODZfdmVjdG9y aXplX2J1aWxkX3plcm9fdmVjdG9yX3Rlc3QgKHRyZWUgc291cmNlLCB0cmVl IG5hbWUsIGdpbXBsZV9zZXEgKmdzKQoreworICB0cmVlIHR5cGUgPSBUUkVF X1RZUEUgKHNvdXJjZSk7CisgIGdpbXBsZSBzdG10OworICBlbnVtIGl4ODZf YnVpbHRpbnMgY29kZTsKKyAgdHJlZSBkZWNsLCBuZXdfdHlwZSwgY29udl9l eHByLCB2ZWNfdG1wOworCisgIGdjY19hc3NlcnQgKFZFQ1RPUl9UWVBFX1Ag KHR5cGUpKTsKKyAgaWYgKCFUQVJHRVRfQVZYKQorICAgIHJldHVybiBmYWxz ZTsKKworICBzd2l0Y2ggKHRyZWVfdG9fdWh3aSAoVFlQRV9TSVpFICh0eXBl KSkpCisgICAgeworICAgIGNhc2UgMTI4OgorICAgICAgY29kZSA9IElYODZf QlVJTFRJTl9QVEVTVFo7CisgICAgICBicmVhazsKKyAgICBjYXNlIDI1NjoK KyAgICAgIGlmICghVEFSR0VUX0FWWDIpCisJcmV0dXJuIGZhbHNlOworICAg ICAgY29kZSA9IElYODZfQlVJTFRJTl9QVEVTVFoyNTY7CisgICAgICBicmVh azsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K KyAgZGVjbCA9IGl4ODZfYnVpbHRpbl9kZWNsIChjb2RlLCB0cnVlKTsKKyAg bmV3X3R5cGUgPSBnZXRfc2FtZV9zaXplZF92ZWN0eXBlIChsb25nX2xvbmdf aW50ZWdlcl90eXBlX25vZGUsIHR5cGUpOworICBjb252X2V4cHIgPSBidWls ZDEgKFZJRVdfQ09OVkVSVF9FWFBSLCBuZXdfdHlwZSwgc291cmNlKTsKKyAg dmVjX3RtcCA9IG1ha2Vfc3NhX25hbWUgKG5ld190eXBlKTsKKyAgc3RtdCA9 IGdpbXBsZV9idWlsZF9hc3NpZ24gKHZlY190bXAsIGNvbnZfZXhwcik7Cisg IGdpbXBsZV9zZXFfYWRkX3N0bXQgKGdzLCBzdG10KTsKKyAgc3RtdCA9IGdp bXBsZV9idWlsZF9jYWxsIChkZWNsLCAyLCB2ZWNfdG1wLCB2ZWNfdG1wKTsK KyAgZ2ltcGxlX2NhbGxfc2V0X2xocyAoc3RtdCwgbmFtZSk7CisgIGdpbXBs ZV9zZXFfYWRkX3N0bXQgKGdzLCBzdG10KTsKKyAgcmV0dXJuIHRydWU7Cit9 CisKIC8qIFJldHVybnMgYSBjb2RlIGZvciBhIHRhcmdldC1zcGVjaWZpYyBi dWlsdGluIHRoYXQgaW1wbGVtZW50cwogICAgcmVjaXByb2NhbCBvZiB0aGUg ZnVuY3Rpb24sIG9yIE5VTExfVFJFRSBpZiBub3QgYXZhaWxhYmxlLiAgKi8K IApAQCAtNTE3NjUsNiArNTE4MDgsMTAgQEAKICN1bmRlZiBUQVJHRVRfVkVD VE9SSVpFX0JVSUxUSU5fR0FUSEVSCiAjZGVmaW5lIFRBUkdFVF9WRUNUT1JJ WkVfQlVJTFRJTl9HQVRIRVIgaXg4Nl92ZWN0b3JpemVfYnVpbHRpbl9nYXRo ZXIKIAorI3VuZGVmIFRBUkdFVF9WRUNUT1JJWkVfQlVJTERfWkVST19WRUNU T1JfVEVTVAorI2RlZmluZSBUQVJHRVRfVkVDVE9SSVpFX0JVSUxEX1pFUk9f VkVDVE9SX1RFU1QgXAorICBpeDg2X3ZlY3Rvcml6ZV9idWlsZF96ZXJvX3Zl Y3Rvcl90ZXN0CisKICN1bmRlZiBUQVJHRVRfQlVJTFRJTl9SRUNJUFJPQ0FM CiAjZGVmaW5lIFRBUkdFVF9CVUlMVElOX1JFQ0lQUk9DQUwgaXg4Nl9idWls dGluX3JlY2lwcm9jYWwKIApJbmRleDogZG9jL3RtLnRleGkuaW4KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZG9jL3RtLnRleGkuaW4JKHJldmlzaW9u IDIyMjI4OCkKKysrIGRvYy90bS50ZXhpLmluCSh3b3JraW5nIGNvcHkpCkBA IC00MjQxLDYgKzQyNDEsOCBAQAogCiBAaG9vayBUQVJHRVRfVkVDVE9SSVpF X0JVSUxUSU5fR0FUSEVSCiAKK0Bob29rIFRBUkdFVF9WRUNUT1JJWkVfQlVJ TERfWkVST19WRUNUT1JfVEVTVAorCiBAaG9vayBUQVJHRVRfU0lNRF9DTE9O RV9DT01QVVRFX1ZFQ1NJWkVfQU5EX1NJTURMRU4KIAogQGhvb2sgVEFSR0VU X1NJTURfQ0xPTkVfQURKVVNUCkluZGV4OiB0YXJnZXQuZGVmCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIHRhcmdldC5kZWYJKHJldmlzaW9uIDIyMjI4 OCkKKysrIHRhcmdldC5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTE4MDEsNiAr MTgwMSwxOSBAQAogIChjb25zdF90cmVlIG1lbV92ZWN0eXBlLCBjb25zdF90 cmVlIGluZGV4X3R5cGUsIGludCBzY2FsZSksCiAgTlVMTCkKIAorLyogUmV0 dXJucyB0cnVlIGlmIHRhcmdldCBzdXBwb3J0IHplcm8gdmVjdG9yIHByZWRp Y2F0ZSBmb3IgZ2l2ZW4gdmVjdG9yCisgICB0eXBlLiAgKi8KK0RFRkhPT0sK KyhidWlsZF96ZXJvX3ZlY3Rvcl90ZXN0LAorICJUaGlzIGhvb2sgc2hvdWxk IHJldHVybiBib29sZWFuIHRydWUgaWYgdGFyZ2V0IHN1cHBvcnRzIHplcm8g dmVjdG9yXG5cCitwcmVkaWNhdGUuICBAdmFye3NvdXJjZX0gaXMgdGhlIGNv bXBhcmVkIHZlY3RvciwgQHZhcntuYW1lfSBpcyBzc2FfbmFtZVxuXAorY29u dGFpbmluZyBib29sZWFuIHZhbHVlIHRydWUgaWYgYWxsIHZlY3RvciBlbGVt ZW50cyBhcmUgemVybyBhbmQgcHJvZHVjZWRcblwKK3N0YXRlbWVudHMgYXJl IHNhdmVkIGluIEB2YXJ7Z3N9LlxuXAorVGhlIGRlZmF1bHQgaXMgQGNvZGV7 ZmFsc2V9IHdoaWNoIG1lYW5zIHRoYXQgdGFyZ2V0IGRvZXMgbm90IHN1cHBv cnQgaXQuIiwKKyBib29sLAorICh0cmVlIHNvdXJjZSwgdHJlZSBuYW1lLCBn aW1wbGVfc2VxICpncyksCisgaG9va19ib29sX3J0eF9mYWxzZSkKKwogLyog VGFyZ2V0IGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgdGhlIGNvc3QgbW9kZWwg Zm9yIGEgbG9vcCBvciBibG9jay4gICovCiBERUZIT09LCiAoaW5pdF9jb3N0 LApJbmRleDogdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdngyLXZlY3Qt bWFzay1zdG9yZS1tb3ZlMS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IHRlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4Mi12ZWN0LW1hc2stc3Rv cmUtbW92ZTEuYwkocmV2aXNpb24gMCkKKysrIHRlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvYXZ4Mi12ZWN0LW1hc2stc3RvcmUtbW92ZTEuYwkod29ya2lu ZyBjb3B5KQpAQCAtMCwwICsxLDIwIEBACisvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXZ4MiB9 ICovCisvKiB7IGRnLW9wdGlvbnMgIi1tYXZ4MiAtTzMgLWZvcGVubXAtc2lt ZCAtZmR1bXAtdHJlZS12ZWN0LWRldGFpbHMiIH0gKi8KKworZXh0ZXJuIGlu dCAqcDEsICpwMiwgKnAzOworaW50IGNbMjU2XTsKKwordm9pZCBmb28gKGlu dCBuKQoreworICBpbnQgaTsKKyAgZm9yIChpPTA7IGk8bjsgaSsrKQorICAg IGlmIChjW2ldKQorICAgICAgeworCXAxW2ldICs9IDE7CisJcDJbaV0gPSBw M1tpXSArMjsKKyAgICAgIH0KK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4t dHJlZS1kdW1wLXRpbWVzICJNb3ZlIE1BU0tfU1RPUkUgdG8gbmV3IGJiIiAy ICJ2ZWN0IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBjbGVhbnVwLXRyZWUt ZHVtcCAidmVjdCIgfSB9ICovCkluZGV4OiB0cmVlLXZlY3Qtc3RtdHMuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0cmVlLXZlY3Qtc3RtdHMuYwko cmV2aXNpb24gMjIyMjg4KQorKysgdHJlZS12ZWN0LXN0bXRzLmMJKHdvcmtp bmcgY29weSkKQEAgLTg4LDYgKzg4LDcgQEAKICNpbmNsdWRlICJpcGEtcmVm LmgiCiAjaW5jbHVkZSAiY2dyYXBoLmgiCiAjaW5jbHVkZSAiYnVpbHRpbnMu aCIKKyNpbmNsdWRlICJ0cmVlLWludG8tc3NhLmgiCiAKIC8qIEZvciBsYW5n X2hvb2tzLnR5cGVzLnR5cGVfZm9yX21vZGUuICAqLwogI2luY2x1ZGUgImxh bmdob29rcy5oIgpAQCAtMjA3Myw2ICsyMDc0LDcgQEAKICAgICB7CiAgICAg ICB0cmVlIHZlY19yaHMgPSBOVUxMX1RSRUUsIHZlY19tYXNrID0gTlVMTF9U UkVFOwogICAgICAgcHJldl9zdG10X2luZm8gPSBOVUxMOworICAgICAgTE9P UF9WSU5GT19IQVNfTUFTS19TVE9SRSAobG9vcF92aW5mbykgPSB0cnVlOwog ICAgICAgZm9yIChpID0gMDsgaSA8IG5jb3BpZXM7IGkrKykKIAl7CiAJICB1 bnNpZ25lZCBhbGlnbiwgbWlzYWxpZ247CkBAIC04MjA1LDMgKzgyMDcsMTkx IEBACiAgIGludGVybV90eXBlcy0+cmVsZWFzZSAoKTsKICAgcmV0dXJuIGZh bHNlOwogfQorCisvKiBIZWxwZXIgZm9yIG9wdGltaXplX21hc2tfc3RvcmVz OiByZXR1cm5zIHRydWUgaWYgU1RNVCBzaW5raW5nIHRvIGVuZAorICAgb2Yg QkIgaXMgdmFsaWQgYW5kIGZhbHNlIG90aGVyd2lzZS4gICovCisKK3N0YXRp YyBib29sCitpc192YWxpZF9zaW5rIChnaW1wbGUgc3RtdCkKK3sKKyAgZ2lt cGxlX3N0bXRfaXRlcmF0b3IgaXQgPSBnc2lfZm9yX3N0bXQgKHN0bXQpOwor ICBnaW1wbGUgY3Vycl9zdG10OworCisgIGdzaV9uZXh0ICgmaXQpOworICBp ZiAoZ2ltcGxlX3ZkZWYgKHN0bXQpKQorICAgIHsKKyAgICAgIC8qIENoZWNr IHRoYXQgc3RvcmUgZG9lcyBub3QgY3Jvc3MgaXRzIHZ1c2VzLiAgKi8KKyAg ICAgIGZvciAoOyAhZ3NpX2VuZF9wIChpdCk7IGdzaV9uZXh0ICgmaXQpKQor CXsKKwkgIGN1cnJfc3RtdCA9IGdzaV9zdG10IChpdCk7CisJICBpZiAoZ2lt cGxlX2hhc19tZW1fb3BzIChjdXJyX3N0bXQpCisJICAgICAgJiYgKGdpbXBs ZV92ZGVmIChjdXJyX3N0bXQpICE9IE5VTExfVFJFRQorCQkgIHx8IGdpbXBs ZV92dXNlIChjdXJyX3N0bXQpICE9IE5VTExfVFJFRSkpCisJICAgIHJldHVy biBmYWxzZTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyog Q2hlY2sgdGhhdCBsb2FkIGRvZXMgbm90IGNyb3NzIGFueSBzdGF0ZW1lbnQg d2l0aCB2ZGVmLiAgKi8KKyAgICAgIGZvciAoaXQgPSBnc2lfZm9yX3N0bXQg KHN0bXQpOyAhZ3NpX2VuZF9wIChpdCk7IGdzaV9uZXh0ICgmaXQpKQorCXsK KwkgIGN1cnJfc3RtdCA9IGdzaV9zdG10IChpdCk7CisJICBpZiAoZ2ltcGxl X3ZkZWYgKGN1cnJfc3RtdCkgIT0gTlVMTF9UUkVFKQorCSAgICByZXR1cm4g ZmFsc2U7CisJfQorICAgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKKy8qIFRo ZSBjb2RlIGJlbG93IGlzIHRyeWluZyB0byBwZXJmb3JtIHNpbXBsZSBvcHRp bWl6YXRpb24gLSBkbyBub3QgZXhlY3V0ZQorICAgbWFza2VkIHN0b3JlIHN0 YXRlbWVudCBpZiBpdHMgbWFzayBpcyB6ZXJvIG1hc2sgc2luY2UgbG9hZHMg dGhhdCBmb2xsb3cKKyAgIGEgbWFza2VkIHN0b3JlIGNhbiBiZSBibG9ja2Vk LgorICAgSXQgcHV0IGFsbCBtYXNrZWQgc3RvcmVzIHN0YXRlbWVudHMgd2l0 aCB0aGUgc2FtZSBtYXNrIGludG8gdGhlIG5ldyBiYgorICAgd2l0aCBhIGNo ZWNrIG9uIHplcm8gbWFzay4gICovCisKK3ZvaWQKK29wdGltaXplX21hc2tf c3RvcmVzIChzdHJ1Y3QgbG9vcCAqbG9vcCkKK3sKKyAgYmFzaWNfYmxvY2sg YmIgPSBsb29wLT5oZWFkZXI7CisgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGdz aTsKKyAgZ2ltcGxlIHN0bXQ7CisgIGF1dG9fdmVjPGdpbXBsZT4gd29ya2xp c3Q7CisKKyAgaWYgKGxvb3AtPmRvbnRfdmVjdG9yaXplCisgICAgICB8fCBs b29wLT5udW1fbm9kZXMgPiAyKQorICAgIHJldHVybjsKKworICAvKiBQaWNr IHVwIGFsbCBtYXNrZWQgc3RvcmVzIGluIGxvb3AgaWYgYW55LiAgKi8KKyAg Zm9yIChnc2kgPSBnc2lfc3RhcnRfYmIgKGJiKTsgIWdzaV9lbmRfcCAoZ3Np KTsgZ3NpX25leHQgKCZnc2kpKQorICAgIHsKKyAgICAgIHN0bXQgPSBnc2lf c3RtdCAoZ3NpKTsKKyAgICAgIGlmIChpc19naW1wbGVfY2FsbCAoc3RtdCkK KwkgICYmIGdpbXBsZV9jYWxsX2ludGVybmFsX3AgKHN0bXQpCisJICAmJiBn aW1wbGVfY2FsbF9pbnRlcm5hbF9mbiAoc3RtdCkgPT0gSUZOX01BU0tfU1RP UkUpCisJd29ya2xpc3Quc2FmZV9wdXNoIChzdG10KTsKKyAgICB9CisKKyAg aWYgKHdvcmtsaXN0LmlzX2VtcHR5ICgpKQorICAgIHJldHVybjsKKworICAv KiBMb29wIGhhcyBtYXNrZWQgc3RvcmVzLiAgKi8KKyAgd2hpbGUgKCF3b3Jr bGlzdC5pc19lbXB0eSAoKSkKKyAgICB7CisgICAgICBnaW1wbGUgbGFzdCwg ZGVmX3N0bXQsIGxhc3Rfc3RvcmU7CisgICAgICBlZGdlIGUsIGVmYWxzZTsK KyAgICAgIHRyZWUgbWFzaywgdmFsOworICAgICAgYmFzaWNfYmxvY2sgc3Rv cmVfYmIsIGpvaW5fYmI7CisgICAgICBnaW1wbGVfc3RtdF9pdGVyYXRvciBn c2lfdG87CisgICAgICBnaW1wbGVfc2VxIGdzOworICAgICAgdHJlZSBhcmcz OworICAgICAgdHJlZSB2ZGVmLCBuZXdfdmRlZjsKKyAgICAgIGdwaGkgKnBo aTsKKyAgICAgIGJvb2wgZmlyc3RfZHVtcDsKKworICAgICAgbGFzdCA9IHdv cmtsaXN0LnBvcCAoKTsKKyAgICAgIG1hc2sgPSBnaW1wbGVfY2FsbF9hcmcg KGxhc3QsIDIpOworICAgICAgLyogTG9vcCB3YXMgbm90IHZlY3Rvcml6ZWQg aWYgbWFzayBkb2VzIG5vdCBoYXZlIHZlY3RvciB0eXBlLiAgKi8KKyAgICAg IGlmICghVkVDVE9SX1RZUEVfUCAoVFJFRV9UWVBFIChtYXNrKSkpCisJcmV0 dXJuOworICAgICAgdmFsID0gbWFrZV9zc2FfbmFtZSAoaW50ZWdlcl90eXBl X25vZGUpOworICAgICAgZ3MgPSBOVUxMOworICAgICAgLyogRXNjYXBlIGlm IHRhcmdldCBkb2VzIG5vdCBzdXBwb3J0IHRlc3Qgb24gemVybyBtYXNrLiAg Ki8KKworICAgICAgaWYgKCF0YXJnZXRtLnZlY3Rvcml6ZS5idWlsZF96ZXJv X3ZlY3Rvcl90ZXN0IChtYXNrLCB2YWwsICZncykpCisJeworCSAgaWYgKGR1 bXBfZW5hYmxlZF9wICgpKQorCSAgICBkdW1wX3ByaW50ZiAoTVNHX05PVEUs ICJUYXJnZXQgZG9lcyBub3Qgc3VwcG9ydCBwdGVzdCFcbiIpOworCSAgcmV0 dXJuOworCX0KKyAgICAgIGdjY19hc3NlcnQgKGdzICE9IE5VTEwpOworCisg ICAgICAvKiBDcmVhdGUgbmV3IGJiLiAgKi8KKyAgICAgIGUgPSBzcGxpdF9i bG9jayAoYmIsIGxhc3QpOworICAgICAgam9pbl9iYiA9IGUtPmRlc3Q7Cisg ICAgICBzdG9yZV9iYiA9IGNyZWF0ZV9lbXB0eV9iYiAoYmIpOworICAgICAg YWRkX2JiX3RvX2xvb3AgKHN0b3JlX2JiLCBsb29wKTsKKyAgICAgIGUtPmZs YWdzID0gRURHRV9UUlVFX1ZBTFVFOworICAgICAgZWZhbHNlID0gbWFrZV9l ZGdlIChiYiwgc3RvcmVfYmIsIEVER0VfRkFMU0VfVkFMVUUpOworICAgICAg c3RvcmVfYmItPmZyZXF1ZW5jeSA9IGJiLT5mcmVxdWVuY3kgLyAyOworICAg ICAgZWZhbHNlLT5wcm9iYWJpbGl0eSA9IFJFR19CUl9QUk9CX0JBU0UgLyAy OworICAgICAgbWFrZV9lZGdlIChzdG9yZV9iYiwgam9pbl9iYiwgRURHRV9G QUxMVEhSVSk7CisgICAgICBpZiAoZG9tX2luZm9fYXZhaWxhYmxlX3AgKENE SV9ET01JTkFUT1JTKSkKKwlzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJ X0RPTUlOQVRPUlMsIHN0b3JlX2JiLCBiYik7CisgICAgICBpZiAoZG9tX2lu Zm9fYXZhaWxhYmxlX3AgKENESV9QT1NUX0RPTUlOQVRPUlMpKQorCXNldF9p bW1lZGlhdGVfZG9taW5hdG9yIChDRElfUE9TVF9ET01JTkFUT1JTLCBiYiwg c3RvcmVfYmIpOworCisgICAgICAvKiBDcmVhdGUgemVybyB0ZXN0IGNvbmRp dGlvbi4gICovCisgICAgICBzdG10ID0gZ2ltcGxlX2J1aWxkX2NvbmQgKE5F X0VYUFIsIHZhbCwgaW50ZWdlcl96ZXJvX25vZGUsCisJCQkJTlVMTF9UUkVF LCBOVUxMX1RSRUUpOworICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdz LCBzdG10KTsKKyAgICAgIGdzaSA9IGdzaV9sYXN0X2JiIChiYik7CisgICAg ICBnc2lfaW5zZXJ0X3NlcV9hZnRlciAoJmdzaSwgZ3MsIEdTSV9TQU1FX1NU TVQpOworICAgICAgLyogQ3JlYXRlIG5ldyBQSEkgbm9kZSBmb3IgdmRlZiBv ZiB0aGUgbGFzdCBtYXNrZWQgc3RvcmU6CisJIC5NRU1fMiA9IFZERUYgPC5N RU1fMT4KKwkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8KKwkgLk1FTS4zID0gVkRF RiA8Lk1FTV8xPgorCSBhbmQgbmV3IFBISSBub2RlIHdpbGwgYmUgY3JlYXRl ZCBpbiBqb2luIGJiCisJIC5NRU1fMiA9IFBISSA8Lk1FTV8xLCAuTUVNXzM+ CisgICAgICAqLworICAgICAgdmRlZiA9IGdpbXBsZV92ZGVmIChsYXN0KTsK KyAgICAgIGdjY19hc3NlcnQgKHZkZWYgJiYgVFJFRV9DT0RFICh2ZGVmKSA9 PSBTU0FfTkFNRSk7CisgICAgICBuZXdfdmRlZiA9IG1ha2Vfc3NhX25hbWUg KGdpbXBsZV92b3AgKGNmdW4pLCBsYXN0KTsKKyAgICAgIHBoaSA9IGNyZWF0 ZV9waGlfbm9kZSAodmRlZiwgam9pbl9iYik7CisgICAgICBhZGRfcGhpX2Fy ZyAocGhpLCBuZXdfdmRlZiwgRURHRV9TVUNDIChzdG9yZV9iYiwgMCksIFVO S05PV05fTE9DQVRJT04pOworICAgICAgZ2ltcGxlX3NldF92ZGVmIChsYXN0 LCBuZXdfdmRlZik7CisgICAgICBmaXJzdF9kdW1wID0gdHJ1ZTsKKworICAg ICAgLyogUHV0IGFsbCBtYXNrZWQgc3RvcmVzIHdpdGggdGhlIHNhbWUgbWFz ayB0byBTVE9SRV9CQiBpZiBwb3NzaWJsZS4gICovCisgICAgICB3aGlsZSAo dHJ1ZSkKKwl7CisJICAvKiBNb3ZlIG1hc2tlZCBzdG9yZSB0byBTVE9SRV9C Qi4gICovCisJICBsYXN0X3N0b3JlID0gbGFzdDsKKwkgIGdzaSA9IGdzaV9m b3Jfc3RtdCAobGFzdCk7CisJICBnc2lfdG8gPSBnc2lfc3RhcnRfYmIgKHN0 b3JlX2JiKTsKKwkgIGdzaV9tb3ZlX2JlZm9yZSAoJmdzaSwgJmdzaV90byk7 CisJICB1cGRhdGVfc3RtdCAobGFzdCk7CisJICBpZiAoZHVtcF9lbmFibGVk X3AgKCkpCisJICAgIHsKKwkgICAgICAvKiBJc3N1ZSBkaWZmZXJlbnQgbWVz c2FnZXMgZGVwZW5kaW5nIG9uIEZJUlNUX0RVTVAuICAqLworCSAgICAgIGlm IChmaXJzdF9kdW1wKQorCQl7CisJCSAgZHVtcF9wcmludGYgKE1TR19OT1RF LCAiTW92ZSBNQVNLX1NUT1JFIHRvIG5ldyBiYiMlZFxuIiwKKwkJCSAgICAg ICBzdG9yZV9iYi0+aW5kZXgpOworCQkgIGZpcnN0X2R1bXAgPSBmYWxzZTsK KwkJfQorCSAgICAgIGVsc2UKKwkJZHVtcF9wcmludGYgKE1TR19OT1RFLCAi TW92ZSBNQVNLX1NUT1JFIHRvIGNyZWF0ZWQgYmJcbiIpOworCSAgICAgIGR1 bXBfZ2ltcGxlX3N0bXQgKE1TR19OT1RFLCBUREZfU0xJTSwgbGFzdCwgMCk7 CisJICAgIH0KKwkgIC8qIFB1dCBkZWZpbml0aW9uIHN0YXRlbWVudCBvZiBz dG9yZWQgdmFsdWUgaW4gU1RPUkVfQkIKKwkgICAgIGlmIHBvc3NpYmxlLiAg Ki8KKwkgIGFyZzMgPSBnaW1wbGVfY2FsbF9hcmcgKGxhc3QsIDMpOworCSAg aWYgKFRSRUVfQ09ERSAoYXJnMykgPT0gU1NBX05BTUUgJiYgaGFzX3Npbmds ZV91c2UgKGFyZzMpKQorCSAgICB7CisJICAgICAgZGVmX3N0bXQgPSBTU0Ff TkFNRV9ERUZfU1RNVCAoYXJnMyk7CisJICAgICAgLyogTW92ZSBkZWZfc3Rt dCB0byBTVE9SRV9CQiBpZiBpdCBpcyBpbiB0aGUgc2FtZSBiYiBhbmQKKwkJ IGl0IGlzIGxlZ2FsLiAgKi8KKwkgICAgICBpZiAoZ2ltcGxlX2JiIChkZWZf c3RtdCkgPT0gYmIKKwkJICAmJiBpc192YWxpZF9zaW5rIChkZWZfc3RtdCkp CisJCXsKKwkJICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCisJCSAgICB7CisJ CSAgICAgIGR1bXBfcHJpbnRmIChNU0dfTk9URSwgIk1vdmUgc3RtdCB0byBj cmVhdGVkIGJiXG4iKTsKKwkJICAgICAgZHVtcF9naW1wbGVfc3RtdCAoTVNH X05PVEUsIFRERl9TTElNLCBkZWZfc3RtdCwgMCk7CisJCSAgICB9CisJCSAg Z3NpID0gZ3NpX2Zvcl9zdG10IChkZWZfc3RtdCk7CisJCSAgZ3NpX3RvID0g Z3NpX3N0YXJ0X2JiIChzdG9yZV9iYik7CisJCSAgZ3NpX21vdmVfYmVmb3Jl ICgmZ3NpLCAmZ3NpX3RvKTsKKwkJICB1cGRhdGVfc3RtdCAoZGVmX3N0bXQp OworCQl9CisJICAgIH0KKwkgICAgLyogUHV0IG90aGVyIG1hc2tlZCBzdG9y ZXMgd2l0aCB0aGUgc2FtZSBtYXNrIHRvIFNUT1JFX0JCLiAgKi8KKwkgICAg aWYgKHdvcmtsaXN0LmlzX2VtcHR5ICgpCisJCXx8IGdpbXBsZV9jYWxsX2Fy ZyAod29ya2xpc3QubGFzdCAoKSwgMikgIT0gbWFzaworCQl8fCAhaXNfdmFs aWRfc2luayAod29ya2xpc3QubGFzdCAoKSkpCisJICAgICAgYnJlYWs7CisJ ICAgIGxhc3QgPSB3b3JrbGlzdC5wb3AgKCk7CisJfQorICAgICAgYWRkX3Bo aV9hcmcgKHBoaSwgZ2ltcGxlX3Z1c2UgKGxhc3Rfc3RvcmUpLCBlLCBVTktO T1dOX0xPQ0FUSU9OKTsKKyAgICB9Cit9CkluZGV4OiB0cmVlLXZlY3Rvcml6 ZXIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0cmVlLXZlY3Rvcml6 ZXIuYwkocmV2aXNpb24gMjIyMjg4KQorKysgdHJlZS12ZWN0b3JpemVyLmMJ KHdvcmtpbmcgY29weSkKQEAgLTU0OSwxMyArNTQ5LDE5IEBACiAgIGZvciAo aSA9IDE7IGkgPCB2ZWN0X2xvb3BzX251bTsgaSsrKQogICAgIHsKICAgICAg IGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbzsKKyAgICAgIGJvb2wgaGFzX21h c2tfc3RvcmU7CiAKICAgICAgIGxvb3AgPSBnZXRfbG9vcCAoY2Z1biwgaSk7 CiAgICAgICBpZiAoIWxvb3ApCiAJY29udGludWU7CiAgICAgICBsb29wX3Zp bmZvID0gKGxvb3BfdmVjX2luZm8pIGxvb3AtPmF1eDsKKyAgICAgIGhhc19t YXNrX3N0b3JlID0gZmFsc2U7CisgICAgICBpZiAobG9vcF92aW5mbykKKwlo YXNfbWFza19zdG9yZSA9IExPT1BfVklORk9fSEFTX01BU0tfU1RPUkUgKGxv b3BfdmluZm8pOwogICAgICAgZGVzdHJveV9sb29wX3ZlY19pbmZvIChsb29w X3ZpbmZvLCB0cnVlKTsKICAgICAgIGxvb3AtPmF1eCA9IE5VTEw7CisgICAg ICBpZiAoaGFzX21hc2tfc3RvcmUpCisJb3B0aW1pemVfbWFza19zdG9yZXMg KGxvb3ApOwogICAgIH0KIAogICBmcmVlX3N0bXRfdmVjX2luZm9fdmVjICgp OwpJbmRleDogdHJlZS12ZWN0b3JpemVyLmgKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gdHJlZS12ZWN0b3JpemVyLmgJKHJldmlzaW9uIDIyMjI4OCkK KysrIHRyZWUtdmVjdG9yaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzUs NiArMzc1LDkgQEAKICAgICAgbG9vcCB2ZXJzaW9uIHdpdGhvdXQgaWYtY29u dmVyc2lvbi4gICovCiAgIHN0cnVjdCBsb29wICpzY2FsYXJfbG9vcDsKIAor ICAvKiBNYXJrIGxvb3BzIGhhdmluZyBtYXNrZWQgc3RvcmVzLiAgKi8KKyAg Ym9vbCBoYXNfbWFza19zdG9yZTsKKwogfSAqbG9vcF92ZWNfaW5mbzsKIAog LyogQWNjZXNzIEZ1bmN0aW9ucy4gICovCkBAIC00MTIsNiArNDE1LDcgQEAK ICNkZWZpbmUgTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9OSVRFUihMKSAgICAo TCktPnBlZWxpbmdfZm9yX25pdGVyCiAjZGVmaW5lIExPT1BfVklORk9fTk9f REFUQV9ERVBFTkRFTkNJRVMoTCkgKEwpLT5ub19kYXRhX2RlcGVuZGVuY2ll cwogI2RlZmluZSBMT09QX1ZJTkZPX1NDQUxBUl9MT09QKEwpCSAgIChMKS0+ c2NhbGFyX2xvb3AKKyNkZWZpbmUgTE9PUF9WSU5GT19IQVNfTUFTS19TVE9S RShMKQkgICAoTCktPmhhc19tYXNrX3N0b3JlCiAKICNkZWZpbmUgTE9PUF9S RVFVSVJFU19WRVJTSU9OSU5HX0ZPUl9BTElHTk1FTlQoTCkgXAogICAoKEwp LT5tYXlfbWlzYWxpZ25fc3RtdHMubGVuZ3RoICgpID4gMCkKQEAgLTEwNDQs NiArMTA0OCw3IEBACiAJCQkgICAgICAgdmVjPHRyZWU+ICosIHNscF90cmVl LCBpbnQpOwogZXh0ZXJuIHRyZWUgdmVjdF9nZW5fcGVybV9tYXNrX2FueSAo dHJlZSwgY29uc3QgdW5zaWduZWQgY2hhciAqKTsKIGV4dGVybiB0cmVlIHZl Y3RfZ2VuX3Blcm1fbWFza19jaGVja2VkICh0cmVlLCBjb25zdCB1bnNpZ25l ZCBjaGFyICopOworZXh0ZXJuIHZvaWQgb3B0aW1pemVfbWFza19zdG9yZXMg KHN0cnVjdCBsb29wICopOwogCiAvKiBJbiB0cmVlLXZlY3QtZGF0YS1yZWZz LmMuICAqLwogZXh0ZXJuIGJvb2wgdmVjdF9jYW5fZm9yY2VfZHJfYWxpZ25t ZW50X3AgKGNvbnN0X3RyZWUsIHVuc2lnbmVkIGludCk7Cg== --001a113ce342f85b78051683d86b--