From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com [IPv6:2a00:1450:4864:20::62b]) by sourceware.org (Postfix) with ESMTPS id D9F2A3858401 for ; Tue, 31 Aug 2021 11:43:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D9F2A3858401 Received: by mail-ej1-x62b.google.com with SMTP id ia27so37958320ejc.10 for ; Tue, 31 Aug 2021 04:43:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=jNF/P97Zw8r1BkmHUdNeEMcr5jN8ZemxGRAO8++dBSs=; b=DBQN6hcPpB6QNgT/d8HzzDxKkhf6t+N7u5LnvqTlJtsggBy3zE5Tey3fYJylvrxXfU pb+jXIXTS9Qbcw9pNDuraQzHfv+jwTHi28bsWa7+OksC+A2ig5QW8r6TbvzesGBmManF Ow0rgVmR9Q3ijBIwPwy0WojgLDQ3xUwvPgd+Bu4V9o13hOMtFw1uol1mP4YPNytlwH95 9U7DlhjlbOL0Z+QYEHKzi77FYeott/pJH+4issiE8whKTCf8o2tKU74ShWx3RgSz3Jjk znOBuzocixZ055DUwSUTiT8Ys9s9s3AsTmzLKx6OZs7H0X/i9KIzKQo5Ug/im2QiAiNi yRcA== X-Gm-Message-State: AOAM532oQNVkK10H7SmHIzfbKYb6C43XKcYLO6Sfmwe7pAMglONfgK7M Knijd7vOX5pV4v0mk7r5MrSJl1hd5/ZXWBnYaAE= X-Google-Smtp-Source: ABdhPJxUdVpKq+ApSLdd7KhuJ2JfW8BayFjJwt/4vQEo/8M1YJtdpiqwstz5sXQOaFaHL5y8hYstvG42/FDhBs75AW4= X-Received: by 2002:a17:906:1901:: with SMTP id a1mr30119592eje.129.1630410197895; Tue, 31 Aug 2021 04:43:17 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Richard Biener Date: Tue, 31 Aug 2021 13:43:07 +0200 Message-ID: Subject: Re: [PATCH] tree-optimization/102139 - fix SLP DR base alignment To: Richard Biener Cc: GCC Patches , Richard Sandiford Content-Type: multipart/mixed; boundary="000000000000af35da05cad974c2" X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Tue, 31 Aug 2021 11:43:20 -0000 --000000000000af35da05cad974c2 Content-Type: text/plain; charset="UTF-8" On Tue, Aug 31, 2021 at 11:26 AM Richard Biener via Gcc-patches wrote: > > When doing whole-function SLP we have to make sure the recorded > base alignments we compute as the maximum alignment seen for a > base anywhere in the function is actually valid at the point > we want to make use of it. > > To make this work we now record the stmt the alignment was derived > from in addition to the DRs innermost behavior and we use a > dominance check to verify the recorded info is valid when doing > BB vectorization. > > Note this leaves a small(?) hole for the case where we have sth > like > > unaligned DR > call (); // does not return > aligned DR > > since we'll derive an aligned access for the earlier DR but the > later DR is never actually reached since the call does not > return. To plug this hole one option (for the easy backporting) > would be to simply not use the base-alignment recording at all. > Alternatively we'd have to store the dataref grouping 'id' somewhere > in the DR itself and use that to handle this particular case. It turns out this isn't too difficult so the following is a patch adjusted to cover that case together with a testcase. Bootstrapped and tested on x86_64-unknown-linux-gnu. OK? Thanks, Richard. 2021-08-31 Richard Biener PR tree-optimization/102139 * tree-vectorizer.h (vec_base_alignments): Adjust hash-map type to record a std::pair of the stmt-info and the innermost loop behavior. (dr_vec_info::group): New member. * tree-vect-data-refs.c (vect_record_base_alignment): Adjust. (vect_compute_data_ref_alignment): Verify the recorded base alignment can be used. (data_ref_pair): Remove. (dr_group_sort_cmp): Adjust. (vect_analyze_data_ref_accesses): Store the group-ID in the dr_vec_info and operate on a vector of dr_vec_infos. * gcc.dg/torture/pr102139.c: New testcase. --000000000000af35da05cad974c2 Content-Type: application/octet-stream; name=p Content-Disposition: attachment; filename=p Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kt004bi10 RnJvbSBiNjhmMjM1YmRhMjM3Y2U2M2JmM2U2MjE0ODgyMjY1NDljMTNiZjcyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEJpZW5lciA8cmd1ZW50aGVyQHN1c2UuZGU+CkRh dGU6IFR1ZSwgMzEgQXVnIDIwMjEgMTA6Mjg6NDAgKzAyMDAKU3ViamVjdDogW1BBVENIXSB0cmVl LW9wdGltaXphdGlvbi8xMDIxMzkgLSBmaXggU0xQIERSIGJhc2UgYWxpZ25tZW50ClRvOiBnY2Mt cGF0Y2hlc0BnY2MuZ251Lm9yZwoKV2hlbiBkb2luZyB3aG9sZS1mdW5jdGlvbiBTTFAgd2UgaGF2 ZSB0byBtYWtlIHN1cmUgdGhlIHJlY29yZGVkCmJhc2UgYWxpZ25tZW50cyB3ZSBjb21wdXRlIGFz IHRoZSBtYXhpbXVtIGFsaWdubWVudCBzZWVuIGZvciBhCmJhc2UgYW55d2hlcmUgaW4gdGhlIGZ1 bmN0aW9uIGlzIGFjdHVhbGx5IHZhbGlkIGF0IHRoZSBwb2ludAp3ZSB3YW50IHRvIG1ha2UgdXNl IG9mIGl0LgoKVG8gbWFrZSB0aGlzIHdvcmsgd2Ugbm93IHJlY29yZCB0aGUgc3RtdCB0aGUgYWxp Z25tZW50IHdhcyBkZXJpdmVkCmZyb20gaW4gYWRkaXRpb24gdG8gdGhlIERScyBpbm5lcm1vc3Qg YmVoYXZpb3IgYW5kIHdlIHVzZSBhCmRvbWluYW5jZSBjaGVjayB0byB2ZXJpZnkgdGhlIHJlY29y ZGVkIGluZm8gaXMgdmFsaWQgd2hlbiBkb2luZwpCQiB2ZWN0b3JpemF0aW9uLiAgRm9yIHRoaXMg dG8gd29yayBmb3IgZ3JvdXBzIGluc2lkZSBhIEJCIHRoYXQgYXJlCnNlcGFyYXRlIGJ5IGEgY2Fs bCB0aGF0IG1pZ2h0IG5vdCByZXR1cm4gd2Ugbm93IHN0b3JlIHRoZSBEUgphbmFseXNpcyBncm91 cC1pZCBwZXJtYW5lbnRseSBhbmQgdXNlIHRoYXQgZm9yIGFuIGFkZGl0aW9uYWwgY2hlY2sKd2hl biB0aGUgRFJzIGFyZSBpbiB0aGUgc2FtZSBCQi4KCjIwMjEtMDgtMzEgIFJpY2hhcmQgQmllbmVy ICA8cmd1ZW50aGVyQHN1c2UuZGU+CgoJUFIgdHJlZS1vcHRpbWl6YXRpb24vMTAyMTM5CgkqIHRy ZWUtdmVjdG9yaXplci5oICh2ZWNfYmFzZV9hbGlnbm1lbnRzKTogQWRqdXN0IGhhc2gtbWFwCgl0 eXBlIHRvIHJlY29yZCBhIHN0ZDo6cGFpciBvZiB0aGUgc3RtdC1pbmZvIGFuZCB0aGUgaW5uZXJt b3N0Cglsb29wIGJlaGF2aW9yLgoJKGRyX3ZlY19pbmZvOjpncm91cCk6IE5ldyBtZW1iZXIuCgkq IHRyZWUtdmVjdC1kYXRhLXJlZnMuYyAodmVjdF9yZWNvcmRfYmFzZV9hbGlnbm1lbnQpOiBBZGp1 c3QuCgkodmVjdF9jb21wdXRlX2RhdGFfcmVmX2FsaWdubWVudCk6IFZlcmlmeSB0aGUgcmVjb3Jk ZWQKCWJhc2UgYWxpZ25tZW50IGNhbiBiZSB1c2VkLgoJKGRhdGFfcmVmX3BhaXIpOiBSZW1vdmUu CgkoZHJfZ3JvdXBfc29ydF9jbXApOiBBZGp1c3QuCgkodmVjdF9hbmFseXplX2RhdGFfcmVmX2Fj Y2Vzc2VzKTogU3RvcmUgdGhlIGdyb3VwLUlEIGluIHRoZQoJZHJfdmVjX2luZm8gYW5kIG9wZXJh dGUgb24gYSB2ZWN0b3Igb2YgZHJfdmVjX2luZm9zLgoKCSogZ2NjLmRnL3RvcnR1cmUvcHIxMDIx MzkuYzogTmV3IHRlc3RjYXNlLgotLS0KIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3RvcnR1cmUvcHIx MDIxMzkuYyB8IDQzICsrKysrKysrKysrKysrKysKIGdjYy90cmVlLXZlY3QtZGF0YS1yZWZzLmMg ICAgICAgICAgICAgICB8IDY2ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0KIGdjYy90cmVlLXZl Y3Rvcml6ZXIuaCAgICAgICAgICAgICAgICAgICB8IDEwICsrLS0KIDMgZmlsZXMgY2hhbmdlZCwg ODUgaW5zZXJ0aW9ucygrKSwgMzQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdG9ydHVyZS9wcjEwMjEzOS5jCgpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdG9ydHVyZS9wcjEwMjEzOS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dG9ydHVyZS9wcjEwMjEzOS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li4wNmMxMzU3NDM4YQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Rv cnR1cmUvcHIxMDIxMzkuYwpAQCAtMCwwICsxLDQzIEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisv KiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZ0cmVlLXNscC12ZWN0b3JpemUiIH0gKi8KKwor dHlwZWRlZiBkb3VibGUgYWxpZ25lZF9kb3VibGUgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyKnNp emVvZihkb3VibGUpKSkpOworCit2b2lkIF9fYXR0cmlidXRlX18oKG5vaXBhKSkKK2JhciAoaW50 IGFsaWduZWQsIGRvdWJsZSAqcCkKK3sKKyAgaWYgKGFsaWduZWQpCisgICAgeworICAgICAgKihh bGlnbmVkX2RvdWJsZSAqKXAgPSAzLjsKKyAgICAgIHBbMV0gPSA0LjsKKyAgICB9CisgIGVsc2UK KyAgICB7CisgICAgICBwWzJdID0gMC47CisgICAgICBwWzNdID0gMS47CisgICAgfQorfQorCit2 b2lkIF9fYXR0cmlidXRlX18oKG5vaXBhKSkKK2ZvbyAoaW50IGkpCit7CisgIGlmIChpKQorICAg IF9fYnVpbHRpbl9leGl0ICgwKTsKK30KK3ZvaWQgX19hdHRyaWJ1dGVfXygobm9pcGEpKQorYmF6 IChkb3VibGUgKnApCit7CisgIHBbMF0gPSAwLjsKKyAgcFsxXSA9IDEuOworICBmb28gKDEpOwor ICAqKGFsaWduZWRfZG91YmxlICopcCA9IDMuOworICBwWzFdID0gNC47Cit9CisKK2RvdWJsZSB4 WzhdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMipzaXplb2YgKGRvdWJsZSkpKSk7CitpbnQgbWFp bigpCit7CisgIGJhciAoMCwgJnhbMV0pOworICBiYXogKCZ4WzFdKTsKKyAgcmV0dXJuIDA7Cit9 CmRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0LWRhdGEtcmVmcy5jIGIvZ2NjL3RyZWUtdmVjdC1k YXRhLXJlZnMuYwppbmRleCAzN2Y0NmQxYWFhMy4uZjQzZDBmNDc4NWUgMTAwNjQ0Ci0tLSBhL2dj Yy90cmVlLXZlY3QtZGF0YS1yZWZzLmMKKysrIGIvZ2NjL3RyZWUtdmVjdC1kYXRhLXJlZnMuYwpA QCAtODk1LDExICs4OTUsMTEgQEAgdmVjdF9yZWNvcmRfYmFzZV9hbGlnbm1lbnQgKHZlY19pbmZv ICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sCiAJCQkgICAgaW5uZXJtb3N0X2xvb3Bf YmVoYXZpb3IgKmRyYikKIHsKICAgYm9vbCBleGlzdGVkOwotICBpbm5lcm1vc3RfbG9vcF9iZWhh dmlvciAqJmVudHJ5CisgIHN0ZDo6cGFpcjxzdG10X3ZlY19pbmZvLCBpbm5lcm1vc3RfbG9vcF9i ZWhhdmlvciAqPiAmZW50cnkKICAgICA9IHZpbmZvLT5iYXNlX2FsaWdubWVudHMuZ2V0X29yX2lu c2VydCAoZHJiLT5iYXNlX2FkZHJlc3MsICZleGlzdGVkKTsKLSAgaWYgKCFleGlzdGVkIHx8IGVu dHJ5LT5iYXNlX2FsaWdubWVudCA8IGRyYi0+YmFzZV9hbGlnbm1lbnQpCisgIGlmICghZXhpc3Rl ZCB8fCBlbnRyeS5zZWNvbmQtPmJhc2VfYWxpZ25tZW50IDwgZHJiLT5iYXNlX2FsaWdubWVudCkK ICAgICB7Ci0gICAgICBlbnRyeSA9IGRyYjsKKyAgICAgIGVudHJ5ID0gc3RkOjptYWtlX3BhaXIg KHN0bXRfaW5mbywgZHJiKTsKICAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkKIAlkdW1wX3By aW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLAogCQkJICJyZWNvcmRpbmcgbmV3IGJh c2UgYWxpZ25tZW50IGZvciAlVFxuIgpAQCAtMTA2MCwxMSArMTA2MCwxOCBAQCB2ZWN0X2NvbXB1 dGVfZGF0YV9yZWZfYWxpZ25tZW50ICh2ZWNfaW5mbyAqdmluZm8sIGRyX3ZlY19pbmZvICpkcl9p bmZvKQogCiAgIC8qIENhbGN1bGF0ZSB0aGUgbWF4aW11bSBvZiB0aGUgcG9vbGVkIGJhc2UgYWRk cmVzcyBhbGlnbm1lbnQgYW5kIHRoZQogICAgICBhbGlnbm1lbnQgdGhhdCB3ZSBjYW4gY29tcHV0 ZSBmb3IgRFIgaXRzZWxmLiAgKi8KLSAgaW5uZXJtb3N0X2xvb3BfYmVoYXZpb3IgKiplbnRyeSA9 IGJhc2VfYWxpZ25tZW50cy0+Z2V0IChkcmItPmJhc2VfYWRkcmVzcyk7Ci0gIGlmIChlbnRyeSAm JiBiYXNlX2FsaWdubWVudCA8ICgqZW50cnkpLT5iYXNlX2FsaWdubWVudCkKKyAgc3RkOjpwYWly PHN0bXRfdmVjX2luZm8sIGlubmVybW9zdF9sb29wX2JlaGF2aW9yICo+ICplbnRyeQorICAgID0g YmFzZV9hbGlnbm1lbnRzLT5nZXQgKGRyYi0+YmFzZV9hZGRyZXNzKTsKKyAgaWYgKGVudHJ5Cisg ICAgICAmJiBiYXNlX2FsaWdubWVudCA8ICgqZW50cnkpLnNlY29uZC0+YmFzZV9hbGlnbm1lbnQK KyAgICAgICYmIChsb29wX3ZpbmZvCisJICB8fCAoZG9taW5hdGVkX2J5X3AgKENESV9ET01JTkFU T1JTLCBnaW1wbGVfYmIgKHN0bXRfaW5mby0+c3RtdCksCisJCQkgICAgICBnaW1wbGVfYmIgKGVu dHJ5LT5maXJzdC0+c3RtdCkpCisJICAgICAgJiYgKGdpbXBsZV9iYiAoc3RtdF9pbmZvLT5zdG10 KSAhPSBnaW1wbGVfYmIgKGVudHJ5LT5maXJzdC0+c3RtdCkKKwkJICB8fCAoZW50cnktPmZpcnN0 LT5kcl9hdXguZ3JvdXAgPD0gZHJfaW5mby0+Z3JvdXApKSkpKQogICAgIHsKLSAgICAgIGJhc2Vf YWxpZ25tZW50ID0gKCplbnRyeSktPmJhc2VfYWxpZ25tZW50OwotICAgICAgYmFzZV9taXNhbGln bm1lbnQgPSAoKmVudHJ5KS0+YmFzZV9taXNhbGlnbm1lbnQ7CisgICAgICBiYXNlX2FsaWdubWVu dCA9IGVudHJ5LT5zZWNvbmQtPmJhc2VfYWxpZ25tZW50OworICAgICAgYmFzZV9taXNhbGlnbm1l bnQgPSBlbnRyeS0+c2Vjb25kLT5iYXNlX21pc2FsaWdubWVudDsKICAgICB9CiAKICAgaWYgKGRy Yi0+b2Zmc2V0X2FsaWdubWVudCA8IHZlY3RfYWxpZ25fYwpAQCAtMjgxMywxOCArMjgyMCwxNiBA QCB2ZWN0X2FuYWx5emVfZGF0YV9yZWZfYWNjZXNzICh2ZWNfaW5mbyAqdmluZm8sIGRyX3ZlY19p bmZvICpkcl9pbmZvKQogICByZXR1cm4gdmVjdF9hbmFseXplX2dyb3VwX2FjY2VzcyAodmluZm8s IGRyX2luZm8pOwogfQogCi10eXBlZGVmIHN0ZDo6cGFpcjxkYXRhX3JlZmVyZW5jZV9wLCBpbnQ+ IGRhdGFfcmVmX3BhaXI7Ci0KIC8qIENvbXBhcmUgdHdvIGRhdGEtcmVmZXJlbmNlcyBEUkEgYW5k IERSQiB0byBncm91cCB0aGVtIGludG8gY2h1bmtzCiAgICBzdWl0YWJsZSBmb3IgZ3JvdXBpbmcu ICAqLwogCiBzdGF0aWMgaW50CiBkcl9ncm91cF9zb3J0X2NtcCAoY29uc3Qgdm9pZCAqZHJhXywg Y29uc3Qgdm9pZCAqZHJiXykKIHsKLSAgZGF0YV9yZWZfcGFpciBkcmFfcGFpciA9ICooZGF0YV9y ZWZfcGFpciAqKWNvbnN0X2Nhc3Q8dm9pZCAqPihkcmFfKTsKLSAgZGF0YV9yZWZfcGFpciBkcmJf cGFpciA9ICooZGF0YV9yZWZfcGFpciAqKWNvbnN0X2Nhc3Q8dm9pZCAqPihkcmJfKTsKLSAgZGF0 YV9yZWZlcmVuY2VfcCBkcmEgPSBkcmFfcGFpci5maXJzdDsKLSAgZGF0YV9yZWZlcmVuY2VfcCBk cmIgPSBkcmJfcGFpci5maXJzdDsKKyAgZHJfdmVjX2luZm8gKmRyYV9pbmZvID0gKihkcl92ZWNf aW5mbyAqKiljb25zdF9jYXN0PHZvaWQgKj4oZHJhXyk7CisgIGRyX3ZlY19pbmZvICpkcmJfaW5m byA9ICooZHJfdmVjX2luZm8gKiopY29uc3RfY2FzdDx2b2lkICo+KGRyYl8pOworICBkYXRhX3Jl ZmVyZW5jZV9wIGRyYSA9IGRyYV9pbmZvLT5kcjsKKyAgZGF0YV9yZWZlcmVuY2VfcCBkcmIgPSBk cmJfaW5mby0+ZHI7CiAgIGludCBjbXA7CiAKICAgLyogU3RhYmlsaXplIHNvcnQuICAqLwpAQCAt MjgzMiw4ICsyODM3LDggQEAgZHJfZ3JvdXBfc29ydF9jbXAgKGNvbnN0IHZvaWQgKmRyYV8sIGNv bnN0IHZvaWQgKmRyYl8pCiAgICAgcmV0dXJuIDA7CiAKICAgLyogRGlmZmVyZW50IGdyb3VwIElE cyBsZWFkIG5ldmVyIGJlbG9uZyB0byB0aGUgc2FtZSBncm91cC4gICovCi0gIGlmIChkcmFfcGFp ci5zZWNvbmQgIT0gZHJiX3BhaXIuc2Vjb25kKQotICAgIHJldHVybiBkcmFfcGFpci5zZWNvbmQg PCBkcmJfcGFpci5zZWNvbmQgPyAtMSA6IDE7CisgIGlmIChkcmFfaW5mby0+Z3JvdXAgIT0gZHJi X2luZm8tPmdyb3VwKQorICAgIHJldHVybiBkcmFfaW5mby0+Z3JvdXAgPCBkcmJfaW5mby0+Z3Jv dXAgPyAtMSA6IDE7CiAKICAgLyogT3JkZXJpbmcgb2YgRFJzIGFjY29yZGluZyB0byBiYXNlLiAg Ki8KICAgY21wID0gZGF0YV9yZWZfY29tcGFyZV90cmVlIChEUl9CQVNFX0FERFJFU1MgKGRyYSks CkBAIC0yOTUzLDE4ICsyOTU4LDE4IEBAIHZlY3RfYW5hbHl6ZV9kYXRhX3JlZl9hY2Nlc3NlcyAo dmVjX2luZm8gKnZpbmZvLAogICAvKiBTb3J0IHRoZSBhcnJheSBvZiBkYXRhcmVmcyB0byBtYWtl IGJ1aWxkaW5nIHRoZSBpbnRlcmxlYXZpbmcgY2hhaW5zCiAgICAgIGxpbmVhci4gIERvbid0IG1v ZGlmeSB0aGUgb3JpZ2luYWwgdmVjdG9yJ3Mgb3JkZXIsIGl0IGlzIG5lZWRlZCBmb3IKICAgICAg ZGV0ZXJtaW5pbmcgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIHJldmVyc2VkLiAgKi8KLSAgdmVjPGRh dGFfcmVmX3BhaXI+IGRhdGFyZWZzX2NvcHk7CisgIHZlYzxkcl92ZWNfaW5mbyAqPiBkYXRhcmVm c19jb3B5OwogICBkYXRhcmVmc19jb3B5LmNyZWF0ZSAoZGF0YXJlZnMubGVuZ3RoICgpKTsKICAg Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGFyZWZzLmxlbmd0aCAoKTsgaSsrKQogICAgIHsK LSAgICAgIGludCBncm91cF9pZDsKKyAgICAgIGRyX3ZlY19pbmZvICpkcl9pbmZvID0gdmluZm8t Pmxvb2t1cF9kciAoZGF0YXJlZnNbaV0pOwogICAgICAgLyogSWYgdGhlIGNhbGxlciBjb21wdXRl ZCBEUiBncm91cGluZyB1c2UgdGhhdCwgb3RoZXJ3aXNlIGdyb3VwIGJ5CiAJIGJhc2ljIGJsb2Nr cy4gICovCiAgICAgICBpZiAoZGF0YXJlZl9ncm91cHMpCi0JZ3JvdXBfaWQgPSAoKmRhdGFyZWZf Z3JvdXBzKVtpXTsKKwlkcl9pbmZvLT5ncm91cCA9ICgqZGF0YXJlZl9ncm91cHMpW2ldOwogICAg ICAgZWxzZQotCWdyb3VwX2lkID0gZ2ltcGxlX2JiIChEUl9TVE1UIChkYXRhcmVmc1tpXSkpLT5p bmRleDsKLSAgICAgIGRhdGFyZWZzX2NvcHkucXVpY2tfcHVzaCAoZGF0YV9yZWZfcGFpciAoZGF0 YXJlZnNbaV0sIGdyb3VwX2lkKSk7CisJZHJfaW5mby0+Z3JvdXAgPSBnaW1wbGVfYmIgKERSX1NU TVQgKGRhdGFyZWZzW2ldKSktPmluZGV4OworICAgICAgZGF0YXJlZnNfY29weS5xdWlja19wdXNo IChkcl9pbmZvKTsKICAgICB9CiAgIGRhdGFyZWZzX2NvcHkucXNvcnQgKGRyX2dyb3VwX3NvcnRf Y21wKTsKICAgaGFzaF9zZXQ8c3RtdF92ZWNfaW5mbz4gdG9fZml4dXA7CkBAIC0yOTcyLDkgKzI5 NzcsOSBAQCB2ZWN0X2FuYWx5emVfZGF0YV9yZWZfYWNjZXNzZXMgKHZlY19pbmZvICp2aW5mbywK ICAgLyogQnVpbGQgdGhlIGludGVybGVhdmluZyBjaGFpbnMuICAqLwogICBmb3IgKGkgPSAwOyBp IDwgZGF0YXJlZnNfY29weS5sZW5ndGggKCkgLSAxOykKICAgICB7Ci0gICAgICBkYXRhX3JlZmVy ZW5jZV9wIGRyYSA9IGRhdGFyZWZzX2NvcHlbaV0uZmlyc3Q7Ci0gICAgICBpbnQgZHJhX2dyb3Vw X2lkID0gZGF0YXJlZnNfY29weVtpXS5zZWNvbmQ7Ci0gICAgICBkcl92ZWNfaW5mbyAqZHJfaW5m b19hID0gdmluZm8tPmxvb2t1cF9kciAoZHJhKTsKKyAgICAgIGRyX3ZlY19pbmZvICpkcl9pbmZv X2EgPSBkYXRhcmVmc19jb3B5W2ldOworICAgICAgZGF0YV9yZWZlcmVuY2VfcCBkcmEgPSBkcl9p bmZvX2EtPmRyOworICAgICAgaW50IGRyYV9ncm91cF9pZCA9IGRyX2luZm9fYS0+Z3JvdXA7CiAg ICAgICBzdG10X3ZlY19pbmZvIHN0bXRpbmZvX2EgPSBkcl9pbmZvX2EtPnN0bXQ7CiAgICAgICBz dG10X3ZlY19pbmZvIGxhc3RpbmZvID0gTlVMTDsKICAgICAgIGlmICghU1RNVF9WSU5GT19WRUNU T1JJWkFCTEUgKHN0bXRpbmZvX2EpCkBAIC0yOTg1LDkgKzI5OTAsOSBAQCB2ZWN0X2FuYWx5emVf ZGF0YV9yZWZfYWNjZXNzZXMgKHZlY19pbmZvICp2aW5mbywKIAl9CiAgICAgICBmb3IgKGkgPSBp ICsgMTsgaSA8IGRhdGFyZWZzX2NvcHkubGVuZ3RoICgpOyArK2kpCiAJewotCSAgZGF0YV9yZWZl cmVuY2VfcCBkcmIgPSBkYXRhcmVmc19jb3B5W2ldLmZpcnN0OwotCSAgaW50IGRyYl9ncm91cF9p ZCA9IGRhdGFyZWZzX2NvcHlbaV0uc2Vjb25kOwotCSAgZHJfdmVjX2luZm8gKmRyX2luZm9fYiA9 IHZpbmZvLT5sb29rdXBfZHIgKGRyYik7CisJICBkcl92ZWNfaW5mbyAqZHJfaW5mb19iID0gZGF0 YXJlZnNfY29weVtpXTsKKwkgIGRhdGFfcmVmZXJlbmNlX3AgZHJiID0gZHJfaW5mb19iLT5kcjsK KwkgIGludCBkcmJfZ3JvdXBfaWQgPSBkcl9pbmZvX2ItPmdyb3VwOwogCSAgc3RtdF92ZWNfaW5m byBzdG10aW5mb19iID0gZHJfaW5mb19iLT5zdG10OwogCSAgaWYgKCFTVE1UX1ZJTkZPX1ZFQ1RP UklaQUJMRSAoc3RtdGluZm9fYikKIAkgICAgICB8fCBTVE1UX1ZJTkZPX0dBVEhFUl9TQ0FUVEVS X1AgKHN0bXRpbmZvX2IpKQpAQCAtMzA0OCw3ICszMDUzLDcgQEAgdmVjdF9hbmFseXplX2RhdGFf cmVmX2FjY2Vzc2VzICh2ZWNfaW5mbyAqdmluZm8sCiAJICBIT1NUX1dJREVfSU5UIGluaXRfYSA9 IFRSRUVfSU5UX0NTVF9MT1cgKERSX0lOSVQgKGRyYSkpOwogCSAgSE9TVF9XSURFX0lOVCBpbml0 X2IgPSBUUkVFX0lOVF9DU1RfTE9XIChEUl9JTklUIChkcmIpKTsKIAkgIEhPU1RfV0lERV9JTlQg aW5pdF9wcmV2Ci0JICAgID0gVFJFRV9JTlRfQ1NUX0xPVyAoRFJfSU5JVCAoZGF0YXJlZnNfY29w eVtpLTFdLmZpcnN0KSk7CisJICAgID0gVFJFRV9JTlRfQ1NUX0xPVyAoRFJfSU5JVCAoZGF0YXJl ZnNfY29weVtpLTFdLT5kcikpOwogCSAgZ2NjX2Fzc2VydCAoaW5pdF9hIDw9IGluaXRfYgogCQkg ICAgICAmJiBpbml0X2EgPD0gaW5pdF9wcmV2CiAJCSAgICAgICYmIGluaXRfcHJldiA8PSBpbml0 X2IpOwpAQCAtMzA1Niw3ICszMDYxLDcgQEAgdmVjdF9hbmFseXplX2RhdGFfcmVmX2FjY2Vzc2Vz ICh2ZWNfaW5mbyAqdmluZm8sCiAJICAvKiBEbyBub3QgcGxhY2UgdGhlIHNhbWUgYWNjZXNzIGlu IHRoZSBpbnRlcmxlYXZpbmcgY2hhaW4gdHdpY2UuICAqLwogCSAgaWYgKGluaXRfYiA9PSBpbml0 X3ByZXYpCiAJICAgIHsKLQkgICAgICBnY2NfYXNzZXJ0IChnaW1wbGVfdWlkIChEUl9TVE1UIChk YXRhcmVmc19jb3B5W2ktMV0uZmlyc3QpKQorCSAgICAgIGdjY19hc3NlcnQgKGdpbXBsZV91aWQg KERSX1NUTVQgKGRhdGFyZWZzX2NvcHlbaS0xXS0+ZHIpKQogCQkJICA8IGdpbXBsZV91aWQgKERS X1NUTVQgKGRyYikpKTsKIAkgICAgICAvKiBTaW1wbHkgbGluayBpbiBkdXBsaWNhdGVzIGFuZCBm aXggdXAgdGhlIGNoYWluIGJlbG93LiAgKi8KIAkgICAgfQpAQCAtMzE2OSwxMCArMzE3NCw5IEBA IHZlY3RfYW5hbHl6ZV9kYXRhX3JlZl9hY2Nlc3NlcyAodmVjX2luZm8gKnZpbmZvLAogICAgICAg dG9fZml4dXAuYWRkIChuZXdncm91cCk7CiAgICAgfQogCi0gIGRhdGFfcmVmX3BhaXIgKmRyX3Bh aXI7Ci0gIEZPUl9FQUNIX1ZFQ19FTFQgKGRhdGFyZWZzX2NvcHksIGksIGRyX3BhaXIpCisgIGRy X3ZlY19pbmZvICpkcl9pbmZvOworICBGT1JfRUFDSF9WRUNfRUxUIChkYXRhcmVmc19jb3B5LCBp LCBkcl9pbmZvKQogICAgIHsKLSAgICAgIGRyX3ZlY19pbmZvICpkcl9pbmZvID0gdmluZm8tPmxv b2t1cF9kciAoZHJfcGFpci0+Zmlyc3QpOwogICAgICAgaWYgKFNUTVRfVklORk9fVkVDVE9SSVpB QkxFIChkcl9pbmZvLT5zdG10KQogCSAgJiYgIXZlY3RfYW5hbHl6ZV9kYXRhX3JlZl9hY2Nlc3Mg KHZpbmZvLCBkcl9pbmZvKSkKIAl7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0b3JpemVyLmgg Yi9nY2MvdHJlZS12ZWN0b3JpemVyLmgKaW5kZXggNzJlMDE4ZThlYWMuLjc0NTNkMmE5MTMxIDEw MDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0b3JpemVyLmgKKysrIGIvZ2NjL3RyZWUtdmVjdG9yaXpl ci5oCkBAIC0xMDYsMTAgKzEwNiwxMSBAQCBzdHJ1Y3Qgc3RtdF9pbmZvX2Zvcl9jb3N0IHsKIAog dHlwZWRlZiB2ZWM8c3RtdF9pbmZvX2Zvcl9jb3N0PiBzdG10X3ZlY3Rvcl9mb3JfY29zdDsKIAot LyogTWFwcyBiYXNlIGFkZHJlc3NlcyB0byBhbiBpbm5lcm1vc3RfbG9vcF9iZWhhdmlvciB0aGF0 IGdpdmVzIHRoZSBtYXhpbXVtCi0gICBrbm93biBhbGlnbm1lbnQgZm9yIHRoYXQgYmFzZS4gICov CisvKiBNYXBzIGJhc2UgYWRkcmVzc2VzIHRvIGFuIGlubmVybW9zdF9sb29wX2JlaGF2aW9yIGFu ZCB0aGUgc3RtdCBpdCB3YXMKKyAgIGRlcml2ZWQgZnJvbSB0aGF0IGdpdmVzIHRoZSBtYXhpbXVt IGtub3duIGFsaWdubWVudCBmb3IgdGhhdCBiYXNlLiAgKi8KIHR5cGVkZWYgaGFzaF9tYXA8dHJl ZV9vcGVyYW5kX2hhc2gsCi0JCSBpbm5lcm1vc3RfbG9vcF9iZWhhdmlvciAqPiB2ZWNfYmFzZV9h bGlnbm1lbnRzOworCQkgc3RkOjpwYWlyPHN0bXRfdmVjX2luZm8sIGlubmVybW9zdF9sb29wX2Jl aGF2aW9yICo+ID4KKwkgIHZlY19iYXNlX2FsaWdubWVudHM7CiAKIC8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK ICAgU0xQCkBAIC0xMDU5LDYgKzEwNjAsOSBAQCBwdWJsaWM6CiAgIGRhdGFfcmVmZXJlbmNlICpk cjsKICAgLyogVGhlIHN0YXRlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIHJlZmVyZW5jZS4g ICovCiAgIHN0bXRfdmVjX2luZm8gc3RtdDsKKyAgLyogVGhlIGFuYWx5c2lzIGdyb3VwIHRoaXMg RFIgYmVsb25ncyB0byB3aGVuIGRvaW5nIEJCIHZlY3Rvcml6YXRpb24uCisgICAgIERScyBvZiB0 aGUgc2FtZSBncm91cCBiZWxvbmcgdG8gdGhlIHNhbWUgY29uZGl0aW9uYWwgZXhlY3V0aW9uIGNv bnRleHQuICAqLworICB1bnNpZ25lZCBncm91cDsKICAgLyogVGhlIG1pc2FsaWdubWVudCBpbiBi eXRlcyBvZiB0aGUgcmVmZXJlbmNlLCBvciAtMSBpZiBub3Qga25vd24uICAqLwogICBpbnQgbWlz YWxpZ25tZW50OwogICAvKiBUaGUgYnl0ZSBhbGlnbm1lbnQgdGhhdCB3ZSdkIGlkZWFsbHkgbGlr ZSB0aGUgcmVmZXJlbmNlIHRvIGhhdmUsCi0tIAoyLjMxLjEKCg== --000000000000af35da05cad974c2--