From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id EA2DA3858D32 for ; Mon, 17 Oct 2022 17:53:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org EA2DA3858D32 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1666029214; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=JafgUbdDCwtpsyRQGuUVHjp1x9gcnxG0aPtcvua0/is=; b=Su0m5pOg0g7OU6hIIFuFq1pULZBKXJyN6aATh8G0g5vkBYcVcw36DwOpl2/rZ/N7XECIUY eC7zo/K+SSxx5gFA8sxYYb5DEvfyR2TYmB0Kdsf4JzJ0fy/Jd3PcIlyYeM7UIU9M1IMXFY seI4kDtSMkW1+h1jIGKULBxAoxcBE2U= Received: from mail-il1-f197.google.com (mail-il1-f197.google.com [209.85.166.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-53-aYyr4W3pP5KR8_e9hAje_Q-1; Mon, 17 Oct 2022 13:53:23 -0400 X-MC-Unique: aYyr4W3pP5KR8_e9hAje_Q-1 Received: by mail-il1-f197.google.com with SMTP id h8-20020a056e021b8800b002f9c2e31750so9564050ili.1 for ; Mon, 17 Oct 2022 10:53:23 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=6lEaaae/LTXLbZ74hLszb1jqWsm0ifaIoVi8mhrAEzY=; b=u5ktThorwC4mLJikmWO/LGTx8NTuKrxcZGcPmi6nCOJv361dkTBXyi4miqxBR1w0Zc NKm4CoT4NwKnKVIM7CC2IllEd79LbQQaBt9Ig1ILL/a/AMnN2ZuACsrgrsSYP2xN7dsU drZzY/1jAvXLCC/L2FqWRTY2Fs646ElUkFZ9/cmqfqsSUt4M+p430xJ2mQwfw3HMzsIh 3TZaK9Vro1nHLCA0a2SQgpPxbaieH9hNYi0WgSn0iQIpvqLIyNFy9fBhD6n7EiN9glvO 8/kcZXSoaM+zlMHdSoCfub2vKdp2b7HNNHGi2vc1LNdU186DwhfW9pSJGxcvx61sySg7 numA== X-Gm-Message-State: ACrzQf28o1JNuFdRs5R1+1UPODCL0O4syJH5LfXfP7xvb76hNzD3qk1f fHWkF1zPN6BZgBc69D+IE8f7n2Z9iViM4nMBsS2XONVohlHOBD8m4pkl5ISy1QHMSbjeBjssjqt o8KJtS5zjlzyEycZvvQ== X-Received: by 2002:a05:6638:44b:b0:363:aec3:10a7 with SMTP id r11-20020a056638044b00b00363aec310a7mr6184155jap.195.1666029202887; Mon, 17 Oct 2022 10:53:22 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5A6LTpc+yl3ELDXwOgA+o6Xe+YOE5Y9vd/OfN+cy8UqBlzQqqFsXphAQVfV3yybHUR3SBuQg== X-Received: by 2002:a05:6638:44b:b0:363:aec3:10a7 with SMTP id r11-20020a056638044b00b00363aec310a7mr6184144jap.195.1666029202560; Mon, 17 Oct 2022 10:53:22 -0700 (PDT) Received: from ?IPV6:2607:fea8:a263:f600::50d4? ([2607:fea8:a263:f600::50d4]) by smtp.gmail.com with ESMTPSA id e3-20020a022103000000b00363c68aa348sm162682jaa.72.2022.10.17.10.53.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 17 Oct 2022 10:53:21 -0700 (PDT) Message-ID: <796057cc-9882-4c63-bee3-889bbcf481b9@redhat.com> Date: Mon, 17 Oct 2022 13:53:20 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.1 Subject: Re: [PATCH] middle-end IFN_ASSUME support [PR106654] To: Jakub Jelinek Cc: Richard Biener , Jan Hubicka , Aldy Hernandez , gcc-patches@gcc.gnu.org References: <244e087a-8680-9c21-0774-c7b6621e2eda@redhat.com> From: Andrew MacLeod In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------c4iFrSXvuHs4dub0R5FP911K" Content-Language: en-US X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,HTML_MESSAGE,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------c4iFrSXvuHs4dub0R5FP911K Content-Type: multipart/alternative; boundary="------------0VmNBQRSzYyo0ly4gsNOJKtE" --------------0VmNBQRSzYyo0ly4gsNOJKtE Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit > The assume function can have many arguments (one is created for each > automatic var referenced or set by the condition), so it would be nice to > track all of them rather than just hardcoding the first. And, the argument > doesn't necessarily have to be a scalar, so perhaps later on we could derive > ranges even for structure members etc. if needed. Or just handle > assume_function in IPA-SRA somehow at least. > > The C++23 paper mentions > [[assume(size > 0)]]; > [[assume(size % 32 == 0)]]; > [[assume(std::isfinite(data[i]))]]; > [[assume(*pn >= 1)]]; > [[assume(i == 42)]]; > [[assume(++i == 43)]]; > [[assume((std::cin >> i, i == 42))]]; > [[assume(++almost_last == last)]]; > among other things, the first and fifth are already handled the > if (!cond) __builtin_unreachable (); way and so work even without this > patch, the (std::cin >> i, i == 42) case is not worth bothering for now > and the rest would be single block assumptions that can be handled easily > (except the last one which would have record type arguments and so we'd need > SRA). > > Jakub I put together an initial prototype, attached is the 2 patches so far. I applied this on top of one of your sets of patches to try it out.     The first patch has the initial simple version, and the second patch hacks VRP to add a loop over all the ssa-names in the function and show what assume_range_p would  return for them. First, I added another routine to ranger: *bool gimple_ranger::assume_range_p (vrange &r, tree name)* This is the routine that is called to determine what the range of NAME is at the end of the function if the function returns [1,1]. It is painfully simple, only working on names in the definition chain of the return variable. It returns TRUE if it finds a non-varying result.   I will next expand on this to look back in the CFG and be more flexible. To apply any assumed values, I added a routine to be called *bool query_assume_call (vrange &r, tree assume_id, tree name);* This routine would be what is called to lookup if there is any range associated with NAME in the assume function ASSUME_ID.    I hacked one up to return [42, 42] for any integer query just for POC.  You'd need to supply this routine somewhere instead. As the ASSUME function has no defs, we can't produce results for the parameters in normal ways, so I leverage the inferred range code.  When doing a stmt walk, when VRP is done processing a stmt, it applies any side effects of the statement going forward. The gimple_inferred_range constructor now also looks for assume calls, and calls query_assume_call () on each argument, and if it gets back TRUE, applies an inferred range record for that range at that stmt.  (This also means those ASSUME ranges will only show up in a VRP walk.) These seems like it might be functional enough for you to experiment with. For the simple int bar (int x) {   [[assume (++x == 43)]];   return x; } The VRP hack for ther assume function shows : for an assume function, x_2(D) would have a range of [irange] int [42, 42] NONZERO 0x2a. I also tried it for bool foo1 (int x, int y) { return x < 10 || x > 20 || x == 12; } or an assume function, x_5(D) would have a range of [irange] int [-INF, 9][12, 12][21, +INF] bool foo2 (int x, int y) { return (x >= 10 && x <= 20) || x == 2; } for an assume function, x_5(D) would have a range of [irange] int [2, 2][10, 20] NONZERO 0x1f for: int bar (int x) {   [[assume (++x == 43)]];   return x; } As for propagating assumed values, the hacked up version returning 42 shows it propagates into the return: query_assume_call injection _Z3bari._assume.0 assume inferred range of x_1(D) to [irange] int [42, 42] NONZERO 0x2a int bar (int x) {   :   .ASSUME (_Z3bari._assume.0, x_1(D));   return 42; } So in principle, I think theres enough infrastructure there to get going.  You can query parameter ranges by creating a ranger, and querying the parameters via *assume_range_p () *.  You can do that anywhere, as the hack I put in vrp shows, it creates a new ranger, simply queries each SSA_NAME, then disposes of the ranger before invoking VRP on a fresh ranger.  The you just wire up a proper *query_assume_call(*) to return those ranges. Thats the basic APi to deal with... call one function, supply another.  Does this model seem like it would work OK for you?  Or do we need to tweak it? I am planning to extend assume_range_p to handle other basic blocks, as well as pick up a few of the extra things that outgoing_edge_range_p does. Andrew PS. It also seems to me that the assume_range_p() infrastructure may have some other uses when it comes to inlining or LTO or IPA.    This particular version works with a return value of [1,1], but that value is manually supplied to GORI by the routine.  If any other pass has some reason to know that the return value was within a certain range, we could use that and query what the incoming ranges of any parameter might have to be. Just a thought. --------------0VmNBQRSzYyo0ly4gsNOJKtE-- --------------c4iFrSXvuHs4dub0R5FP911K Content-Type: text/x-patch; charset=UTF-8; name="0002-Inferred-support-of-ASSUME.patch" Content-Disposition: attachment; filename="0002-Inferred-support-of-ASSUME.patch" Content-Transfer-Encoding: base64 RnJvbSAwNjg5ZmE1ODdlZDg3MGU4ODZlYzVkNmEwNDA0YmEyMDc3MWI5M2Mz IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgTWFjTGVv ZCA8YW1hY2xlb2RAcmVkaGF0LmNvbT4KRGF0ZTogTW9uLCAxNyBPY3QgMjAy MiAxMDoyMzo1NSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggMi8zXSBJbmZlcnJl ZCBzdXBwb3J0IG9mIEFTU1VNRQoKLS0tCiBnY2MvZ2ltcGxlLXJhbmdlLWdv cmkuaCAgIHwgIDYgKystLS0KIGdjYy9naW1wbGUtcmFuZ2UtaW5mZXIuY2Mg fCA1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IGdjYy9naW1wbGUtcmFuZ2UuY2MgICAgICAgfCA0OCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiBnY2MvZ2ltcGxlLXJhbmdlLmgg ICAgICAgIHwgIDEgKwogNCBmaWxlcyBjaGFuZ2VkLCAxMDIgaW5zZXJ0aW9u cygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxl LXJhbmdlLWdvcmkuaCBiL2djYy9naW1wbGUtcmFuZ2UtZ29yaS5oCmluZGV4 IGM3YTMyMTYyYTFiLi42Y2M1MzNiNThiMiAxMDA2NDQKLS0tIGEvZ2NjL2dp bXBsZS1yYW5nZS1nb3JpLmgKKysrIGIvZ2NjL2dpbXBsZS1yYW5nZS1nb3Jp LmgKQEAgLTE2NSwxNSArMTY1LDE1IEBAIHB1YmxpYzoKICAgYm9vbCBoYXNf ZWRnZV9yYW5nZV9wICh0cmVlIG5hbWUsIGJhc2ljX2Jsb2NrIGJiID0gTlVM TCk7CiAgIGJvb2wgaGFzX2VkZ2VfcmFuZ2VfcCAodHJlZSBuYW1lLCBlZGdl IGUpOwogICB2b2lkIGR1bXAgKEZJTEUgKmYpOworICBib29sIGNvbXB1dGVf b3BlcmFuZF9yYW5nZSAodnJhbmdlICZyLCBnaW1wbGUgKnN0bXQsIGNvbnN0 IHZyYW5nZSAmbGhzLAorCQkJICAgICAgdHJlZSBuYW1lLCBjbGFzcyBmdXJf c291cmNlICZzcmMsCisJCQkgICAgICB2YWx1ZV9yZWxhdGlvbiAqcmVsID0g TlVMTCk7CiBwcml2YXRlOgogICBib29sIHJlZmluZV91c2luZ19yZWxhdGlv biAodHJlZSBvcDEsIHZyYW5nZSAmb3AxX3JhbmdlLAogCQkJICAgICAgdHJl ZSBvcDIsIHZyYW5nZSAmb3AyX3JhbmdlLAogCQkJICAgICAgZnVyX3NvdXJj ZSAmc3JjLCByZWxhdGlvbl9raW5kIGspOwogICBib29sIG1heV9yZWNvbXB1 dGVfcCAodHJlZSBuYW1lLCBlZGdlIGUpOwogICBib29sIG1heV9yZWNvbXB1 dGVfcCAodHJlZSBuYW1lLCBiYXNpY19ibG9jayBiYiA9IE5VTEwpOwotICBi b29sIGNvbXB1dGVfb3BlcmFuZF9yYW5nZSAodnJhbmdlICZyLCBnaW1wbGUg KnN0bXQsIGNvbnN0IHZyYW5nZSAmbGhzLAotCQkJICAgICAgdHJlZSBuYW1l LCBjbGFzcyBmdXJfc291cmNlICZzcmMsCi0JCQkgICAgICB2YWx1ZV9yZWxh dGlvbiAqcmVsID0gTlVMTCk7CiAgIGJvb2wgY29tcHV0ZV9vcGVyYW5kX3Jh bmdlX3N3aXRjaCAodnJhbmdlICZyLCBnc3dpdGNoICpzLCBjb25zdCB2cmFu Z2UgJmxocywKIAkJCQkgICAgIHRyZWUgbmFtZSwgZnVyX3NvdXJjZSAmc3Jj KTsKICAgYm9vbCBjb21wdXRlX29wZXJhbmQxX3JhbmdlICh2cmFuZ2UgJnIs IGdpbXBsZV9yYW5nZV9vcF9oYW5kbGVyICZoYW5kbGVyLApkaWZmIC0tZ2l0 IGEvZ2NjL2dpbXBsZS1yYW5nZS1pbmZlci5jYyBiL2djYy9naW1wbGUtcmFu Z2UtaW5mZXIuY2MKaW5kZXggZjBkNjZkMDQ3YTYuLjQ2YTc4MWM3ODI2IDEw MDY0NAotLS0gYS9nY2MvZ2ltcGxlLXJhbmdlLWluZmVyLmNjCisrKyBiL2dj Yy9naW1wbGUtcmFuZ2UtaW5mZXIuY2MKQEAgLTM2LDYgKzM2LDI5IEBAIGFs b25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qg c2VlCiAjaW5jbHVkZSAiZ2ltcGxlLXdhbGsuaCIKICNpbmNsdWRlICJjZmdh bmFsLmgiCiAKKworLy8gVGhpcyByb3V0aW5lIHNob3VsZCBiZSBwcm92aWRl ZCB0byBwcm9wZXJseSBsb29rIHVwIGFueQorLy8gdmFsdWVzIG9mIE5BTUUg dGhhdCBoYXMgYmVlbiBkZXRlcm1pbmVkIHRvIGhhdmUgYSB2YWx1ZSBzcGVj aWZpZWQgYnkKKy8vIHRoZSBmdW5jdGlvbiBBU1NVTUVfSUQuICAgIFJldHVy biBUUlVFIGlmIGl0IGhhcyBhIHZhbHVlIGFuZCBpcyBOT1QgVkFSWUlORy4K KworLy8gR2l2ZW4gYW4gQVNTVU1FX0lEIG5hbWUsIHJldHVybiBhbnkgcmFu Z2UgZXZhbHVhdGVkIGZvciBOQU1FLgorCitib29sCitxdWVyeV9hc3N1bWVf Y2FsbCAodnJhbmdlICZyLCB0cmVlIGFzc3VtZV9pZCwgdHJlZSBuYW1lKQor eworICBpZiAoZHVtcF9maWxlKQorICAgIGZwcmludGYgKGR1bXBfZmlsZSwg InF1ZXJ5X2Fzc3VtZV9jYWxsIGluamVjdGlvblxuIik7CisgIGlmIChhc3N1 bWVfaWQgIT0gTlVMTF9UUkVFICYmIGlyYW5nZTo6c3VwcG9ydHNfcCAoVFJF RV9UWVBFIChuYW1lKSkpCisgICAgeworICAgICAgaW50X3JhbmdlPDI+IGYg KGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobmFtZSksIDQyKSwKKwkJICAg ICAgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChuYW1lKSwgNDIpKTsKKyAg ICAgIHIgPSBmOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICByZXR1 cm4gZmFsc2U7Cit9CisKKwogLy8gQWRhcHRlZCBmcm9tIGluZmVyX25vbm51 bGxfcmFuZ2VfYnlfZGVyZWZlcmVuY2UgYW5kIGNoZWNrX2xvYWRzdG9yZQog Ly8gdG8gcHJvY2VzcyBub25udWxsIHNzYV9uYW1lIE9QIGluIFMuICBEQVRB IGNvbnRhaW5zIGEgcG9pbnRlciB0byBhCiAvLyBzdG10IHJhbmdlIGluZmVy ZW5jZSBpbnN0YW5jZS4KQEAgLTExMSw2ICsxMzQsMzMgQEAgZ2ltcGxlX2lu ZmVyX3JhbmdlOjpnaW1wbGVfaW5mZXJfcmFuZ2UgKGdpbXBsZSAqcykKICAg ICAgIC8vIEZhbGx0aHJ1IGFuZCB3YWxrIGxvYWQvc3RvcmUgb3BzIG5vdy4K ICAgICB9CiAKKyAgaWYgKGlzX2E8Z2NhbGwgKj4gKHMpICYmIGdpbXBsZV9j YWxsX2ludGVybmFsX3AgKHMpCisgICAgICAmJiBnaW1wbGVfY2FsbF9pbnRl cm5hbF9mbiAocykgPT0gSUZOX0FTU1VNRSkKKyAgICB7CisgICAgICB0cmVl IGFzc3VtZV9pZCA9IGdpbXBsZV9jYWxsX2FyZyAocywgMCk7CisgICAgICBm b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZ2ltcGxlX2NhbGxfbnVtX2FyZ3Mg KHMpOyBpKyspCisJeworCSAgdHJlZSBvcCA9IGdpbXBsZV9jYWxsX2FyZyAo cywgaSk7CisJICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKG9wKTsKKwkgIGlm IChnaW1wbGVfcmFuZ2Vfc3NhX3AgKG9wKSAmJiBWYWx1ZV9SYW5nZTo6c3Vw cG9ydHNfdHlwZV9wICh0eXBlKSkKKwkgICAgeworCSAgICAgIFZhbHVlX1Jh bmdlIGFzc3VtZV9yYW5nZSAodHlwZSk7CisJICAgICAgaWYgKHF1ZXJ5X2Fz c3VtZV9jYWxsIChhc3N1bWVfcmFuZ2UsIGFzc3VtZV9pZCwgb3ApKQorCQl7 CisJCSAgYWRkX3JhbmdlIChvcCwgYXNzdW1lX3JhbmdlKTsKKwkJICBpZiAo ZHVtcF9maWxlKQorCQkgICAgeworCQkgICAgICBwcmludF9nZW5lcmljX2V4 cHIgKGR1bXBfZmlsZSwgYXNzdW1lX2lkLCBUREZfU0xJTSk7CisJCSAgICAg IGZwcmludGYgKGR1bXBfZmlsZSwgIiBhc3N1bWUgaW5mZXJyZWQgcmFuZ2Ug b2YgIik7CisJCSAgICAgIHByaW50X2dlbmVyaWNfZXhwciAoZHVtcF9maWxl LCBvcCwgVERGX1NMSU0pOworCQkgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUs ICIgdG8gIik7CisJCSAgICAgIGFzc3VtZV9yYW5nZS5kdW1wIChkdW1wX2Zp bGUpOworCQkgICAgICBmcHV0YyAoJ1xuJywgZHVtcF9maWxlKTsKKwkJICAg IH0KKwkJfQorCSAgICB9CisJfQorICAgIH0KICAgLy8gTG9vayBmb3IgcG9z c2libGUgbm9uLW51bGwgdmFsdWVzLgogICBpZiAoZmxhZ19kZWxldGVfbnVs bF9wb2ludGVyX2NoZWNrcyAmJiBnaW1wbGVfY29kZSAocykgIT0gR0lNUExF X0FTTQogICAgICAgJiYgIWdpbXBsZV9jbG9iYmVyX3AgKHMpKQpkaWZmIC0t Z2l0IGEvZ2NjL2dpbXBsZS1yYW5nZS5jYyBiL2djYy9naW1wbGUtcmFuZ2Uu Y2MKaW5kZXggZDY3ZDY0OTljNzguLmY5ZDZiNzNlNGU4IDEwMDY0NAotLS0g YS9nY2MvZ2ltcGxlLXJhbmdlLmNjCisrKyBiL2djYy9naW1wbGUtcmFuZ2Uu Y2MKQEAgLTQ4Myw2ICs0ODMsNTQgQEAgZ2ltcGxlX3Jhbmdlcjo6cmVnaXN0 ZXJfaW5mZXJyZWRfcmFuZ2VzIChnaW1wbGUgKnMpCiAgIG1fY2FjaGUuYXBw bHlfaW5mZXJyZWRfcmFuZ2VzIChzKTsKIH0KIAorLy8gVGhpcyBmdW5jdGlv biBpcyB1c2VkIHRvIHN1cHBvcnQgdGhlIEFTU1VNRSBrZXl3b3JkLiAgSWYg dGhlIGN1cnJlbnQKKy8vIGZ1bmN0aW9uIHJldHVybnMgYW4gaW50ZWdyYWwg dmFsdWUsIGl0IHdpbGwgYXR0ZW1wdCB0byBkZXRlcm1pbmUgd2hhdAorLy8g dGhlIHJhbmdlIG9mIE5BTUUgaXMgaWYgdGhlIGZ1bmNpdG9uIHJldHVybnMg MS4gIEl0IHdpbGwgcmV0dXJuIFRSVUUKKy8vIGlmIGl0IGZpbmRzIGEgbm9u LXZhcnlpbmcgcmFuZ2UsIG90aGVyd2lzZSBGQUxTRS4KKworYm9vbAorZ2lt cGxlX3Jhbmdlcjo6YXNzdW1lX3JhbmdlX3AgKHZyYW5nZSAmciwgdHJlZSBu YW1lKQoreworICBib29sIHJlc3VsdF9wID0gZmFsc2U7CisgIGVkZ2UgZTsK KyAgZWRnZV9pdGVyYXRvciBlaTsKKyAgYmFzaWNfYmxvY2sgZXhpdF9iYiA9 IEVYSVRfQkxPQ0tfUFRSX0ZPUl9GTiAoY2Z1bik7CisgIFZhbHVlX1Jhbmdl IHRtcCAoVFJFRV9UWVBFIChuYW1lKSk7CisgIHIuc2V0X3VuZGVmaW5lZCAo KTsKKworICBGT1JfRUFDSF9FREdFIChlLCBlaSwgZXhpdF9iYi0+cHJlZHMp CisgICAgeworICAgICAgcmVzdWx0X3AgPSBmYWxzZTsKKyAgICAgIGdpbXBs ZV9zdG10X2l0ZXJhdG9yIGdzaSA9IGdzaV9sYXN0X25vbmRlYnVnX2JiIChl LT5zcmMpOworICAgICAgaWYgKGdzaV9lbmRfcCAoZ3NpKSkKKwlicmVhazsK KyAgICAgIGdpbXBsZSAqcyA9IGdzaV9zdG10IChnc2kpOworICAgICAgaWYg KCFpc19hPGdyZXR1cm4gKj4gKHMpKQorCWJyZWFrOworICAgICAgZ3JldHVy biAqZ3JldCA9IGFzX2E8Z3JldHVybiAqPiAocyk7CisgICAgICB0cmVlIG9w ID0gZ2ltcGxlX3JldHVybl9yZXR2YWwgKGdyZXQpOworICAgICAgaWYgKCFn aW1wbGVfcmFuZ2Vfc3NhX3AgKG9wKSkKKwlicmVhazsKKyAgICAgIGdpbXBs ZSAqZGVmID0gU1NBX05BTUVfREVGX1NUTVQgKG9wKTsKKyAgICAgIGlmICgh ZGVmIHx8IGdpbXBsZV9nZXRfbGhzIChkZWYpICE9IG9wKQorCWJyZWFrOwor ICAgICAgdHJlZSBsaHNfdHlwZSA9IFRSRUVfVFlQRSAob3ApOworICAgICAg aWYgKCFpcmFuZ2U6OnN1cHBvcnRzX3AgKGxoc190eXBlKSkKKwlicmVhazsK KyAgICAgIHVuc2lnbmVkIHByZWMgPSBUWVBFX1BSRUNJU0lPTiAobGhzX3R5 cGUpOworICAgICAgaW50X3JhbmdlPDI+IGxoc19yYW5nZSAobGhzX3R5cGUs IHdpOjpvbmUgKHByZWMpLCB3aTo6b25lIChwcmVjKSk7CisgICAgICBmdXJf c3RtdCBzcmMgKHMsIHRoaXMpOworICAgICAgaWYgKGdvcmkgKCkuY29tcHV0 ZV9vcGVyYW5kX3JhbmdlICh0bXAsIGRlZiwgbGhzX3JhbmdlLCBuYW1lLCBz cmMpKQorCXsKKwkgIHIudW5pb25fICh0bXApOworCSAgcmVzdWx0X3AgPSB0 cnVlOworCX0KKyAgICB9CisgIC8vIElmIGV2ZXJ5IGV4aXQgcHJlZGVjZXNz b3IgZG9lcyBub3QgY2FsY3VsYXRlIGEgdmFsdWUsIHdlIGNhbgorICAvLyBh c3N1bWUgbm90aGluZy4KKyAgcmV0dXJuIHJlc3VsdF9wICYmICFyLnZhcnlp bmdfcCAoKTsKK30KKwogLy8gVGhpcyByb3V0aW5lIHdpbGwgZXhwb3J0IHdo YXRldmVyIGdsb2JhbCByYW5nZXMgYXJlIGtub3duIHRvIEdDQwogLy8gU1NB X1JBTkdFX05BTUVfSU5GTyBhbmQgU1NBX05BTUVfUFRSX0lORk8gZmllbGRz LgogCmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLXJhbmdlLmggYi9nY2MvZ2lt cGxlLXJhbmdlLmgKaW5kZXggOGIyZmY1Njg1ZTUuLjNhNmZkZDlkYmUwIDEw MDY0NAotLS0gYS9nY2MvZ2ltcGxlLXJhbmdlLmgKKysrIGIvZ2NjL2dpbXBs ZS1yYW5nZS5oCkBAIC02MSw2ICs2MSw3IEBAIHB1YmxpYzoKICAgYXV0b19l ZGdlX2ZsYWcgbm9uX2V4ZWN1dGFibGVfZWRnZV9mbGFnOwogICBib29sIGZv bGRfc3RtdCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwgdHJlZSAoKikg KHRyZWUpKTsKICAgdm9pZCByZWdpc3Rlcl9pbmZlcnJlZF9yYW5nZXMgKGdp bXBsZSAqcyk7CisgIGJvb2wgYXNzdW1lX3JhbmdlX3AgKHZyYW5nZSAmciwg dHJlZSBuYW1lKTsKIHByb3RlY3RlZDoKICAgYm9vbCBmb2xkX3JhbmdlX2lu dGVybmFsICh2cmFuZ2UgJnIsIGdpbXBsZSAqcywgdHJlZSBuYW1lKTsKICAg dm9pZCBwcmVmaWxsX25hbWUgKHZyYW5nZSAmciwgdHJlZSBuYW1lKTsKLS0g CjIuMzcuMwoK --------------c4iFrSXvuHs4dub0R5FP911K Content-Type: text/x-patch; charset=UTF-8; name="0003-Show-output.patch" Content-Disposition: attachment; filename="0003-Show-output.patch" Content-Transfer-Encoding: base64 RnJvbSBlNTVmZWNkZGZmNTE1NDExNjM4N2U4ZjVlZDY3OGRkNGZkYTgxMTQ2 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgTWFjTGVv ZCA8YW1hY2xlb2RAcmVkaGF0LmNvbT4KRGF0ZTogTW9uLCAxNyBPY3QgMjAy MiAxMjoyODoyMSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggMy8zXSBTaG93IG91 dHB1dAoKLS0tCiBnY2MvdHJlZS12cnAuY2MgfCAyNCArKysrKysrKysrKysr KysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAyNCBpbnNlcnRpb25zKCsp CgpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdnJwLmNjIGIvZ2NjL3RyZWUtdnJw LmNjCmluZGV4IDkzNDgyZTVkMTAyLi4xMjBiOTYxMWJjNyAxMDA2NDQKLS0t IGEvZ2NjL3RyZWUtdnJwLmNjCisrKyBiL2djYy90cmVlLXZycC5jYwpAQCAt NDM0NSw2ICs0MzQ1LDMwIEBAIGV4ZWN1dGVfcmFuZ2VyX3ZycCAoc3RydWN0 IGZ1bmN0aW9uICpmdW4sIGJvb2wgd2Fybl9hcnJheV9ib3VuZHNfcCkKICAg c2Nldl9pbml0aWFsaXplICgpOwogICBjYWxjdWxhdGVfZG9taW5hbmNlX2lu Zm8gKENESV9ET01JTkFUT1JTKTsKIAorICBnaW1wbGVfcmFuZ2VyICpyMj0g ZW5hYmxlX3JhbmdlciAoZnVuKTsKKyAgZm9yICh1bnNpZ25lZCBpID0gMDsg aSA8IG51bV9zc2FfbmFtZXM7IGkrKykKKyAgICB7CisgICAgICB0cmVlIG5h bWUgPSBzc2FfbmFtZSAoaSk7CisgICAgICBpZiAoIW5hbWUgfHwgIWdpbXBs ZV9yYW5nZV9zc2FfcCAobmFtZSkpCisJY29udGludWU7CisgICAgICB0cmVl IHR5cGUgPSBUUkVFX1RZUEUgKG5hbWUpOworICAgICAgaWYgKCFWYWx1ZV9S YW5nZTo6c3VwcG9ydHNfdHlwZV9wICh0eXBlKSkKKwljb250aW51ZTsKKyAg ICAgIFZhbHVlX1JhbmdlIGFzc3VtZV9yYW5nZSAodHlwZSk7CisgICAgICBp ZiAocjItPmFzc3VtZV9yYW5nZV9wIChhc3N1bWVfcmFuZ2UsIG5hbWUpKQor CXsKKwkgIGlmIChkdW1wX2ZpbGUpCisJICAgIHsKKwkgICAgICBmcHJpbnRm IChkdW1wX2ZpbGUsICJmb3IgYW4gYXNzdW1lIGZ1bmN0aW9uLCAiKTsKKwkg ICAgICBwcmludF9nZW5lcmljX2V4cHIgKGR1bXBfZmlsZSwgbmFtZSwgVERG X1NMSU0pOworCSAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIiB3b3VsZCBo YXZlIGEgcmFuZ2Ugb2YgIik7CisJICAgICAgYXNzdW1lX3JhbmdlLmR1bXAg KGR1bXBfZmlsZSk7CisJICAgICAgZnB1dGMgKCdcbicsIGR1bXBfZmlsZSk7 CisJICAgIH0KKwl9CisgICAgfQorICBkaXNhYmxlX3JhbmdlciAoZnVuKTsK KwogICBzZXRfYWxsX2VkZ2VzX2FzX2V4ZWN1dGFibGUgKGZ1bik7CiAgIGdp bXBsZV9yYW5nZXIgKnJhbmdlciA9IGVuYWJsZV9yYW5nZXIgKGZ1biwgZmFs c2UpOwogICBydnJwX2ZvbGRlciBmb2xkZXIgKHJhbmdlcik7Ci0tIAoyLjM3 LjMKCg== --------------c4iFrSXvuHs4dub0R5FP911K--