From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28167 invoked by alias); 7 Jul 2011 12:37:21 -0000 Received: (qmail 28058 invoked by uid 22791); 7 Jul 2011 12:37:20 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from mail-wy0-f175.google.com (HELO mail-wy0-f175.google.com) (74.125.82.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 07 Jul 2011 12:37:05 +0000 Received: by wyg30 with SMTP id 30so735381wyg.20 for ; Thu, 07 Jul 2011 05:37:04 -0700 (PDT) MIME-Version: 1.0 Received: by 10.227.152.146 with SMTP id g18mr687434wbw.79.1310042224019; Thu, 07 Jul 2011 05:37:04 -0700 (PDT) Received: by 10.227.36.212 with HTTP; Thu, 7 Jul 2011 05:37:03 -0700 (PDT) In-Reply-To: References: <4E034EF2.3070503@codesourcery.com> <4E03504B.9060305@codesourcery.com> <4E044559.5000105@linaro.org> <1A77B5B39081C241A68E6CF16983025F020906F6@EU1-MAIL.mgc.mentorg.com> <4E09B142.4020402@codesourcery.com> <4E09FDEA.3000004@gmail.com> <1A77B5B39081C241A68E6CF16983025F0209071D@EU1-MAIL.mgc.mentorg.com> <4E11CCD1.4010505@codesourcery.com> <4E1589D8.2060108@codesourcery.com> <4E159BEA.9070201@codesourcery.com> Date: Thu, 07 Jul 2011 12:49:00 -0000 Message-ID: Subject: Re: [PATCH (3/7)] Widening multiply-and-accumulate pattern matching From: Richard Guenther To: Andrew Stubbs Cc: Michael Matz , gcc-patches@gcc.gnu.org, patches@linaro.org Content-Type: multipart/mixed; boundary=0016e659f8ea674ac904a779f9dd X-IsSubscribed: yes 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 X-SW-Source: 2011-07/txt/msg00468.txt.bz2 --0016e659f8ea674ac904a779f9dd Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 2345 On Thu, Jul 7, 2011 at 2:28 PM, Richard Guenther wrote: > On Thu, Jul 7, 2011 at 1:43 PM, Andrew Stubbs w= rote: >> On 07/07/11 11:26, Andrew Stubbs wrote: >>> >>> On 07/07/11 10:58, Richard Guenther wrote: >>>> >>>> I think you should assume that series of widenings, >>>> (int)(short)char_variable >>>> are already combined. =A0Thus I believe you only need to consider a si= ngle >>>> conversion in valid_types_for_madd_p. >>> >>> Hmm, I'm not so sure. I'll look into it a bit further. >> >> OK, here's a test case that gives multiple conversions: >> >> =A0long long >> =A0foo (long long a, signed char b, signed char c) >> =A0{ >> =A0 =A0int bc =3D b * c; >> =A0 =A0return a + (short)bc; >> =A0} >> >> The dump right before the widen_mult pass gives: >> >> =A0foo (long long int a, signed char b, signed char c) >> =A0{ >> =A0 =A0int bc; >> =A0 =A0long long int D.2018; >> =A0 =A0short int D.2017; >> =A0 =A0long long int D.2016; >> =A0 =A0int D.2015; >> =A0 =A0int D.2014; >> >> =A0: >> =A0 =A0D.2014_2 =3D (int) b_1(D); >> =A0 =A0D.2015_4 =3D (int) c_3(D); >> =A0 =A0bc_5 =3D D.2014_2 * D.2015_4; >> =A0 =A0D.2017_6 =3D (short int) bc_5; > > Ok, so you have a truncation that is a no-op value-wise. =A0I would > argue that this truncation should be removed independent on > whether we have a widening multiply instruction or not. > > The technically most capable place to remove non-value-changing > truncations (and combine them with a successive conversion) > would be value-range propagation. =A0Which already knows: > > Value ranges after VRP: > > b_1(D): VARYING > D.2698_2: [-128, 127] > c_3(D): VARYING > D.2699_4: [-128, 127] > bc_5: [-16256, 16384] > D.2701_6: [-16256, 16384] > D.2702_7: [-16256, 16384] > a_8(D): VARYING > D.2700_9: VARYING > > thus truncating bc_5 to short does not change the value. > > The simplification could be made when looking at the > statement > >> =A0 =A0D.2018_7 =3D (long long int) D.2017_6; > > in vrp_fold_stmt, based on the fact that this conversion > converts from a value-preserving intermediate conversion. > Thus the transform would replace the D.2017_6 operand > with bc_5. > > So yes, the case appears - but it shouldn't ;) > > I'll cook up a quick patch for VRP. Like the attached. I'll finish and properly test it. Richard. --0016e659f8ea674ac904a779f9dd Content-Type: application/octet-stream; name=p Content-Disposition: attachment; filename=p Content-Transfer-Encoding: base64 X-Attachment-Id: f_gptpavaj0 Content-length: 13819 SW5kZXg6IGdjYy90cmVlLXZycC5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGdjYy90cmVlLXZycC5jCShyZXZpc2lvbiAxNzU5NjIpCisrKyBnY2Mv dHJlZS12cnAuYwkod29ya2luZyBjb3B5KQpAQCAtMTYxLDEwICsxNjEsMTAg QEAgc3RhdGljIFZFQyAoc3dpdGNoX3VwZGF0ZSwgaGVhcCkgKnRvX3VwZAog c3RhdGljIGlubGluZSB0cmVlCiB2cnBfdmFsX21heCAoY29uc3RfdHJlZSB0 eXBlKQogewotICBpZiAoIUlOVEVHUkFMX1RZUEVfUCAodHlwZSkpCi0gICAg cmV0dXJuIE5VTExfVFJFRTsKKyAgaWYgKElOVEVHUkFMX1RZUEVfUCAodHlw ZSkpCisgICAgcmV0dXJuIHVwcGVyX2JvdW5kX2luX3R5cGUgKENPTlNUX0NB U1RfVFJFRSAodHlwZSksIENPTlNUX0NBU1RfVFJFRSAodHlwZSkpOwogCi0g IHJldHVybiBUWVBFX01BWF9WQUxVRSAodHlwZSk7CisgIHJldHVybiBOVUxM X1RSRUU7CiB9CiAKIC8qIFJldHVybiB0aGUgbWluaW11bSB2YWx1ZSBmb3Ig VFlQRS4gICovCkBAIC0xNzIsMTAgKzE3MiwxMCBAQCB2cnBfdmFsX21heCAo Y29uc3RfdHJlZSB0eXBlKQogc3RhdGljIGlubGluZSB0cmVlCiB2cnBfdmFs X21pbiAoY29uc3RfdHJlZSB0eXBlKQogewotICBpZiAoIUlOVEVHUkFMX1RZ UEVfUCAodHlwZSkpCi0gICAgcmV0dXJuIE5VTExfVFJFRTsKKyAgaWYgKElO VEVHUkFMX1RZUEVfUCAodHlwZSkpCisgICAgcmV0dXJuIGxvd2VyX2JvdW5k X2luX3R5cGUgKENPTlNUX0NBU1RfVFJFRSAodHlwZSksIENPTlNUX0NBU1Rf VFJFRSAodHlwZSkpOwogCi0gIHJldHVybiBUWVBFX01JTl9WQUxVRSAodHlw ZSk7CisgIHJldHVybiBOVUxMX1RSRUU7CiB9CiAKIC8qIFJldHVybiB3aGV0 aGVyIFZBTCBpcyBlcXVhbCB0byB0aGUgbWF4aW11bSB2YWx1ZSBvZiBpdHMg dHlwZS4gIFRoaXMKQEAgLTU2NSw3ICs1NjUsNyBAQCBzZXRfdmFsdWVfcmFu Z2VfdG9fbm9ubmVnYXRpdmUgKHZhbHVlX3JhCiAgIHNldF92YWx1ZV9yYW5n ZSAodnIsIFZSX1JBTkdFLCB6ZXJvLAogCQkgICAob3ZlcmZsb3dfaW5maW5p dHkKIAkJICAgID8gcG9zaXRpdmVfb3ZlcmZsb3dfaW5maW5pdHkgKHR5cGUp Ci0JCSAgICA6IFRZUEVfTUFYX1ZBTFVFICh0eXBlKSksCisJCSAgICA6IHZy cF92YWxfbWF4ICh0eXBlKSksCiAJCSAgIHZyLT5lcXVpdik7CiB9CiAKQEAg LTE2MjcsNyArMTYyNyw3IEBAIGV4dHJhY3RfcmFuZ2VfZnJvbV9hc3NlcnQg KHZhbHVlX3JhbmdlX3QKICAgICB9CiAgIGVsc2UgaWYgKGNvbmRfY29kZSA9 PSBMRV9FWFBSIHx8IGNvbmRfY29kZSA9PSBMVF9FWFBSKQogICAgIHsKLSAg ICAgIG1pbiA9IFRZUEVfTUlOX1ZBTFVFICh0eXBlKTsKKyAgICAgIG1pbiA9 IHZycF92YWxfbWluICh0eXBlKTsKIAogICAgICAgaWYgKGxpbWl0X3ZyID09 IE5VTEwgfHwgbGltaXRfdnItPnR5cGUgPT0gVlJfQU5USV9SQU5HRSkKIAlt YXggPSBsaW1pdDsKQEAgLTE2NjIsNyArMTY2Miw3IEBAIGV4dHJhY3RfcmFu Z2VfZnJvbV9hc3NlcnQgKHZhbHVlX3JhbmdlX3QKICAgICB9CiAgIGVsc2Ug aWYgKGNvbmRfY29kZSA9PSBHRV9FWFBSIHx8IGNvbmRfY29kZSA9PSBHVF9F WFBSKQogICAgIHsKLSAgICAgIG1heCA9IFRZUEVfTUFYX1ZBTFVFICh0eXBl KTsKKyAgICAgIG1heCA9IHZycF92YWxfbWF4ICh0eXBlKTsKIAogICAgICAg aWYgKGxpbWl0X3ZyID09IE5VTEwgfHwgbGltaXRfdnItPnR5cGUgPT0gVlJf QU5USV9SQU5HRSkKIAltaW4gPSBsaW1pdDsKQEAgLTIwNzksMTEgKzIwNzks MTEgQEAgdnJwX2ludF9jb25zdF9iaW5vcCAoZW51bSB0cmVlX2NvZGUgY29k ZQogCSAgfHwgY29kZSA9PSBST1VORF9ESVZfRVhQUikKIAlyZXR1cm4gKG5l ZWRzX292ZXJmbG93X2luZmluaXR5IChUUkVFX1RZUEUgKHJlcykpCiAJCT8g cG9zaXRpdmVfb3ZlcmZsb3dfaW5maW5pdHkgKFRSRUVfVFlQRSAocmVzKSkK LQkJOiBUWVBFX01BWF9WQUxVRSAoVFJFRV9UWVBFIChyZXMpKSk7CisJCTog dnJwX3ZhbF9tYXggKFRSRUVfVFlQRSAocmVzKSkpOwogICAgICAgZWxzZQog CXJldHVybiAobmVlZHNfb3ZlcmZsb3dfaW5maW5pdHkgKFRSRUVfVFlQRSAo cmVzKSkKIAkJPyBuZWdhdGl2ZV9vdmVyZmxvd19pbmZpbml0eSAoVFJFRV9U WVBFIChyZXMpKQotCQk6IFRZUEVfTUlOX1ZBTFVFIChUUkVFX1RZUEUgKHJl cykpKTsKKwkJOiB2cnBfdmFsX21pbiAoVFJFRV9UWVBFIChyZXMpKSk7CiAg ICAgfQogCiAgIHJldHVybiByZXM7CkBAIC0yODg4LDggKzI4ODgsOCBAQCBl eHRyYWN0X3JhbmdlX2Zyb21fdW5hcnlfZXhwciAodmFsdWVfcmFuCiAJICAm JiBUWVBFX1BSRUNJU0lPTiAoaW5uZXJfdHlwZSkgPCBUWVBFX1BSRUNJU0lP TiAob3V0ZXJfdHlwZSkpCiAJewogCSAgdnIwLnR5cGUgPSBWUl9SQU5HRTsK LQkgIHZyMC5taW4gPSBUWVBFX01JTl9WQUxVRSAoaW5uZXJfdHlwZSk7Ci0J ICB2cjAubWF4ID0gVFlQRV9NQVhfVkFMVUUgKGlubmVyX3R5cGUpOworCSAg dnIwLm1pbiA9IHZycF92YWxfbWluIChpbm5lcl90eXBlKTsKKwkgIHZyMC5t YXggPSB2cnBfdmFsX21heCAoaW5uZXJfdHlwZSk7CiAJfQogCiAgICAgICAv KiBJZiBWUjAgaXMgYSBjb25zdGFudCByYW5nZSBvciBhbnRpLXJhbmdlIGFu ZCB0aGUgY29udmVyc2lvbiBpcwpAQCAtMjk3NCw3ICsyOTc0LDcgQEAgZXh0 cmFjdF9yYW5nZV9mcm9tX3VuYXJ5X2V4cHIgKHZhbHVlX3JhbgogCSAgICB9 CiAJfQogICAgICAgZWxzZQotCW1pbiA9IFRZUEVfTUlOX1ZBTFVFICh0eXBl KTsKKwltaW4gPSB2cnBfdmFsX21pbiAodHlwZSk7CiAKICAgICAgIGlmIChp c19wb3NpdGl2ZV9vdmVyZmxvd19pbmZpbml0eSAodnIwLm1pbikpCiAJbWF4 ID0gbmVnYXRpdmVfb3ZlcmZsb3dfaW5maW5pdHkgKHR5cGUpOwpAQCAtMjk5 Myw3ICsyOTkzLDcgQEAgZXh0cmFjdF9yYW5nZV9mcm9tX3VuYXJ5X2V4cHIg KHZhbHVlX3JhbgogCSAgICB9CiAJfQogICAgICAgZWxzZQotCW1heCA9IFRZ UEVfTUlOX1ZBTFVFICh0eXBlKTsKKwltYXggPSB2cnBfdmFsX21pbiAodHlw ZSk7CiAgICAgfQogICBlbHNlIGlmIChjb2RlID09IE5FR0FURV9FWFBSCiAJ ICAgJiYgVFlQRV9VTlNJR05FRCAodHlwZSkpCkBAIC0zMDM1LDcgKzMwMzUs NyBAQCBleHRyYWN0X3JhbmdlX2Zyb21fdW5hcnlfZXhwciAodmFsdWVfcmFu CiAgICAgICBlbHNlIGlmICghdnJwX3ZhbF9pc19taW4gKHZyMC5taW4pKQog CW1pbiA9IGZvbGRfdW5hcnlfdG9fY29uc3RhbnQgKGNvZGUsIHR5cGUsIHZy MC5taW4pOwogICAgICAgZWxzZSBpZiAoIW5lZWRzX292ZXJmbG93X2luZmlu aXR5ICh0eXBlKSkKLQltaW4gPSBUWVBFX01BWF9WQUxVRSAodHlwZSk7CisJ bWluID0gdnJwX3ZhbF9tYXggKHR5cGUpOwogICAgICAgZWxzZSBpZiAoc3Vw cG9ydHNfb3ZlcmZsb3dfaW5maW5pdHkgKHR5cGUpKQogCW1pbiA9IHBvc2l0 aXZlX292ZXJmbG93X2luZmluaXR5ICh0eXBlKTsKICAgICAgIGVsc2UKQEAg LTMwNDksNyArMzA0OSw3IEBAIGV4dHJhY3RfcmFuZ2VfZnJvbV91bmFyeV9l eHByICh2YWx1ZV9yYW4KICAgICAgIGVsc2UgaWYgKCF2cnBfdmFsX2lzX21p biAodnIwLm1heCkpCiAJbWF4ID0gZm9sZF91bmFyeV90b19jb25zdGFudCAo Y29kZSwgdHlwZSwgdnIwLm1heCk7CiAgICAgICBlbHNlIGlmICghbmVlZHNf b3ZlcmZsb3dfaW5maW5pdHkgKHR5cGUpKQotCW1heCA9IFRZUEVfTUFYX1ZB TFVFICh0eXBlKTsKKwltYXggPSB2cnBfdmFsX21heCAodHlwZSk7CiAgICAg ICBlbHNlIGlmIChzdXBwb3J0c19vdmVyZmxvd19pbmZpbml0eSAodHlwZSkK IAkgICAgICAgLyogV2Ugc2hvdWxkbid0IGdlbmVyYXRlIFsrSU5GLCArSU5G XSBhcyBzZXRfdmFsdWVfcmFuZ2UKIAkJICBkb2Vzbid0IGxpa2UgdGhpcyBh bmQgSUNFcy4gICovCkBAIC0zMDc5LDcgKzMwNzksNyBAQCBleHRyYWN0X3Jh bmdlX2Zyb21fdW5hcnlfZXhwciAodmFsdWVfcmFuCiAJICAgICAgICAgVFlQ RV9NSU5fVkFMVUUsIHJlbWVtYmVyIC1UWVBFX01JTl9WQUxVRSA9IFRZUEVf TUlOX1ZBTFVFLiAgKi8KIAkgICAgICBpZiAoVFlQRV9PVkVSRkxPV19XUkFQ UyAodHlwZSkpCiAJCXsKLQkJICB0cmVlIHR5cGVfbWluX3ZhbHVlID0gVFlQ RV9NSU5fVkFMVUUgKHR5cGUpOworCQkgIHRyZWUgdHlwZV9taW5fdmFsdWUg PSB2cnBfdmFsX21pbiAodHlwZSk7CiAKIAkJICBtaW4gPSAodnIwLm1pbiAh PSB0eXBlX21pbl92YWx1ZQogCQkJID8gaW50X2NvbnN0X2Jpbm9wIChQTFVT X0VYUFIsIHR5cGVfbWluX3ZhbHVlLApAQCAtMzA5MSw3ICszMDkxLDcgQEAg ZXh0cmFjdF9yYW5nZV9mcm9tX3VuYXJ5X2V4cHIgKHZhbHVlX3JhbgogCQkg IGlmIChvdmVyZmxvd19pbmZpbml0eV9yYW5nZV9wICgmdnIwKSkKIAkJICAg IG1pbiA9IG5lZ2F0aXZlX292ZXJmbG93X2luZmluaXR5ICh0eXBlKTsKIAkJ ICBlbHNlCi0JCSAgICBtaW4gPSBUWVBFX01JTl9WQUxVRSAodHlwZSk7CisJ CSAgICBtaW4gPSB2cnBfdmFsX21pbiAodHlwZSk7CiAJCX0KIAkgICAgfQog CSAgZWxzZQpAQCAtMzExMiw3ICszMTEyLDcgQEAgZXh0cmFjdF9yYW5nZV9m cm9tX3VuYXJ5X2V4cHIgKHZhbHVlX3JhbgogCQkgICAgfQogCQl9CiAJICAg ICAgZWxzZQotCQltYXggPSBUWVBFX01BWF9WQUxVRSAodHlwZSk7CisJCW1h eCA9IHZycF92YWxfbWF4ICh0eXBlKTsKIAkgICAgfQogCX0KIApAQCAtMzM5 NiwxMSArMzM5NiwxMSBAQCBhZGp1c3RfcmFuZ2Vfd2l0aF9zY2V2ICh2YWx1 ZV9yYW5nZV90ICp2CiAgIGlmIChQT0lOVEVSX1RZUEVfUCAodHlwZSkgfHwg IVRZUEVfTUlOX1ZBTFVFICh0eXBlKSkKICAgICB0bWluID0gbG93ZXJfYm91 bmRfaW5fdHlwZSAodHlwZSwgdHlwZSk7CiAgIGVsc2UKLSAgICB0bWluID0g VFlQRV9NSU5fVkFMVUUgKHR5cGUpOworICAgIHRtaW4gPSB2cnBfdmFsX21p biAodHlwZSk7CiAgIGlmIChQT0lOVEVSX1RZUEVfUCAodHlwZSkgfHwgIVRZ UEVfTUFYX1ZBTFVFICh0eXBlKSkKICAgICB0bWF4ID0gdXBwZXJfYm91bmRf aW5fdHlwZSAodHlwZSwgdHlwZSk7CiAgIGVsc2UKLSAgICB0bWF4ID0gVFlQ RV9NQVhfVkFMVUUgKHR5cGUpOworICAgIHRtYXggPSB2cnBfdmFsX21heCAo dHlwZSk7CiAKICAgLyogVHJ5IHRvIHVzZSBlc3RpbWF0ZWQgbnVtYmVyIG9m IGl0ZXJhdGlvbnMgZm9yIHRoZSBsb29wIHRvIGNvbnN0cmFpbiB0aGUKICAg ICAgZmluYWwgdmFsdWUgaW4gdGhlIGV2b2x1dGlvbi4gICovCkBAIC00MzE4 LDggKzQzMTgsOCBAQCBleHRyYWN0X2NvZGVfYW5kX3ZhbF9mcm9tX2NvbmRf d2l0aF9vcHMKICAgaWYgKChjb21wX2NvZGUgPT0gR1RfRVhQUiB8fCBjb21w X2NvZGUgPT0gTFRfRVhQUikKICAgICAgICYmIElOVEVHUkFMX1RZUEVfUCAo VFJFRV9UWVBFICh2YWwpKSkKICAgICB7Ci0gICAgICB0cmVlIG1pbiA9IFRZ UEVfTUlOX1ZBTFVFIChUUkVFX1RZUEUgKHZhbCkpOwotICAgICAgdHJlZSBt YXggPSBUWVBFX01BWF9WQUxVRSAoVFJFRV9UWVBFICh2YWwpKTsKKyAgICAg IHRyZWUgbWluID0gdnJwX3ZhbF9taW4gKFRSRUVfVFlQRSAodmFsKSk7Cisg ICAgICB0cmVlIG1heCA9IHZycF92YWxfbWF4IChUUkVFX1RZUEUgKHZhbCkp OwogCiAgICAgICBpZiAoY29tcF9jb2RlID09IEdUX0VYUFIKIAkgICYmICgh bWF4CkBAIC02Njg1LDcgKzY2ODUsNyBAQCB2cnBfdmlzaXRfcGhpX25vZGUg KGdpbXBsZSBwaGkpCiAJewogCSAgaWYgKCFuZWVkc19vdmVyZmxvd19pbmZp bml0eSAoVFJFRV9UWVBFICh2cl9yZXN1bHQubWluKSkKIAkgICAgICB8fCAh dnJwX3Zhcl9tYXlfb3ZlcmZsb3cgKGxocywgcGhpKSkKLQkgICAgdnJfcmVz dWx0Lm1pbiA9IFRZUEVfTUlOX1ZBTFVFIChUUkVFX1RZUEUgKHZyX3Jlc3Vs dC5taW4pKTsKKwkgICAgdnJfcmVzdWx0Lm1pbiA9IHZycF92YWxfbWluIChU UkVFX1RZUEUgKHZyX3Jlc3VsdC5taW4pKTsKIAkgIGVsc2UgaWYgKHN1cHBv cnRzX292ZXJmbG93X2luZmluaXR5IChUUkVFX1RZUEUgKHZyX3Jlc3VsdC5t aW4pKSkKIAkgICAgdnJfcmVzdWx0Lm1pbiA9CiAJCW5lZ2F0aXZlX292ZXJm bG93X2luZmluaXR5IChUUkVFX1RZUEUgKHZyX3Jlc3VsdC5taW4pKTsKQEAg LTY2OTcsNyArNjY5Nyw3IEBAIHZycF92aXNpdF9waGlfbm9kZSAoZ2ltcGxl IHBoaSkKIAl7CiAJICBpZiAoIW5lZWRzX292ZXJmbG93X2luZmluaXR5IChU UkVFX1RZUEUgKHZyX3Jlc3VsdC5tYXgpKQogCSAgICAgIHx8ICF2cnBfdmFy X21heV9vdmVyZmxvdyAobGhzLCBwaGkpKQotCSAgICB2cl9yZXN1bHQubWF4 ID0gVFlQRV9NQVhfVkFMVUUgKFRSRUVfVFlQRSAodnJfcmVzdWx0Lm1heCkp OworCSAgICB2cl9yZXN1bHQubWF4ID0gdnJwX3ZhbF9tYXggKFRSRUVfVFlQ RSAodnJfcmVzdWx0Lm1heCkpOwogCSAgZWxzZSBpZiAoc3VwcG9ydHNfb3Zl cmZsb3dfaW5maW5pdHkgKFRSRUVfVFlQRSAodnJfcmVzdWx0Lm1heCkpKQog CSAgICB2cl9yZXN1bHQubWF4ID0KIAkJcG9zaXRpdmVfb3ZlcmZsb3dfaW5m aW5pdHkgKFRSRUVfVFlQRSAodnJfcmVzdWx0Lm1heCkpOwpAQCAtNzExOSw3 ICs3MTE5LDcgQEAgdGVzdF9mb3Jfc2luZ3VsYXJpdHkgKGVudW0gdHJlZV9j b2RlIGNvbgogICAgIHsKICAgICAgIC8qIFRoaXMgc2hvdWxkIG5vdCBiZSBu ZWdhdGl2ZSBpbmZpbml0eTsgdGhlcmUgaXMgbm8gb3ZlcmZsb3cKIAkgaGVy ZS4gICovCi0gICAgICBtaW4gPSBUWVBFX01JTl9WQUxVRSAoVFJFRV9UWVBF IChvcDApKTsKKyAgICAgIG1pbiA9IHZycF92YWxfbWluIChUUkVFX1RZUEUg KG9wMCkpOwogCiAgICAgICBtYXggPSBvcDE7CiAgICAgICBpZiAoY29uZF9j b2RlID09IExUX0VYUFIgJiYgIWlzX292ZXJmbG93X2luZmluaXR5IChtYXgp KQpAQCAtNzEzNCw3ICs3MTM0LDcgQEAgdGVzdF9mb3Jfc2luZ3VsYXJpdHkg KGVudW0gdHJlZV9jb2RlIGNvbgogICAgIHsKICAgICAgIC8qIFRoaXMgc2hv dWxkIG5vdCBiZSBwb3NpdGl2ZSBpbmZpbml0eTsgdGhlcmUgaXMgbm8gb3Zl cmZsb3cKIAkgaGVyZS4gICovCi0gICAgICBtYXggPSBUWVBFX01BWF9WQUxV RSAoVFJFRV9UWVBFIChvcDApKTsKKyAgICAgIG1heCA9IHZycF92YWxfbWF4 IChUUkVFX1RZUEUgKG9wMCkpOwogCiAgICAgICBtaW4gPSBvcDE7CiAgICAg ICBpZiAoY29uZF9jb2RlID09IEdUX0VYUFIgJiYgIWlzX292ZXJmbG93X2lu ZmluaXR5IChtaW4pKQpAQCAtNzM0Miw2ICs3MzQyLDMzIEBAIHNpbXBsaWZ5 X3N3aXRjaF91c2luZ19yYW5nZXMgKGdpbXBsZSBzdG0KICAgcmV0dXJuIGZh bHNlOwogfQogCisvKiBTaW1wbGlmeSBhbiBpbnRlZ3JhbCBjb252ZXJzaW9u IGZyb20gYW4gU1NBIG5hbWUgaW4gU1RNVC4gICovCisKK3N0YXRpYyBib29s CitzaW1wbGlmeV9jb252ZXJzaW9uX3VzaW5nX3JhbmdlcyAoZ2ltcGxlIHN0 bXQpCit7CisgIHRyZWUgcmhzMSA9IGdpbXBsZV9hc3NpZ25fcmhzMSAoc3Rt dCk7CisgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAoZ2ltcGxlX2Fzc2lnbl9s aHMgKHN0bXQpKTsKKyAgZ2ltcGxlIGRlZl9zdG10ID0gU1NBX05BTUVfREVG X1NUTVQgKHJoczEpOworICB2YWx1ZV9yYW5nZV90ICp2cjsKKworICBpZiAo IWlzX2dpbXBsZV9hc3NpZ24gKGRlZl9zdG10KQorICAgICAgfHwgIUNPTlZF UlRfRVhQUl9DT0RFX1AgKGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKGRlZl9z dG10KSkpCisgICAgcmV0dXJuIGZhbHNlOworICByaHMxID0gZ2ltcGxlX2Fz c2lnbl9yaHMxIChkZWZfc3RtdCk7CisgIGlmIChUUkVFX0NPREUgKHJoczEp ICE9IFNTQV9OQU1FKQorICAgIHJldHVybiBmYWxzZTsKKyAgdnIgPSBnZXRf dmFsdWVfcmFuZ2UgKHJoczEpOworICBpZiAodnItPnR5cGUgIT0gVlJfUkFO R0UpCisgICAgcmV0dXJuIGZhbHNlOworICBpZiAoIWludF9maXRzX3R5cGVf cCAodnItPm1pbiwgdHlwZSkKKyAgICAgIHx8ICFpbnRfZml0c190eXBlX3Ag KHZyLT5tYXgsIHR5cGUpKQorICAgIHJldHVybiBmYWxzZTsKKyAgZ2ltcGxl X2Fzc2lnbl9zZXRfcmhzMSAoc3RtdCwgcmhzMSk7CisgIHVwZGF0ZV9zdG10 IChzdG10KTsKKyAgcmV0dXJuIHRydWU7Cit9CisKIC8qIFNpbXBsaWZ5IFNU TVQgdXNpbmcgcmFuZ2VzIGlmIHBvc3NpYmxlLiAgKi8KIAogc3RhdGljIGJv b2wKQEAgLTczNTEsNiArNzM3OCw3IEBAIHNpbXBsaWZ5X3N0bXRfdXNpbmdf cmFuZ2VzIChnaW1wbGVfc3RtdF8KICAgaWYgKGlzX2dpbXBsZV9hc3NpZ24g KHN0bXQpKQogICAgIHsKICAgICAgIGVudW0gdHJlZV9jb2RlIHJoc19jb2Rl ID0gZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoc3RtdCk7CisgICAgICB0cmVl IHJoczEgPSBnaW1wbGVfYXNzaWduX3JoczEgKHN0bXQpOwogCiAgICAgICBz d2l0Y2ggKHJoc19jb2RlKQogCXsKQEAgLTczNjQsNyArNzM5Miw3IEBAIHNp bXBsaWZ5X3N0bXRfdXNpbmdfcmFuZ2VzIChnaW1wbGVfc3RtdF8KIAkgICAg IG9yIGlkZW50aXR5IGlmIHRoZSBSSFMgaXMgemVybyBvciBvbmUsIGFuZCB0 aGUgTEhTIGFyZSBrbm93bgogCSAgICAgdG8gYmUgYm9vbGVhbiB2YWx1ZXMu ICBUcmFuc2Zvcm0gYWxsIFRSVVRIXypfRVhQUiBpbnRvCiAgICAgICAgICAg ICAgQklUXypfRVhQUiBpZiBib3RoIGFyZ3VtZW50cyBhcmUga25vd24gdG8g YmUgYm9vbGVhbiB2YWx1ZXMuICAqLwotCSAgaWYgKElOVEVHUkFMX1RZUEVf UCAoVFJFRV9UWVBFIChnaW1wbGVfYXNzaWduX3JoczEgKHN0bXQpKSkpCisJ ICBpZiAoSU5URUdSQUxfVFlQRV9QIChUUkVFX1RZUEUgKHJoczEpKSkKIAkg ICAgcmV0dXJuIHNpbXBsaWZ5X3RydXRoX29wc191c2luZ19yYW5nZXMgKGdz aSwgc3RtdCk7CiAJICBicmVhazsKIApAQCAtNzM3MywxNSArNzQwMSwxNSBA QCBzaW1wbGlmeV9zdG10X3VzaW5nX3JhbmdlcyAoZ2ltcGxlX3N0bXRfCiAJ IHRoYW4gemVybyBhbmQgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGFuIGV4YWN0 IHBvd2VyIG9mIHR3by4gICovCiAJY2FzZSBUUlVOQ19ESVZfRVhQUjoKIAlj YXNlIFRSVU5DX01PRF9FWFBSOgotCSAgaWYgKElOVEVHUkFMX1RZUEVfUCAo VFJFRV9UWVBFIChnaW1wbGVfYXNzaWduX3JoczEgKHN0bXQpKSkKKwkgIGlm IChJTlRFR1JBTF9UWVBFX1AgKFRSRUVfVFlQRSAocmhzMSkpCiAJICAgICAg JiYgaW50ZWdlcl9wb3cycCAoZ2ltcGxlX2Fzc2lnbl9yaHMyIChzdG10KSkp CiAJICAgIHJldHVybiBzaW1wbGlmeV9kaXZfb3JfbW9kX3VzaW5nX3Jhbmdl cyAoc3RtdCk7CiAJICBicmVhazsKIAogICAgICAgLyogVHJhbnNmb3JtIEFC UyAoWCkgaW50byBYIG9yIC1YIGFzIGFwcHJvcHJpYXRlLiAgKi8KIAljYXNl IEFCU19FWFBSOgotCSAgaWYgKFRSRUVfQ09ERSAoZ2ltcGxlX2Fzc2lnbl9y aHMxIChzdG10KSkgPT0gU1NBX05BTUUKLQkgICAgICAmJiBJTlRFR1JBTF9U WVBFX1AgKFRSRUVfVFlQRSAoZ2ltcGxlX2Fzc2lnbl9yaHMxIChzdG10KSkp KQorCSAgaWYgKFRSRUVfQ09ERSAocmhzMSkgPT0gU1NBX05BTUUKKwkgICAg ICAmJiBJTlRFR1JBTF9UWVBFX1AgKFRSRUVfVFlQRSAocmhzMSkpKQogCSAg ICByZXR1cm4gc2ltcGxpZnlfYWJzX3VzaW5nX3JhbmdlcyAoc3RtdCk7CiAJ ICBicmVhazsKIApAQCAtNzM5MCwxMCArNzQxOCwxNiBAQCBzaW1wbGlmeV9z dG10X3VzaW5nX3JhbmdlcyAoZ2ltcGxlX3N0bXRfCiAJICAvKiBPcHRpbWl6 ZSBhd2F5IEJJVF9BTkRfRVhQUiBhbmQgQklUX0lPUl9FWFBSCiAJICAgICBp ZiBhbGwgdGhlIGJpdHMgYmVpbmcgY2xlYXJlZCBhcmUgYWxyZWFkeSBjbGVh cmVkIG9yCiAJICAgICBhbGwgdGhlIGJpdHMgYmVpbmcgc2V0IGFyZSBhbHJl YWR5IHNldC4gICovCi0JICBpZiAoSU5URUdSQUxfVFlQRV9QIChUUkVFX1RZ UEUgKGdpbXBsZV9hc3NpZ25fcmhzMSAoc3RtdCkpKSkKKwkgIGlmIChJTlRF R1JBTF9UWVBFX1AgKFRSRUVfVFlQRSAocmhzMSkpKQogCSAgICByZXR1cm4g c2ltcGxpZnlfYml0X29wc191c2luZ19yYW5nZXMgKGdzaSwgc3RtdCk7CiAJ ICBicmVhazsKIAorCUNBU0VfQ09OVkVSVDoKKwkgIGlmIChUUkVFX0NPREUg KHJoczEpID09IFNTQV9OQU1FCisJICAgICAgJiYgSU5URUdSQUxfVFlQRV9Q IChUUkVFX1RZUEUgKHJoczEpKSkKKwkgICAgcmV0dXJuIHNpbXBsaWZ5X2Nv bnZlcnNpb25fdXNpbmdfcmFuZ2VzIChzdG10KTsKKwkgIGJyZWFrOworCiAJ ZGVmYXVsdDoKIAkgIGJyZWFrOwogCX0K --0016e659f8ea674ac904a779f9dd--