From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 16A743857C4F for ; Fri, 30 Apr 2021 09:07:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 16A743857C4F Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B6B7131B; Fri, 30 Apr 2021 02:07:41 -0700 (PDT) Received: from [10.57.1.74] (unknown [10.57.1.74]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 0EDF13F73B; Fri, 30 Apr 2021 02:07:40 -0700 (PDT) To: "gcc-patches@gcc.gnu.org" Cc: Richard Sandiford , Richard Biener From: "Andre Vieira (lists)" Subject: [RFC] Using main loop's updated IV as base_address for epilogue vectorization Message-ID: Date: Fri, 30 Apr 2021 10:07:18 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.9.1 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------793068609EE77AE53DD30C95" Content-Language: en-US X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_ASCII_DIVIDERS, KAM_DMARC_STATUS, KAM_LOTSOFHASH, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 30 Apr 2021 09:07:44 -0000 This is a multi-part message in MIME format. --------------793068609EE77AE53DD30C95 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Hi, The aim of this RFC is to explore a way of cleaning up the codegen around data_references.  To be specific, I'd like to reuse the main-loop's updated data_reference as the base_address for the epilogue's corresponding data_reference, rather than use the niters.  We have found this leads to better codegen in the vectorized epilogue loops. The approach in this RFC creates a map if iv_updates which always contain an updated pointer that is caputed in vectorizable_{load,store}, an iv_update may also contain a skip_edge in case we decide the vectorization can be skipped in 'vect_do_peeling'. During the epilogue update this map of iv_updates is then checked to see if it contains an entry for a data_reference and it is used accordingly and if not it reverts back to the old behavior of using the niters to advance the data_reference. The motivation for this work is to improve codegen for the option `--param vect-partial-vector-usage=1` for SVE. We found that one of the main problems for the codegen here was coming from unnecessary conversions caused by the way we update the data_references in the epilogue. This patch passes regression tests in aarch64-linux-gnu, but the codegen is still not optimal in some cases. Specifically those where we have a scalar epilogue, as this does not use the data_reference's and will rely on the gimple scalar code, thus constructing again a memory access using the niters.  This is a limitation for which I haven't quite worked out a solution yet and does cause some minor regressions due to unfortunate spills. Let me know what you think and if you have ideas of how we can better achieve this. Kind regards, Andre Vieira --------------793068609EE77AE53DD30C95 Content-Type: text/plain; charset=UTF-8; name="rfc_iv_sharing.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="rfc_iv_sharing.patch" ZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3QtbG9vcC1tYW5pcC5jIGIvZ2NjL3RyZWUtdmVj dC1sb29wLW1hbmlwLmMKaW5kZXggYzFkNmUwMjE5NGIyNTFmN2M5NDA3ODRjMjkxZDU4Yzc1 NGYwNzQ1NC4uZWJiNzE5NDhhYmU0Y2EyN2Q0OTVhMjcwNzI1NGJlYjI3ZTM4NWEwZCAxMDA2 NDQKLS0tIGEvZ2NjL3RyZWUtdmVjdC1sb29wLW1hbmlwLmMKKysrIGIvZ2NjL3RyZWUtdmVj dC1sb29wLW1hbmlwLmMKQEAgLTE5MjgsNiArMTkyOCwxNSBAQCB2ZWN0X2dlbl9wcm9sb2df bG9vcF9uaXRlcnMgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywKICAgcmV0dXJuIGl0ZXJz X25hbWU7CiB9CiAKK3N0YXRpYyBib29sCittYXliZV9ub3RfemVybyAodHJlZSB0KQorewor ICBpZiAoIXQpCisgICAgcmV0dXJuIGZhbHNlOworICBpZiAoVFJFRV9DT0RFICh0KSAhPSBJ TlRFR0VSX0NTVCkKKyAgICByZXR1cm4gdHJ1ZTsKKyAgcmV0dXJuICF0cmVlX2ludF9jc3Rf ZXF1YWwgKHQsIGJ1aWxkX3plcm9fY3N0IChUUkVFX1RZUEUgKHQpKSk7Cit9CiAKIC8qIEZ1 bmN0aW9uIHZlY3RfdXBkYXRlX2luaXRfb2ZfZHIKIApAQCAtMTk1NCw2ICsxOTYzLDc2IEBA IHZlY3RfdXBkYXRlX2luaXRfb2ZfZHIgKGRyX3ZlY19pbmZvICpkcl9pbmZvLCB0cmVlIG5p dGVycywgdHJlZV9jb2RlIGNvZGUpCiAgIGRyX2luZm8tPm9mZnNldCA9IG9mZnNldDsKIH0K IAorc3RhdGljIHZvaWQKK3ZlY3RfdXBkYXRlX2Jhc2Vfb2ZfZHIgKHN0cnVjdCBkYXRhX3Jl ZmVyZW5jZSAqIGRyLAorCQkJbG9vcF92ZWNfaW5mbyBlcGlsb2d1ZV92aW5mbywgaXZfdXBk YXRlICppdl91cGRhdGUpCit7CisgIHRyZWUgbmV3X2Jhc2VfYWRkciA9IGl2X3VwZGF0ZS0+ bmV3X2Jhc2VfYWRkcjsKKyAgZWRnZSBza2lwX2UgPSBpdl91cGRhdGUtPnNraXBfZWRnZTsK KyAgaWYgKHNraXBfZSkKKyAgICB7CisgICAgICAvKiBJZiB3ZSBoYXZlIFNLSVBfRSB3ZSBu ZWVkIHRvIHVzZSB0aGUgcGhpLW5vZGUgdGhhdCBqb2lucyB0aGUgSVYgY29taW5nCisJIGZy b20gdGhlIG1haW4gbG9vcCBhbmQgdGhlIGluaXRpYWwgSVYuICAqLworICAgICAgZ2ltcGxl X3NlcSBzdG10czsKKyAgICAgIHRyZWUgYmFzZV9hZGRyID0gRFJfQkFTRV9BRERSRVNTIChk cik7CisgICAgICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKGJhc2VfYWRkcik7CisgICAgICBn cGhpICpuZXdfcGhpOworCisgICAgICBlZGdlIGUgPSBFREdFX1BSRUQgKHNraXBfZS0+ZGVz dCwgMCk7CisgICAgICBlID0gZSAhPSBza2lwX2UgPyBlIDogRURHRV9QUkVEIChza2lwX2Ut PmRlc3QsIDEpOworCisgICAgICBiYXNlX2FkZHIgPSBmb3JjZV9naW1wbGVfb3BlcmFuZCAo YmFzZV9hZGRyLCAmc3RtdHMsIHRydWUsCisJCQkJCU5VTExfVFJFRSk7CisgICAgICBnaW1w bGVfc3RtdF9pdGVyYXRvciBnc2kgPSBnc2lfbGFzdF9iYiAoc2tpcF9lLT5zcmMpOworICAg ICAgaWYgKGlzX2dpbXBsZV9hc3NpZ24gKGdzaV9zdG10IChnc2kpKQorCSAgfHwgaXNfZ2lt cGxlX2NhbGwgKGdzaV9zdG10IChnc2kpKSkKKwlnc2lfaW5zZXJ0X3NlcV9hZnRlciAoJmdz aSwgc3RtdHMsIEdTSV9ORVdfU1RNVCk7CisgICAgICBlbHNlCisJZ3NpX2luc2VydF9zZXFf YmVmb3JlICgmZ3NpLCBzdG10cywgR1NJX05FV19TVE1UKTsKKworICAgICAgLyogTWFrZSBz dXJlIE5FV19CQVNFX0FERFIgYW5kIHRoZSBpbml0aWFsIGJhc2UgYWRkcmVzcyB1c2UgdGhl IHNhbWUKKwkgdHlwZS4gIE5vdCBzdXJlIHdoeSBJIGNob3NlIHRvIHVzZSBEUl9CQVNFX0FE RFIncyB0eXBlIGhlcmUsIHByb2JhYmx5CisJIG1ha2VzIG1vcmUgc2Vuc2UgdG8gdXNlIHRo ZSBORVdfQkFTRV9BRERSJ3MgdHlwZS4gICovCisgICAgICBzdG10cyA9IE5VTEw7CisgICAg ICBuZXdfYmFzZV9hZGRyID0gZm9sZF9jb252ZXJ0ICh0eXBlLCBuZXdfYmFzZV9hZGRyKTsK KyAgICAgIG5ld19iYXNlX2FkZHIgPSBmb3JjZV9naW1wbGVfb3BlcmFuZCAobmV3X2Jhc2Vf YWRkciwgJnN0bXRzLCB0cnVlLCBOVUxMX1RSRUUpOworICAgICAgZ3NpID0gZ3NpX2xhc3Rf YmIgKGUtPnNyYyk7CisgICAgICBpZiAoaXNfZ2ltcGxlX2Fzc2lnbiAoZ3NpX3N0bXQgKGdz aSkpCisJICB8fCBpc19naW1wbGVfY2FsbCAoZ3NpX3N0bXQgKGdzaSkpKQorCWdzaV9pbnNl cnRfc2VxX2FmdGVyICgmZ3NpLCBzdG10cywgR1NJX05FV19TVE1UKTsKKyAgICAgIGVsc2UK Kwlnc2lfaW5zZXJ0X3NlcV9iZWZvcmUgKCZnc2ksIHN0bXRzLCBHU0lfTkVXX1NUTVQpOwor CisgICAgICBuZXdfcGhpID0gY3JlYXRlX3BoaV9ub2RlIChtYWtlX3NzYV9uYW1lICh0eXBl KSwgc2tpcF9lLT5kZXN0KTsKKyAgICAgIGFkZF9waGlfYXJnIChuZXdfcGhpLCBuZXdfYmFz ZV9hZGRyLCBlLCBVTktOT1dOX0xPQ0FUSU9OKTsKKyAgICAgIGFkZF9waGlfYXJnIChuZXdf cGhpLCBiYXNlX2FkZHIsIHNraXBfZSwgVU5LTk9XTl9MT0NBVElPTik7CisKKyAgICAgIG5l d19iYXNlX2FkZHIgPSBnaW1wbGVfcGhpX3Jlc3VsdCAobmV3X3BoaSk7CisgICAgfQorICBl bHNlCisgICAgeworICAgICAgZ2ltcGxlX3NlcSBzdG10czsKKyAgICAgIGNsYXNzIGxvb3Ag Kmxvb3AgPSBMT09QX1ZJTkZPX0xPT1AgKGVwaWxvZ3VlX3ZpbmZvKTsKKyAgICAgIHRyZWUg dHlwZSA9IFRSRUVfVFlQRSAoRFJfQkFTRV9BRERSRVNTIChkcikpOworICAgICAgbmV3X2Jh c2VfYWRkciA9IGZvbGRfY29udmVydCAodHlwZSwgbmV3X2Jhc2VfYWRkcik7CisgICAgICBu ZXdfYmFzZV9hZGRyID0gZm9yY2VfZ2ltcGxlX29wZXJhbmQgKG5ld19iYXNlX2FkZHIsICZz dG10cywgdHJ1ZSwKKwkJCQkJICAgIE5VTExfVFJFRSk7CisgICAgICBnaW1wbGVfc3RtdF9p dGVyYXRvciBnc2kKKwk9IGdzaV9sYXN0X2JiIChsb29wX3ByZWhlYWRlcl9lZGdlIChsb29w KS0+c3JjKTsKKyAgICAgIGlmICghZ3NpX3N0bXQgKGdzaSkKKwkgIHx8IGlzX2dpbXBsZV9h c3NpZ24gKGdzaV9zdG10IChnc2kpKQorCSAgfHwgaXNfZ2ltcGxlX2NhbGwgKGdzaV9zdG10 IChnc2kpKSkKKwlnc2lfaW5zZXJ0X3NlcV9hZnRlciAoJmdzaSwgc3RtdHMsIEdTSV9ORVdf U1RNVCk7CisgICAgICBlbHNlCisJZ3NpX2luc2VydF9zZXFfYmVmb3JlICgmZ3NpLCBzdG10 cywgR1NJX05FV19TVE1UKTsKKyAgICB9CisgIERSX0JBU0VfQUREUkVTUyAoZHIpID0gbmV3 X2Jhc2VfYWRkcjsKKyAgLyogVE9ETzogVGhpcyB3aWxsIG5lZWQgYSBkaWZmZXJlbnQgYXBw cm9hY2ggZm9yIHZlY3Rvcl9za2lwIHBhdGggd2l0aCBub24temVybyBpbml0IG9yIG9mZnNl dC4gIFRoZXNlIGFyZSBjdXJyZW50bHkgZGlzYWJsZWQuICAqLworICBEUl9JTklUIChkcikg PSBidWlsZF96ZXJvX2NzdChzaXpldHlwZSk7CisgIERSX09GRlNFVCAoZHIpID0gYnVpbGRf emVyb19jc3Qoc2l6ZXR5cGUpOworfQorCisKIAogLyogRnVuY3Rpb24gdmVjdF91cGRhdGVf aW5pdHNfb2ZfZHJzCiAKQEAgLTE5NjYsNiArMjA0NSw3IEBAIHZlY3RfdXBkYXRlX2luaXRz X29mX2RycyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCB0cmVlIG5pdGVycywKIHsKICAg dW5zaWduZWQgaW50IGk7CiAgIHZlYzxkYXRhX3JlZmVyZW5jZV9wPiBkYXRhcmVmcyA9IExP T1BfVklORk9fREFUQVJFRlMgKGxvb3BfdmluZm8pOworICBsb29wX3ZlY19pbmZvIG9yaWdf dmluZm8gPSBMT09QX1ZJTkZPX09SSUdfTE9PUF9JTkZPIChsb29wX3ZpbmZvKTsKICAgc3Ry dWN0IGRhdGFfcmVmZXJlbmNlICpkcjsKIAogICBEVU1QX1ZFQ1RfU0NPUEUgKCJ2ZWN0X3Vw ZGF0ZV9pbml0c19vZl9kciIpOwpAQCAtMTk4MSw3ICsyMDYxLDIzIEBAIHZlY3RfdXBkYXRl X2luaXRzX29mX2RycyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCB0cmVlIG5pdGVycywK ICAgICB7CiAgICAgICBkcl92ZWNfaW5mbyAqZHJfaW5mbyA9IGxvb3BfdmluZm8tPmxvb2t1 cF9kciAoZHIpOwogICAgICAgaWYgKCFTVE1UX1ZJTkZPX0dBVEhFUl9TQ0FUVEVSX1AgKGRy X2luZm8tPnN0bXQpKQotCXZlY3RfdXBkYXRlX2luaXRfb2ZfZHIgKGRyX2luZm8sIG5pdGVy cywgY29kZSk7CisJeworCSAgaXZfdXBkYXRlICppdl91cGRhdGUgPSBOVUxMOworCSAgaWYg KG9yaWdfdmluZm8pCisJICAgIGl2X3VwZGF0ZQorCSAgICAgID0gTE9PUF9WSU5GT19JVl9V UERBVEVTIChvcmlnX3ZpbmZvKS0+Z2V0IChkcik7CisJICAvKiBkb250IHVzZSBpdl91cGRh dGUgaWYgd2UgYXJlIHVzaW5nIHNraXBfdmVjdG9yLCBidXQgRFJfSU5JVCBpcyBub3QKKwkg ICAgIHplcm8uICAqLworCSAgaWYgKGl2X3VwZGF0ZSAmJiBpdl91cGRhdGUtPm5ld19iYXNl X2FkZHIKKwkgICAgICAmJiAhKGl2X3VwZGF0ZS0+c2tpcF9lZGdlCisJCSAgICYmIChtYXli ZV9ub3RfemVybyAoRFJfSU5JVCAoZHIpKQorCQkgICAgICAgfHwgbWF5YmVfbm90X3plcm8g KERSX09GRlNFVCAoZHIpKSkpKQorCSAgICB2ZWN0X3VwZGF0ZV9iYXNlX29mX2RyIChkciwg bG9vcF92aW5mbywgaXZfdXBkYXRlKTsKKwkgIGVsc2UKKwkgICAgLyogQWR2YW5jZSBkYXRh X3JlZmVyZW5jZSdzIHdpdGggdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBwcmV2 aW91cworCSAgICAgICBsb29wIGFuZCBpdHMgcHJvbG9ndWUuICAqLworCSAgICB2ZWN0X3Vw ZGF0ZV9pbml0X29mX2RyIChkcl9pbmZvLCBuaXRlcnMsIGNvZGUpOworCX0KICAgICB9CiB9 CiAKQEAgLTI4NTcsNiArMjk1Myw5IEBAIHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5m byBsb29wX3ZpbmZvLCB0cmVlIG5pdGVycywgdHJlZSBuaXRlcnNtMSwKICAgICB7CiAgICAg ICBlcGlsb2d1ZV92aW5mbyA9IGxvb3BfdmluZm8tPmVwaWxvZ3VlX3ZpbmZvc1swXTsKICAg ICAgIGxvb3BfdmluZm8tPmVwaWxvZ3VlX3ZpbmZvcy5vcmRlcmVkX3JlbW92ZSAoMCk7Cisg ICAgICBpZiAoIUxPT1BfVklORk9fSVZfVVBEQVRFUyAobG9vcF92aW5mbykpCisJTE9PUF9W SU5GT19JVl9VUERBVEVTIChsb29wX3ZpbmZvKQorCSAgPSBuZXcgaGFzaF9tYXA8c3RydWN0 IGRhdGFfcmVmZXJlbmNlICosIGl2X3VwZGF0ZT4gKCk7CiAgICAgfQogCiAgIHRyZWUgbml0 ZXJzX3ZlY3Rvcl9tdWx0X3ZmID0gTlVMTF9UUkVFOwpAQCAtMzA5MSw2ICszMTkwLDE4IEBA IHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCB0cmVlIG5pdGVy cywgdHJlZSBuaXRlcnNtMSwKIAkgIGUgPSAoZSAhPSBndWFyZF9lID8gZSA6IEVER0VfUFJF RCAoZ3VhcmRfdG8sIDEpKTsKIAkgIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9ndWFy ZDEgKGZpcnN0X2xvb3AsIGVwaWxvZywgZ3VhcmRfZSwgZSk7CiAKKwkgIGlmIChlcGlsb2d1 ZV92aW5mbykgeworCSAgICBzdHJ1Y3QgZGF0YV9yZWZlcmVuY2UgKmRyOworCSAgICBpbnQg aTsKKwkgICAgdmVjPGRhdGFfcmVmZXJlbmNlX3A+IGRhdGFyZWZzID0gTE9PUF9WSU5GT19E QVRBUkVGUyAoZXBpbG9ndWVfdmluZm8pOworCSAgICBGT1JfRUFDSF9WRUNfRUxUIChkYXRh cmVmcywgaSwgZHIpCisJICAgICAgeworCQlpdl91cGRhdGUgJml2X3VwZGF0ZQorCQkgID0g TE9PUF9WSU5GT19JVl9VUERBVEVTIChsb29wX3ZpbmZvKS0+Z2V0X29yX2luc2VydCAoZHIp OworCQlpdl91cGRhdGUuc2tpcF9lZGdlID0gZ3VhcmRfZTsKKwkgICAgICB9CisJICB9CisK IAkgIC8qIFNpbXBseSBwcm9wYWdhdGUgcHJvZmlsZSBpbmZvIGZyb20gZ3VhcmRfYmIgdG8g Z3VhcmRfdG8gd2hpY2ggaXMKIAkgICAgIGEgbWVyZ2UgcG9pbnQgb2YgY29udHJvbCBmbG93 LiAgKi8KIAkgIGd1YXJkX3RvLT5jb3VudCA9IGd1YXJkX2JiLT5jb3VudDsKZGlmZiAtLWdp dCBhL2djYy90cmVlLXZlY3QtbG9vcC5jIGIvZ2NjL3RyZWUtdmVjdC1sb29wLmMKaW5kZXgg M2U5NzNlNzc0YWY4ZjkyMDViZTg5M2UwMWFkOTI2MzI4MTExNjg4NS4uNTAwYjBlZmJmMzRh ZmEwZTkyMDJmNmIwZmE2MWU1ZTI5MTQ4MjMyMSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVj dC1sb29wLmMKKysrIGIvZ2NjL3RyZWUtdmVjdC1sb29wLmMKQEAgLTg0Niw3ICs4NDYsOCBA QCBfbG9vcF92ZWNfaW5mbzo6X2xvb3BfdmVjX2luZm8gKGNsYXNzIGxvb3AgKmxvb3BfaW4s IHZlY19pbmZvX3NoYXJlZCAqc2hhcmVkKQogICAgIGhhc19tYXNrX3N0b3JlIChmYWxzZSks CiAgICAgc2NhbGFyX2xvb3Bfc2NhbGluZyAocHJvZmlsZV9wcm9iYWJpbGl0eTo6dW5pbml0 aWFsaXplZCAoKSksCiAgICAgc2NhbGFyX2xvb3AgKE5VTEwpLAotICAgIG9yaWdfbG9vcF9p bmZvIChOVUxMKQorICAgIG9yaWdfbG9vcF9pbmZvIChOVUxMKSwKKyAgICBpdl91cGRhdGVz X21hcChOVUxMKQogewogICAvKiBDSEVDS01FOiBXZSB3YW50IHRvIHZpc2l0IGFsbCBCQnMg YmVmb3JlIHRoZWlyIHN1Y2Nlc3NvcnMgKGV4Y2VwdCBmb3IKICAgICAgbGF0Y2ggYmxvY2tz LCBmb3Igd2hpY2ggdGhpcyBhc3NlcnRpb24gd291bGRuJ3QgaG9sZCkuICBJbiB0aGUgc2lt cGxlCkBAIC05MjYsNiArOTI3LDcgQEAgX2xvb3BfdmVjX2luZm86On5fbG9vcF92ZWNfaW5m byAoKQogICBkZWxldGUgaXZleHByX21hcDsKICAgZGVsZXRlIHNjYW5fbWFwOwogICBlcGls b2d1ZV92aW5mb3MucmVsZWFzZSAoKTsKKyAgZGVsZXRlIGl2X3VwZGF0ZXNfbWFwOwogCiAg IC8qIFdoZW4gd2UgcmVsZWFzZSBhbiBlcGlsb2dlIHZpbmZvIHRoYXQgd2UgZG8gbm90IGlu dGVuZCB0byB1c2UKICAgICAgYXZvaWQgY2xlYXJpbmcgQVVYIG9mIHRoZSBtYWluIGxvb3Ag d2hpY2ggc2hvdWxkIGNvbnRpbnVlIHRvCkBAIC05MjY0LDggKzkyNjYsOCBAQCB1cGRhdGVf ZXBpbG9ndWVfbG9vcF92aW5mbyAoY2xhc3MgbG9vcCAqZXBpbG9ndWUsIHRyZWUgYWR2YW5j ZSkKICAgZnJlZSAoTE9PUF9WSU5GT19CQlMgKGVwaWxvZ3VlX3ZpbmZvKSk7CiAgIExPT1Bf VklORk9fQkJTIChlcGlsb2d1ZV92aW5mbykgPSBlcGlsb2d1ZV9iYnM7CiAKLSAgLyogQWR2 YW5jZSBkYXRhX3JlZmVyZW5jZSdzIHdpdGggdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9m IHRoZSBwcmV2aW91cwotICAgICBsb29wIGFuZCBpdHMgcHJvbG9ndWUuICAqLworICAvKiBF aXRoZXIgYWR2YW5jZSBkYXRhX3JlZmVyZW5jZSdzIHdpdGggdGhlIG51bWJlciBvZiBpdGVy YXRpb25zIG9mIHRoZSBwcmV2aW91cworICAgICBsb29wIGFuZCBpdHMgcHJvbG9ndWUgb3Ig cmV1c2UgdGhlIHByZXZpb3VzIGxvb3AncyBkYXRhX3JlZmVyZW5jZSB1cGRhdGUuICAqLwog ICB2ZWN0X3VwZGF0ZV9pbml0c19vZl9kcnMgKGVwaWxvZ3VlX3ZpbmZvLCBhZHZhbmNlLCBQ TFVTX0VYUFIpOwogCiAKZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3Qtc3RtdHMuYyBiL2dj Yy90cmVlLXZlY3Qtc3RtdHMuYwppbmRleCA4NWQzMTYxZmUzYjJmYmUyODkzOTY0NTczNjFj N2FmNzUxOWJkMmIzLi42NTY1MGQ3MTE0OWFiZDIyYmQzMjAxMzVkMDE0MTFlZGQzOGQ5Y2Y5 IDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0LXN0bXRzLmMKKysrIGIvZ2NjL3RyZWUtdmVj dC1zdG10cy5jCkBAIC03MTIzLDcgKzcxMjMsMzkgQEAgdmVjdG9yaXphYmxlX3NjYW5fc3Rv cmUgKHZlY19pbmZvICp2aW5mbywKICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB2b2lk Cit2ZWN0X2NhcHR1cmVfaXZfdXBkYXRlIChzdHJ1Y3QgZGF0YV9yZWZlcmVuY2UgKmRyLCB0 cmVlIGFmdGVyX2luY3IsCisJCQl0cmVlIGJlZm9yZV9pbmNyLCBsb29wX3ZlY19pbmZvIGxv b3BfdmluZm8pCit7CisgIGlmICghbG9vcF92aW5mbyB8fCAhTE9PUF9WSU5GT19JVl9VUERB VEVTIChsb29wX3ZpbmZvKSkKKyAgICByZXR1cm47CisKKyAgLyogV2UgYXJlbid0IHVwZGF0 aW5nIHRoZSBkYXRhcmVmZXJlbmNlLCBzbyBub3RoaW5nIHRvIHVwZGF0ZSB0aGUgYmFzZSBh ZGRyCisgICAgIHdpdGguICAqLworICBpZiAoYWZ0ZXJfaW5jciA9PSBOVUxMX1RSRUUpCisg ICAgTE9PUF9WSU5GT19JVl9VUERBVEVTIChsb29wX3ZpbmZvKS0+cmVtb3ZlIChkcik7CisK KyAgLyogVXNlIFBUUl9JTkNSIGZvciBwb3NpdGl2ZSBzdGVwJ3MgYXMgdGhhdCB3aWxsIGNv bnRhaW4gdGhlIG5leHQgZGF0YXJlZiB0bworICAgICBiZSBhY2Nlc3NlZC4gIEZvciBuZWdh dGl2ZSBzdGVwcyB3ZSBhY2Nlc3MgdGhlIGRhdGEgYXQgc3RlcCAqIGRhdGFzaXplLCBzbwor ICAgICB1c2UgQkVGT1JFX0lOQ1IgYXMgb3RoZXJ3aXNlIHRoZSBlcGlsb2d1ZSdzIGRhdGEg YWNjZXNzIHdpbGwgYmUgb2ZmIGJ5IHRoZQorICAgICBtYWluIGxvb3BzIGRhdGFzaXplICog c3RlcC4gICovCisgIGJvb2wgbmVnX3N0ZXAKKyAgICA9IFRSRUVfQ09ERSAoRFJfU1RFUCAo ZHIpKSA9PSBJTlRFR0VSX0NTVAorICAgICAgJiYgdHJlZV9pbnRfY3N0X3NnbiAoRFJfU1RF UCAoZHIpKSA9PSAtMTsKKworICB0cmVlIG5ld19iYXNlX2FkZHI7CisgIGlmIChuZWdfc3Rl cCkKKyAgICBuZXdfYmFzZV9hZGRyCisgICAgICA9IGZvbGRfYnVpbGQyIChQT0lOVEVSX1BM VVNfRVhQUiwKKwkJICAgICBUUkVFX1RZUEUgKGJlZm9yZV9pbmNyKSwKKwkJICAgICBiZWZv cmVfaW5jciwgYnVpbGRfaW50X2NzdCAoc2l6ZXR5cGUsIC0xKSk7CisgIGVsc2UKKyAgICBu ZXdfYmFzZV9hZGRyID0gYWZ0ZXJfaW5jcjsKIAorICBpdl91cGRhdGUgJml2X3VwZGF0ZQor ICAgID0gTE9PUF9WSU5GT19JVl9VUERBVEVTIChsb29wX3ZpbmZvKS0+Z2V0X29yX2luc2Vy dCAoZHIpOworICBpdl91cGRhdGUubmV3X2Jhc2VfYWRkciA9IG5ld19iYXNlX2FkZHI7Cit9 CiAvKiBGdW5jdGlvbiB2ZWN0b3JpemFibGVfc3RvcmUuCiAKICAgIENoZWNrIGlmIFNUTVRf SU5GTyBkZWZpbmVzIGEgbm9uIHNjYWxhciBkYXRhLXJlZiAoYXJyYXkvcG9pbnRlci9zdHJ1 Y3R1cmUpCkBAIC03MTUxLDYgKzcxODMsNyBAQCB2ZWN0b3JpemFibGVfc3RvcmUgKHZlY19p bmZvICp2aW5mbywKICAgdHJlZSBkYXRhcmVmX3B0ciA9IE5VTExfVFJFRTsKICAgdHJlZSBk YXRhcmVmX29mZnNldCA9IE5VTExfVFJFRTsKICAgZ2ltcGxlICpwdHJfaW5jciA9IE5VTEw7 CisgIHRyZWUgYWZ0ZXJfaW5jciA9IE5VTExfVFJFRTsKICAgaW50IG5jb3BpZXM7CiAgIGlu dCBqOwogICBzdG10X3ZlY19pbmZvIGZpcnN0X3N0bXRfaW5mbzsKQEAgLTgyNzksNiArODMx MiwxMSBAQCB2ZWN0b3JpemFibGVfc3RvcmUgKHZlY19pbmZvICp2aW5mbywKICAgcmVzdWx0 X2NoYWluLnJlbGVhc2UgKCk7CiAgIHZlY19vcHJuZHMucmVsZWFzZSAoKTsKIAorICBpZiAo cHRyX2luY3IpCisgICAgYWZ0ZXJfaW5jciA9IGdpbXBsZV9nZXRfbGhzIChwdHJfaW5jcik7 CisKKyAgdmVjdF9jYXB0dXJlX2l2X3VwZGF0ZSAoZmlyc3RfZHJfaW5mby0+ZHIsIGFmdGVy X2luY3IsIGRhdGFyZWZfcHRyLCBsb29wX3ZpbmZvKTsKKwogICByZXR1cm4gdHJ1ZTsKIH0K IApAQCAtODQyMCw2ICs4NDU4LDcgQEAgdmVjdG9yaXphYmxlX2xvYWQgKHZlY19pbmZvICp2 aW5mbywKICAgdHJlZSBkYXRhcmVmX3B0ciA9IE5VTExfVFJFRTsKICAgdHJlZSBkYXRhcmVm X29mZnNldCA9IE5VTExfVFJFRTsKICAgZ2ltcGxlICpwdHJfaW5jciA9IE5VTEw7CisgIHRy ZWUgYWZ0ZXJfaW5jciA9IE5VTExfVFJFRTsKICAgaW50IG5jb3BpZXM7CiAgIGludCBpLCBq OwogICB1bnNpZ25lZCBpbnQgZ3JvdXBfc2l6ZTsKQEAgLTk3OTIsNiArOTgzMSwxMSBAQCB2 ZWN0b3JpemFibGVfbG9hZCAodmVjX2luZm8gKnZpbmZvLAogICAgICAgICB9CiAgICAgICBk cl9jaGFpbi5yZWxlYXNlICgpOwogICAgIH0KKworICBpZiAocHRyX2luY3IpCisgICAgYWZ0 ZXJfaW5jciA9IGdpbXBsZV9nZXRfbGhzIChwdHJfaW5jcik7CisgIHZlY3RfY2FwdHVyZV9p dl91cGRhdGUgKGZpcnN0X2RyX2luZm8tPmRyLCBhZnRlcl9pbmNyLCBkYXRhcmVmX3B0ciwg bG9vcF92aW5mbyk7CisKICAgaWYgKCFzbHApCiAgICAgKnZlY19zdG10ID0gU1RNVF9WSU5G T19WRUNfU1RNVFMgKHN0bXRfaW5mbylbMF07CiAKZGlmZiAtLWdpdCBhL2djYy90cmVlLXZl Y3Rvcml6ZXIuaCBiL2djYy90cmVlLXZlY3Rvcml6ZXIuaAppbmRleCBiODYxYzk3YWIzYWVm MTc5YmE5YjI5MDA3MDFjZjA5ZTc1YTg0N2E1Li45NWNiODA2ZjcxNWQzZjViMTM4OWIyZTU2 YTAyNmUwNzcwOWRhOTkwIDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0b3JpemVyLmgKKysr IGIvZ2NjL3RyZWUtdmVjdG9yaXplci5oCkBAIC01NDUsNiArNTQ1LDEyIEBAIHR5cGVkZWYg YXV0b192ZWM8cmdyb3VwX2NvbnRyb2xzPiB2ZWNfbG9vcF9sZW5zOwogCiB0eXBlZGVmIGF1 dG9fdmVjPHN0ZDo6cGFpcjxkYXRhX3JlZmVyZW5jZSosIHRyZWU+ID4gZHJzX2luaXRfdmVj OwogCit0eXBlZGVmIHN0cnVjdAoreworICBlZGdlIHNraXBfZWRnZTsKKyAgdHJlZSBuZXdf YmFzZV9hZGRyOworfSBpdl91cGRhdGU7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogSW5mbyBv biB2ZWN0b3JpemVkIGxvb3BzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTc1Miw2ICs3NTgsOCBAQCBwdWJsaWM6CiAg ICAgIGFuYWx5c2lzLiAgKi8KICAgdmVjPF9sb29wX3ZlY19pbmZvICo+IGVwaWxvZ3VlX3Zp bmZvczsKIAorICBoYXNoX21hcDxzdHJ1Y3QgZGF0YV9yZWZlcmVuY2UqLCBpdl91cGRhdGU+ ICppdl91cGRhdGVzX21hcDsKKwogfSAqbG9vcF92ZWNfaW5mbzsKIAogLyogQWNjZXNzIEZ1 bmN0aW9ucy4gICovCkBAIC04MDcsNiArODE1LDcgQEAgcHVibGljOgogI2RlZmluZSBMT09Q X1ZJTkZPX1NJTkdMRV9TQ0FMQVJfSVRFUkFUSU9OX0NPU1QoTCkgKEwpLT5zaW5nbGVfc2Nh bGFyX2l0ZXJhdGlvbl9jb3N0CiAjZGVmaW5lIExPT1BfVklORk9fT1JJR19MT09QX0lORk8o TCkgICAgICAgKEwpLT5vcmlnX2xvb3BfaW5mbwogI2RlZmluZSBMT09QX1ZJTkZPX1NJTURf SUZfQ09ORChMKSAgICAgICAgIChMKS0+c2ltZF9pZl9jb25kCisjZGVmaW5lIExPT1BfVklO Rk9fSVZfVVBEQVRFUyhMKQkgICAoTCktPml2X3VwZGF0ZXNfbWFwCiAKICNkZWZpbmUgTE9P UF9WSU5GT19GVUxMWV9NQVNLRURfUChMKQkJXAogICAoTE9PUF9WSU5GT19VU0lOR19QQVJU SUFMX1ZFQ1RPUlNfUCAoTCkJXAo= --------------793068609EE77AE53DD30C95--