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.133.124]) by sourceware.org (Postfix) with ESMTP id 51CD03850427 for ; Tue, 27 Jul 2021 09:59:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 51CD03850427 Received: from mail-lf1-f72.google.com (mail-lf1-f72.google.com [209.85.167.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-410-JznA_mEJNtm00lb01ihERg-1; Tue, 27 Jul 2021 05:59:09 -0400 X-MC-Unique: JznA_mEJNtm00lb01ihERg-1 Received: by mail-lf1-f72.google.com with SMTP id x4-20020ac248840000b0290329474fcc99so5510540lfc.0 for ; Tue, 27 Jul 2021 02:59:09 -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=nbIusj4bpUoZSdWL+/H8y/QxlXoOSDfxrzBLd9rFt14=; b=tOHxhuyerJ6HNOCDBFqnM86HXSIrpYlCF5pK4UHKWNtQeYWODWWG0nujIzuquwhntt beHfo958b3nBqWsS+bV3kFQhPJSgn1bPkind7jjkjbUZVhbvPR11GsasNlPvRaw4nugd eOJSRfng1jqdIvX/fSOfpi4diZfJzXNK0w/+NXmnF+Yj01lKDge5fMVrmVNfn0TcF3HU tHe4b8joon+UKm/s3UyXLJk+ZpIVtQfj1EZm/LtIOVasZ4Xs7nEgFMwvHLN5gJSrFKkh pZ5UtAiunyzirxYwJHGQNKmlenlCRoYyWutWCZgMeCqiT888EY8uP8iky9amcOORu5p3 +UEw== X-Gm-Message-State: AOAM531zaA4UxcZgEmIs3KsK4ml76pD8n/sm3HChU4Jny2AqyZatSbZc vs8ezeThCMSuPgCIy2pD44ZfGfzOYN6tyt+zAoMbs8ET2Q2Hn7ZwlwSGV5S3XoNKH1dhX2NBRo4 nPKvJ05HAejDzD7wLHc8AjgREUvDcqFi34g== X-Received: by 2002:a19:fc03:: with SMTP id a3mr16225000lfi.327.1627379947802; Tue, 27 Jul 2021 02:59:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyZQAcBNzZwPsO0o9d/D4H4vhUw30U6+vAcouPWo/gbF8tDJrNcQYWCLNAKEbllPJps88FVZ+FuJpTIUQQXbLo= X-Received: by 2002:a19:fc03:: with SMTP id a3mr16224985lfi.327.1627379947509; Tue, 27 Jul 2021 02:59:07 -0700 (PDT) MIME-Version: 1.0 References: <20210628162147.631850-1-aldyh@redhat.com> <20210628162147.631850-2-aldyh@redhat.com> <916a4bf3-a60a-29b6-d013-06135e0d25aa@redhat.com> <08fa19b4-dcde-6fe9-b4d0-fbe93b28e520@gmail.com> In-Reply-To: <08fa19b4-dcde-6fe9-b4d0-fbe93b28e520@gmail.com> From: Aldy Hernandez Date: Tue, 27 Jul 2021 11:58:56 +0200 Message-ID: Subject: Re: [PATCH 1/2] Implement basic block path solver. To: Jeff Law Cc: GCC patches , Andrew MacLeod , Richard Biener , Martin Sebor X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000afc05005c817eb1d" X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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, 27 Jul 2021 09:59:13 -0000 --000000000000afc05005c817eb1d Content-Type: text/plain; charset="UTF-8" On Mon, Jul 26, 2021 at 9:10 PM Jeff Law wrote: > > > > On 7/2/2021 2:13 AM, Aldy Hernandez wrote: > > > > > > On 7/2/21 12:20 AM, Jeff Law wrote: > >> > >> > >> On 6/28/2021 10:21 AM, Aldy Hernandez wrote: > > > >>> +// Internal construct to help facilitate debugging of solver. > >>> +#define DEBUG_SOLVER getenv("DEBUG") > >> Shouldn't this really be a property of what pass is using the solver > >> and whether or not the appropriate dump flag is on for that pass? > > > > Whoops. This was a private construct used for debugging the solver. > > I've changed it to: > > > > +#define DEBUG_SOLVER (0 && dump_file) > I would probably argue that the #define should disappear and the code > should be checking the current dump state for the current pass. If you > don't want to keep the debugging output, then remove it :-) I think > that can be handled in a follow-up patch. The debugging output is really verbose, especially because the threader will try a boatload of different paths all of which get their propagation dumped. Is there a recommended way of leaving the debugging in the code, but only enabled sporadically? Perhaps a --param ??. Or perhaps I could remove it near the end of stage 1? > >>> + edge e_in = find_edge (prev, bb); > >>> + for (size_t i = 0; i < gimple_phi_num_args (phi); ++i) > >> It's probably not important in practice, but you're going to end up > >> calling gimple_phi_num_args every iteration of this loop. It's value > >> isn't generally subject to LICM. > > > > I was just following standard practice: > Yea. I doubt we're at all consistent with that. In fact, I'd bet I'm a > serial offender. We should probably try to do better through since > we're going to get a function call every loop iteration when the value > is invariant. FIxing other instances should be considered > pre-approved. ISTM a separate patch for fix that up would be fine. No problem. Fixed in this patch (attached). > OK. I've retested on x86-64 Linux and will push because I have some follow-up patches (for the DOM threader this time :)), that depend on this. Thanks for reviewing. Aldy --000000000000afc05005c817eb1d Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Implement-basic-block-path-solver.patch" Content-Disposition: attachment; filename="0001-Implement-basic-block-path-solver.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_krlvw69j0 RnJvbSBiOWQ4MzI1MGQ2ZDJkYWM3N2RhNGY0NzIyMWE4MzBhMDEyNjE3ZGZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KRGF0 ZTogVHVlLCAxNSBKdW4gMjAyMSAxMjoyMDo0MyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEltcGxl bWVudCBiYXNpYyBibG9jayBwYXRoIHNvbHZlci4KClRoaXMgaXMgaXMgdGhlIG1haW4gYmFzaWMg YmxvY2sgcGF0aCBzb2x2ZXIgZm9yIHVzZSBpbiB0aGUgcmFuZ2VyLWJhc2VkCmJhY2t3YXJkcyB0 aHJlYWRlci4gIEdpdmVuIGEgcGF0aCBvZiBCQnMsIHRoZSBjbGFzcyBjYW4gc29sdmUgdGhlIGZp bmFsCmNvbmRpdGlvbmFsIG9yIGFueSBTU0EgbmFtZSB1c2VkIGluIGNhbGN1bGF0aW5nIHRoZSBm aW5hbCBjb25kaXRpb25hbC4KCmdjYy9DaGFuZ2VMb2c6CgogICAgICAgICogTWFrZWZpbGUuaW4g KE9CSlMpOiBBZGQgZ2ltcGxlLXJhbmdlLXBhdGguby4KCSogZ2ltcGxlLXJhbmdlLXBhdGguY2M6 IE5ldyBmaWxlLgoJKiBnaW1wbGUtcmFuZ2UtcGF0aC5oOiBOZXcgZmlsZS4KLS0tCiBnY2MvTWFr ZWZpbGUuaW4gICAgICAgICAgfCAgIDEgKwogZ2NjL2dpbXBsZS1yYW5nZS1wYXRoLmNjIHwgMzI5 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZ2NjL2dpbXBsZS1yYW5n ZS1wYXRoLmggIHwgIDg1ICsrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNDE1IGluc2VydGlv bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvZ2ltcGxlLXJhbmdlLXBhdGguY2MKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvZ2ltcGxlLXJhbmdlLXBhdGguaAoKZGlmZiAtLWdpdCBhL2djYy9N YWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgppbmRleCAxNjY2ZWY4NGQ2YS4uMjliZDRlZGI0 YjcgMTAwNjQ0Ci0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysgYi9nY2MvTWFrZWZpbGUuaW4KQEAg LTE2NTAsNiArMTY1MCw3IEBAIE9CSlMgPSBcCiAJdHJlZS1zc2EtbG9vcC5vIFwKIAl0cmVlLXNz YS1tYXRoLW9wdHMubyBcCiAJdHJlZS1zc2Etb3BlcmFuZHMubyBcCisJZ2ltcGxlLXJhbmdlLXBh dGgubyBcCiAJdHJlZS1zc2EtcGhpb3B0Lm8gXAogCXRyZWUtc3NhLXBoaXByb3AubyBcCiAJdHJl ZS1zc2EtcHJlLm8gXApkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsZS1yYW5nZS1wYXRoLmNjIGIvZ2Nj L2dpbXBsZS1yYW5nZS1wYXRoLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi5hODIyNmE2ODEwZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy9naW1wbGUtcmFuZ2UtcGF0 aC5jYwpAQCAtMCwwICsxLDMyOSBAQAorLyogQmFzaWMgYmxvY2sgcGF0aCBzb2x2ZXIuCisgICBD b3B5cmlnaHQgKEMpIDIwMjEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250 cmlidXRlZCBieSBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4uCisKK1RoaXMgZmls ZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl cgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGZv ciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxl IENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN5c3RlbS5oIgorI2luY2x1ZGUg ImNvcmV0eXBlcy5oIgorI2luY2x1ZGUgImJhY2tlbmQuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisj aW5jbHVkZSAiZ2ltcGxlLmgiCisjaW5jbHVkZSAiY2ZnYW5hbC5oIgorI2luY2x1ZGUgInZhbHVl LXJhbmdlLmgiCisjaW5jbHVkZSAiZ2ltcGxlLXJhbmdlLmgiCisjaW5jbHVkZSAidHJlZS1wcmV0 dHktcHJpbnQuaCIKKyNpbmNsdWRlICJnaW1wbGUtcmFuZ2UtcGF0aC5oIgorI2luY2x1ZGUgInNz YS5oIgorCisvLyBJbnRlcm5hbCBjb25zdHJ1Y3QgdG8gaGVscCBmYWNpbGl0YXRlIGRlYnVnZ2lu ZyBvZiBzb2x2ZXIuCisjZGVmaW5lIERFQlVHX1NPTFZFUiAoMCAmJiBkdW1wX2ZpbGUpCisKK3Bh dGhfcmFuZ2VfcXVlcnk6OnBhdGhfcmFuZ2VfcXVlcnkgKGdpbXBsZV9yYW5nZXIgJnJhbmdlcikK KyAgOiBtX3JhbmdlciAocmFuZ2VyKQoreworICBtX2NhY2hlID0gbmV3IHNzYV9nbG9iYWxfY2Fj aGU7CisgIG1faGFzX2NhY2hlX2VudHJ5ID0gQklUTUFQX0FMTE9DIChOVUxMKTsKKyAgbV9wYXRo ID0gTlVMTDsKK30KKworcGF0aF9yYW5nZV9xdWVyeTo6fnBhdGhfcmFuZ2VfcXVlcnkgKCkKK3sK KyAgQklUTUFQX0ZSRUUgKG1faGFzX2NhY2hlX2VudHJ5KTsKKyAgZGVsZXRlIG1fY2FjaGU7Cit9 CisKKy8vIE1hcmsgY2FjaGUgZW50cnkgZm9yIE5BTUUgYXMgdW51c2VkLgorCit2b2lkCitwYXRo X3JhbmdlX3F1ZXJ5OjpjbGVhcl9jYWNoZSAodHJlZSBuYW1lKQoreworICB1bnNpZ25lZCB2ID0g U1NBX05BTUVfVkVSU0lPTiAobmFtZSk7CisgIGJpdG1hcF9jbGVhcl9iaXQgKG1faGFzX2NhY2hl X2VudHJ5LCB2KTsKK30KKworLy8gSWYgTkFNRSBoYXMgYSBjYWNoZSBlbnRyeSwgcmV0dXJuIGl0 IGluIFIsIGFuZCByZXR1cm4gVFJVRS4KKworaW5saW5lIGJvb2wKK3BhdGhfcmFuZ2VfcXVlcnk6 OmdldF9jYWNoZSAoaXJhbmdlICZyLCB0cmVlIG5hbWUpCit7CisgIGlmICghZ2ltcGxlX3Jhbmdl X3NzYV9wIChuYW1lKSkKKyAgICByZXR1cm4gZ2V0X2dsb2JhbF9yYW5nZV9xdWVyeSAoKS0+cmFu Z2Vfb2ZfZXhwciAociwgbmFtZSk7CisKKyAgdW5zaWduZWQgdiA9IFNTQV9OQU1FX1ZFUlNJT04g KG5hbWUpOworICBpZiAoYml0bWFwX2JpdF9wIChtX2hhc19jYWNoZV9lbnRyeSwgdikpCisgICAg cmV0dXJuIG1fY2FjaGUtPmdldF9nbG9iYWxfcmFuZ2UgKHIsIG5hbWUpOworCisgIHJldHVybiBm YWxzZTsKK30KKworLy8gU2V0IHRoZSBjYWNoZSBlbnRyeSBmb3IgTkFNRSB0byBSLgorCit2b2lk CitwYXRoX3JhbmdlX3F1ZXJ5OjpzZXRfY2FjaGUgKGNvbnN0IGlyYW5nZSAmciwgdHJlZSBuYW1l KQoreworICB1bnNpZ25lZCB2ID0gU1NBX05BTUVfVkVSU0lPTiAobmFtZSk7CisgIGJpdG1hcF9z ZXRfYml0IChtX2hhc19jYWNoZV9lbnRyeSwgdik7CisgIG1fY2FjaGUtPnNldF9nbG9iYWxfcmFu Z2UgKG5hbWUsIHIpOworfQorCit2b2lkCitwYXRoX3JhbmdlX3F1ZXJ5OjpkdW1wIChGSUxFICpk dW1wX2ZpbGUpCit7CisgIGlmIChtX3BhdGgtPmlzX2VtcHR5ICgpKQorICAgIHJldHVybjsKKwor ICB1bnNpZ25lZCBpOworICBiaXRtYXBfaXRlcmF0b3IgYmk7CisgIGV4dGVybiB2b2lkIGR1bXBf cmFuZ2VyIChGSUxFICosIGNvbnN0IHZlYzxiYXNpY19ibG9jaz4gJik7CisKKyAgZnByaW50ZiAo ZHVtcF9maWxlLCAiUGF0aCBpczpcbiIpOworICBkdW1wX3JhbmdlciAoZHVtcF9maWxlLCAqbV9w YXRoKTsKKworICBmcHJpbnRmIChkdW1wX2ZpbGUsICJJbXBvcnRzOlxuIik7CisgIEVYRUNVVEVf SUZfU0VUX0lOX0JJVE1BUCAobV9pbXBvcnRzLCAwLCBpLCBiaSkKKyAgICB7CisgICAgICB0cmVl IG5hbWUgPSBzc2FfbmFtZSAoaSk7CisgICAgICBwcmludF9nZW5lcmljX2V4cHIgKGR1bXBfZmls ZSwgbmFtZSwgVERGX1NMSU0pOworICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiXG4iKTsKKyAg ICB9CisKKyAgbV9jYWNoZS0+ZHVtcCAoZHVtcF9maWxlKTsKK30KKwordm9pZAorcGF0aF9yYW5n ZV9xdWVyeTo6ZGVidWcgKCkKK3sKKyAgZHVtcCAoc3RkZXJyKTsKK30KKworLy8gUmV0dXJuIHRo ZSByYW5nZSBvZiBOQU1FIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggYmVpbmcgYW5hbHl6ZWQuCisK K2Jvb2wKK3BhdGhfcmFuZ2VfcXVlcnk6OnJhbmdlX29mX2V4cHIgKGlyYW5nZSAmciwgdHJlZSBu YW1lLCBnaW1wbGUgKnN0bXQpCit7CisgIGlmICghaXJhbmdlOjpzdXBwb3J0c190eXBlX3AgKFRS RUVfVFlQRSAobmFtZSkpKQorICAgIHJldHVybiBmYWxzZTsKKworICBpZiAoZ2V0X2NhY2hlIChy LCBuYW1lKSkKKyAgICByZXR1cm4gdHJ1ZTsKKworCisgIGJhc2ljX2Jsb2NrIGJiID0gc3RtdCA/ IGdpbXBsZV9iYiAoc3RtdCkgOiBleGl0X2JiICgpOworICBpZiAoc3RtdCAmJiByYW5nZV9kZWZp bmVkX2luX2Jsb2NrIChyLCBuYW1lLCBiYikpCisgICAgeworICAgICAgc2V0X2NhY2hlIChyLCBu YW1lKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICByLnNldF92YXJ5aW5nIChUUkVF X1RZUEUgKG5hbWUpKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFJldHVybiB0aGUgcmFuZ2Ug b2YgU1RNVCBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoIGJlaW5nIGFuYWx5emVkLgorLy8gQW55dGhp bmcgYnV0IHRoZSBmaW5hbCBjb25kaXRpb25hbCBpbiBhIEJCIHdpbGwgcmV0dXJuIFZBUllJTkcu CisKK2Jvb2wKK3BhdGhfcmFuZ2VfcXVlcnk6OnJhbmdlX29mX3N0bXQgKGlyYW5nZSAmciwgZ2lt cGxlICpzdG10LCB0cmVlKQoreworICB0cmVlIHR5cGUgPSBnaW1wbGVfcmFuZ2VfdHlwZSAoc3Rt dCk7CisKKyAgaWYgKCFpcmFuZ2U6OnN1cHBvcnRzX3R5cGVfcCAodHlwZSkpCisgICAgcmV0dXJu IGZhbHNlOworCisgIGlmIChnaW1wbGVfY29kZSAoc3RtdCkgPT0gR0lNUExFX0NPTkQgJiYgZm9s ZF9yYW5nZSAociwgc3RtdCwgdGhpcykpCisgICAgcmV0dXJuIHRydWU7CisKKyAgci5zZXRfdmFy eWluZyAodHlwZSk7CisgIHJldHVybiB0cnVlOworfQorCisvLyBJbml0aWFsaXplIHRoZSBjdXJy ZW50IHBhdGggdG8gUEFUSC4gIFRoZSBjdXJyZW50IGJsb2NrIGlzIHNldCB0bworLy8gdGhlIGVu dHJ5IGJsb2NrIHRvIHRoZSBwYXRoLgorLy8KKy8vIE5vdGUgdGhhdCB0aGUgYmxvY2tzIGFyZSBp biByZXZlcnNlIG9yZGVyLCBzbyB0aGUgZXhpdCBibG9jayBpcworLy8gcGF0aFswXS4KKwordm9p ZAorcGF0aF9yYW5nZV9xdWVyeTo6c2V0X3BhdGggKGNvbnN0IHZlYzxiYXNpY19ibG9jaz4gJnBh dGgpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKHBhdGgubGVuZ3RoICgpID4gMSk7CisgIG1f cGF0aCA9ICZwYXRoOworICBtX3BvcyA9IG1fcGF0aC0+bGVuZ3RoICgpIC0gMTsKKyAgYml0bWFw X2NsZWFyIChtX2hhc19jYWNoZV9lbnRyeSk7Cit9CisKKy8vIFJldHVybiB0aGUgcmFuZ2Ugb2Yg dGhlIHJlc3VsdCBvZiBQSEkgaW4gUi4KKwordm9pZAorcGF0aF9yYW5nZV9xdWVyeTo6c3NhX3Jh bmdlX2luX3BoaSAoaXJhbmdlICZyLCBncGhpICpwaGkpCit7CisgIHRyZWUgbmFtZSA9IGdpbXBs ZV9waGlfcmVzdWx0IChwaGkpOworICBiYXNpY19ibG9jayBiYiA9IGdpbXBsZV9iYiAocGhpKTsK KworICAvLyBXZSBleHBlcmltZW50ZWQgd2l0aCBxdWVyeWluZyByYW5nZXIncyByYW5nZV9vbl9l bnRyeSBoZXJlLCBidXQKKyAgLy8gdGhlIHBlcmZvcm1hbmNlIHBlbmFsdHkgd2FzIHRvbyBoaWdo LCBmb3IgaGFyZGx5IGFueSBpbXByb3ZlbWVudHMuCisgIGlmIChhdF9lbnRyeSAoKSkKKyAgICB7 CisgICAgICAvLyBUcnkgZm9sZCBqdXN0IGluIGNhc2Ugd2UgY2FuIHJlc29sdmUgc2ltcGxlIHRo aW5ncyBsaWtlIFBISSA8NSg5OSksIDYoODgpPi4KKyAgICAgIGlmICghZm9sZF9yYW5nZSAociwg cGhpLCB0aGlzKSkKKwlyLnNldF92YXJ5aW5nIChUUkVFX1RZUEUgKG5hbWUpKTsKKworICAgICAg cmV0dXJuOworICAgIH0KKworICBiYXNpY19ibG9jayBwcmV2ID0gcHJldl9iYiAoKTsKKyAgZWRn ZSBlX2luID0gZmluZF9lZGdlIChwcmV2LCBiYik7CisgIHVuc2lnbmVkIG5hcmdzID0gZ2ltcGxl X3BoaV9udW1fYXJncyAocGhpKTsKKworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5hcmdzOyAr K2kpCisgICAgaWYgKGVfaW4gPT0gZ2ltcGxlX3BoaV9hcmdfZWRnZSAocGhpLCBpKSkKKyAgICAg IHsKKwl0cmVlIGFyZyA9IGdpbXBsZV9waGlfYXJnX2RlZiAocGhpLCBpKTsKKworCWlmICghZ2V0 X2NhY2hlIChyLCBhcmcpKQorCSAgci5zZXRfdmFyeWluZyAoVFJFRV9UWVBFIChuYW1lKSk7CisK KwlyZXR1cm47CisgICAgICB9CisgIGdjY191bnJlYWNoYWJsZSAoKTsKK30KKworLy8gSWYgTkFN RSBpcyBkZWZpbmVkIGluIEJCLCBzZXQgUiB0byB0aGUgcmFuZ2Ugb2YgTkFNRSwgYW5kIHJldHVy bgorLy8gVFJVRS4gIE90aGVyd2lzZSwgcmV0dXJuIEZBTFNFLgorCitib29sCitwYXRoX3Jhbmdl X3F1ZXJ5OjpyYW5nZV9kZWZpbmVkX2luX2Jsb2NrIChpcmFuZ2UgJnIsIHRyZWUgbmFtZSwgYmFz aWNfYmxvY2sgYmIpCit7CisgIGdpbXBsZSAqZGVmX3N0bXQgPSBTU0FfTkFNRV9ERUZfU1RNVCAo bmFtZSk7CisgIGJhc2ljX2Jsb2NrIGRlZl9iYiA9IGdpbXBsZV9iYiAoZGVmX3N0bXQpOworCisg IGlmIChkZWZfYmIgIT0gYmIpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGlmIChnaW1wbGVfY29k ZSAoZGVmX3N0bXQpID09IEdJTVBMRV9QSEkpCisgICAgc3NhX3JhbmdlX2luX3BoaSAociwgYXNf YTxncGhpICo+IChkZWZfc3RtdCkpOworICBlbHNlIGlmICghZm9sZF9yYW5nZSAociwgZGVmX3N0 bXQsIHRoaXMpKQorICAgIHIuc2V0X3ZhcnlpbmcgKFRSRUVfVFlQRSAobmFtZSkpOworCisgIGlm IChERUJVR19TT0xWRVIpCisgICAgeworICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAicmFuZ2Vf ZGVmaW5lZF9pbl9ibG9jayAoQkIlZCkgZm9yICIsIGJiLT5pbmRleCk7CisgICAgICBwcmludF9n ZW5lcmljX2V4cHIgKGR1bXBfZmlsZSwgbmFtZSwgVERGX1NMSU0pOworICAgICAgZnByaW50ZiAo ZHVtcF9maWxlLCAiIGlzICIpOworICAgICAgci5kdW1wIChkdW1wX2ZpbGUpOworICAgICAgZnBy aW50ZiAoZHVtcF9maWxlLCAiXG4iKTsKKyAgICB9CisgIHJldHVybiB0cnVlOworfQorCisvLyBQ cmVjb21wdXRlIHJhbmdlcyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IGJsb2NrLCBvciByYW5nZXMK Ky8vIHRoYXQgYXJlIGV4cG9ydGVkIG9uIGFuIGVkZ2UgdG8gdGhlIG5leHQgYmxvY2suCisKK3Zv aWQKK3BhdGhfcmFuZ2VfcXVlcnk6OnByZWNvbXB1dGVfcmFuZ2VzX2luX2Jsb2NrIChiYXNpY19i bG9jayBiYikKK3sKKyAgYml0bWFwX2l0ZXJhdG9yIGJpOworICBpbnRfcmFuZ2VfbWF4IHIsIGNh Y2hlZF9yYW5nZTsKKyAgdW5zaWduZWQgaTsKKworICAvLyBGb3JjZSByZWNhbGN1bGF0aW9uIG9m IGFueSBuYW1lcyBpbiB0aGUgY2FjaGUgdGhhdCBhcmUgZGVmaW5lZCBpbgorICAvLyB0aGlzIGJs b2NrLiAgVGhpcyBjYW4gaGFwcGVuIG9uIGludGVyZGVwZW5kZW50IFNTQS9waGlzIGluIGxvb3Bz LgorICBFWEVDVVRFX0lGX1NFVF9JTl9CSVRNQVAgKG1faW1wb3J0cywgMCwgaSwgYmkpCisgICAg eworICAgICAgdHJlZSBuYW1lID0gc3NhX25hbWUgKGkpOworICAgICAgZ2ltcGxlICpkZWZfc3Rt dCA9IFNTQV9OQU1FX0RFRl9TVE1UIChuYW1lKTsKKyAgICAgIGJhc2ljX2Jsb2NrIGRlZl9iYiA9 IGdpbXBsZV9iYiAoZGVmX3N0bXQpOworCisgICAgICBpZiAoZGVmX2JiID09IGJiKQorCWNsZWFy X2NhY2hlIChuYW1lKTsKKyAgICB9CisKKyAgLy8gU29sdmUgaW1wb3J0cyBkZWZpbmVkIGluIHRo aXMgYmxvY2suCisgIEVYRUNVVEVfSUZfU0VUX0lOX0JJVE1BUCAobV9pbXBvcnRzLCAwLCBpLCBi aSkKKyAgICB7CisgICAgICB0cmVlIG5hbWUgPSBzc2FfbmFtZSAoaSk7CisKKyAgICAgIGlmIChy YW5nZV9kZWZpbmVkX2luX2Jsb2NrIChyLCBuYW1lLCBiYikpCisJc2V0X2NhY2hlIChyLCBuYW1l KTsKKyAgICB9CisKKyAgaWYgKGF0X2V4aXQgKCkpCisgICAgcmV0dXJuOworCisgIC8vIFNvbHZl IGltcG9ydHMgdGhhdCBhcmUgZXhwb3J0ZWQgdG8gdGhlIG5leHQgYmxvY2suCisgIGVkZ2UgZSA9 IGZpbmRfZWRnZSAoYmIsIG5leHRfYmIgKCkpOworICBFWEVDVVRFX0lGX1NFVF9JTl9CSVRNQVAg KG1faW1wb3J0cywgMCwgaSwgYmkpCisgICAgeworICAgICAgdHJlZSBuYW1lID0gc3NhX25hbWUg KGkpOworICAgICAgZ29yaV9jb21wdXRlICZnID0gbV9yYW5nZXIuZ29yaSAoKTsKKyAgICAgIGJp dG1hcCBleHBvcnRzID0gZy5leHBvcnRzIChiYik7CisKKyAgICAgIGlmIChiaXRtYXBfYml0X3Ag KGV4cG9ydHMsIGkpKQorCXsKKwkgIGlmIChnLm91dGdvaW5nX2VkZ2VfcmFuZ2VfcCAociwgZSwg bmFtZSwgKnRoaXMpKQorCSAgICB7CisJICAgICAgaWYgKGdldF9jYWNoZSAoY2FjaGVkX3Jhbmdl LCBuYW1lKSkKKwkJci5pbnRlcnNlY3QgKGNhY2hlZF9yYW5nZSk7CisKKwkgICAgICBzZXRfY2Fj aGUgKHIsIG5hbWUpOworCSAgICAgIGlmIChERUJVR19TT0xWRVIpCisJCXsKKwkJICBmcHJpbnRm IChkdW1wX2ZpbGUsICJvdXRnb2luZ19lZGdlX3JhbmdlX3AgZm9yICIpOworCQkgIHByaW50X2dl bmVyaWNfZXhwciAoZHVtcF9maWxlLCBuYW1lLCBUREZfU0xJTSk7CisJCSAgZnByaW50ZiAoZHVt cF9maWxlLCAiIG9uIGVkZ2UgJWQtPiVkICIsCisJCQkgICBlLT5zcmMtPmluZGV4LCBlLT5kZXN0 LT5pbmRleCk7CisJCSAgZnByaW50ZiAoZHVtcF9maWxlLCAiaXMgIik7CisJCSAgci5kdW1wIChk dW1wX2ZpbGUpOworCQkgIGZwcmludGYgKGR1bXBfZmlsZSwgIlxuIik7CisJCX0KKwkgICAgfQor CX0KKyAgICB9Cit9CisKKy8vIFByZWNvbXB1dGUgdGhlIHJhbmdlcyBmb3IgSU1QT1JUUyBhbG9u ZyBQQVRILgorLy8KKy8vIElNUE9SVFMgYXJlIHRoZSBzZXQgb2YgU1NBIG5hbWVzLCBhbnkgb2Yg d2hpY2ggY291bGQgcG90ZW50aWFsbHkKKy8vIGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhlIGZpbmFs IGNvbmRpdGlvbmFsIGluIFBBVEguCisKK3ZvaWQKK3BhdGhfcmFuZ2VfcXVlcnk6OnByZWNvbXB1 dGVfcmFuZ2VzIChjb25zdCB2ZWM8YmFzaWNfYmxvY2s+ICZwYXRoLAorCQkJCSAgICAgY29uc3Qg Yml0bWFwX2hlYWQgKmltcG9ydHMpCit7CisgIHNldF9wYXRoIChwYXRoKTsKKyAgbV9pbXBvcnRz ID0gaW1wb3J0czsKKworICBpZiAoREVCVUdfU09MVkVSKQorICAgIGZwcmludGYgKGR1bXBfZmls ZSwgInBhdGhfcmFuZ2VfcXVlcnk6IHByZWNvbXB1dGVfcmFuZ2VzXG4iKTsKKworICB3aGlsZSAo MSkKKyAgICB7CisgICAgICBiYXNpY19ibG9jayBiYiA9IGN1cnJfYmIgKCk7CisKKyAgICAgIHBy ZWNvbXB1dGVfcmFuZ2VzX2luX2Jsb2NrIChiYik7CisKKyAgICAgIGlmIChhdF9leGl0ICgpKQor CWJyZWFrOworCisgICAgICBtb3ZlX25leHQgKCk7CisgICAgfQorCisgIGlmIChERUJVR19TT0xW RVIpCisgICAgZHVtcCAoZHVtcF9maWxlKTsKK30KZGlmZiAtLWdpdCBhL2djYy9naW1wbGUtcmFu Z2UtcGF0aC5oIGIvZ2NjL2dpbXBsZS1yYW5nZS1wYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjQzZjBlYzgwMjg2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL2dp bXBsZS1yYW5nZS1wYXRoLmgKQEAgLTAsMCArMSw4NSBAQAorLyogSGVhZGVyIGZpbGUgZm9yIGp1 bXAgdGhyZWFkaW5nIHBhdGggc29sdmVyLgorICAgQ29weXJpZ2h0IChDKSAyMDIxIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQWxkeSBIZXJuYW5kZXog PGFsZHloQHJlZGhhdC5jb20+LgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g Mywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBB TlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hB TlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX1RSRUVfU1NB X1RIUkVBRFNPTFZFUl9ICisjZGVmaW5lIEdDQ19UUkVFX1NTQV9USFJFQURTT0xWRVJfSAorCisv LyBUaGlzIGNsYXNzIGlzIGEgYmFzaWMgYmxvY2sgcGF0aCBzb2x2ZXIuICBHaXZlbiBhIHNldCBv ZiBCQnMKKy8vIGluZGljYXRpbmcgYSBwYXRoIHRocm91Z2ggdGhlIENGRywgcmFuZ2Vfb2ZfZXhw ciBhbmQgcmFuZ2Vfb2Zfc3RtdAorLy8gd2lsbCBjYWxjdWxhdGUgdGhlIHJhbmdlIG9mIGFuIFNT QSBvciBTVE1UIGFzIGlmIHRoZSBCQnMgaW4gdGhlCisvLyBwYXRoIHdvdWxkIGhhdmUgYmVlbiBl eGVjdXRlZCBpbiBvcmRlci4KKy8vCisvLyBPbmx5IFNTQSBuYW1lcyBwYXNzZWQgaW4gSU1QT1JU UyBhcmUgcHJlY29tcHV0ZWQsIGFuZCBjYW4gYmUKKy8vIHF1ZXJpZWQuCisvLworLy8gTm90ZSB0 aGF0IHRoZSBibG9ja3MgYXJlIGluIHJldmVyc2Ugb3JkZXIsIHRodXMgdGhlIGV4aXQgYmxvY2sg aXMKKy8vIHBhdGhbMF0uCisKK2NsYXNzIHBhdGhfcmFuZ2VfcXVlcnkgOiBwdWJsaWMgcmFuZ2Vf cXVlcnkKK3sKK3B1YmxpYzoKKyAgcGF0aF9yYW5nZV9xdWVyeSAoY2xhc3MgZ2ltcGxlX3Jhbmdl ciAmcmFuZ2VyKTsKKyAgdmlydHVhbCB+cGF0aF9yYW5nZV9xdWVyeSAoKTsKKyAgdm9pZCBwcmVj b21wdXRlX3JhbmdlcyAoY29uc3QgdmVjPGJhc2ljX2Jsb2NrPiAmcGF0aCwKKwkJCSAgY29uc3Qg Yml0bWFwX2hlYWQgKmltcG9ydHMpOworICBib29sIHJhbmdlX29mX2V4cHIgKGlyYW5nZSAmciwg dHJlZSBuYW1lLCBnaW1wbGUgKiA9IE5VTEwpIG92ZXJyaWRlOworICBib29sIHJhbmdlX29mX3N0 bXQgKGlyYW5nZSAmciwgZ2ltcGxlICosIHRyZWUgbmFtZSA9IE5VTEwpIG92ZXJyaWRlOworICB2 b2lkIGR1bXAgKEZJTEUgKik7CisgIHZvaWQgZGVidWcgKCk7CisKK3ByaXZhdGU6CisgIC8vIENh Y2hlIG1hbmlwdWxhdGlvbi4KKyAgdm9pZCBzZXRfY2FjaGUgKGNvbnN0IGlyYW5nZSAmciwgdHJl ZSBuYW1lKTsKKyAgYm9vbCBnZXRfY2FjaGUgKGlyYW5nZSAmciwgdHJlZSBuYW1lKTsKKyAgdm9p ZCBjbGVhcl9jYWNoZSAodHJlZSBuYW1lKTsKKworICAvLyBNZXRob2RzIHRvIHByZWNvbXB1dGUg cmFuZ2VzIGZvciB0aGUgZ2l2ZW4gcGF0aC4KKyAgYm9vbCByYW5nZV9kZWZpbmVkX2luX2Jsb2Nr IChpcmFuZ2UgJiwgdHJlZSBuYW1lLCBiYXNpY19ibG9jayBiYik7CisgIHZvaWQgcHJlY29tcHV0 ZV9yYW5nZXNfaW5fYmxvY2sgKGJhc2ljX2Jsb2NrIGJiKTsKKyAgdm9pZCBzc2FfcmFuZ2VfaW5f cGhpIChpcmFuZ2UgJnIsIGdwaGkgKnBoaSk7CisKKyAgLy8gUGF0aCBuYXZpZ2F0aW9uLgorICB2 b2lkIHNldF9wYXRoIChjb25zdCB2ZWM8YmFzaWNfYmxvY2s+ICYpOworICBiYXNpY19ibG9jayBl bnRyeV9iYiAoKSB7IHJldHVybiAoKm1fcGF0aClbbV9wYXRoLT5sZW5ndGggKCkgLSAxXTsgfQor ICBiYXNpY19ibG9jayBleGl0X2JiICgpICB7IHJldHVybiAoKm1fcGF0aClbMF07IH0KKyAgYmFz aWNfYmxvY2sgY3Vycl9iYiAoKSAgeyByZXR1cm4gKCptX3BhdGgpW21fcG9zXTsgfQorICBiYXNp Y19ibG9jayBwcmV2X2JiICgpICB7IHJldHVybiAoKm1fcGF0aClbbV9wb3MgKyAxXTsgfQorICBi YXNpY19ibG9jayBuZXh0X2JiICgpICB7IHJldHVybiAoKm1fcGF0aClbbV9wb3MgLSAxXTsgfQor ICBib29sIGF0X2VudHJ5ICgpCSAgeyByZXR1cm4gbV9wb3MgPT0gbV9wYXRoLT5sZW5ndGggKCkg LSAxOyB9CisgIGJvb2wgYXRfZXhpdCAoKQkgIHsgcmV0dXJuIG1fcG9zID09IDA7IH0KKyAgdm9p ZCBtb3ZlX25leHQgKCkJICB7IC0tbV9wb3M7IH0KKworICAvLyBSYW5nZSBjYWNoZSBmb3IgU1NB IG5hbWVzLgorICBzc2FfZ2xvYmFsX2NhY2hlICptX2NhY2hlOworCisgIC8vIFNldCBmb3IgZWFj aCBTU0EgdGhhdCBoYXMgYW4gYWN0aXZlIGVudHJ5IGluIHRoZSBjYWNoZS4KKyAgYml0bWFwIG1f aGFzX2NhY2hlX2VudHJ5OworCisgIC8vIFBhdGggYmVpbmcgYW5hbHl6ZWQuCisgIGNvbnN0IHZl YzxiYXNpY19ibG9jaz4gKm1fcGF0aDsKKworICAvLyBDdXJyZW50IHBhdGggcG9zaXRpb24uCisg IHVuc2lnbmVkIG1fcG9zOworCisgIGNvbnN0IGJpdG1hcF9oZWFkICptX2ltcG9ydHM7CisgIGdp bXBsZV9yYW5nZXIgJm1fcmFuZ2VyOworfTsKKworI2VuZGlmIC8vIEdDQ19UUkVFX1NTQV9USFJF QURTT0xWRVJfSAotLSAKMi4zMS4xCgo= --000000000000afc05005c817eb1d--