From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 79382 invoked by alias); 22 Feb 2017 12:10:31 -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 79368 invoked by uid 89); 22 Feb 2017 12:10:30 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-23.9 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-ua0-f172.google.com Received: from mail-ua0-f172.google.com (HELO mail-ua0-f172.google.com) (209.85.217.172) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 22 Feb 2017 12:10:28 +0000 Received: by mail-ua0-f172.google.com with SMTP id g30so361129uac.3 for ; Wed, 22 Feb 2017 04:10:28 -0800 (PST) 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=VD7C/50o++3Aw1wGgtFIF1NUTxqaZ3DftOJscAblsfY=; b=SQIxfRgL0MDBIluJew8PuaBw8BtBHVKY28J31iQGGZQxsFOU2XI1jfQH3LtHDZYyMG 3frO+kCc5bb0pHXKUYK074FYnRl8nVPcZTQRi4RF9AluUyTz+qeEpS2fXELtO1hvW1f1 zscRM3wXvyEeZn6xEOUcdYkHkFp/VI/XmwYYKZTdVuLlBLWC5lJuRm+A29f3RAA70ket hrjc0aqfVsn5VE4dAfqipkT+VOm24RnAWQkqOfQTUqwak6082UAfRH+B8K+iFa5gRh3i Lp6jYSgPCr81Wi3Hlyq//yuQ4Pmo9MVfFZyyEgm2qA1YER1GDQQAXowfvsI+eKPDltJe 4fDg== X-Gm-Message-State: AMke39l8npDOGDO6BAbEVNs13Wc151qPPFziFSJZlT2dRUboG04Z1tamFK+2VayaP07JNEDDh2ZgPVU7WOT5pg== X-Received: by 10.159.56.130 with SMTP id t2mr16443067uaf.160.1487765426641; Wed, 22 Feb 2017 04:10:26 -0800 (PST) MIME-Version: 1.0 Received: by 10.103.72.157 with HTTP; Wed, 22 Feb 2017 04:10:26 -0800 (PST) In-Reply-To: <20170221154941.GA33977@kam.mff.cuni.cz> References: <20170220140210.GA2932@kam.mff.cuni.cz> <20170220151705.GA29965@kam.mff.cuni.cz> <20170220160509.GA2669@kam.mff.cuni.cz> <20170221154941.GA33977@kam.mff.cuni.cz> From: "Bin.Cheng" Date: Wed, 22 Feb 2017 12:23:00 -0000 Message-ID: Subject: Re: [PATCH PR77536]Generate correct profiling information for vectorized loop To: Jan Hubicka Cc: Richard Biener , "gcc-patches@gcc.gnu.org" , "pthaugen@linux.vnet.ibm.com" Content-Type: multipart/mixed; boundary=f403045e6484c3ebe005491d61e7 X-IsSubscribed: yes X-SW-Source: 2017-02/txt/msg01383.txt.bz2 --f403045e6484c3ebe005491d61e7 Content-Type: text/plain; charset=UTF-8 Content-length: 2863 On Tue, Feb 21, 2017 at 3:49 PM, Jan Hubicka wrote: >> 2017-02-21 Bin Cheng >> >> PR tree-optimization/77536 >> * tree-ssa-loop-manip.c (niter_for_unrolled_loop): New function. >> (tree_transform_and_unroll_loop): Use above function to compute the >> estimated niter of unrolled loop and use it when scaling profile. >> * tree-ssa-loop-manip.h niter_for_unrolled_loop(): New declaration. >> * tree-vect-loop.c (scale_profile_for_vect_loop): New function. >> (vect_transform_loop): Call above function. >> >> gcc/testsuite/ChangeLog >> 2017-02-21 Bin Cheng >> >> PR tree-optimization/77536 >> * gcc.dg/vect/pr79347.c: Revise testing string. >> @@ -1329,7 +1339,12 @@ tree_transform_and_unroll_loop (struct loop *loop, unsigned factor, >> freq_h = loop->header->frequency; >> freq_e = EDGE_FREQUENCY (loop_preheader_edge (loop)); >> if (freq_h != 0) >> - scale_loop_frequencies (loop, freq_e * (new_est_niter + 1), freq_h); >> + { >> + gcov_type scale; >> + /* This should not overflow. */ >> + scale = GCOV_COMPUTE_SCALE (freq_e * (new_est_niter + 1), freq_h); >> + scale_loop_frequencies (loop, scale, REG_BR_PROB_BASE); > > You need to use counts counts when new_est_niter is derrived from profile feedback. > This is because frequencies are capped to 10000, so if loop iterates very many times, > new_est_niter will be large, freq_h will be 10000 and freq_e will be 0. > > Also watch the case when freq_e==loop_preheader_edge (loop)->count==0 and freq_h > is non-zero. Just do MAX (freq_e, 1). This will not drop the loop body profile to 0. > >> +/* Scale profiling counters by estimation for LOOP which is vectorized >> + by factor VF. */ >> + >> +static void >> +scale_profile_for_vect_loop (struct loop *loop, unsigned vf) >> +{ >> + edge preheader = loop_preheader_edge (loop); >> + unsigned freq_h = loop->header->frequency; >> + unsigned freq_e = EDGE_FREQUENCY (preheader); >> + /* Reduce loop iterations by the vectorization factor. */ >> + gcov_type new_est_niter = niter_for_unrolled_loop (loop, vf); >> + >> + /* Use profiling count information if frequencies are zero. */ >> + if (freq_h == 0 || freq_e == 0) >> + { >> + freq_e = preheader->count; >> + freq_h = loop->header->count; >> + } >> + >> + if (freq_h != 0) >> + { >> + gcov_type scale; >> + /* This should not overflow. */ >> + scale = GCOV_COMPUTE_SCALE (freq_e * (new_est_niter + 1), freq_h); >> + scale_loop_frequencies (loop, scale, REG_BR_PROB_BASE); >> + } > > Similarly here. Use counts when they are non-zero and use MAX (freq_e, 1). > freq_e/freq_h needs to be gcov_type in that case. > > Patch is OK with these changes. Thanks a lot! Hi Honza, There is the 3rd version patch fixing mentioned issues. Is it OK? Thanks, bin --f403045e6484c3ebe005491d61e7 Content-Type: text/plain; charset=US-ASCII; name="pr77536-20170221.txt" Content-Disposition: attachment; filename="pr77536-20170221.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_izgx3zaj0 Content-length: 11322 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvcHI3OTM0 Ny5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9wcjc5MzQ3LmMKaW5k ZXggNTg2YzYzOC4uNjgyNTQyMCAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC9wcjc5MzQ3LmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC9wcjc5MzQ3LmMKQEAgLTEwLDQgKzEwLDQgQEAgdm9pZCBu KHZvaWQpCiAgICAgYVtpXSsrOwogfQogCi0vKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtdGltZXMgIkludmFsaWQgc3VtIG9mICIgMiAidmVjdCIg fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtbm90ICJJ bnZhbGlkIHN1bSBvZiAiICJ2ZWN0IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2dj Yy90cmVlLXNzYS1sb29wLW1hbmlwLmMgYi9nY2MvdHJlZS1zc2EtbG9vcC1t YW5pcC5jCmluZGV4IDQzZGYyOWMuLjIyYzgzMmEgMTAwNjQ0Ci0tLSBhL2dj Yy90cmVlLXNzYS1sb29wLW1hbmlwLmMKKysrIGIvZ2NjL3RyZWUtc3NhLWxv b3AtbWFuaXAuYwpAQCAtMTA5Myw2ICsxMDkzLDMzIEBAIHNjYWxlX2RvbWlu YXRlZF9ibG9ja3NfaW5fbG9vcCAoc3RydWN0IGxvb3AgKmxvb3AsIGJhc2lj X2Jsb2NrIGJiLAogICAgIH0KIH0KIAorLyogUmV0dXJuIGVzdGltYXRlZCBu aXRlciBmb3IgTE9PUCBhZnRlciB1bnJvbGxpbmcgYnkgRkFDVE9SIHRpbWVz LiAgKi8KKworZ2Nvdl90eXBlCituaXRlcl9mb3JfdW5yb2xsZWRfbG9vcCAo c3RydWN0IGxvb3AgKmxvb3AsIHVuc2lnbmVkIGZhY3RvcikKK3sKKyAgZ2Nj X2Fzc2VydCAoZmFjdG9yICE9IDApOworICBib29sIHByb2ZpbGVfcCA9IGZh bHNlOworICBnY292X3R5cGUgZXN0X25pdGVyID0gZXhwZWN0ZWRfbG9vcF9p dGVyYXRpb25zX3VuYm91bmRlZCAobG9vcCwgJnByb2ZpbGVfcCk7CisgIGdj b3ZfdHlwZSBuZXdfZXN0X25pdGVyID0gZXN0X25pdGVyIC8gZmFjdG9yOwor CisgIC8qIFdpdGhvdXQgcHJvZmlsZSBmZWVkYmFjaywgbG9vcHMgZm9yIHdo aWNoIHdlIGRvIG5vdCBrbm93IGEgYmV0dGVyIGVzdGltYXRlCisgICAgIGFy ZSBhc3N1bWVkIHRvIHJvbGwgMTAgdGltZXMuICBXaGVuIHdlIHVucm9sbCBz dWNoIGxvb3AsIGl0IGFwcGVhcnMgdG8KKyAgICAgcm9sbCB0b28gbGl0dGxl LCBhbmQgaXQgbWF5IGV2ZW4gc2VlbSB0byBiZSBjb2xkLiAgVG8gYXZvaWQg dGhpcywgd2UKKyAgICAgZW5zdXJlIHRoYXQgdGhlIGNyZWF0ZWQgbG9vcCBh cHBlYXJzIHRvIHJvbGwgYXQgbGVhc3QgNSB0aW1lcyAoYnV0IGF0CisgICAg IG1vc3QgYXMgbWFueSB0aW1lcyBhcyBiZWZvcmUgdW5yb2xsaW5nKS4gIERv bid0IGRvIGFkanVzdG1lbnQgaWYgcHJvZmlsZQorICAgICBmZWVkYmFjayBp cyBwcmVzZW50LiAgKi8KKyAgaWYgKG5ld19lc3Rfbml0ZXIgPCA1ICYmICFw cm9maWxlX3ApCisgICAgeworICAgICAgaWYgKGVzdF9uaXRlciA8IDUpCisJ bmV3X2VzdF9uaXRlciA9IGVzdF9uaXRlcjsKKyAgICAgIGVsc2UKKwluZXdf ZXN0X25pdGVyID0gNTsKKyAgICB9CisKKyAgcmV0dXJuIG5ld19lc3Rfbml0 ZXI7Cit9CisKIC8qIFVucm9sbCBMT09QIEZBQ1RPUiB0aW1lcy4gIERFU0Mg ZGVzY3JpYmVzIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIExPT1AuCiAgICBF WElUIGlzIHRoZSBleGl0IG9mIHRoZSBsb29wIHRvIHRoYXQgREVTQyBjb3Jy ZXNwb25kcy4KIApAQCAtMTE3MCwxMiArMTE5NywxMiBAQCB0cmVlX3RyYW5z Zm9ybV9hbmRfdW5yb2xsX2xvb3AgKHN0cnVjdCBsb29wICpsb29wLCB1bnNp Z25lZCBmYWN0b3IsCiAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGJzaTsKICAg dXNlX29wZXJhbmRfcCBvcDsKICAgYm9vbCBvazsKLSAgdW5zaWduZWQgZXN0 X25pdGVyLCBwcm9iX2VudHJ5LCBzY2FsZV91bnJvbGxlZCwgc2NhbGVfcmVz dCwgZnJlcV9lLCBmcmVxX2g7Ci0gIHVuc2lnbmVkIG5ld19lc3Rfbml0ZXIs IGksIHByb2I7CisgIHVuc2lnbmVkIGksIHByb2IsIHByb2JfZW50cnksIHNj YWxlX3Vucm9sbGVkLCBzY2FsZV9yZXN0OworICBnY292X3R5cGUgZnJlcV9l LCBmcmVxX2g7CisgIGdjb3ZfdHlwZSBuZXdfZXN0X25pdGVyID0gbml0ZXJf Zm9yX3Vucm9sbGVkX2xvb3AgKGxvb3AsIGZhY3Rvcik7CiAgIHVuc2lnbmVk IGlyciA9IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApLT5mbGFncyAmIEVE R0VfSVJSRURVQ0lCTEVfTE9PUDsKICAgYXV0b192ZWM8ZWRnZT4gdG9fcmVt b3ZlOwogCi0gIGVzdF9uaXRlciA9IGV4cGVjdGVkX2xvb3BfaXRlcmF0aW9u cyAobG9vcCk7CiAgIGRldGVybWluZV9leGl0X2NvbmRpdGlvbnMgKGxvb3As IGRlc2MsIGZhY3RvciwKIAkJCSAgICAgJmVudGVyX21haW5fY29uZCwgJmV4 aXRfYmFzZSwgJmV4aXRfc3RlcCwKIAkJCSAgICAgJmV4aXRfY21wLCAmZXhp dF9ib3VuZCk7CkBAIC0xMjA3LDIyICsxMjM0LDYgQEAgdHJlZV90cmFuc2Zv cm1fYW5kX3Vucm9sbF9sb29wIChzdHJ1Y3QgbG9vcCAqbG9vcCwgdW5zaWdu ZWQgZmFjdG9yLAogICBnY2NfYXNzZXJ0IChuZXdfbG9vcCAhPSBOVUxMKTsK ICAgdXBkYXRlX3NzYSAoVE9ET191cGRhdGVfc3NhKTsKIAotICAvKiBEZXRl cm1pbmUgdGhlIHByb2JhYmlsaXR5IG9mIHRoZSBleGl0IGVkZ2Ugb2YgdGhl IHVucm9sbGVkIGxvb3AuICAqLwotICBuZXdfZXN0X25pdGVyID0gZXN0X25p dGVyIC8gZmFjdG9yOwotCi0gIC8qIFdpdGhvdXQgcHJvZmlsZSBmZWVkYmFj aywgbG9vcHMgZm9yIHRoYXQgd2UgZG8gbm90IGtub3cgYSBiZXR0ZXIgZXN0 aW1hdGUKLSAgICAgYXJlIGFzc3VtZWQgdG8gcm9sbCAxMCB0aW1lcy4gIFdo ZW4gd2UgdW5yb2xsIHN1Y2ggbG9vcCwgaXQgYXBwZWFycyB0bwotICAgICBy b2xsIHRvbyBsaXR0bGUsIGFuZCBpdCBtYXkgZXZlbiBzZWVtIHRvIGJlIGNv bGQuICBUbyBhdm9pZCB0aGlzLCB3ZQotICAgICBlbnN1cmUgdGhhdCB0aGUg Y3JlYXRlZCBsb29wIGFwcGVhcnMgdG8gcm9sbCBhdCBsZWFzdCA1IHRpbWVz IChidXQgYXQKLSAgICAgbW9zdCBhcyBtYW55IHRpbWVzIGFzIGJlZm9yZSB1 bnJvbGxpbmcpLiAgKi8KLSAgaWYgKG5ld19lc3Rfbml0ZXIgPCA1KQotICAg IHsKLSAgICAgIGlmIChlc3Rfbml0ZXIgPCA1KQotCW5ld19lc3Rfbml0ZXIg PSBlc3Rfbml0ZXI7Ci0gICAgICBlbHNlCi0JbmV3X2VzdF9uaXRlciA9IDU7 Ci0gICAgfQotCiAgIC8qIFByZXBhcmUgdGhlIGNmZyBhbmQgdXBkYXRlIHRo ZSBwaGkgbm9kZXMuICBNb3ZlIHRoZSBsb29wIGV4aXQgdG8gdGhlCiAgICAg IGxvb3AgbGF0Y2ggKGFuZCBtYWtlIGl0cyBjb25kaXRpb24gZHVtbXksIGZv ciB0aGUgbW9tZW50KS4gICovCiAgIHJlc3QgPSBsb29wX3ByZWhlYWRlcl9l ZGdlIChuZXdfbG9vcCktPnNyYzsKQEAgLTEzMjYsMTAgKzEzMzcsMjUgQEAg dHJlZV90cmFuc2Zvcm1fYW5kX3Vucm9sbF9sb29wIChzdHJ1Y3QgbG9vcCAq bG9vcCwgdW5zaWduZWQgZmFjdG9yLAogICAvKiBFbnN1cmUgdGhhdCB0aGUg ZnJlcXVlbmNpZXMgaW4gdGhlIGxvb3AgbWF0Y2ggdGhlIG5ldyBlc3RpbWF0 ZWQKICAgICAgbnVtYmVyIG9mIGl0ZXJhdGlvbnMsIGFuZCBjaGFuZ2UgdGhl IHByb2JhYmlsaXR5IG9mIHRoZSBuZXcKICAgICAgZXhpdCBlZGdlLiAgKi8K LSAgZnJlcV9oID0gbG9vcC0+aGVhZGVyLT5mcmVxdWVuY3k7Ci0gIGZyZXFf ZSA9IEVER0VfRlJFUVVFTkNZIChsb29wX3ByZWhlYWRlcl9lZGdlIChsb29w KSk7CisKKyAgZnJlcV9oID0gbG9vcC0+aGVhZGVyLT5jb3VudDsKKyAgZnJl cV9lID0gKGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApKS0+Y291bnQ7Cisg IC8qIFVzZSBmcmVxdWVuY3kgb25seSBpZiBjb3VudHMgYXJlIHplcm8uICAq LworICBpZiAoZnJlcV9oID09IDAgJiYgZnJlcV9lID09IDApCisgICAgewor ICAgICAgZnJlcV9oID0gbG9vcC0+aGVhZGVyLT5mcmVxdWVuY3k7CisgICAg ICBmcmVxX2UgPSBFREdFX0ZSRVFVRU5DWSAobG9vcF9wcmVoZWFkZXJfZWRn ZSAobG9vcCkpOworICAgIH0KICAgaWYgKGZyZXFfaCAhPSAwKQotICAgIHNj YWxlX2xvb3BfZnJlcXVlbmNpZXMgKGxvb3AsIGZyZXFfZSAqIChuZXdfZXN0 X25pdGVyICsgMSksIGZyZXFfaCk7CisgICAgeworICAgICAgZ2Nvdl90eXBl IHNjYWxlOworICAgICAgLyogQXZvaWQgZHJvcHBpbmcgbG9vcCBib2R5IHBy b2ZpbGUgY291bnRlciB0byAwIGJlY2F1c2Ugb2YgemVybyBjb3VudAorCSBp biBsb29wJ3MgcHJlaGVhZGVyLiAgKi8KKyAgICAgIGZyZXFfZSA9IE1BWCAo ZnJlcV9lLCAxKTsKKyAgICAgIC8qIFRoaXMgc2hvdWxkIG5vdCBvdmVyZmxv dy4gICovCisgICAgICBzY2FsZSA9IEdDT1ZfQ09NUFVURV9TQ0FMRSAoZnJl cV9lICogKG5ld19lc3Rfbml0ZXIgKyAxKSwgZnJlcV9oKTsKKyAgICAgIHNj YWxlX2xvb3BfZnJlcXVlbmNpZXMgKGxvb3AsIHNjYWxlLCBSRUdfQlJfUFJP Ql9CQVNFKTsKKyAgICB9CiAKICAgZXhpdF9iYiA9IHNpbmdsZV9wcmVkIChs b29wLT5sYXRjaCk7CiAgIG5ld19leGl0ID0gZmluZF9lZGdlIChleGl0X2Ji LCByZXN0KTsKZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1sb29wLW1hbmlw LmggYi9nY2MvdHJlZS1zc2EtbG9vcC1tYW5pcC5oCmluZGV4IDFlNzUzMWYu LmExMzkwNTAgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXNzYS1sb29wLW1hbmlw LmgKKysrIGIvZ2NjL3RyZWUtc3NhLWxvb3AtbWFuaXAuaApAQCAtNDgsNiAr NDgsNyBAQCBleHRlcm4gYm9vbCBnaW1wbGVfZHVwbGljYXRlX2xvb3BfdG9f aGVhZGVyX2VkZ2UgKHN0cnVjdCBsb29wICosIGVkZ2UsCiAJCQkJCQkgIGlu dCk7CiBleHRlcm4gYm9vbCBjYW5fdW5yb2xsX2xvb3BfcCAoc3RydWN0IGxv b3AgKmxvb3AsIHVuc2lnbmVkIGZhY3RvciwKIAkJCSAgICAgICBzdHJ1Y3Qg dHJlZV9uaXRlcl9kZXNjICpuaXRlcik7CitleHRlcm4gZ2Nvdl90eXBlIG5p dGVyX2Zvcl91bnJvbGxlZF9sb29wIChzdHJ1Y3QgbG9vcCAqLCB1bnNpZ25l ZCk7CiBleHRlcm4gdm9pZCB0cmVlX3RyYW5zZm9ybV9hbmRfdW5yb2xsX2xv b3AgKHN0cnVjdCBsb29wICosIHVuc2lnbmVkLAogCQkJCQkgICAgZWRnZSwg c3RydWN0IHRyZWVfbml0ZXJfZGVzYyAqLAogCQkJCQkgICAgdHJhbnNmb3Jt X2NhbGxiYWNrLCB2b2lkICopOwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVj dC1sb29wLmMgYi9nY2MvdHJlZS12ZWN0LWxvb3AuYwppbmRleCBjNWExNjI3 Li42YmJmODE2IDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0LWxvb3AuYwor KysgYi9nY2MvdHJlZS12ZWN0LWxvb3AuYwpAQCAtNjcxOCw2ICs2NzE4LDUw IEBAIGxvb3Bfbml0ZXJzX25vX292ZXJmbG93IChsb29wX3ZlY19pbmZvIGxv b3BfdmluZm8pCiAgIHJldHVybiBmYWxzZTsKIH0KIAorLyogU2NhbGUgcHJv ZmlsaW5nIGNvdW50ZXJzIGJ5IGVzdGltYXRpb24gZm9yIExPT1Agd2hpY2gg aXMgdmVjdG9yaXplZAorICAgYnkgZmFjdG9yIFZGLiAgKi8KKworc3RhdGlj IHZvaWQKK3NjYWxlX3Byb2ZpbGVfZm9yX3ZlY3RfbG9vcCAoc3RydWN0IGxv b3AgKmxvb3AsIHVuc2lnbmVkIHZmKQoreworICBlZGdlIHByZWhlYWRlciA9 IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApOworICAvKiBSZWR1Y2UgbG9v cCBpdGVyYXRpb25zIGJ5IHRoZSB2ZWN0b3JpemF0aW9uIGZhY3Rvci4gICov CisgIGdjb3ZfdHlwZSBuZXdfZXN0X25pdGVyID0gbml0ZXJfZm9yX3Vucm9s bGVkX2xvb3AgKGxvb3AsIHZmKTsKKyAgZ2Nvdl90eXBlIGZyZXFfaCA9IGxv b3AtPmhlYWRlci0+Y291bnQsIGZyZXFfZSA9IHByZWhlYWRlci0+Y291bnQ7 CisKKyAgLyogVXNlIGZyZXF1ZW5jeSBvbmx5IGlmIGNvdW50cyBhcmUgemVy by4gICovCisgIGlmIChmcmVxX2ggPT0gMCAmJiBmcmVxX2UgPT0gMCkKKyAg ICB7CisgICAgICBmcmVxX2ggPSBsb29wLT5oZWFkZXItPmZyZXF1ZW5jeTsK KyAgICAgIGZyZXFfZSA9IEVER0VfRlJFUVVFTkNZIChwcmVoZWFkZXIpOwor ICAgIH0KKyAgaWYgKGZyZXFfaCAhPSAwKQorICAgIHsKKyAgICAgIGdjb3Zf dHlwZSBzY2FsZTsKKworICAgICAgLyogQXZvaWQgZHJvcHBpbmcgbG9vcCBi b2R5IHByb2ZpbGUgY291bnRlciB0byAwIGJlY2F1c2Ugb2YgemVybyBjb3Vu dAorCSBpbiBsb29wJ3MgcHJlaGVhZGVyLiAgKi8KKyAgICAgIGZyZXFfZSA9 IE1BWCAoZnJlcV9lLCAxKTsKKyAgICAgIC8qIFRoaXMgc2hvdWxkIG5vdCBv dmVyZmxvdy4gICovCisgICAgICBzY2FsZSA9IEdDT1ZfQ09NUFVURV9TQ0FM RSAoZnJlcV9lICogKG5ld19lc3Rfbml0ZXIgKyAxKSwgZnJlcV9oKTsKKyAg ICAgIHNjYWxlX2xvb3BfZnJlcXVlbmNpZXMgKGxvb3AsIHNjYWxlLCBSRUdf QlJfUFJPQl9CQVNFKTsKKyAgICB9CisKKyAgYmFzaWNfYmxvY2sgZXhpdF9i YiA9IHNpbmdsZV9wcmVkIChsb29wLT5sYXRjaCk7CisgIGVkZ2UgZXhpdF9l ID0gc2luZ2xlX2V4aXQgKGxvb3ApOworICBleGl0X2UtPmNvdW50ID0gbG9v cF9wcmVoZWFkZXJfZWRnZSAobG9vcCktPmNvdW50OworICBleGl0X2UtPnBy b2JhYmlsaXR5ID0gUkVHX0JSX1BST0JfQkFTRSAvIChuZXdfZXN0X25pdGVy ICsgMSk7CisKKyAgZWRnZSBleGl0X2wgPSBzaW5nbGVfcHJlZF9lZGdlIChs b29wLT5sYXRjaCk7CisgIGludCBwcm9iID0gZXhpdF9sLT5wcm9iYWJpbGl0 eTsKKyAgZXhpdF9sLT5wcm9iYWJpbGl0eSA9IFJFR19CUl9QUk9CX0JBU0Ug LSBleGl0X2UtPnByb2JhYmlsaXR5OworICBleGl0X2wtPmNvdW50ID0gZXhp dF9iYi0+Y291bnQgLSBleGl0X2UtPmNvdW50OworICBpZiAoZXhpdF9sLT5j b3VudCA8IDApCisgICAgZXhpdF9sLT5jb3VudCA9IDA7CisgIGlmIChwcm9i ID4gMCkKKyAgICBzY2FsZV9iYnNfZnJlcXVlbmNpZXNfaW50ICgmbG9vcC0+ bGF0Y2gsIDEsIGV4aXRfbC0+cHJvYmFiaWxpdHksIHByb2IpOworfQorCiAv KiBGdW5jdGlvbiB2ZWN0X3RyYW5zZm9ybV9sb29wLgogCiAgICBUaGUgYW5h bHlzaXMgcGhhc2UgaGFzIGRldGVybWluZWQgdGhhdCB0aGUgbG9vcCBpcyB2 ZWN0b3JpemFibGUuCkBAIC02NzQzLDE2ICs2Nzg3LDEwIEBAIHZlY3RfdHJh bnNmb3JtX2xvb3AgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbykKICAgYm9v bCB0cmFuc2Zvcm1fcGF0dGVybl9zdG10ID0gZmFsc2U7CiAgIGJvb2wgY2hl Y2tfcHJvZml0YWJpbGl0eSA9IGZhbHNlOwogICBpbnQgdGg7Ci0gIC8qIFJl Y29yZCBudW1iZXIgb2YgaXRlcmF0aW9ucyBiZWZvcmUgd2Ugc3RhcnRlZCB0 YW1wZXJpbmcgd2l0aCB0aGUgcHJvZmlsZS4gKi8KLSAgZ2Nvdl90eXBlIGV4 cGVjdGVkX2l0ZXJhdGlvbnMgPSBleHBlY3RlZF9sb29wX2l0ZXJhdGlvbnNf dW5ib3VuZGVkIChsb29wKTsKIAogICBpZiAoZHVtcF9lbmFibGVkX3AgKCkp CiAgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlv biwgIj09PSB2ZWNfdHJhbnNmb3JtX2xvb3AgPT09XG4iKTsKIAotICAvKiBJ ZiBwcm9maWxlIGlzIGlucHJlY2lzZSwgd2UgaGF2ZSBjaGFuY2UgdG8gZml4 IGl0IHVwLiAgKi8KLSAgaWYgKExPT1BfVklORk9fTklURVJTX0tOT1dOX1Ag KGxvb3BfdmluZm8pKQotICAgIGV4cGVjdGVkX2l0ZXJhdGlvbnMgPSBMT09Q X1ZJTkZPX0lOVF9OSVRFUlMgKGxvb3BfdmluZm8pOwotCiAgIC8qIFVzZSB0 aGUgbW9yZSBjb25zZXJ2YXRpdmUgdmVjdG9yaXphdGlvbiB0aHJlc2hvbGQu ICBJZiB0aGUgbnVtYmVyCiAgICAgIG9mIGl0ZXJhdGlvbnMgaXMgY29uc3Rh bnQgYXNzdW1lIHRoZSBjb3N0IGNoZWNrIGhhcyBiZWVuIHBlcmZvcm1lZAog ICAgICBieSBvdXIgY2FsbGVyLiAgSWYgdGhlIHRocmVzaG9sZCBtYWtlcyBh bGwgbG9vcHMgcHJvZml0YWJsZSB0aGF0CkBAIC03MDY4LDkgKzcxMDYsOCBA QCB2ZWN0X3RyYW5zZm9ybV9sb29wIChsb29wX3ZlY19pbmZvIGxvb3Bfdmlu Zm8pCiAKICAgc2xwZWVsX21ha2VfbG9vcF9pdGVyYXRlX250aW1lcyAobG9v cCwgbml0ZXJzX3ZlY3Rvcik7CiAKLSAgLyogUmVkdWNlIGxvb3AgaXRlcmF0 aW9ucyBieSB0aGUgdmVjdG9yaXphdGlvbiBmYWN0b3IuICAqLwotICBzY2Fs ZV9sb29wX3Byb2ZpbGUgKGxvb3AsIEdDT1ZfQ09NUFVURV9TQ0FMRSAoMSwg dmYpLAotCQkgICAgICBleHBlY3RlZF9pdGVyYXRpb25zIC8gdmYpOworICBz Y2FsZV9wcm9maWxlX2Zvcl92ZWN0X2xvb3AgKGxvb3AsIHZmKTsKKwogICAv KiBUaGUgbWluaW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyBwZXJmb3JtZWQg YnkgdGhlIGVwaWxvZ3VlLiAgVGhpcwogICAgICBpcyAxIHdoZW4gcGVlbGlu ZyBmb3IgZ2FwcyBiZWNhdXNlIHdlIGFsd2F5cyBuZWVkIGEgZmluYWwgc2Nh bGFyCiAgICAgIGl0ZXJhdGlvbi4gICovCg== --f403045e6484c3ebe005491d61e7--