From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7688 invoked by alias); 13 Jun 2011 12:44:04 -0000 Received: (qmail 7677 invoked by uid 22791); 13 Jun 2011 12:44:02 -0000 X-SWARE-Spam-Status: No, hits=-2.3 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,TW_TM X-Spam-Check-By: sourceware.org Received: from mail-px0-f176.google.com (HELO mail-px0-f176.google.com) (209.85.212.176) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 13 Jun 2011 12:43:33 +0000 Received: by pxi11 with SMTP id 11so2401234pxi.21 for ; Mon, 13 Jun 2011 05:43:32 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.125.18 with SMTP id x18mr803308wfc.207.1307969012610; Mon, 13 Jun 2011 05:43:32 -0700 (PDT) Received: by 10.143.93.4 with HTTP; Mon, 13 Jun 2011 05:43:32 -0700 (PDT) Date: Mon, 13 Jun 2011 12:54:00 -0000 Message-ID: Subject: [patch] Don't insert pattern statements into the code (was Fix PR tree-optimization/49318) From: Ira Rosen To: Richard Guenther Cc: gcc-patches@gcc.gnu.org, Patch Tracking Content-Type: multipart/mixed; boundary=000e0cd149c65fb5c904a597444d 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-06/txt/msg00969.txt.bz2 --000e0cd149c65fb5c904a597444d Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 2575 On 10 June 2011 12:14, Richard Guenther wrote: > In the end I think we should not generate the pattern stmt during > pattern matching but only mark the relevant statements with a > pattern kind. =A0Say, for each pattern we have a "main" statement > that has related stmts belonging to the pattern that define uses > of the "main" statement - mark those to refer to that "main" statement. > For that "main" statement simply record an enum value, like, > widening_mult. =A0Then only at vectorized statement > generation time actually generate the vectorized form of the > pattern statement. I ended up with the following: during pattern detection a new scalar pattern statement is created but not inserted into the code, it is only recorded as a related statement of the last statement in the detected pattern. Every time the last statement is being analyzed/transformed, we switch to the pattern statement instead. It is much more difficult just to mark the last stmt with an enum value, since we have to retrieve the relevant operands every time. I am not sure if we need to free the pattern stmt at the end. Bootstrapped and now testing on powerpc64-suse-linux (tested vectorizer testsuite on powerpc64-suse-linux and x86_64-suse-linux. What do you think? Thanks, Ira ChangeLog: * tree-vect-loop.c (vect_determine_vectorization_factor): Don't remove irrelevant pattern statements. For irrelevant statements check if it is the last statement of a detected pattern, use corresponding pattern statement instead. (destroy_loop_vec_info): No need to remove pattern statements, only free stmt_vec_info. (vect_transform_loop): For irrelevant statements check if it is the last statement of a detected pattern, use corresponding pattern statement instead. * tree-vect-patterns.c (vect_pattern_recog_1): Don't insert pattern statements. Set basic block for the new statement. (vect_pattern_recog): Update documentation. * tree-vect-stmts.c (vect_mark_stmts_to_be_vectorized): Scan operands of pattern statements. (vectorizable_call): Fix printing. In case of a pattern statement use the lhs of the original statement when creating a dummy statement to replace the original call. (vect_analyze_stmt): For irrelevant statements check if it is the last statement of a detected pattern, use corresponding pattern statement instead. * tree-vect-slp.c (vect_schedule_slp_instance): For pattern statements use gsi of the original statement. --000e0cd149c65fb5c904a597444d Content-Type: text/plain; charset=US-ASCII; name="pattern.txt" Content-Disposition: attachment; filename="pattern.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_goveszh20 Content-length: 19797 SW5kZXg6IHRyZWUtdmVjdC1sb29wLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gdHJlZS12ZWN0LWxvb3AuYwkocmV2aXNpb24gMTc0OTgyKQorKysg dHJlZS12ZWN0LWxvb3AuYwkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDcgKzI0 NCw3IEBAIHZlY3RfZGV0ZXJtaW5lX3ZlY3Rvcml6YXRpb25fZmFjdG9yIChs b29wX3ZlY19pbmZvCiAgICAgICBmb3IgKHNpID0gZ3NpX3N0YXJ0X2JiIChi Yik7ICFnc2lfZW5kX3AgKHNpKTsgZ3NpX25leHQgKCZzaSkpCiAgICAgICAg IHsKIAkgIHRyZWUgdmZfdmVjdHlwZTsKLQkgIGdpbXBsZSBzdG10ID0gZ3Np X3N0bXQgKHNpKTsKKwkgIGdpbXBsZSBzdG10ID0gZ3NpX3N0bXQgKHNpKSwg cGF0dGVybl9zdG10OwogCSAgc3RtdF9pbmZvID0gdmluZm9fZm9yX3N0bXQg KHN0bXQpOwogCiAJICBpZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9S VF9ERVRBSUxTKSkKQEAgLTI1OCwyMCArMjU4LDI2IEBAIHZlY3RfZGV0ZXJt aW5lX3ZlY3Rvcml6YXRpb25fZmFjdG9yIChsb29wX3ZlY19pbmZvCiAJICAv KiBTa2lwIHN0bXRzIHdoaWNoIGRvIG5vdCBuZWVkIHRvIGJlIHZlY3Rvcml6 ZWQuICAqLwogCSAgaWYgKCFTVE1UX1ZJTkZPX1JFTEVWQU5UX1AgKHN0bXRf aW5mbykKIAkgICAgICAmJiAhU1RNVF9WSU5GT19MSVZFX1AgKHN0bXRfaW5m bykpCi0JICAgIHsKLSAgICAgICAgICAgICAgaWYgKGlzX3BhdHRlcm5fc3Rt dF9wIChzdG10X2luZm8pKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICBpZiAoU1RNVF9WSU5GT19JTl9QQVRURVJOX1AgKHN0bXRfaW5mbykKKyAg ICAgICAgICAgICAgICAgICYmIChwYXR0ZXJuX3N0bXQgPSBTVE1UX1ZJTkZP X1JFTEFURURfU1RNVCAoc3RtdF9pbmZvKSkKKyAgICAgICAgICAgICAgICAg ICYmIChTVE1UX1ZJTkZPX1JFTEVWQU5UX1AgKHZpbmZvX2Zvcl9zdG10IChw YXR0ZXJuX3N0bXQpKQorICAgICAgICAgICAgICAgICAgICAgIHx8IFNUTVRf VklORk9fTElWRV9QICh2aW5mb19mb3Jfc3RtdCAocGF0dGVybl9zdG10KSkp KQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAvKiBX ZSBhcmUgbm90IGdvaW5nIHRvIHZlY3Rvcml6ZSB0aGlzIHBhdHRlcm4gc3Rh dGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgIHRoZXJlZm9yZSwgcmVt b3ZlIGl0LiAgKi8KLSAgICAgICAgICAgICAgICAgIGdpbXBsZV9zdG10X2l0 ZXJhdG9yIHRtcF9nc2kgPSBnc2lfZm9yX3N0bXQgKHN0bXQpOwotICAgICAg ICAgICAgICAgICAgU1RNVF9WSU5GT19SRUxBVEVEX1NUTVQgKHN0bXRfaW5m bykgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgZ3NpX3JlbW92ZSAoJnRt cF9nc2ksIHRydWUpOwotICAgICAgICAgICAgICAgICAgZnJlZV9zdG10X3Zl Y19pbmZvIChzdG10KTsKKyAgICAgICAgICAgICAgICAgIHN0bXQgPSBwYXR0 ZXJuX3N0bXQ7CisgICAgICAgICAgICAgICAgICBzdG10X2luZm8gPSB2aW5m b19mb3Jfc3RtdCAocGF0dGVybl9zdG10KTsKKyAgICAgICAgICAgICAgICAg IGlmICh2ZWN0X3ByaW50X2R1bXBfaW5mbyAoUkVQT1JUX0RFVEFJTFMpKQor ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg ZnByaW50ZiAodmVjdF9kdW1wLCAiPT0+IGV4YW1pbmluZyBwYXR0ZXJuIHN0 YXRlbWVudDogIik7CisgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfZ2lt cGxlX3N0bXQgKHZlY3RfZHVtcCwgc3RtdCwgMCwgVERGX1NMSU0pOworICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotCi0JICAg ICAgaWYgKHZlY3RfcHJpbnRfZHVtcF9pbmZvIChSRVBPUlRfREVUQUlMUykp Ci0JICAgICAgICBmcHJpbnRmICh2ZWN0X2R1bXAsICJza2lwLiIpOwotCSAg ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICBlbHNlCisJICAgICAgICB7 CisJICAgICAgICAgIGlmICh2ZWN0X3ByaW50X2R1bXBfaW5mbyAoUkVQT1JU X0RFVEFJTFMpKQorCSAgICAgICAgICAgIGZwcmludGYgKHZlY3RfZHVtcCwg InNraXAuIik7CisJICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg ICAgIH0KIAkgICAgfQogCiAJICBpZiAoZ2ltcGxlX2dldF9saHMgKHN0bXQp ID09IE5VTExfVFJFRSkKQEAgLTgyOCwyNSArODM0LDE3IEBAIGRlc3Ryb3lf bG9vcF92ZWNfaW5mbyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBiCiAK ICAgICAgICAgICBpZiAoc3RtdF9pbmZvKQogICAgICAgICAgICAgewotICAg ICAgICAgICAgICAvKiBDaGVjayBpZiB0aGlzIGlzIGEgInBhdHRlcm4gc3Rt dCIgKGludHJvZHVjZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgIHZlY3Rv cml6ZXIgZHVyaW5nIHRoZSBwYXR0ZXJuIHJlY29nbml0aW9uIHBhc3MpLiAg Ki8KLSAgICAgICAgICAgICAgYm9vbCByZW1vdmVfc3RtdF9wID0gZmFsc2U7 Ci0gICAgICAgICAgICAgIGdpbXBsZSBvcmlnX3N0bXQgPSBTVE1UX1ZJTkZP X1JFTEFURURfU1RNVCAoc3RtdF9pbmZvKTsKLSAgICAgICAgICAgICAgaWYg KG9yaWdfc3RtdCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg ICAgICBzdG10X3ZlY19pbmZvIG9yaWdfc3RtdF9pbmZvID0gdmluZm9fZm9y X3N0bXQgKG9yaWdfc3RtdCk7Ci0gICAgICAgICAgICAgICAgICBpZiAob3Jp Z19zdG10X2luZm8KLSAgICAgICAgICAgICAgICAgICAgICAmJiBTVE1UX1ZJ TkZPX0lOX1BBVFRFUk5fUCAob3JpZ19zdG10X2luZm8pKQotICAgICAgICAg ICAgICAgICAgICByZW1vdmVfc3RtdF9wID0gdHJ1ZTsKLSAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoaXMgc3RhdGVt ZW50IGhhcyBhIHJlbGF0ZWQgInBhdHRlcm4gc3RtdCIKKyAgICAgICAgICAg ICAgICAgKGludHJvZHVjZWQgYnkgdGhlIHZlY3Rvcml6ZXIgZHVyaW5nIHRo ZSBwYXR0ZXJuIHJlY29nbml0aW9uCisgICAgICAgICAgICAgICAgIHBhc3Mp LiAgRnJlZSBwYXR0ZXJuJ3Mgc3RtdF92ZWNfaW5mby4gICovCisgICAgICAg ICAgICAgIGlmIChTVE1UX1ZJTkZPX0lOX1BBVFRFUk5fUCAoc3RtdF9pbmZv KQorICAgICAgICAgICAgICAgICAgJiYgdmluZm9fZm9yX3N0bXQgKFNUTVRf VklORk9fUkVMQVRFRF9TVE1UIChzdG10X2luZm8pKSkKKyAgICAgICAgICAg ICAgICBmcmVlX3N0bXRfdmVjX2luZm8gKFNUTVRfVklORk9fUkVMQVRFRF9T VE1UIChzdG10X2luZm8pKTsKIAogICAgICAgICAgICAgICAvKiBGcmVlIHN0 bXRfdmVjX2luZm8uICAqLwogICAgICAgICAgICAgICBmcmVlX3N0bXRfdmVj X2luZm8gKHN0bXQpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg IC8qIFJlbW92ZSBkZWFkICJwYXR0ZXJuIHN0bXRzIi4gICovCi0gICAgICAg ICAgICAgIGlmIChyZW1vdmVfc3RtdF9wKQotICAgICAgICAgICAgICAgIGdz aV9yZW1vdmUgKCZzaSwgdHJ1ZSk7Ci0gICAgICAgICAgICB9CiAgICAgICAg ICAgZ3NpX25leHQgKCZzaSk7CiAgICAgICAgIH0KICAgICB9CkBAIC01MTMx LDcgKzUxMjksNyBAQCB2ZWN0X3RyYW5zZm9ybV9sb29wIChsb29wX3ZlY19p bmZvIGxvb3BfdmluZm8pCiAKICAgICAgIGZvciAoc2kgPSBnc2lfc3RhcnRf YmIgKGJiKTsgIWdzaV9lbmRfcCAoc2kpOykKIAl7Ci0JICBnaW1wbGUgc3Rt dCA9IGdzaV9zdG10IChzaSk7CisJICBnaW1wbGUgc3RtdCA9IGdzaV9zdG10 IChzaSksIHBhdHRlcm5fc3RtdDsKIAkgIGJvb2wgaXNfc3RvcmU7CiAKIAkg IGlmICh2ZWN0X3ByaW50X2R1bXBfaW5mbyAoUkVQT1JUX0RFVEFJTFMpKQpA QCAtNTE1NiwxNCArNTE1NCwyNSBAQCB2ZWN0X3RyYW5zZm9ybV9sb29wIChs b29wX3ZlY19pbmZvIGxvb3BfdmluZm8pCiAKIAkgIGlmICghU1RNVF9WSU5G T19SRUxFVkFOVF9QIChzdG10X2luZm8pCiAJICAgICAgJiYgIVNUTVRfVklO Rk9fTElWRV9QIChzdG10X2luZm8pKQotCSAgICB7Ci0JICAgICAgZ3NpX25l eHQgKCZzaSk7Ci0JICAgICAgY29udGludWU7CisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgIGlmIChTVE1UX1ZJTkZPX0lOX1BBVFRFUk5fUCAoc3Rt dF9pbmZvKQorICAgICAgICAgICAgICAgICAgJiYgKHBhdHRlcm5fc3RtdCA9 IFNUTVRfVklORk9fUkVMQVRFRF9TVE1UIChzdG10X2luZm8pKQorICAgICAg ICAgICAgICAgICAgJiYgKFNUTVRfVklORk9fUkVMRVZBTlRfUCAodmluZm9f Zm9yX3N0bXQgKHBhdHRlcm5fc3RtdCkpCisgICAgICAgICAgICAgICAgICAg ICAgfHwgU1RNVF9WSU5GT19MSVZFX1AgKHZpbmZvX2Zvcl9zdG10IChwYXR0 ZXJuX3N0bXQpKSkpCisgICAgICAgICAgICAgICAgeyAKKyAgICAgICAgICAg ICAgICAgIHN0bXQgPSBwYXR0ZXJuX3N0bXQ7CisgICAgICAgICAgICAgICAg ICBzdG10X2luZm8gPSB2aW5mb19mb3Jfc3RtdCAoc3RtdCk7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisJICAgICAgICB7Cisg ICAJICAgICAgICAgIGdzaV9uZXh0ICgmc2kpOworCSAgICAgICAgICBjb250 aW51ZTsKKyAgICAgICAgICAgICAgICB9CiAJICAgIH0KIAogCSAgZ2NjX2Fz c2VydCAoU1RNVF9WSU5GT19WRUNUWVBFIChzdG10X2luZm8pKTsKLQkgIG51 bml0cyA9Ci0JICAgICh1bnNpZ25lZCBpbnQpIFRZUEVfVkVDVE9SX1NVQlBB UlRTIChTVE1UX1ZJTkZPX1ZFQ1RZUEUgKHN0bXRfaW5mbykpOworCSAgbnVu aXRzID0gKHVuc2lnbmVkIGludCkgVFlQRV9WRUNUT1JfU1VCUEFSVFMgKAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTVE1UX1ZJTkZPX1ZFQ1RZUEUgKHN0bXRfaW5mbykpOwogCSAgaWYgKCFT VE1UX1NMUF9UWVBFIChzdG10X2luZm8pCiAJICAgICAgJiYgbnVuaXRzICE9 ICh1bnNpZ25lZCBpbnQpIHZlY3Rvcml6YXRpb25fZmFjdG9yCiAgICAgICAg ICAgICAgICYmIHZlY3RfcHJpbnRfZHVtcF9pbmZvIChSRVBPUlRfREVUQUlM UykpCkluZGV4OiB0cmVlLXZlY3QtcGF0dGVybnMuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSB0cmVlLXZlY3QtcGF0dGVybnMuYwkocmV2aXNpb24g MTc0OTgxKQorKysgdHJlZS12ZWN0LXBhdHRlcm5zLmMJKHdvcmtpbmcgY29w eSkKQEAgLTgzMSw5ICs4MzEsOSBAQCB2ZWN0X3BhdHRlcm5fcmVjb2dfMSAo CiAgICAgfQogCiAgIC8qIE1hcmsgdGhlIHN0bXRzIHRoYXQgYXJlIGludm9s dmVkIGluIHRoZSBwYXR0ZXJuLiAqLwotICBnc2lfaW5zZXJ0X2JlZm9yZSAo JnNpLCBwYXR0ZXJuX3N0bXQsIEdTSV9TQU1FX1NUTVQpOwogICBzZXRfdmlu Zm9fZm9yX3N0bXQgKHBhdHRlcm5fc3RtdCwKIAkJICAgICAgbmV3X3N0bXRf dmVjX2luZm8gKHBhdHRlcm5fc3RtdCwgbG9vcF92aW5mbywgTlVMTCkpOwor ICBnaW1wbGVfc2V0X2JiIChwYXR0ZXJuX3N0bXQsIGdpbXBsZV9iYiAoc3Rt dCkpOwogICBwYXR0ZXJuX3N0bXRfaW5mbyA9IHZpbmZvX2Zvcl9zdG10IChw YXR0ZXJuX3N0bXQpOwogCiAgIFNUTVRfVklORk9fUkVMQVRFRF9TVE1UIChw YXR0ZXJuX3N0bXRfaW5mbykgPSBzdG10OwpAQCAtODU2LDggKzg1Niw4IEBA IHZlY3RfcGF0dGVybl9yZWNvZ18xICgKICAgIExPT1BfVklORk8gLSBhIHN0 cnVjdF9sb29wX2luZm8gb2YgYSBsb29wIGluIHdoaWNoIHdlIHdhbnQgdG8g bG9vayBmb3IKICAgICAgICAgY29tcHV0YXRpb24gaWRpb21zLgogCi0gICBP dXRwdXQgLSBmb3IgZWFjaCBjb21wdXRhdGlvbiBpZGlvbSB0aGF0IGlzIGRl dGVjdGVkIHdlIGluc2VydCBhIG5ldyBzdG10Ci0gICAgICAgIHRoYXQgcHJv dmlkZXMgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhbmQgdGhhdCBjYW4gYmUg dmVjdG9yaXplZC4gV2UKKyAgIE91dHB1dCAtIGZvciBlYWNoIGNvbXB1dGF0 aW9uIGlkaW9tIHRoYXQgaXMgZGV0ZWN0ZWQgd2UgY3JlYXRlIGEgbmV3IHN0 bXQKKyAgICAgICAgdGhhdCBwcm92aWRlcyB0aGUgc2FtZSBmdW5jdGlvbmFs aXR5IGFuZCB0aGF0IGNhbiBiZSB2ZWN0b3JpemVkLiAgV2UKICAgICAgICAg YWxzbyByZWNvcmQgc29tZSBpbmZvcm1hdGlvbiBpbiB0aGUgc3RydWN0X3N0 bXRfaW5mbyBvZiB0aGUgcmVsZXZhbnQKICAgICAgICAgc3RtdHMsIGFzIGV4 cGxhaW5lZCBiZWxvdzoKIApAQCAtODcyLDUzICs4NzIsNDkgQEAgdmVjdF9w YXR0ZXJuX3JlY29nXzEgKAogICAgICAgICAgUzU6IC4uLiA9IC4udXNlKGFf MCkuLiAgICAgICAgIC0gICAgICAgLSAgICAgICAgICAgICAgIC0KIAogICAg U2F5IHRoZSBzZXF1ZW5jZSB7UzEsUzIsUzMsUzR9IHdhcyBkZXRlY3RlZCBh cyBhIHBhdHRlcm4gdGhhdCBjYW4gYmUKLSAgIHJlcHJlc2VudGVkIGJ5IGEg c2luZ2xlIHN0bXQuIFdlIHRoZW46Ci0gICAtIGNyZWF0ZSBhIG5ldyBzdG10 IFM2IHRoYXQgd2lsbCByZXBsYWNlIHRoZSBwYXR0ZXJuLgotICAgLSBpbnNl cnQgdGhlIG5ldyBzdG10IFM2IGJlZm9yZSB0aGUgbGFzdCBzdG10IGluIHRo ZSBwYXR0ZXJuCisgICByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBzdG10LiAg V2UgdGhlbjoKKyAgIC0gY3JlYXRlIGEgbmV3IHN0bXQgUzYgZXF1aXZhbGVu dCB0byB0aGUgcGF0dGVybiAodGhlIHN0bXQgaXMgbm90CisgICAgIGluc2Vy dGVkIGludG8gdGhlIGNvZGUpCiAgICAtIGZpbGwgaW4gdGhlIFNUTVRfVklO Rk8gZmllbGRzIGFzIGZvbGxvd3M6CiAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbl9wYXR0ZXJuX3AgIHJlbGF0ZWRfc3RtdCAgICB2 ZWNfc3RtdAogICAgICAgICAgUzE6IGFfaSA9IC4uLi4gICAgICAgICAgICAg ICAgIC0gICAgICAgLSAgICAgICAgICAgICAgIC0KICAgICAgICAgIFMyOiBh XzIgPSAuLnVzZShhX2kpLi4gICAgICAgICAtICAgICAgIC0gICAgICAgICAg ICAgICAtCiAgICAgICAgICBTMzogYV8xID0gLi51c2UoYV8yKS4uICAgICAg ICAgLSAgICAgICAtICAgICAgICAgICAgICAgLQotICAgICAgID4gUzY6IGFf bmV3ID0gLi4uLiAgICAgICAgICAgICAgIC0gICAgICAgUzQgICAgICAgICAg ICAgIC0KICAgICAgICAgIFM0OiBhXzAgPSAuLnVzZShhXzEpLi4gICAgICAg ICB0cnVlICAgIFM2ICAgICAgICAgICAgICAtCisgICAgICAgICAgJy0tLT4g UzY6IGFfbmV3ID0gLi4uLiAgICAgICAgLSAgICAgICBTNCAgICAgICAgICAg ICAgLQogICAgICAgICAgUzU6IC4uLiA9IC4udXNlKGFfMCkuLiAgICAgICAg IC0gICAgICAgLSAgICAgICAgICAgICAgIC0KIAogICAgKHRoZSBsYXN0IHN0 bXQgaW4gdGhlIHBhdHRlcm4gKFM0KSBhbmQgdGhlIG5ldyBwYXR0ZXJuIHN0 bXQgKFM2KSBwb2ludAotICAgIHRvIGVhY2ggb3RoZXIgdGhyb3VnaCB0aGUg UkVMQVRFRF9TVE1UIGZpZWxkKS4KKyAgIHRvIGVhY2ggb3RoZXIgdGhyb3Vn aCB0aGUgUkVMQVRFRF9TVE1UIGZpZWxkKS4gIAogCiAgICBTNiB3aWxsIGJl IG1hcmtlZCBhcyByZWxldmFudCBpbiB2ZWN0X21hcmtfc3RtdHNfdG9fYmVf dmVjdG9yaXplZCBpbnN0ZWFkCiAgICBvZiBTNCBiZWNhdXNlIGl0IHdpbGwg cmVwbGFjZSBhbGwgaXRzIHVzZXMuICBTdG10cyB7UzEsUzIsUzN9IHdpbGwK ICAgIHJlbWFpbiBpcnJlbGV2YW50IHVubGVzcyB1c2VkIGJ5IHN0bXRzIG90 aGVyIHRoYW4gUzQuCiAKICAgIElmIHZlY3Rvcml6YXRpb24gc3VjY2VlZHMs IHZlY3RfdHJhbnNmb3JtX3N0bXQgd2lsbCBza2lwIG92ZXIge1MxLFMyLFMz fQotICAgKGJlY2F1c2UgdGhleSBhcmUgbWFya2VkIGFzIGlycmVsZXZhbnQp LiBJdCB3aWxsIHZlY3Rvcml6ZSBTNiwgYW5kIHJlY29yZAorICAgKGJlY2F1 c2UgdGhleSBhcmUgbWFya2VkIGFzIGlycmVsZXZhbnQpLiAgSXQgd2lsbCB2 ZWN0b3JpemUgUzYsIGFuZCByZWNvcmQKICAgIGEgcG9pbnRlciB0byB0aGUg bmV3IHZlY3RvciBzdG10IFZTNiBib3RoIGZyb20gUzYgKGFzIHVzdWFsKSwg YW5kIGFsc28KLSAgIGZyb20gUzQuIFdlIGRvIHRoYXQgc28gdGhhdCB3aGVu IHdlIGdldCB0byB2ZWN0b3JpemluZyBzdG10cyB0aGF0IHVzZSB0aGUKKyAg IGZyb20gUzQuICBXZSBkbyB0aGF0IHNvIHRoYXQgd2hlbiB3ZSBnZXQgdG8g dmVjdG9yaXppbmcgc3RtdHMgdGhhdCB1c2UgdGhlCiAgICBkZWYgb2YgUzQg KGxpa2UgUzUgdGhhdCB1c2VzIGFfMCksIHdlJ2xsIGtub3cgd2hlcmUgdG8g dGFrZSB0aGUgcmVsZXZhbnQKLSAgIHZlY3Rvci1kZWYgZnJvbS4gUzQgd2ls bCBiZSBza2lwcGVkLCBhbmQgUzUgd2lsbCBiZSB2ZWN0b3JpemVkIGFzIHVz dWFsOgorICAgdmVjdG9yLWRlZiBmcm9tLiAgUzQgd2lsbCBiZSBza2lwcGVk LCBhbmQgUzUgd2lsbCBiZSB2ZWN0b3JpemVkIGFzIHVzdWFsOgogCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fcGF0dGVybl9wICBy ZWxhdGVkX3N0bXQgICAgdmVjX3N0bXQKICAgICAgICAgIFMxOiBhX2kgPSAu Li4uICAgICAgICAgICAgICAgICAtICAgICAgIC0gICAgICAgICAgICAgICAt CiAgICAgICAgICBTMjogYV8yID0gLi51c2UoYV9pKS4uICAgICAgICAgLSAg ICAgICAtICAgICAgICAgICAgICAgLQogICAgICAgICAgUzM6IGFfMSA9IC4u dXNlKGFfMikuLiAgICAgICAgIC0gICAgICAgLSAgICAgICAgICAgICAgIC0K ICAgICAgICA+IFZTNjogdmFfbmV3ID0gLi4uLiAgICAgICAgICAgICAtICAg ICAgIC0gICAgICAgICAgICAgICAtCi0gICAgICAgICBTNjogYV9uZXcgPSAu Li4uICAgICAgICAgICAgICAgLSAgICAgICBTNCAgICAgICAgICAgICAgVlM2 CiAgICAgICAgICBTNDogYV8wID0gLi51c2UoYV8xKS4uICAgICAgICAgdHJ1 ZSAgICBTNiAgICAgICAgICAgICAgVlM2CisgICAgICAgICAgJy0tLT4gUzY6 IGFfbmV3ID0gLi4uLiAgICAgICAgLSAgICAgICBTNCAgICAgICAgICAgICAg VlM2CiAgICAgICAgPiBWUzU6IC4uLiA9IC4udnVzZSh2YV9uZXcpLi4gICAg LSAgICAgICAtICAgICAgICAgICAgICAgLQogICAgICAgICAgUzU6IC4uLiA9 IC4udXNlKGFfMCkuLiAgICAgICAgIC0gICAgICAgLSAgICAgICAgICAgICAg IC0KIAotICAgRENFIGNvdWxkIHRoZW4gZ2V0IHJpZCBvZiB7UzEsUzIsUzMs UzQsUzUsUzZ9IChpZiB0aGVpciBkZWZzIGFyZSBub3QgdXNlZAorICAgRENF IGNvdWxkIHRoZW4gZ2V0IHJpZCBvZiB7UzEsUzIsUzMsUzQsUzV9IChpZiB0 aGVpciBkZWZzIGFyZSBub3QgdXNlZAogICAgZWxzZXdoZXJlKSwgYW5kIHdl J2xsIGVuZCB1cCB3aXRoOgogCiAgICAgICAgIFZTNjogdmFfbmV3ID0gLi4u LgotICAgICAgICBWUzU6IC4uLiA9IC4udnVzZSh2YV9uZXcpLi4KKyAgICAg ICAgVlM1OiAuLi4gPSAuLnZ1c2UodmFfbmV3KS4uICAqLwogCi0gICBJZiB2 ZWN0b3JpemF0aW9uIGRvZXMgbm90IHN1Y2NlZWQsIERDRSB3aWxsIGNsZWFu IFM2IGF3YXkgKGl0cyBkZWYgaXMKLSAgIG5vdCB1c2VkKSwgYW5kIHdlJ2xs IGVuZCB1cCB3aXRoIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZS4KLSovCi0KIHZv aWQKIHZlY3RfcGF0dGVybl9yZWNvZyAobG9vcF92ZWNfaW5mbyBsb29wX3Zp bmZvKQogewpJbmRleDogdHJlZS12ZWN0LXN0bXRzLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gdHJlZS12ZWN0LXN0bXRzLmMJKHJldmlzaW9uIDE3 NDk4MSkKKysrIHRyZWUtdmVjdC1zdG10cy5jCSh3b3JraW5nIGNvcHkpCkBA IC02MDUsMTUgKzYwNSw0OSBAQCB2ZWN0X21hcmtfc3RtdHNfdG9fYmVfdmVj dG9yaXplZCAobG9vcF92ZWNfaW5mbyBsbwogICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgIH0KIAotICAgICAgRk9SX0VBQ0hfUEhJX09SX1NUTVRfVVNF ICh1c2VfcCwgc3RtdCwgaXRlciwgU1NBX09QX1VTRSkKLQl7Ci0JICB0cmVl IG9wID0gVVNFX0ZST01fUFRSICh1c2VfcCk7Ci0JICBpZiAoIXByb2Nlc3Nf dXNlIChzdG10LCBvcCwgbG9vcF92aW5mbywgbGl2ZV9wLCByZWxldmFudCwg JndvcmtsaXN0KSkKLQkgICAgewotCSAgICAgIFZFQ19mcmVlIChnaW1wbGUs IGhlYXAsIHdvcmtsaXN0KTsKLQkgICAgICByZXR1cm4gZmFsc2U7Ci0JICAg IH0KLQl9CisgICAgICBpZiAoaXNfcGF0dGVybl9zdG10X3AgKHZpbmZvX2Zv cl9zdG10IChzdG10KSkpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBQYXR0 ZXJuIHN0YXRlbWVudHMgYXJlIG5vdCBpbnNlcnRlZCBpbnRvIHRoZSBjb2Rl LCBzbworICAgICAgICAgICAgIEZPUl9FQUNIX1BISV9PUl9TVE1UX1VTRSBv cHRpbWl6ZXMgdGhlaXIgb3BlcmFuZHMgb3V0LCBhbmQgd2UKKyAgICAgICAg ICAgICBoYXZlIHRvIHNjYW4gdGhlIFJIUyBvciBmdW5jdGlvbiBhcmd1bWVu dHMgaW5zdGVhZC4gICovCisgICAgICAgICAgaWYgKGlzX2dpbXBsZV9hc3Np Z24gKHN0bXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmb3Ig KGkgPSAxOyBpIDwgZ2ltcGxlX251bV9vcHMgKHN0bXQpOyBpKyspCisgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgdHJlZSBvcCA9IGdp bXBsZV9vcCAoc3RtdCwgaSk7CisgICAgICAgICAgICAgICAgICBpZiAoIXBy b2Nlc3NfdXNlIChzdG10LCBvcCwgbG9vcF92aW5mbywgbGl2ZV9wLCByZWxl dmFudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3 b3JrbGlzdCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgICAgICBWRUNfZnJlZSAoZ2ltcGxlLCBoZWFwLCB3b3JrbGlzdCk7 CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChpc19naW1wbGVfY2FsbCAoc3Rt dCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBnaW1wbGVfY2FsbF9udW1fYXJncyAoc3RtdCk7IGkrKykKKyAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICB0cmVlIGFyZyA9IGdp bXBsZV9jYWxsX2FyZyAoc3RtdCwgaSk7CisgICAgICAgICAgICAgICAgICBp ZiAoIXByb2Nlc3NfdXNlIChzdG10LCBhcmcsIGxvb3BfdmluZm8sIGxpdmVf cCwgcmVsZXZhbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmd29ya2xpc3QpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgICAgVkVDX2ZyZWUgKGdpbXBsZSwgaGVhcCwgd29y a2xpc3QpOworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBG T1JfRUFDSF9QSElfT1JfU1RNVF9VU0UgKHVzZV9wLCBzdG10LCBpdGVyLCBT U0FfT1BfVVNFKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHRyZWUgb3Ag PSBVU0VfRlJPTV9QVFIgKHVzZV9wKTsKKyAgICAgICAgICAgIGlmICghcHJv Y2Vzc191c2UgKHN0bXQsIG9wLCBsb29wX3ZpbmZvLCBsaXZlX3AsIHJlbGV2 YW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndvcmtsaXN0 KSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFZFQ19mcmVl IChnaW1wbGUsIGhlYXAsIHdvcmtsaXN0KTsKKyAgICAgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CiAg ICAgfSAvKiB3aGlsZSB3b3JrbGlzdCAqLwogCiAgIFZFQ19mcmVlIChnaW1w bGUsIGhlYXAsIHdvcmtsaXN0KTsKQEAgLTE0MDYsNiArMTQ0MCw3IEBAIHZl Y3Rvcml6YWJsZV9jYWxsIChnaW1wbGUgc3RtdCwgZ2ltcGxlX3N0bXRfaXRl cmF0CiAgIFZFQyh0cmVlLCBoZWFwKSAqdmFyZ3MgPSBOVUxMOwogICBlbnVt IHsgTkFSUk9XLCBOT05FLCBXSURFTiB9IG1vZGlmaWVyOwogICBzaXplX3Qg aSwgbmFyZ3M7CisgIHRyZWUgbGhzOwogCiAgIC8qIEZPUk5PVzogdW5zdXBw b3J0ZWQgaW4gYmFzaWMgYmxvY2sgU0xQLiAgKi8KICAgZ2NjX2Fzc2VydCAo bG9vcF92aW5mbyk7CkBAIC0xNTQzLDcgKzE1NzgsNyBAQCB2ZWN0b3JpemFi bGVfY2FsbCAoZ2ltcGxlIHN0bXQsIGdpbXBsZV9zdG10X2l0ZXJhdAogICAv KiogVHJhbnNmb3JtLiAgKiovCiAKICAgaWYgKHZlY3RfcHJpbnRfZHVtcF9p bmZvIChSRVBPUlRfREVUQUlMUykpCi0gICAgZnByaW50ZiAodmVjdF9kdW1w LCAidHJhbnNmb3JtIG9wZXJhdGlvbi4iKTsKKyAgICBmcHJpbnRmICh2ZWN0 X2R1bXAsICJ0cmFuc2Zvcm0gY2FsbC4iKTsKIAogICAvKiBIYW5kbGUgZGVm LiAgKi8KICAgc2NhbGFyX2Rlc3QgPSBnaW1wbGVfY2FsbF9saHMgKHN0bXQp OwpAQCAtMTY2Miw4ICsxNjk3LDExIEBAIHZlY3Rvcml6YWJsZV9jYWxsIChn aW1wbGUgc3RtdCwgZ2ltcGxlX3N0bXRfaXRlcmF0CiAgICAgIHJocyBvZiB0 aGUgc3RhdGVtZW50IHdpdGggc29tZXRoaW5nIGhhcm1sZXNzLiAgKi8KIAog ICB0eXBlID0gVFJFRV9UWVBFIChzY2FsYXJfZGVzdCk7Ci0gIG5ld19zdG10 ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAoZ2ltcGxlX2NhbGxfbGhzIChzdG10 KSwKLQkJCQkgIGJ1aWxkX3plcm9fY3N0ICh0eXBlKSk7CisgIGlmIChpc19w YXR0ZXJuX3N0bXRfcCAoc3RtdF9pbmZvKSkKKyAgICBsaHMgPSBnaW1wbGVf Y2FsbF9saHMgKFNUTVRfVklORk9fUkVMQVRFRF9TVE1UIChzdG10X2luZm8p KTsKKyAgZWxzZQorICAgIGxocyA9IGdpbXBsZV9jYWxsX2xocyAoc3RtdCk7 CisgIG5ld19zdG10ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAobGhzLCBidWls ZF96ZXJvX2NzdCAodHlwZSkpOwogICBzZXRfdmluZm9fZm9yX3N0bXQgKG5l d19zdG10LCBzdG10X2luZm8pOwogICBzZXRfdmluZm9fZm9yX3N0bXQgKHN0 bXQsIE5VTEwpOwogICBTVE1UX1ZJTkZPX1NUTVQgKHN0bXRfaW5mbykgPSBu ZXdfc3RtdDsKQEAgLTQ4NDYsMTAgKzQ4ODQsMjYgQEAgdmVjdF9hbmFseXpl X3N0bXQgKGdpbXBsZSBzdG10LCBib29sICpuZWVkX3RvX3ZlY3QKICAgaWYg KCFTVE1UX1ZJTkZPX1JFTEVWQU5UX1AgKHN0bXRfaW5mbykKICAgICAgICYm ICFTVE1UX1ZJTkZPX0xJVkVfUCAoc3RtdF9pbmZvKSkKICAgICB7Ci0gICAg ICBpZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9ERVRBSUxTKSkK LSAgICAgICAgZnByaW50ZiAodmVjdF9kdW1wLCAiaXJyZWxldmFudC4iKTsK KyAgICAgIGdpbXBsZSBwYXR0ZXJuX3N0bXQgPSBTVE1UX1ZJTkZPX1JFTEFU RURfU1RNVCAoc3RtdF9pbmZvKTsKKyAgICAgIGlmIChTVE1UX1ZJTkZPX0lO X1BBVFRFUk5fUCAoc3RtdF9pbmZvKQorICAgICAgICAgICYmIChTVE1UX1ZJ TkZPX1JFTEVWQU5UX1AgKHZpbmZvX2Zvcl9zdG10IChwYXR0ZXJuX3N0bXQp KQorICAgICAgICAgICAgICB8fCBTVE1UX1ZJTkZPX0xJVkVfUCAodmluZm9f Zm9yX3N0bXQgKHBhdHRlcm5fc3RtdCkpKSkKKyAgICAgICAgeyAKKyAgICAg ICAgICBzdG10ID0gcGF0dGVybl9zdG10OworICAgICAgICAgIHN0bXRfaW5m byA9IHZpbmZvX2Zvcl9zdG10IChwYXR0ZXJuX3N0bXQpOyAKKyAgICAgICAg ICBpZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9ERVRBSUxTKSkK KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZnByaW50ZiAodmVjdF9k dW1wLCAiPT0+IGV4YW1pbmluZyBwYXR0ZXJuIHN0YXRlbWVudDogIik7Cisg ICAgICAgICAgICAgIHByaW50X2dpbXBsZV9zdG10ICh2ZWN0X2R1bXAsIHN0 bXQsIDAsIFRERl9TTElNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgaWYgKHZlY3RfcHJp bnRfZHVtcF9pbmZvIChSRVBPUlRfREVUQUlMUykpCisgICAgICAgICAgICBm cHJpbnRmICh2ZWN0X2R1bXAsICJpcnJlbGV2YW50LiIpOwogCi0gICAgICBy ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg fQogICAgIH0KIAogICBzd2l0Y2ggKFNUTVRfVklORk9fREVGX1RZUEUgKHN0 bXRfaW5mbykpCkluZGV4OiB0cmVlLXZlY3Qtc2xwLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gdHJlZS12ZWN0LXNscC5jCShyZXZpc2lvbiAxNzQ5 ODEpCisrKyB0cmVlLXZlY3Qtc2xwLmMJKHdvcmtpbmcgY29weSkKQEAgLTI1 NDYsNiArMjU0Niw4IEBAIHZlY3Rfc2NoZWR1bGVfc2xwX2luc3RhbmNlIChz bHBfdHJlZSBub2RlLCBzbHBfaW5zCiAgICAgICAmJiBTVE1UX1ZJTkZPX1NU UklERURfQUNDRVNTIChzdG10X2luZm8pCiAgICAgICAmJiAhUkVGRVJFTkNF X0NMQVNTX1AgKGdpbXBsZV9nZXRfbGhzIChzdG10KSkpCiAgICAgc2kgPSBn c2lfZm9yX3N0bXQgKFNMUF9JTlNUQU5DRV9GSVJTVF9MT0FEX1NUTVQgKGlu c3RhbmNlKSk7CisgIGVsc2UgaWYgKGlzX3BhdHRlcm5fc3RtdF9wIChzdG10 X2luZm8pKQorICAgICBzaSA9IGdzaV9mb3Jfc3RtdCAoU1RNVF9WSU5GT19S RUxBVEVEX1NUTVQgKHN0bXRfaW5mbykpOwogICBlbHNlCiAgICAgc2kgPSBn c2lfZm9yX3N0bXQgKHN0bXQpOwogCg== --000e0cd149c65fb5c904a597444d--