From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg1-x531.google.com (mail-pg1-x531.google.com [IPv6:2607:f8b0:4864:20::531]) by sourceware.org (Postfix) with ESMTPS id 0B6A9385B510 for ; Tue, 11 Jun 2024 17:19:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0B6A9385B510 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 0B6A9385B510 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::531 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1718126368; cv=none; b=OVHnUZuch/l77y6qsgQYFTd24Nyh2y491+xym/EymQoQxzrZT8YEk5Oj4+IwvSqC/0EBIxjxM5LrLTmpS4k91lMriMkVzOxpxhYNN27sBC9FvPCk4Tdu3MCIAoRvSsmWWupiYWh/sdmRqzroTTQ4NTP2Bmwcaz9/Qo/m0Sm3ryg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1718126368; c=relaxed/simple; bh=CxbiKDkjQzehcXhkHNCVR79aOcovLAtM0cifRnIHx/k=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=U7k5NzeP51GtduvGxvKyNK3PE2TRCMRVkEesxspNDLgdMz1556LlBnfisPt0+gk96DZhsEAJ0dJBp5F1UTe15cdPx638E0oNxMikW+Crp5gj8z55ez3eBAFNDTlX9kLURu35292tzMVlFF0ypV1E467WzsNkomm454JIPHsmDPc= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pg1-x531.google.com with SMTP id 41be03b00d2f7-6c4926bf9bbso944799a12.2 for ; Tue, 11 Jun 2024 10:19:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718126365; x=1718731165; darn=gcc.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=CN8jL7a/HoLRBkyOO5XN+s8f3GMJ/0i3wMdKwRQbiD4=; b=FmqEf98TNEu32gUcLYe5KlYeWRt8McGrX7MIOmeMnGEyJ3MlqIImfGRIzNVRCY9cuK u6qZyCKsA8dUVD04PS/W0nK+Qm+FG4vtFNwFdPitjGhx4DkCOI3j0mxIHu4VQT321IA6 l/Ao1vOSJUJRQn80N36hKl+dOSw7gJp84ta+5EX8iGPVE3dn9J+QwHn/KiKwaLRuxHsW 9aIj3vErzMR6E2G/F73dHuokgQP1xyCBotKMcw3pzhCJEujV0Ii4ibsUwt8rvzvSX7qR I+oN9xOK/PqgQQCv1yVC/tf90FX1UP5V5kb00ZcW3a7fvarv80Iwr4+tNjWR0+a5RteY Soqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718126365; x=1718731165; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=CN8jL7a/HoLRBkyOO5XN+s8f3GMJ/0i3wMdKwRQbiD4=; b=dPeb7CMs2OrvNDC/Q+p7BCqbQ3ArFCzFso+JuO86W9z+JilSSAP23IzNUiZV9Da12l l8gy7TvOHbvwY1vroXcDgrpKnnusIjSMczI+9wWN7LZMr2pFv4M3a2oijQtA1P6IfS3a FnGjD4FWc89/FVFfs1/9N/LNyFnLx92jl08ihY3YNmom9z8PJiLhfrE3dbkDUALekQdt oirong/y7oQH1afPWGe970iCe3COKiYTpRT3CmHV6JFF7NT4pvGnrWWpScCeBWQN2L7U IVLjZFS2lpJuCT/ynQvgSNU1JYesnOGJ14PUBhRXzvFT4MxGgJe+ULMutCr5022RTiEn qhfw== X-Forwarded-Encrypted: i=1; AJvYcCUb2oQ+vdZRHvQ3ZAylmfUtonx6VBKJBa7uJCSX17ewn371f6NGJH3LApQ5ki3YN1zCyxrrgQRBg/17bS1miUqJ7aLvxO4XlQ== X-Gm-Message-State: AOJu0YzOYlI9SzbBPP+zrm8sl5fbr8SLAx9Iya0xA+9eyNWnrQTLqaEO N6P/wHp/3+S40Kc/HxaLyCuTFy9E2sRwI9nkGO+4W40X83MHZu15VFujcyhw244YaNJFU+RKJi+ 7BKZFHFAICgK7DaTY6v06lEK/faJiAmL7 X-Google-Smtp-Source: AGHT+IHi90ROGFAcFCFkejCCn+Z2DeASjeBZN0/rufrJ2USBrnFlLJZVC5u/lhXtCqevB2RIsDjmf1cj8oN1QDAKReM= X-Received: by 2002:a17:902:cf04:b0:1f7:26f:9185 with SMTP id d9443c01a7336-1f7026f932dmr94705055ad.10.1718126364784; Tue, 11 Jun 2024 10:19:24 -0700 (PDT) MIME-Version: 1.0 References: <20240518231146.954808-1-quic_apinski@quicinc.com> In-Reply-To: From: Andrew Pinski Date: Tue, 11 Jun 2024 10:19:12 -0700 Message-ID: Subject: Re: [PATCH] PHIOPT: Don't transform minmax if middle bb contains a phi [PR115143] To: Richard Biener Cc: "Andrew Pinski (QUIC)" , "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary="000000000000a712a6061aa077df" X-Spam-Status: No, score=-7.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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: --000000000000a712a6061aa077df Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, May 20, 2024 at 11:08=E2=80=AFPM Richard Biener wrote: > > On Mon, May 20, 2024 at 11:37=E2=80=AFPM Andrew Pinski (QUIC) > wrote: > > > > > -----Original Message----- > > > From: Richard Biener > > > Sent: Sunday, May 19, 2024 11:55 AM > > > To: Andrew Pinski (QUIC) > > > Cc: gcc-patches@gcc.gnu.org > > > Subject: Re: [PATCH] PHIOPT: Don't transform minmax if > > > middle bb contains a phi [PR115143] > > > > > > > > > > > > > Am 19.05.2024 um 01:12 schrieb Andrew Pinski > > > : > > > > > > > > =EF=BB=BFThe problem here is even if last_and_only_stmt returns a > > > statement, > > > > the bb might still contain a phi node which defines a ssa > > > name which > > > > is used in that statement so we need to add a check to make > > > sure that > > > > the phi nodes are empty for the middle bbs in both the > > > > `CMP?MINMAX:MINMAX` case and the `CMP?MINMAX:B` > > > cases. > > > > > > Is that single arg PHIs or do we have an extra edge into the > > > middle BB? I think that might be unexpected, at least costing > > > wise. Maybe Also to some of the replacement code we have ? > > > > It is only a single arg PHI since we already reject multiple edges in t= he middle BBs for these cases. > > It was EVPR that produces the single arg PHI in the original testcase f= rom folding of a conditional to false and evpr does not do simple name prop= in this case and there is no pass inbetween evrp and phiopt that will clea= r up single arg PHI. > > I added the Gimple based testcases basically to avoid the needing of de= pending on what previous passes could produce too. > > > > > > > > > OK for trunk and backport to all open branches since r14- > > > 3827-g30e6ee074588ba was backported? > > > > Bootstrapped and tested on x86_64_linux-gnu with no > > > regressions. > > > > > > > > > > Ok > > > > Does this include the GCC 13 branch or should I wait until after the GC= C 13.3.0 release? > > Please wait until after the release. Committed the modified attached patch for GCC 12. GCC 12 didn't have the diamond case which is why a modified patch was needed. Thanks, Andrew > > Thanks, > Richard. > > > Thanks, > > Andrew Pinski > > > > > > > > Richard > > > > > > > PR tree-optimization/115143 > > > > > > > > gcc/ChangeLog: > > > > > > > > * tree-ssa-phiopt.cc (minmax_replacement): Check for > > > empty > > > > phi nodes for middle bbs for the case where middle bb is > > > not empty. > > > > > > > > gcc/testsuite/ChangeLog: > > > > > > > > * gcc.c-torture/compile/pr115143-1.c: New test. > > > > * gcc.c-torture/compile/pr115143-2.c: New test. > > > > * gcc.c-torture/compile/pr115143-3.c: New test. > > > > > > > > Signed-off-by: Andrew Pinski > > > > --- > > > > .../gcc.c-torture/compile/pr115143-1.c | 21 > > > +++++++++++++ > > > > .../gcc.c-torture/compile/pr115143-2.c | 30 > > > +++++++++++++++++++ > > > > .../gcc.c-torture/compile/pr115143-3.c | 29 > > > ++++++++++++++++++ > > > > gcc/tree-ssa-phiopt.cc | 12 ++++++++ > > > > 4 files changed, 92 insertions(+) > > > > create mode 100644 gcc/testsuite/gcc.c- > > > torture/compile/pr115143-1.c > > > > create mode 100644 gcc/testsuite/gcc.c- > > > torture/compile/pr115143-2.c > > > > create mode 100644 gcc/testsuite/gcc.c- > > > torture/compile/pr115143-3.c > > > > > > > > diff --git a/gcc/testsuite/gcc.c-torture/compile/pr115143-1.c > > > > b/gcc/testsuite/gcc.c-torture/compile/pr115143-1.c > > > > new file mode 100644 > > > > index 00000000000..5cb119ea432 > > > > --- /dev/null > > > > +++ b/gcc/testsuite/gcc.c-torture/compile/pr115143-1.c > > > > @@ -0,0 +1,21 @@ > > > > +/* PR tree-optimization/115143 */ > > > > +/* This used to ICE. > > > > + minmax part of phiopt would transform, > > > > + would transform `a!=3D0?min(a, b) : 0` into `min(a,b)` > > > > + which was correct except b was defined by a phi in the > > > inner > > > > + bb which was not handled. */ > > > > +short a, d; > > > > +char b; > > > > +long c; > > > > +unsigned long e, f; > > > > +void g(unsigned long h) { > > > > + if (c ? e : b) > > > > + if (e) > > > > + if (d) { > > > > + a =3D f ? ({ > > > > + unsigned long i =3D d ? f : 0, j =3D e ? h : 0; > > > > + i < j ? i : j; > > > > + }) : 0; > > > > + } > > > > +} > > > > + > > > > diff --git a/gcc/testsuite/gcc.c-torture/compile/pr115143-2.c > > > > b/gcc/testsuite/gcc.c-torture/compile/pr115143-2.c > > > > new file mode 100644 > > > > index 00000000000..05c3bbe9738 > > > > --- /dev/null > > > > +++ b/gcc/testsuite/gcc.c-torture/compile/pr115143-2.c > > > > @@ -0,0 +1,30 @@ > > > > +/* { dg-options "-fgimple" } */ > > > > +/* PR tree-optimization/115143 */ > > > > +/* This used to ICE. > > > > + minmax part of phiopt would transform, > > > > + would transform `a!=3D0?min(a, b) : 0` into `min(a,b)` > > > > + which was correct except b was defined by a phi in the > > > inner > > > > + bb which was not handled. */ > > > > +unsigned __GIMPLE (ssa,startwith("phiopt")) foo (unsigned > > > a, unsigned > > > > +b) { > > > > + unsigned j; > > > > + unsigned _23; > > > > + unsigned _12; > > > > + > > > > + __BB(2): > > > > + if (a_6(D) !=3D 0u) > > > > + goto __BB3; > > > > + else > > > > + goto __BB4; > > > > + > > > > + __BB(3): > > > > + j_10 =3D __PHI (__BB2: b_11(D)); > > > > + _23 =3D __MIN (a_6(D), j_10); > > > > + goto __BB4; > > > > + > > > > + __BB(4): > > > > + _12 =3D __PHI (__BB3: _23, __BB2: 0u); return _12; > > > > + > > > > +} > > > > diff --git a/gcc/testsuite/gcc.c-torture/compile/pr115143-3.c > > > > b/gcc/testsuite/gcc.c-torture/compile/pr115143-3.c > > > > new file mode 100644 > > > > index 00000000000..53c5fb5588e > > > > --- /dev/null > > > > +++ b/gcc/testsuite/gcc.c-torture/compile/pr115143-3.c > > > > @@ -0,0 +1,29 @@ > > > > +/* { dg-options "-fgimple" } */ > > > > +/* PR tree-optimization/115143 */ > > > > +/* This used to ICE. > > > > + minmax part of phiopt would transform, > > > > + would transform `a!=3D0?min(a, b) : 0` into `min(a,b)` > > > > + which was correct except b was defined by a phi in the > > > inner > > > > + bb which was not handled. */ > > > > +unsigned __GIMPLE (ssa,startwith("phiopt")) foo (unsigned > > > a, unsigned > > > > +b) { > > > > + unsigned j; > > > > + unsigned _23; > > > > + unsigned _12; > > > > + > > > > + __BB(2): > > > > + if (a_6(D) > 0u) > > > > + goto __BB3; > > > > + else > > > > + goto __BB4; > > > > + > > > > + __BB(3): > > > > + j_10 =3D __PHI (__BB2: b_7(D)); > > > > + _23 =3D __MIN (a_6(D), j_10); > > > > + goto __BB4; > > > > + > > > > + __BB(4): > > > > + _12 =3D __PHI (__BB3: _23, __BB2: 0u); > > > > + return _12; > > > > +} > > > > diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc > > > index > > > > f166c3132cb..918cf50b589 100644 > > > > --- a/gcc/tree-ssa-phiopt.cc > > > > +++ b/gcc/tree-ssa-phiopt.cc > > > > @@ -1925,6 +1925,10 @@ minmax_replacement > > > (basic_block cond_bb, basic_block middle_bb, basic_block > > > alt_ > > > > || gimple_code (assign) !=3D GIMPLE_ASSIGN) > > > > return false; > > > > > > > > + /* There cannot be any phi nodes in the middle bb. */ > > > > + if (!gimple_seq_empty_p (phi_nodes (middle_bb))) > > > > + return false; > > > > + > > > > lhs =3D gimple_assign_lhs (assign); > > > > ass_code =3D gimple_assign_rhs_code (assign); > > > > if (ass_code !=3D MAX_EXPR && ass_code !=3D MIN_EXPR) > > > @@ -1938,6 > > > > +1942,10 @@ minmax_replacement (basic_block cond_bb, > > > basic_block middle_bb, basic_block alt_ > > > > || gimple_code (assign) !=3D GIMPLE_ASSIGN) > > > > return false; > > > > > > > > + /* There cannot be any phi nodes in the alt middle bb. > > > */ > > > > + if (!gimple_seq_empty_p (phi_nodes (alt_middle_bb))) > > > > + return false; > > > > + > > > > alt_lhs =3D gimple_assign_lhs (assign); > > > > if (ass_code !=3D gimple_assign_rhs_code (assign)) > > > > return false; > > > > @@ -2049,6 +2057,10 @@ minmax_replacement > > > (basic_block cond_bb, basic_block middle_bb, basic_block > > > alt_ > > > > || gimple_code (assign) !=3D GIMPLE_ASSIGN) > > > > return false; > > > > > > > > + /* There cannot be any phi nodes in the middle bb. */ > > > > + if (!gimple_seq_empty_p (phi_nodes (middle_bb))) > > > > + return false; > > > > + > > > > lhs =3D gimple_assign_lhs (assign); > > > > ass_code =3D gimple_assign_rhs_code (assign); > > > > if (ass_code !=3D MAX_EXPR && ass_code !=3D MIN_EXPR) > > > > -- > > > > 2.43.0 > > > > --000000000000a712a6061aa077df Content-Type: text/plain; charset="US-ASCII"; name="0001-PHIOPT-Don-t-transform-minmax-if-middle-bb-contains-.patch" Content-Disposition: attachment; filename="0001-PHIOPT-Don-t-transform-minmax-if-middle-bb-contains-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lxao111s0 RnJvbSBkMzBhZmFhZTY3NjQzNzlhNjNjMjI0NTliNDBhYWVjZmE4MmIwZmM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgUGluc2tpIDxxdWljX2FwaW5za2lAcXVpY2luYy5j b20+CkRhdGU6IFNhdCwgMTggTWF5IDIwMjQgMTE6NTU6NTggLTA3MDAKU3ViamVjdDogW1BBVENI XSBQSElPUFQ6IERvbid0IHRyYW5zZm9ybSBtaW5tYXggaWYgbWlkZGxlIGJiIGNvbnRhaW5zIGEg cGhpCiBbUFIxMTUxNDNdCgpUaGUgcHJvYmxlbSBoZXJlIGlzIGV2ZW4gaWYgbGFzdF9hbmRfb25s eV9zdG10IHJldHVybnMgYSBzdGF0ZW1lbnQsCnRoZSBiYiBtaWdodCBzdGlsbCBjb250YWluIGEg cGhpIG5vZGUgd2hpY2ggZGVmaW5lcyBhIHNzYSBuYW1lCndoaWNoIGlzIHVzZWQgaW4gdGhhdCBz dGF0ZW1lbnQgc28gd2UgbmVlZCB0byBhZGQgYSBjaGVjayB0byBtYWtlIHN1cmUKdGhhdCB0aGUg cGhpIG5vZGVzIGFyZSBlbXB0eSBmb3IgdGhlIG1pZGRsZSBiYnMgaW4gYm90aCB0aGUKYENNUD9N SU5NQVg6TUlOTUFYYCBjYXNlIGFuZCB0aGUgYENNUD9NSU5NQVg6QmAgY2FzZXMuCgpCb290c3Ry YXBwZWQgYW5kIHRlc3RlZCBvbiB4ODZfNjRfbGludXgtZ251IHdpdGggbm8gcmVncmVzc2lvbnMu CgoJUFIgdHJlZS1vcHRpbWl6YXRpb24vMTE1MTQzCgpnY2MvQ2hhbmdlTG9nOgoKCSogdHJlZS1z c2EtcGhpb3B0LmNjIChtaW5tYXhfcmVwbGFjZW1lbnQpOiBDaGVjayBmb3IgZW1wdHkKCXBoaSBu b2RlcyBmb3IgbWlkZGxlIGJicyBmb3IgdGhlIGNhc2Ugd2hlcmUgbWlkZGxlIGJiIGlzIG5vdCBl bXB0eS4KCmdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOgoKCSogZ2NjLmMtdG9ydHVyZS9jb21waWxl L3ByMTE1MTQzLTEuYzogTmV3IHRlc3QuCgkqIGdjYy5jLXRvcnR1cmUvY29tcGlsZS9wcjExNTE0 My0yLmM6IE5ldyB0ZXN0LgoJKiBnY2MuYy10b3J0dXJlL2NvbXBpbGUvcHIxMTUxNDMtMy5jOiBO ZXcgdGVzdC4KClNpZ25lZC1vZmYtYnk6IEFuZHJldyBQaW5za2kgPHF1aWNfYXBpbnNraUBxdWlj aW5jLmNvbT4KKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgOWZmOGYwNDEzMzFlZjhiNTYwMDdm YjNjNGQ0MWQ3NmY5ODUwMDEwZCkKLS0tCiAuLi4vZ2NjLmMtdG9ydHVyZS9jb21waWxlL3ByMTE1 MTQzLTEuYyAgICAgICAgfCAyMSArKysrKysrKysrKysrCiAuLi4vZ2NjLmMtdG9ydHVyZS9jb21w aWxlL3ByMTE1MTQzLTIuYyAgICAgICAgfCAzMCArKysrKysrKysrKysrKysrKysrCiAuLi4vZ2Nj LmMtdG9ydHVyZS9jb21waWxlL3ByMTE1MTQzLTMuYyAgICAgICAgfCAyOSArKysrKysrKysrKysr KysrKysKIGdjYy90cmVlLXNzYS1waGlvcHQuY2MgICAgICAgICAgICAgICAgICAgICAgICB8ICA0 ICsrKwogNCBmaWxlcyBjaGFuZ2VkLCA4NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuYy10b3J0dXJlL2NvbXBpbGUvcHIxMTUxNDMtMS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuYy10b3J0dXJlL2NvbXBpbGUvcHIxMTUx NDMtMi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuYy10b3J0dXJlL2Nv bXBpbGUvcHIxMTUxNDMtMy5jCgpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuYy10b3J0 dXJlL2NvbXBpbGUvcHIxMTUxNDMtMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuYy10b3J0dXJlL2Nv bXBpbGUvcHIxMTUxNDMtMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li41Y2IxMTllYTQzMgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmMtdG9y dHVyZS9jb21waWxlL3ByMTE1MTQzLTEuYwpAQCAtMCwwICsxLDIxIEBACisvKiBQUiB0cmVlLW9w dGltaXphdGlvbi8xMTUxNDMgKi8KKy8qIFRoaXMgdXNlZCB0byBJQ0UuCisgICBtaW5tYXggcGFy dCBvZiBwaGlvcHQgd291bGQgdHJhbnNmb3JtLAorICAgd291bGQgdHJhbnNmb3JtIGBhIT0wP21p bihhLCBiKSA6IDBgIGludG8gYG1pbihhLGIpYAorICAgd2hpY2ggd2FzIGNvcnJlY3QgZXhjZXB0 IGIgd2FzIGRlZmluZWQgYnkgYSBwaGkgaW4gdGhlIGlubmVyCisgICBiYiB3aGljaCB3YXMgbm90 IGhhbmRsZWQuICovCitzaG9ydCBhLCBkOworY2hhciBiOworbG9uZyBjOwordW5zaWduZWQgbG9u ZyBlLCBmOwordm9pZCBnKHVuc2lnbmVkIGxvbmcgaCkgeworICBpZiAoYyA/IGUgOiBiKQorICAg IGlmIChlKQorICAgICAgaWYgKGQpIHsKKyAgICAgICAgYSA9IGYgPyAoeworICAgICAgICAgIHVu c2lnbmVkIGxvbmcgaSA9IGQgPyBmIDogMCwgaiA9IGUgPyBoIDogMDsKKyAgICAgICAgICBpIDwg aiA/IGkgOiBqOworICAgICAgICB9KSA6IDA7CisgICAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZ2NjLmMtdG9ydHVyZS9jb21waWxlL3ByMTE1MTQzLTIuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLmMtdG9ydHVyZS9jb21waWxlL3ByMTE1MTQzLTIuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDVjM2JiZTk3MzgKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2djYy5jLXRvcnR1cmUvY29tcGlsZS9wcjExNTE0My0yLmMKQEAgLTAsMCAr MSwzMCBAQAorLyogeyBkZy1vcHRpb25zICItZmdpbXBsZSIgfSAqLworLyogUFIgdHJlZS1vcHRp bWl6YXRpb24vMTE1MTQzICovCisvKiBUaGlzIHVzZWQgdG8gSUNFLgorICAgbWlubWF4IHBhcnQg b2YgcGhpb3B0IHdvdWxkIHRyYW5zZm9ybSwKKyAgIHdvdWxkIHRyYW5zZm9ybSBgYSE9MD9taW4o YSwgYikgOiAwYCBpbnRvIGBtaW4oYSxiKWAKKyAgIHdoaWNoIHdhcyBjb3JyZWN0IGV4Y2VwdCBi IHdhcyBkZWZpbmVkIGJ5IGEgcGhpIGluIHRoZSBpbm5lcgorICAgYmIgd2hpY2ggd2FzIG5vdCBo YW5kbGVkLiAqLwordW5zaWduZWQgX19HSU1QTEUgKHNzYSxzdGFydHdpdGgoInBoaW9wdCIpKQor Zm9vICh1bnNpZ25lZCBhLCB1bnNpZ25lZCBiKQoreworICB1bnNpZ25lZCBqOworICB1bnNpZ25l ZCBfMjM7CisgIHVuc2lnbmVkIF8xMjsKKworICBfX0JCKDIpOgorICBpZiAoYV82KEQpICE9IDB1 KQorICAgIGdvdG8gX19CQjM7CisgIGVsc2UKKyAgICBnb3RvIF9fQkI0OworCisgIF9fQkIoMyk6 CisgIGpfMTAgPSBfX1BISSAoX19CQjI6IGJfMTEoRCkpOworICBfMjMgPSBfX01JTiAoYV82KEQp LCBqXzEwKTsKKyAgZ290byBfX0JCNDsKKworICBfX0JCKDQpOgorICBfMTIgPSBfX1BISSAoX19C QjM6IF8yMywgX19CQjI6IDB1KTsKKyAgcmV0dXJuIF8xMjsKKworfQpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuYy10b3J0dXJlL2NvbXBpbGUvcHIxMTUxNDMtMy5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuYy10b3J0dXJlL2NvbXBpbGUvcHIxMTUxNDMtMy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41M2M1ZmI1NTg4ZQotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmMtdG9ydHVyZS9jb21waWxlL3ByMTE1MTQzLTMuYwpAQCAtMCwwICsx LDI5IEBACisvKiB7IGRnLW9wdGlvbnMgIi1mZ2ltcGxlIiB9ICovCisvKiBQUiB0cmVlLW9wdGlt aXphdGlvbi8xMTUxNDMgKi8KKy8qIFRoaXMgdXNlZCB0byBJQ0UuCisgICBtaW5tYXggcGFydCBv ZiBwaGlvcHQgd291bGQgdHJhbnNmb3JtLAorICAgd291bGQgdHJhbnNmb3JtIGBhIT0wP21pbihh LCBiKSA6IDBgIGludG8gYG1pbihhLGIpYAorICAgd2hpY2ggd2FzIGNvcnJlY3QgZXhjZXB0IGIg d2FzIGRlZmluZWQgYnkgYSBwaGkgaW4gdGhlIGlubmVyCisgICBiYiB3aGljaCB3YXMgbm90IGhh bmRsZWQuICovCit1bnNpZ25lZCBfX0dJTVBMRSAoc3NhLHN0YXJ0d2l0aCgicGhpb3B0IikpCitm b28gKHVuc2lnbmVkIGEsIHVuc2lnbmVkIGIpCit7CisgIHVuc2lnbmVkIGo7CisgIHVuc2lnbmVk IF8yMzsKKyAgdW5zaWduZWQgXzEyOworCisgIF9fQkIoMik6CisgIGlmIChhXzYoRCkgPiAwdSkK KyAgICBnb3RvIF9fQkIzOworICBlbHNlCisgICAgZ290byBfX0JCNDsKKworICBfX0JCKDMpOgor ICBqXzEwID0gX19QSEkgKF9fQkIyOiBiXzcoRCkpOworICBfMjMgPSBfX01JTiAoYV82KEQpLCBq XzEwKTsKKyAgZ290byBfX0JCNDsKKworICBfX0JCKDQpOgorICBfMTIgPSBfX1BISSAoX19CQjM6 IF8yMywgX19CQjI6IDB1KTsKKyAgcmV0dXJuIF8xMjsKK30KZGlmZiAtLWdpdCBhL2djYy90cmVl LXNzYS1waGlvcHQuY2MgYi9nY2MvdHJlZS1zc2EtcGhpb3B0LmNjCmluZGV4IGUyZGJhNTYzODNi Li41NThkNWI0YjU3ZCAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLXBoaW9wdC5jYworKysgYi9n Y2MvdHJlZS1zc2EtcGhpb3B0LmNjCkBAIC0xOTczLDYgKzE5NzMsMTAgQEAgbWlubWF4X3JlcGxh Y2VtZW50IChiYXNpY19ibG9jayBjb25kX2JiLCBiYXNpY19ibG9jayBtaWRkbGVfYmIsCiAJICB8 fCBnaW1wbGVfY29kZSAoYXNzaWduKSAhPSBHSU1QTEVfQVNTSUdOKQogCXJldHVybiBmYWxzZTsK IAorICAgICAgLyogVGhlcmUgY2Fubm90IGJlIGFueSBwaGkgbm9kZXMgaW4gdGhlIG1pZGRsZSBi Yi4gKi8KKyAgICAgIGlmICghZ2ltcGxlX3NlcV9lbXB0eV9wIChwaGlfbm9kZXMgKG1pZGRsZV9i YikpKQorCXJldHVybiBmYWxzZTsKKwogICAgICAgbGhzID0gZ2ltcGxlX2Fzc2lnbl9saHMgKGFz c2lnbik7CiAgICAgICBhc3NfY29kZSA9IGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKGFzc2lnbik7 CiAgICAgICBpZiAoYXNzX2NvZGUgIT0gTUFYX0VYUFIgJiYgYXNzX2NvZGUgIT0gTUlOX0VYUFIp Ci0tIAoyLjQzLjAKCg== --000000000000a712a6061aa077df--