From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 40170 invoked by alias); 30 Mar 2017 12:03:50 -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 38566 invoked by uid 89); 30 Mar 2017 12:03:49 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.0 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-vk0-f47.google.com Received: from mail-vk0-f47.google.com (HELO mail-vk0-f47.google.com) (209.85.213.47) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 30 Mar 2017 12:03:46 +0000 Received: by mail-vk0-f47.google.com with SMTP id r69so51111986vke.2 for ; Thu, 30 Mar 2017 05:03:47 -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:in-reply-to:references:from:date :message-id:subject:to:cc; bh=4JqbfiLEHDF/Ed8RD9yc4TJ8fetrNSMc466DrEz2XY8=; b=hZAj21i9ukIwxoDUveeK+2+FcdRt65vmBRuSaOWHRw2h2+0XflHjEMZNp+KYg3PB8W 1niYj/uKzQ8ZlY7Q44/w60vBHdHN1qV8wUtQnqbiU/nCrQg9fXJrStIcnBblasXAcWVu sxAigaUXeISWmqOvWbbkH3dHfrLiZ41DrMPoN5ANWS1BEWJu0V0V03zYIc4n2kKu6mY1 mZAD/uXaTNT3Dr9xYA9dlH6GCdMxjLoCqyT/oEH07v0OxVF8jS2ULTMh8/vPmtnnwOiX oKryg15L4/5zRo33dl2Ml9Wj8V7J3Bb5qUc7U+IEof9g9L8rwdW2QCsaVG6CRYpwOkG1 QNCQ== X-Gm-Message-State: AFeK/H2ef8Or02Dr35tAbk3vK4ES5TbscDl2AZxzFsXSRPvrwmbz2AtrWDbO/fkMHK/L9jrU7m+Gb8RQYyzy4w== X-Received: by 10.176.74.222 with SMTP id t30mr1914681uae.132.1490875425846; Thu, 30 Mar 2017 05:03:45 -0700 (PDT) MIME-Version: 1.0 Received: by 10.103.12.129 with HTTP; Thu, 30 Mar 2017 05:03:45 -0700 (PDT) In-Reply-To: References: From: "Bin.Cheng" Date: Thu, 30 Mar 2017 12:44:00 -0000 Message-ID: Subject: Re: [PATCH PR80153]Always generate folded type conversion in tree-affine To: Richard Biener Cc: "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary=f403045f8a9429cfb1054bf17c7e X-IsSubscribed: yes X-SW-Source: 2017-03/txt/msg01518.txt.bz2 --f403045f8a9429cfb1054bf17c7e Content-Type: text/plain; charset=UTF-8 Content-length: 5824 On Thu, Mar 30, 2017 at 11:37 AM, Richard Biener wrote: > On Wed, Mar 29, 2017 at 5:22 PM, Bin.Cheng wrote: >> On Tue, Mar 28, 2017 at 1:34 PM, Richard Biener >> wrote: >>> On Tue, Mar 28, 2017 at 2:01 PM, Bin Cheng wrote: >>>> Hi, >>>> This patch is to fix PR80153. As analyzed in the PR, root cause is tree_affine lacks >>>> ability differentiating (unsigned)(ptr + offset) and (unsigned)ptr + (unsigned)offset, >>>> even worse, it always returns the former expression in aff_combination_tree, which >>>> is wrong if the original expression has the latter form. The patch resolves the issue >>>> by always returning the latter form expression, i.e, always trying to generate folded >>>> expression. Also as analyzed in comment, I think this change won't result in substantial >>>> code gen difference. >>>> I also need to adjust get_computation_aff for test case gcc.dg/tree-ssa/reassoc-19.c. >>>> Well, I think the changed behavior is correct, but for case the original pointer candidate >>>> is chosen, it should be unnecessary to compute in uutype. Also this adjustment only >>>> generates (unsigned)(pointer + offset) which is generated by tree-affine.c. >>>> Bootstrap and test on x86_64 and AArch64. Is it OK? >>> >> Thanks for reviewing. >>> Hmm. What is the desired goal? To have all elts added have >>> comb->type as type? Then >>> the type passed to add_elt_to_tree is redundant with comb->type. It >>> looks like it >>> is always passed comb->type now. >> Yes, except pointer type comb->type, elts are converted to comb->type >> with this patch. >> The redundant type is removed in updated patch. >> >>> >>> ISTR from past work in this area that it was important for pointer >>> combinations to allow >>> both pointer and sizetype elts at least. >> Yes, It's still important to allow different types for pointer and >> offset in pointer type comb. >> I missed a pointer type check condition in the patch, fixed in updated patch. >>> >>> Your change is incomplete I think, for the scale == -1 and POINTER_TYPE_P case >>> elt is sizetype now, not of pointer type. As said above, we are >>> trying to maintain >>> both pointer and sizetype elts with like: >>> >>> if (scale == 1) >>> { >>> if (!expr) >>> { >>> if (POINTER_TYPE_P (TREE_TYPE (elt))) >>> return elt; >>> else >>> return fold_convert (type1, elt); >>> } >>> >>> where your earilier fold to type would result in not all cases handled the same >>> (depending whether scale was -1 for example). >> IIUC, it doesn't matter. For comb->type being pointer type, the >> behavior remains the same. >> For comb->type being unsigned T, this elt is converted to ptr_offtype, >> rather than unsigned T, >> this doesn't matter because ptr_offtype and unsigned T are equal to >> each other, otherwise >> tree_to_aff_combination shouldn't distribute it as a single elt. >> Anyway, this is addressed in updated patch by checking pointer >> comb->type additionally. >> BTW, I think "scale==-1" case is a simple heuristic differentiating >> pointer_base and offset. >> >>> >>> Thus - shouldn't we simply drop the type argument (or rather the comb one? >>> that wide_int_ext_for_comb looks weird given we get a widest_int as input >>> and all the other wide_int_ext_for_comb calls around). >>> >>> And unconditionally convert to type, simplifying the rest of the code? >> As said, for pointer type comb, we need to keep current behavior; for >> other cases, >> unconditionally convert to comb->type is the goal. >> >> Bootstrap and test on x86_64 and AArch64. Is this version OK? > > @@ -399,22 +400,20 @@ add_elt_to_tree (tree expr, tree type, tree elt, > const widest_int &scale_in, > if (POINTER_TYPE_P (TREE_TYPE (elt))) > return elt; > else > - return fold_convert (type1, elt); > + return fold_convert (type, elt); > } > > the conversion should already have been done. For non-pointer comb->type > it has been converted to type by your patch. For pointer-type comb->type > it should be either pointer type or ptrofftype ('type') already as well. > > That said, can we do sth like > > @@ -384,6 +395,12 @@ add_elt_to_tree (tree expr, tree type, t > > widest_int scale = wide_int_ext_for_comb (scale_in, comb); > > + if (! POINTER_TYPE_P (comb->type)) > + elt = fold_convert (comb->type, elt); > + else > + gcc_assert (POINTER_TYPE_P (TREE_TYPE (elt)) > + || types_compatible_p (TREE_TYPE (elt), type1)); Hmm, this assert can be broken since we do STRIP_NOPS converting to aff_tree. It's not compatible for signed and unsigned integer types. Also, with this patch, we can even support elt of short type in a unsigned long comb, though this is useless. > + > if (scale == -1 > && POINTER_TYPE_P (TREE_TYPE (elt))) > { > > that is clearly do the conversion at the start in a way the state > of elt is more clear? Yes, thanks. V3 patch attached (with gcc_assert removed). Is it ok after bootstrap/test? Thanks, bin > > Richard. > > > >> Thanks, >> bin >> >> 2017-03-28 Bin Cheng >> >> PR tree-optimization/80153 >> * tree-affine.c (add_elt_to_tree): Remove parameter TYPE. Use type >> of parameter COMB. Convert elt to type of COMB it COMB is not of >> pointer type. >> (aff_combination_to_tree): Update calls to add_elt_to_tree. >> * tree-ssa-loop-ivopts.c (alloc_iv): Pass in consistent types. >> (get_computation_aff): Use utype directly for original candidate. >> >> gcc/testsuite/ChangeLog >> 2017-03-28 Bin Cheng >> >> PR tree-optimization/80153 >> * gcc.c-torture/execute/pr80153.c: New. --f403045f8a9429cfb1054bf17c7e Content-Type: text/plain; charset=US-ASCII; name="pr80153-20170330.txt" Content-Disposition: attachment; filename="pr80153-20170330.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j0wcdsll0 Content-length: 9268 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmMtdG9ydHVyZS9leGVj dXRlL3ByODAxNTMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmMtdG9ydHVyZS9l eGVjdXRlL3ByODAxNTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4zZWVkNTc4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuYy10b3J0dXJlL2V4ZWN1dGUvcHI4MDE1My5jCkBAIC0wLDAg KzEsNDggQEAKKy8qIFBSIHRyZWUtb3B0aW1pemF0aW9uLzgwMTUzICovCisK K3ZvaWQgY2hlY2sgKGludCwgaW50LCBpbnQpIF9fYXR0cmlidXRlX18oKG5v aW5saW5lKSk7Cit2b2lkIGNoZWNrIChpbnQgYywgaW50IGMyLCBpbnQgdmFs KQoreworICBpZiAoIXZhbCkgeworICAgIF9fYnVpbHRpbl9hYm9ydCgpOwor ICB9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpidWY7CitzdGF0aWMgaW50 IGwsIGk7CisKK3ZvaWQgX2ZwdXRzKGNvbnN0IGNoYXIgKnN0cikgIF9fYXR0 cmlidXRlX18oKG5vaW5saW5lKSk7Cit2b2lkIF9mcHV0cyhjb25zdCBjaGFy ICpzdHIpCit7CisgIGJ1ZiA9IHN0cjsKKyAgaSA9IDA7CisgIGwgPSBfX2J1 aWx0aW5fc3RybGVuKGJ1Zik7Cit9CisKK2NoYXIgX2ZnZXRjKCkgX19hdHRy aWJ1dGVfXygobm9pbmxpbmUpKTsKK2NoYXIgX2ZnZXRjKCkKK3sKKyAgY2hh ciB2YWwgPSBidWZbaV07CisgIGkrKzsKKyAgaWYgKGkgPiBsKQorICAgIHJl dHVybiAtMTsKKyAgZWxzZQorICAgIHJldHVybiB2YWw7Cit9CisKK3N0YXRp YyBjb25zdCBjaGFyICpzdHJpbmcgPSAib29wcyFcbiI7CisKK2ludCBtYWlu KHZvaWQpCit7CisgIGludCBpOworICBpbnQgYzsKKworICBfZnB1dHMoc3Ry aW5nKTsKKworICBmb3IgKGkgPSAwOyBpIDwgX19idWlsdGluX3N0cmxlbihz dHJpbmcpOyBpKyspIHsKKyAgICBjID0gX2ZnZXRjKCk7CisgICAgY2hlY2so Yywgc3RyaW5nW2ldLCBjID09IHN0cmluZ1tpXSk7CisgIH0KKworICByZXR1 cm4gMDsKK30KZGlmZiAtLWdpdCBhL2djYy90cmVlLWFmZmluZS5jIGIvZ2Nj L3RyZWUtYWZmaW5lLmMKaW5kZXggZTYyMGVlYS4uM2VjOTI2MyAxMDA2NDQK LS0tIGEvZ2NjL3RyZWUtYWZmaW5lLmMKKysrIGIvZ2NjL3RyZWUtYWZmaW5l LmMKQEAgLTM3MCwyMCArMzcwLDIyIEBAIHRyZWVfdG9fYWZmX2NvbWJpbmF0 aW9uICh0cmVlIGV4cHIsIHRyZWUgdHlwZSwgYWZmX3RyZWUgKmNvbWIpCiAg IGFmZl9jb21iaW5hdGlvbl9lbHQgKGNvbWIsIHR5cGUsIGV4cHIpOwogfQog Ci0vKiBDcmVhdGVzIEVYUFIgKyBFTFQgKiBTQ0FMRSBpbiBUWVBFLiAgRVhQ UiBpcyB0YWtlbiBmcm9tIGFmZmluZQorLyogQ3JlYXRlcyBFWFBSICsgRUxU ICogU0NBTEUgaW4gQ09NQidzIHR5cGUuICBFWFBSIGlzIHRha2VuIGZyb20g YWZmaW5lCiAgICBjb21iaW5hdGlvbiBDT01CLiAgKi8KIAogc3RhdGljIHRy ZWUKLWFkZF9lbHRfdG9fdHJlZSAodHJlZSBleHByLCB0cmVlIHR5cGUsIHRy ZWUgZWx0LCBjb25zdCB3aWRlc3RfaW50ICZzY2FsZV9pbiwKLQkJIGFmZl90 cmVlICpjb21iIEFUVFJJQlVURV9VTlVTRUQpCithZGRfZWx0X3RvX3RyZWUg KHRyZWUgZXhwciwgdHJlZSBlbHQsIGNvbnN0IHdpZGVzdF9pbnQgJnNjYWxl X2luLAorCQkgYWZmX3RyZWUgKmNvbWIpCiB7CiAgIGVudW0gdHJlZV9jb2Rl IGNvZGU7Ci0gIHRyZWUgdHlwZTEgPSB0eXBlOwotICBpZiAoUE9JTlRFUl9U WVBFX1AgKHR5cGUpKQotICAgIHR5cGUxID0gc2l6ZXR5cGU7CisgIHRyZWUg dHlwZSA9IFBPSU5URVJfVFlQRV9QIChjb21iLT50eXBlKSA/IHNpemV0eXBl IDogY29tYi0+dHlwZTsKIAogICB3aWRlc3RfaW50IHNjYWxlID0gd2lkZV9p bnRfZXh0X2Zvcl9jb21iIChzY2FsZV9pbiwgY29tYik7CiAKKyAgLyogQ29u dmVydCBlbHQgdW5jb25kaXRpb25hbGx5IGlmIGNvbWIgaXMgbm90IHBvaW50 ZXIgdHlwZS4gICovCisgIGlmICghUE9JTlRFUl9UWVBFX1AgKGNvbWItPnR5 cGUpKQorICAgIGVsdCA9IGZvbGRfY29udmVydCAoY29tYi0+dHlwZSwgZWx0 KTsKKwogICBpZiAoc2NhbGUgPT0gLTEKICAgICAgICYmIFBPSU5URVJfVFlQ RV9QIChUUkVFX1RZUEUgKGVsdCkpKQogICAgIHsKQEAgLTM5NCwyNyArMzk2 LDIxIEBAIGFkZF9lbHRfdG9fdHJlZSAodHJlZSBleHByLCB0cmVlIHR5cGUs IHRyZWUgZWx0LCBjb25zdCB3aWRlc3RfaW50ICZzY2FsZV9pbiwKIAogICBp ZiAoc2NhbGUgPT0gMSkKICAgICB7CisgICAgICAvKiBFbHQgaXMgb2YgY29y cmVjdCB0eXBlIGFscmVhZHkuICAqLwogICAgICAgaWYgKCFleHByKQotCXsK LQkgIGlmIChQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFIChlbHQpKSkKLQkg ICAgcmV0dXJuIGVsdDsKLQkgIGVsc2UKLQkgICAgcmV0dXJuIGZvbGRfY29u dmVydCAodHlwZTEsIGVsdCk7Ci0JfQorCXJldHVybiBlbHQ7CiAKICAgICAg IGlmIChQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFIChleHByKSkpCiAJcmV0 dXJuIGZvbGRfYnVpbGRfcG9pbnRlcl9wbHVzIChleHByLCBlbHQpOwogICAg ICAgaWYgKFBPSU5URVJfVFlQRV9QIChUUkVFX1RZUEUgKGVsdCkpKQogCXJl dHVybiBmb2xkX2J1aWxkX3BvaW50ZXJfcGx1cyAoZWx0LCBleHByKTsKLSAg ICAgIHJldHVybiBmb2xkX2J1aWxkMiAoUExVU19FWFBSLCB0eXBlMSwKLQkJ CSAgZXhwciwgZm9sZF9jb252ZXJ0ICh0eXBlMSwgZWx0KSk7CisgICAgICBy ZXR1cm4gZm9sZF9idWlsZDIgKFBMVVNfRVhQUiwgdHlwZSwgZXhwciwgZm9s ZF9jb252ZXJ0ICh0eXBlLCBlbHQpKTsKICAgICB9CiAKICAgaWYgKHNjYWxl ID09IC0xKQogICAgIHsKICAgICAgIGlmICghZXhwcikKLQlyZXR1cm4gZm9s ZF9idWlsZDEgKE5FR0FURV9FWFBSLCB0eXBlMSwKLQkJCSAgICBmb2xkX2Nv bnZlcnQgKHR5cGUxLCBlbHQpKTsKKwlyZXR1cm4gZm9sZF9idWlsZDEgKE5F R0FURV9FWFBSLCB0eXBlLCBmb2xkX2NvbnZlcnQgKHR5cGUsIGVsdCkpOwog CiAgICAgICBpZiAoUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQRSAoZXhwcikp KQogCXsKQEAgLTQyMiwxNCArNDE4LDEyIEBAIGFkZF9lbHRfdG9fdHJlZSAo dHJlZSBleHByLCB0cmVlIHR5cGUsIHRyZWUgZWx0LCBjb25zdCB3aWRlc3Rf aW50ICZzY2FsZV9pbiwKIAkgIGVsdCA9IGZvbGRfYnVpbGQxIChORUdBVEVf RVhQUiwgVFJFRV9UWVBFIChlbHQpLCBlbHQpOwogCSAgcmV0dXJuIGZvbGRf YnVpbGRfcG9pbnRlcl9wbHVzIChleHByLCBlbHQpOwogCX0KLSAgICAgIHJl dHVybiBmb2xkX2J1aWxkMiAoTUlOVVNfRVhQUiwgdHlwZTEsCi0JCQkgIGV4 cHIsIGZvbGRfY29udmVydCAodHlwZTEsIGVsdCkpOworICAgICAgcmV0dXJu IGZvbGRfYnVpbGQyIChNSU5VU19FWFBSLCB0eXBlLCBleHByLCBmb2xkX2Nv bnZlcnQgKHR5cGUsIGVsdCkpOwogICAgIH0KIAotICBlbHQgPSBmb2xkX2Nv bnZlcnQgKHR5cGUxLCBlbHQpOworICBlbHQgPSBmb2xkX2NvbnZlcnQgKHR5 cGUsIGVsdCk7CiAgIGlmICghZXhwcikKLSAgICByZXR1cm4gZm9sZF9idWls ZDIgKE1VTFRfRVhQUiwgdHlwZTEsIGVsdCwKLQkJCXdpZGVfaW50X3RvX3Ry ZWUgKHR5cGUxLCBzY2FsZSkpOworICAgIHJldHVybiBmb2xkX2J1aWxkMiAo TVVMVF9FWFBSLCB0eXBlLCBlbHQsIHdpZGVfaW50X3RvX3RyZWUgKHR5cGUs IHNjYWxlKSk7CiAKICAgaWYgKHdpOjpuZWdfcCAoc2NhbGUpKQogICAgIHsK QEAgLTQzOSwxNSArNDMzLDE0IEBAIGFkZF9lbHRfdG9fdHJlZSAodHJlZSBl eHByLCB0cmVlIHR5cGUsIHRyZWUgZWx0LCBjb25zdCB3aWRlc3RfaW50ICZz Y2FsZV9pbiwKICAgZWxzZQogICAgIGNvZGUgPSBQTFVTX0VYUFI7CiAKLSAg ZWx0ID0gZm9sZF9idWlsZDIgKE1VTFRfRVhQUiwgdHlwZTEsIGVsdCwKLQkJ ICAgICB3aWRlX2ludF90b190cmVlICh0eXBlMSwgc2NhbGUpKTsKKyAgZWx0 ID0gZm9sZF9idWlsZDIgKE1VTFRfRVhQUiwgdHlwZSwgZWx0LCB3aWRlX2lu dF90b190cmVlICh0eXBlLCBzY2FsZSkpOwogICBpZiAoUE9JTlRFUl9UWVBF X1AgKFRSRUVfVFlQRSAoZXhwcikpKQogICAgIHsKICAgICAgIGlmIChjb2Rl ID09IE1JTlVTX0VYUFIpCi0gICAgICAgIGVsdCA9IGZvbGRfYnVpbGQxIChO RUdBVEVfRVhQUiwgdHlwZTEsIGVsdCk7CisgICAgICAgIGVsdCA9IGZvbGRf YnVpbGQxIChORUdBVEVfRVhQUiwgdHlwZSwgZWx0KTsKICAgICAgIHJldHVy biBmb2xkX2J1aWxkX3BvaW50ZXJfcGx1cyAoZXhwciwgZWx0KTsKICAgICB9 Ci0gIHJldHVybiBmb2xkX2J1aWxkMiAoY29kZSwgdHlwZTEsIGV4cHIsIGVs dCk7CisgIHJldHVybiBmb2xkX2J1aWxkMiAoY29kZSwgdHlwZSwgZXhwciwg ZWx0KTsKIH0KIAogLyogTWFrZXMgdHJlZSBmcm9tIHRoZSBhZmZpbmUgY29t YmluYXRpb24gQ09NQi4gICovCkBAIC00NTUsMjIgKzQ0OCwxOCBAQCBhZGRf ZWx0X3RvX3RyZWUgKHRyZWUgZXhwciwgdHJlZSB0eXBlLCB0cmVlIGVsdCwg Y29uc3Qgd2lkZXN0X2ludCAmc2NhbGVfaW4sCiB0cmVlCiBhZmZfY29tYmlu YXRpb25fdG9fdHJlZSAoYWZmX3RyZWUgKmNvbWIpCiB7Ci0gIHRyZWUgdHlw ZSA9IGNvbWItPnR5cGU7CiAgIHRyZWUgZXhwciA9IE5VTExfVFJFRTsKICAg dW5zaWduZWQgaTsKICAgd2lkZXN0X2ludCBvZmYsIHNnbjsKLSAgdHJlZSB0 eXBlMSA9IHR5cGU7Ci0gIGlmIChQT0lOVEVSX1RZUEVfUCAodHlwZSkpCi0g ICAgdHlwZTEgPSBzaXpldHlwZTsKKyAgdHJlZSB0eXBlID0gUE9JTlRFUl9U WVBFX1AgKGNvbWItPnR5cGUpID8gc2l6ZXR5cGUgOiBjb21iLT50eXBlOwog CiAgIGdjY19hc3NlcnQgKGNvbWItPm4gPT0gTUFYX0FGRl9FTFRTIHx8IGNv bWItPnJlc3QgPT0gTlVMTF9UUkVFKTsKIAogICBmb3IgKGkgPSAwOyBpIDwg Y29tYi0+bjsgaSsrKQotICAgIGV4cHIgPSBhZGRfZWx0X3RvX3RyZWUgKGV4 cHIsIHR5cGUsIGNvbWItPmVsdHNbaV0udmFsLCBjb21iLT5lbHRzW2ldLmNv ZWYsCi0JCQkgICAgY29tYik7CisgICAgZXhwciA9IGFkZF9lbHRfdG9fdHJl ZSAoZXhwciwgY29tYi0+ZWx0c1tpXS52YWwsIGNvbWItPmVsdHNbaV0uY29l ZiwgY29tYik7CiAKICAgaWYgKGNvbWItPnJlc3QpCi0gICAgZXhwciA9IGFk ZF9lbHRfdG9fdHJlZSAoZXhwciwgdHlwZSwgY29tYi0+cmVzdCwgMSwgY29t Yik7CisgICAgZXhwciA9IGFkZF9lbHRfdG9fdHJlZSAoZXhwciwgY29tYi0+ cmVzdCwgMSwgY29tYik7CiAKICAgLyogRW5zdXJlIHRoYXQgd2UgZ2V0IHgg LSAxLCBub3QgeCArICgtMSkgb3IgeCArIDB4ZmYuLmYgaWYgeCBpcwogICAg ICB1bnNpZ25lZC4gICovCkBAIC00ODQsOCArNDczLDcgQEAgYWZmX2NvbWJp bmF0aW9uX3RvX3RyZWUgKGFmZl90cmVlICpjb21iKQogICAgICAgb2ZmID0g Y29tYi0+b2Zmc2V0OwogICAgICAgc2duID0gMTsKICAgICB9Ci0gIHJldHVy biBhZGRfZWx0X3RvX3RyZWUgKGV4cHIsIHR5cGUsIHdpZGVfaW50X3RvX3Ry ZWUgKHR5cGUxLCBvZmYpLCBzZ24sCi0JCQkgIGNvbWIpOworICByZXR1cm4g YWRkX2VsdF90b190cmVlIChleHByLCB3aWRlX2ludF90b190cmVlICh0eXBl LCBvZmYpLCBzZ24sIGNvbWIpOwogfQogCiAvKiBDb3BpZXMgdGhlIHRyZWUg ZWxlbWVudHMgb2YgQ09NQiB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZSBub3Qg c2hhcmVkLiAgKi8KZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1sb29wLWl2 b3B0cy5jIGIvZ2NjL3RyZWUtc3NhLWxvb3AtaXZvcHRzLmMKaW5kZXggOGRj NjU4ODEuLmZhOTkzYWIgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXNzYS1sb29w LWl2b3B0cy5jCisrKyBiL2djYy90cmVlLXNzYS1sb29wLWl2b3B0cy5jCkBA IC0xMTcxLDcgKzExNzEsNyBAQCBhbGxvY19pdiAoc3RydWN0IGl2b3B0c19k YXRhICpkYXRhLCB0cmVlIGJhc2UsIHRyZWUgc3RlcCwKICAgICAgIHx8IGNv bnRhaW5fY29tcGxleF9hZGRyX2V4cHIgKGV4cHIpKQogICAgIHsKICAgICAg IGFmZl90cmVlIGNvbWI7Ci0gICAgICB0cmVlX3RvX2FmZl9jb21iaW5hdGlv biAoZXhwciwgVFJFRV9UWVBFIChiYXNlKSwgJmNvbWIpOworICAgICAgdHJl ZV90b19hZmZfY29tYmluYXRpb24gKGV4cHIsIFRSRUVfVFlQRSAoZXhwciks ICZjb21iKTsKICAgICAgIGJhc2UgPSBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQ RSAoYmFzZSksIGFmZl9jb21iaW5hdGlvbl90b190cmVlICgmY29tYikpOwog ICAgIH0KIApAQCAtMzc4Nyw2ICszNzg3LDEyIEBAIGdldF9jb21wdXRhdGlv bl9hZmYgKHN0cnVjdCBsb29wICpsb29wLAogICAgICBvdmVyZmxvd3MsIGFz IGFsbCB0aGUgYXJpdGhtZXRpY3Mgd2lsbCBpbiB0aGUgZW5kIGJlIHBlcmZv cm1lZCBpbiBVVVRZUEUKICAgICAgYW55d2F5LiAgKi8KICAgY29tbW9uX3R5 cGUgPSBkZXRlcm1pbmVfY29tbW9uX3dpZGVyX3R5cGUgKCZ1YmFzZSwgJmNi YXNlKTsKKyAgLyogV2UgZG9uJ3QgbmVlZCB0byBjb21wdXRlIGluIFVVVFlQ RSBpZiB0aGlzIGlzIHRoZSBvcmlnaW5hbCBjYW5kaWRhdGUsCisgICAgIGFu ZCBjYW5kaWRhdGUvdXNlIGhhdmUgdGhlIHNhbWUgKHBvaW50ZXIpIHR5cGUu ICAqLworICBpZiAoY3R5cGUgPT0gdXR5cGUgJiYgY29tbW9uX3R5cGUgPT0g dXR5cGUKKyAgICAgICYmIFBPSU5URVJfVFlQRV9QICh1dHlwZSkgJiYgVFlQ RV9VTlNJR05FRCAodXR5cGUpCisgICAgICAmJiBjYW5kLT5wb3MgPT0gSVBf T1JJR0lOQUwgJiYgY2FuZC0+aW5jcmVtZW50ZWRfYXQgPT0gdXNlLT5zdG10 KQorICAgIHV1dHlwZSA9IHV0eXBlOwogCiAgIC8qIHVzZSA9IHViYXNlIC0g cmF0aW8gKiBjYmFzZSArIHJhdGlvICogdmFyLiAgKi8KICAgdHJlZV90b19h ZmZfY29tYmluYXRpb24gKHViYXNlLCBjb21tb25fdHlwZSwgYWZmKTsK --f403045f8a9429cfb1054bf17c7e--