From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2135 invoked by alias); 4 Sep 2014 14:05:23 -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 2086 invoked by uid 89); 4 Sep 2014 14:05:22 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-wg0-f42.google.com Received: from mail-wg0-f42.google.com (HELO mail-wg0-f42.google.com) (74.125.82.42) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Thu, 04 Sep 2014 14:05:21 +0000 Received: by mail-wg0-f42.google.com with SMTP id b13so10023493wgh.13 for ; Thu, 04 Sep 2014 07:05:17 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.194.186.178 with SMTP id fl18mr6459802wjc.8.1409839517508; Thu, 04 Sep 2014 07:05:17 -0700 (PDT) Received: by 10.194.20.69 with HTTP; Thu, 4 Sep 2014 07:05:16 -0700 (PDT) In-Reply-To: <20140904130651.GB17454@tucnak.redhat.com> References: <1407865606.2601.74.camel@ubuntu-sellcey> <53EA5D74.9020809@redhat.com> <47b32a49-298e-44f0-b84b-b8f664847a67@email.android.com> <53EA7BD0.1030901@redhat.com> <5407869B.7030102@redhat.com> <20140904130651.GB17454@tucnak.redhat.com> Date: Thu, 04 Sep 2014 14:05:00 -0000 Message-ID: Subject: Re: RFC: Patch for switch elimination (PR 54742) From: Richard Biener To: Jakub Jelinek Cc: Jeff Law , Steve Ellcey , GCC Patches , james.greenhalgh@arm.com Content-Type: multipart/mixed; boundary=047d7bb04dd2a22acd05023dd784 X-IsSubscribed: yes X-SW-Source: 2014-09/txt/msg00355.txt.bz2 --047d7bb04dd2a22acd05023dd784 Content-Type: text/plain; charset=UTF-8 Content-length: 1193 On Thu, Sep 4, 2014 at 3:06 PM, Jakub Jelinek wrote: > On Thu, Sep 04, 2014 at 02:57:47PM +0200, Richard Biener wrote: >> Note that I think we arrived at the point where the loop structure >> has annotations that are required for correctness :/ (simduid >> for example - if that goes away we do ...? ICE? generate >> wrong code? I don't know - Jakub shoud). > > For safelen loops it will be just (perhaps serious) missed-optimization, > for simduid I believe it shouldn't ICE either, the IFN_GOMP* builtins would > just fold as if the vectorization factor was 1 if the loop goes away. > But it will be even significantly bigger missed-optimization. The following is a patch abstracting away the ->header = NULL settings to a mark_loop_for_removal function and adding checking code that tries to discover suspicious cases. I see it fire on fold-const.ii compile in VRP for example: fold-const.ii.067t.vrp1:fix_loop_structure: re-discovered removed loop 6 with pointer-equal header 459 (only testcase I tried). As noted in the patch the pointer-equal header case should probably be an ICE (although it's possible we just re-allocated that basic-block ...). Richard. --047d7bb04dd2a22acd05023dd784 Content-Type: application/octet-stream; name=loop-removal Content-Disposition: attachment; filename=loop-removal Content-Transfer-Encoding: base64 X-Attachment-Id: f_hzo5ti8x0 Content-length: 11916 SW5kZXg6IHRydW5rL2djYy9jZmdob29rcy5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKioqIHRydW5rLm9yaWcvZ2NjL2NmZ2hvb2tzLmMJMjAxNC0wNi0w NSAxNjowNDo0NC45NjI1NTE0MTMgKzAyMDAKLS0tIHRydW5rL2djYy9jZmdo b29rcy5jCTIwMTQtMDktMDQgMTU6MzA6MzkuNzEzMzc1NDcyICswMjAwCioq KioqKioqKioqKioqKiBkZWxldGVfYmFzaWNfYmxvY2sgKGJhc2ljX2Jsb2Nr IGJiKQoqKiogNTY5LDU4MiAqKioqCiAgICAgICAgc3RydWN0IGxvb3AgKmxv b3AgPSBiYi0+bG9vcF9mYXRoZXI7CiAgCiAgICAgICAgLyogSWYgd2UgcmVt b3ZlIHRoZSBoZWFkZXIgb3IgdGhlIGxhdGNoIG9mIGEgbG9vcCwgbWFyayB0 aGUgbG9vcCBmb3IKISAJIHJlbW92YWwgYnkgc2V0dGluZyBpdHMgaGVhZGVy IGFuZCBsYXRjaCB0byBOVUxMLiAgKi8KICAgICAgICBpZiAobG9vcC0+bGF0 Y2ggPT0gYmIKICAJICB8fCBsb29wLT5oZWFkZXIgPT0gYmIpCiEgCXsKISAJ ICBsb29wLT5oZWFkZXIgPSBOVUxMOwohIAkgIGxvb3AtPmxhdGNoID0gTlVM TDsKISAJICBsb29wc19zdGF0ZV9zZXQgKExPT1BTX05FRURfRklYVVApOwoh IAl9CiAgCiAgICAgICAgcmVtb3ZlX2JiX2Zyb21fbG9vcHMgKGJiKTsKICAg ICAgfQotLS0gNTY5LDU3OCAtLS0tCiAgICAgICAgc3RydWN0IGxvb3AgKmxv b3AgPSBiYi0+bG9vcF9mYXRoZXI7CiAgCiAgICAgICAgLyogSWYgd2UgcmVt b3ZlIHRoZSBoZWFkZXIgb3IgdGhlIGxhdGNoIG9mIGEgbG9vcCwgbWFyayB0 aGUgbG9vcCBmb3IKISAJIHJlbW92YWwuICAqLwogICAgICAgIGlmIChsb29w LT5sYXRjaCA9PSBiYgogIAkgIHx8IGxvb3AtPmhlYWRlciA9PSBiYikKISAJ bWFya19sb29wX2Zvcl9yZW1vdmFsIChsb29wKTsKICAKICAgICAgICByZW1v dmVfYmJfZnJvbV9sb29wcyAoYmIpOwogICAgICB9CioqKioqKioqKioqKioq KiBtZXJnZV9ibG9ja3MgKGJhc2ljX2Jsb2NrIGEsIGJhc2ljX2Jsb2NrCioq KiA3NjAsNzcwICoqKioKICAJICAvKiAuLi4gd2UgbWVyZ2UgdHdvIGxvb3Ag aGVhZGVycywgaW4gd2hpY2ggY2FzZSB3ZSBraWxsCiAgCSAgICAgdGhlIGlu bmVyIGxvb3AuICAqLwogIAkgIGlmIChiLT5sb29wX2ZhdGhlci0+aGVhZGVy ID09IGIpCiEgCSAgICB7CiEgCSAgICAgIGItPmxvb3BfZmF0aGVyLT5oZWFk ZXIgPSBOVUxMOwohIAkgICAgICBiLT5sb29wX2ZhdGhlci0+bGF0Y2ggPSBO VUxMOwohIAkgICAgICBsb29wc19zdGF0ZV9zZXQgKExPT1BTX05FRURfRklY VVApOwohIAkgICAgfQogIAl9CiAgICAgICAgLyogSWYgd2UgbWVyZ2UgYSBs b29wIGhlYWRlciBpbnRvIGl0cyBwcmVkZWNlc3NvciwgdXBkYXRlIHRoZSBs b29wCiAgCSBzdHJ1Y3R1cmUuICAqLwotLS0gNzU2LDc2MiAtLS0tCiAgCSAg LyogLi4uIHdlIG1lcmdlIHR3byBsb29wIGhlYWRlcnMsIGluIHdoaWNoIGNh c2Ugd2Uga2lsbAogIAkgICAgIHRoZSBpbm5lciBsb29wLiAgKi8KICAJICBp ZiAoYi0+bG9vcF9mYXRoZXItPmhlYWRlciA9PSBiKQohIAkgICAgbWFya19s b29wX2Zvcl9yZW1vdmFsIChiLT5sb29wX2ZhdGhlcik7CiAgCX0KICAgICAg ICAvKiBJZiB3ZSBtZXJnZSBhIGxvb3AgaGVhZGVyIGludG8gaXRzIHByZWRl Y2Vzc29yLCB1cGRhdGUgdGhlIGxvb3AKICAJIHN0cnVjdHVyZS4gICovCioq KioqKioqKioqKioqKiBkdXBsaWNhdGVfYmxvY2sgKGJhc2ljX2Jsb2NrIGJi LCBlZGdlIGUsCioqKiAxMDk5LDExMDcgKioqKgogIAkgICYmIGNsb29wLT5o ZWFkZXIgPT0gYmIpCiAgCXsKICAJICBhZGRfYmJfdG9fbG9vcCAobmV3X2Ji LCBsb29wX291dGVyIChjbG9vcCkpOwohIAkgIGNsb29wLT5oZWFkZXIgPSBO VUxMOwohIAkgIGNsb29wLT5sYXRjaCA9IE5VTEw7CiEgCSAgbG9vcHNfc3Rh dGVfc2V0IChMT09QU19ORUVEX0ZJWFVQKTsKICAJfQogICAgICAgIGVsc2UK ICAJewotLS0gMTA5MSwxMDk3IC0tLS0KICAJICAmJiBjbG9vcC0+aGVhZGVy ID09IGJiKQogIAl7CiAgCSAgYWRkX2JiX3RvX2xvb3AgKG5ld19iYiwgbG9v cF9vdXRlciAoY2xvb3ApKTsKISAJICBtYXJrX2xvb3BfZm9yX3JlbW92YWwg KGNsb29wKTsKICAJfQogICAgICAgIGVsc2UKICAJewpJbmRleDogdHJ1bmsv Z2NjL2NmZ2xvb3AuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioqKiB0cnVu ay5vcmlnL2djYy9jZmdsb29wLmMJMjAxNC0wOC0yNiAxMzo0MDoxOC44MTUz NjgxMzQgKzAyMDAKLS0tIHRydW5rL2djYy9jZmdsb29wLmMJMjAxNC0wOS0w NCAxNTo1MjoxMC44ODcyODY1NzYgKzAyMDAKKioqKioqKioqKioqKioqIGJi X2xvb3BfZGVwdGggKGNvbnN0X2Jhc2ljX2Jsb2NrIGJiKQoqKiogMTkzMSwx OTMzICoqKioKLS0tIDE5MzEsMTk0NyAtLS0tCiAgewogICAgcmV0dXJuIGJi LT5sb29wX2ZhdGhlciA/IGxvb3BfZGVwdGggKGJiLT5sb29wX2ZhdGhlcikg OiAwOwogIH0KKyAKKyAvKiBNYXJrcyBMT09QIGZvciByZW1vdmFsIGFuZCBz ZXRzIExPT1BTX05FRURfRklYVVAuICAqLworIAorIHZvaWQKKyBtYXJrX2xv b3BfZm9yX3JlbW92YWwgKGxvb3BfcCBsb29wKQorIHsKKyAjaWZkZWYgRU5B QkxFX0NIRUNLSU5HCisgICBsb29wLT5mb3JtZXJfaGVhZGVyID0gbG9vcC0+ aGVhZGVyOworICAgbG9vcC0+Zm9ybWVyX2hlYWRlcl9pbmRleCA9IGxvb3At PmhlYWRlci0+aW5kZXg7CisgI2VuZGlmCisgICBsb29wLT5oZWFkZXIgPSBO VUxMOworICAgbG9vcC0+bGF0Y2ggPSBOVUxMOworICAgbG9vcHNfc3RhdGVf c2V0IChMT09QU19ORUVEX0ZJWFVQKTsKKyB9CkluZGV4OiB0cnVuay9nY2Mv Y2ZnbG9vcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIHRydW5rLm9y aWcvZ2NjL2NmZ2xvb3AuaAkyMDE0LTA4LTI2IDEzOjQwOjE4LjgxNjM2ODEz NCArMDIwMAotLS0gdHJ1bmsvZ2NjL2NmZ2xvb3AuaAkyMDE0LTA5LTA0IDE1 OjUzOjA4LjAxMjI4MjY0MyArMDIwMAoqKioqKioqKioqKioqKiogc3RydWN0 IEdUWSAoKGNoYWluX25leHQgKCIlaC5uZXh0IikpKSBsbwoqKiogMTkzLDE5 OCAqKioqCi0tLSAxOTMsMjAzIC0tLS0KICAKICAgIC8qIE51bWJlciBvZiBp dGVyYXRpb24gYW5hbHlzaXMgZGF0YSBmb3IgUlRMLiAgKi8KICAgIHN0cnVj dCBuaXRlcl9kZXNjICpzaW1wbGVfbG9vcF9kZXNjOworIAorICNpZmRlZiBF TkFCTEVfQ0hFQ0tJTkcKKyAgIGJhc2ljX2Jsb2NrIEdUWSAoKHNraXApKSBm b3JtZXJfaGVhZGVyOworICAgaW50IGZvcm1lcl9oZWFkZXJfaW5kZXg7Cisg I2VuZGlmCiAgfTsKICAKICAvKiBGbGFncyBmb3Igc3RhdGUgb2YgbG9vcCBz dHJ1Y3R1cmUuICAqLwoqKioqKioqKioqKioqKiogc3RydWN0IGxvb3AgKiBs b29wX3ZlcnNpb24gKHN0cnVjdCBsb29wCioqKiAzMzYsMzQxICoqKioKLS0t IDM0MSwzNDggLS0tLQogIGV4dGVybiBib29sIHJlbW92ZV9wYXRoIChlZGdl KTsKICBleHRlcm4gdm9pZCB1bmxvb3AgKHN0cnVjdCBsb29wICosIGJvb2wg KiwgYml0bWFwKTsKICBleHRlcm4gdm9pZCBzY2FsZV9sb29wX2ZyZXF1ZW5j aWVzIChzdHJ1Y3QgbG9vcCAqLCBpbnQsIGludCk7Cisgdm9pZCBtYXJrX2xv b3BfZm9yX3JlbW92YWwgKGxvb3BfcCk7CisgCiAgCiAgLyogSW5kdWN0aW9u IHZhcmlhYmxlIGFuYWx5c2lzLiAgKi8KICAKKioqKioqKioqKioqKioqIGxv b3BzX3N0YXRlX2NsZWFyICh1bnNpZ25lZCBmbGFncykKKioqIDUzMyw1Mzgg KioqKgotLS0gNTQwLDU0NiAtLS0tCiAgICBjdXJyZW50X2xvb3BzLT5zdGF0 ZSAmPSB+ZmxhZ3M7CiAgfQogIAorIAogIC8qIExvb3AgaXRlcmF0b3JzLiAg Ki8KICAKICAvKiBGbGFncyBmb3IgbG9vcCBpdGVyYXRpb24uICAqLwpJbmRl eDogdHJ1bmsvZ2NjL2V4Y2VwdC5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KioqIHRydW5rLm9yaWcvZ2NjL2V4Y2VwdC5jCTIwMTQtMDktMDQgMTI6NTI6 MTQuMzUzMDI5OTA0ICswMjAwCi0tLSB0cnVuay9nY2MvZXhjZXB0LmMJMjAx NC0wOS0wNCAxNTozMToyMS42MzEzNzI1ODYgKzAyMDAKKioqKioqKioqKioq KioqIHNqbGpfZW1pdF9kaXNwYXRjaF90YWJsZSAocnR4X2NvZGVfbGFiZWwK KioqIDEzNzUsMTM4NCAqKioqCiAgCSAgICAgIHsKICAJCWZvciAobG9vcCA9 IGJiLT5sb29wX2ZhdGhlcjsKICAJCSAgICAgbG9vcF9vdXRlciAobG9vcCk7 IGxvb3AgPSBsb29wX291dGVyIChsb29wKSkKISAJCSAgewohIAkJICAgIGxv b3AtPmhlYWRlciA9IE5VTEw7CiEgCQkgICAgbG9vcC0+bGF0Y2ggPSBOVUxM OwohIAkJICB9CiAgCSAgICAgIH0KICAJICB9CiAgCi0tLSAxMzc1LDEzODEg LS0tLQogIAkgICAgICB7CiAgCQlmb3IgKGxvb3AgPSBiYi0+bG9vcF9mYXRo ZXI7CiAgCQkgICAgIGxvb3Bfb3V0ZXIgKGxvb3ApOyBsb29wID0gbG9vcF9v dXRlciAobG9vcCkpCiEgCQkgIG1hcmtfbG9vcF9mb3JfcmVtb3ZhbCAobG9v cCk7CiAgCSAgICAgIH0KICAJICB9CiAgCkluZGV4OiB0cnVuay9nY2MvbG9v cC1pbml0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiogdHJ1bmsub3Jp Zy9nY2MvbG9vcC1pbml0LmMJMjAxNC0wNy0xMCAxNDoxMzozOC4wNjk4MTE2 NjkgKzAyMDAKLS0tIHRydW5rL2djYy9sb29wLWluaXQuYwkyMDE0LTA5LTA0 IDE1OjU1OjMyLjQ0MDI3MjY5OSArMDIwMAoqKioqKioqKioqKioqKiogZml4 X2xvb3Bfc3RydWN0dXJlIChiaXRtYXAgY2hhbmdlZF9iYnMpCioqKiAyNzIs Mjc3ICoqKioKLS0tIDI3MiwzMDEgLS0tLQogICAgRk9SX0VBQ0hfVkVDX0VM VCAoKmdldF9sb29wcyAoY2Z1biksIGksIGxvb3ApCiAgICAgIGlmIChsb29w ICYmIGxvb3AtPmhlYWRlciA9PSBOVUxMKQogICAgICAgIHsKKyAjaWZkZWYg RU5BQkxFX0NIRUNLSU5HCisgCWlmIChkdW1wX2ZpbGUpCisgCSAgeworIAkg ICAgLyogVGhlIGZvbGxvd2luZyBzaG91bGQgcHJvYmFibHkgYmUgYW4gSUNF LiAgKi8KKyAJICAgIGZvciAodW5zaWduZWQgaiA9IG9sZF9ubG9vcHM7IGog PCBudW1iZXJfb2ZfbG9vcHMgKGNmdW4pOyArK2opCisgCSAgICAgIGlmICgo KmdldF9sb29wcyAoY2Z1bikpW2pdLT5oZWFkZXIgPT0gbG9vcC0+Zm9ybWVy X2hlYWRlcikKKyAJCWZwcmludGYgKGR1bXBfZmlsZSwgImZpeF9sb29wX3N0 cnVjdHVyZTogcmUtZGlzY292ZXJlZCAiCisgCQkJICJyZW1vdmVkIGxvb3Ag JWQgd2l0aCBwb2ludGVyLWVxdWFsIGhlYWRlciAlZFxuIiwKKyAJCQkgbG9v cC0+bnVtLCAoKmdldF9sb29wcyAoY2Z1bikpW2pdLT5oZWFkZXItPmluZGV4 KTsKKyAJICAgIGlmIChsb29wLT5mb3JtZXJfaGVhZGVyX2luZGV4IDw9IGxh c3RfYmFzaWNfYmxvY2tfZm9yX2ZuIChjZnVuKSkKKyAJICAgICAgeworIAkJ YmFzaWNfYmxvY2sgYmIKKyAJCSAgPSBCQVNJQ19CTE9DS19GT1JfRk4gKGNm dW4sIGxvb3AtPmZvcm1lcl9oZWFkZXJfaW5kZXgpOworIAkJLyogPz8/ICBU aGlzIGNhbiBwcm9iYWJseSAibWlzZmlyZSIgaWYgdGhlIGJhc2ljLWJsb2Nr CisgCQkgICB3YXMgZnJlZWQgYW5kIHRoZSBiYXNpYy1ibG9jayBpbmRleCBn b3QgcmUtdXNlZC4gICovCisgCQlpZiAoYmIgJiYgYmItPmxvb3BfZmF0aGVy LT5udW0gPj0gb2xkX25sb29wcykKKyAJCSAgZnByaW50ZiAoZHVtcF9maWxl LCAiZml4X2xvb3Bfc3RydWN0dXJlOiBoZWFkZXIgJWQgb2YgIgorIAkJCSAg ICJyZW1vdmVkIGxvb3AgJWQgaXMgcGFydCBvZiBhIG5ld2x5ICIKKyAJCQkg ICAiZGlzY292ZXJlZCBsb29wICVkXG4iLAorIAkJCSAgIGxvb3AtPmZvcm1l cl9oZWFkZXJfaW5kZXgsIGxvb3AtPm51bSwKKyAJCQkgICBiYi0+bG9vcF9m YXRoZXItPm51bSk7CisgCSAgICAgIH0KKyAJICB9CisgI2VuZGlmCiAgCSgq Z2V0X2xvb3BzIChjZnVuKSlbaV0gPSBOVUxMOwogIAlmbG93X2xvb3BfZnJl ZSAobG9vcCk7CiAgICAgICAgfQpJbmRleDogdHJ1bmsvZ2NjL3RyZWUtZWgu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CioqKiB0cnVuay5vcmlnL2djYy90 cmVlLWVoLmMJMjAxNC0wOS0wNCAxMjo1MjoxMy41NjUwMjk5NTggKzAyMDAK LS0tIHRydW5rL2djYy90cmVlLWVoLmMJMjAxNC0wOS0wNCAxNTozMjowNy4w MjIzNjk0NjAgKzAyMDAKKioqKioqKioqKioqKioqIGNsZWFudXBfZW1wdHlf ZWhfbWVyZ2VfcGhpcyAoYmFzaWNfYmxvY2sKKioqIDQxNzEsNDE4MCAqKioq CiAgCSAgIGFuZCBtYXJrIHRoZSBvdGhlciBsb29wIGFzIHBvc3NpYmx5IGhh dmluZyBtdWx0aXBsZSBsYXRjaGVzLiAgKi8KICAJaWYgKGUtPmRlc3QgPT0g ZS0+ZGVzdC0+bG9vcF9mYXRoZXItPmhlYWRlcikKICAJICB7CiEgCSAgICBl LT5kZXN0LT5sb29wX2ZhdGhlci0+aGVhZGVyID0gTlVMTDsKISAJICAgIGUt PmRlc3QtPmxvb3BfZmF0aGVyLT5sYXRjaCA9IE5VTEw7CiAgCSAgICBuZXdf YmItPmxvb3BfZmF0aGVyLT5sYXRjaCA9IE5VTEw7CiEgCSAgICBsb29wc19z dGF0ZV9zZXQgKExPT1BTX05FRURfRklYVVB8TE9PUFNfTUFZX0hBVkVfTVVM VElQTEVfTEFUQ0hFUyk7CiAgCSAgfQogIAlyZWRpcmVjdF9laF9lZGdlXzEg KGUsIG5ld19iYiwgY2hhbmdlX3JlZ2lvbik7CiAgCXJlZGlyZWN0X2VkZ2Vf c3VjYyAoZSwgbmV3X2JiKTsKLS0tIDQxNzEsNDE3OSAtLS0tCiAgCSAgIGFu ZCBtYXJrIHRoZSBvdGhlciBsb29wIGFzIHBvc3NpYmx5IGhhdmluZyBtdWx0 aXBsZSBsYXRjaGVzLiAgKi8KICAJaWYgKGUtPmRlc3QgPT0gZS0+ZGVzdC0+ bG9vcF9mYXRoZXItPmhlYWRlcikKICAJICB7CiEgCSAgICBtYXJrX2xvb3Bf Zm9yX3JlbW92YWwgKGUtPmRlc3QtPmxvb3BfZmF0aGVyKTsKICAJICAgIG5l d19iYi0+bG9vcF9mYXRoZXItPmxhdGNoID0gTlVMTDsKISAJICAgIGxvb3Bz X3N0YXRlX3NldCAoTE9PUFNfTUFZX0hBVkVfTVVMVElQTEVfTEFUQ0hFUyk7 CiAgCSAgfQogIAlyZWRpcmVjdF9laF9lZGdlXzEgKGUsIG5ld19iYiwgY2hh bmdlX3JlZ2lvbik7CiAgCXJlZGlyZWN0X2VkZ2Vfc3VjYyAoZSwgbmV3X2Ji KTsKSW5kZXg6IHRydW5rL2djYy90cmVlLXNzYS10aHJlYWR1cGRhdGUuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CioqKiB0cnVuay5vcmlnL2djYy90cmVl LXNzYS10aHJlYWR1cGRhdGUuYwkyMDE0LTA2LTI1IDE1OjAxOjAyLjgwNzg0 Mzg0OCArMDIwMAotLS0gdHJ1bmsvZ2NjL3RyZWUtc3NhLXRocmVhZHVwZGF0 ZS5jCTIwMTQtMDktMDQgMTU6MzI6MzQuMjExMzY3NTg5ICswMjAwCioqKioq KioqKioqKioqKiBzc2FfcmVkaXJlY3RfZWRnZXMgKHN0cnVjdCByZWRpcmVj dGlvbl9kCioqKiA3NjYsNzc2ICoqKioKICAKICAJICAvKiBJZiB3ZSByZWRp cmVjdCBhIGxvb3AgbGF0Y2ggZWRnZSBjYW5jZWwgaXRzIGxvb3AuICAqLwog IAkgIGlmIChlLT5zcmMgPT0gZS0+c3JjLT5sb29wX2ZhdGhlci0+bGF0Y2gp CiEgCSAgICB7CiEgCSAgICAgIGUtPnNyYy0+bG9vcF9mYXRoZXItPmhlYWRl ciA9IE5VTEw7CiEgCSAgICAgIGUtPnNyYy0+bG9vcF9mYXRoZXItPmxhdGNo ID0gTlVMTDsKISAJICAgICAgbG9vcHNfc3RhdGVfc2V0IChMT09QU19ORUVE X0ZJWFVQKTsKISAJICAgIH0KICAKICAJICAvKiBSZWRpcmVjdCB0aGUgaW5j b21pbmcgZWRnZSAocG9zc2libHkgdG8gdGhlIGpvaW5lciBibG9jaykgdG8g dGhlCiAgCSAgICAgYXBwcm9wcmlhdGUgZHVwbGljYXRlIGJsb2NrLiAgKi8K LS0tIDc2Niw3NzIgLS0tLQogIAogIAkgIC8qIElmIHdlIHJlZGlyZWN0IGEg bG9vcCBsYXRjaCBlZGdlIGNhbmNlbCBpdHMgbG9vcC4gICovCiAgCSAgaWYg KGUtPnNyYyA9PSBlLT5zcmMtPmxvb3BfZmF0aGVyLT5sYXRjaCkKISAJICAg IG1hcmtfbG9vcF9mb3JfcmVtb3ZhbCAoZS0+c3JjLT5sb29wX2ZhdGhlcik7 CiAgCiAgCSAgLyogUmVkaXJlY3QgdGhlIGluY29taW5nIGVkZ2UgKHBvc3Np Ymx5IHRvIHRoZSBqb2luZXIgYmxvY2spIHRvIHRoZQogIAkgICAgIGFwcHJv cHJpYXRlIGR1cGxpY2F0ZSBibG9jay4gICovCioqKioqKioqKioqKioqKiB0 aHJlYWRfdGhyb3VnaF9sb29wX2hlYWRlciAoc3RydWN0IGxvb3AKKioqIDEz MDQsMTMxMiAqKioqCiAgICAgIHsKICAgICAgICAvKiBJZiB0aGUgbG9vcCBj ZWFzZWQgdG8gZXhpc3QsIG1hcmsgaXQgYXMgc3VjaCwgYW5kIHRocmVhZCB0 aHJvdWdoIGl0cwogIAkgb3JpZ2luYWwgaGVhZGVyLiAgKi8KISAgICAgICBs b29wLT5oZWFkZXIgPSBOVUxMOwohICAgICAgIGxvb3AtPmxhdGNoID0gTlVM TDsKISAgICAgICBsb29wc19zdGF0ZV9zZXQgKExPT1BTX05FRURfRklYVVAp OwogICAgICAgIHJldHVybiB0aHJlYWRfYmxvY2sgKGhlYWRlciwgZmFsc2Up OwogICAgICB9CiAgCi0tLSAxMzAwLDEzMDYgLS0tLQogICAgICB7CiAgICAg ICAgLyogSWYgdGhlIGxvb3AgY2Vhc2VkIHRvIGV4aXN0LCBtYXJrIGl0IGFz IHN1Y2gsIGFuZCB0aHJlYWQgdGhyb3VnaCBpdHMKICAJIG9yaWdpbmFsIGhl YWRlci4gICovCiEgICAgICAgbWFya19sb29wX2Zvcl9yZW1vdmFsIChsb29w KTsKICAgICAgICByZXR1cm4gdGhyZWFkX2Jsb2NrIChoZWFkZXIsIGZhbHNl KTsKICAgICAgfQogIAo= --047d7bb04dd2a22acd05023dd784--