From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [IPv6:2a00:1450:4864:20::431]) by sourceware.org (Postfix) with ESMTPS id 287FC3857705 for ; Wed, 4 Oct 2023 10:16:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 287FC3857705 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-3215f19a13aso1896803f8f.3 for ; Wed, 04 Oct 2023 03:16:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1696414610; x=1697019410; darn=gcc.gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=wGUWkmjS8V4x6CWvwnRSAEFiUKIlhft+KGO7tTM7K0o=; b=IRz6wzEV75f6RTfvp9A6MfolQJ8zDGPieVHOeOjCr507oBV1CkoPoISfOE5bs3eLEl uLXLBmD/Al9GI2sbq6yyyVo7wPk/EKCNiA/ZscuFkb7Caq4P6FDuUoVPfYgMbc/2zcj4 VDMcSX7Cg8tosqjGX/+Qq+2iMgqymroWg7GJ6YvIL++zbksM+Vi+nhSHya90WVSuVB26 clyca87o1hULTMhmce9iHSnw1wPtW5yeRkObTgsa6TOlAx3KaHsEuygMla3+27woX0QQ S3JNefzpbEASZrgQJJzEjTk5j7UlN/kv4wZ0Cgdt7m73EScVGn1GWjeHwJA7fXhKHTXS OPxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696414610; x=1697019410; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=wGUWkmjS8V4x6CWvwnRSAEFiUKIlhft+KGO7tTM7K0o=; b=nr6QVapHsnO+mafU7ROiR8vEqPemWez2dOL0s1jvDe4PDHnUsoSxoZd8kt+aqUTs2t c/nyiMp8xQzAfCbfAn5hYn4cI26ABRIcU/M1app8tmLFrkERG/+2DrnSNt7zQybsNZ5F 1DPCSDIs1xLArwohR8wq32ltzDw3ykrwuere+7+REOMe4MHkOPKM/BmMsyWxQk4rbQKb 1IPL/1FdMMU4zY2UEtvXhqdhjjZCWiwl8IzVC+AecO4oLV6CknUMpHq0uh+dUB+lYNFK LUR4Sbpd6xh1UTTZnz1OASeCKPDSmGn4cnRSucQn/vrOwPLNgjCevOXBh2mxJBQbI3ZN DH7A== X-Gm-Message-State: AOJu0Yyoz9JXUNJ+Uv+Xama748xvTe5FvJdGRpzQEpv06025EyE/JZMP nQPS1SmipYnCbosYXEm1hCGuHj/PefJ2ObkMX76WqpH/KG1sbGEgffA= X-Google-Smtp-Source: AGHT+IHgGDENb9iDT3Lz5HpCLVMlD5TtgtCoThhjbrm9xGUb83pxnY8WRGWaWKpr8CTGMqGIL+ScfEOp7eR7EJno4bc= X-Received: by 2002:a5d:6408:0:b0:320:38:9e14 with SMTP id z8-20020a5d6408000000b0032000389e14mr1522016wru.7.1696414609964; Wed, 04 Oct 2023 03:16:49 -0700 (PDT) MIME-Version: 1.0 From: Prathamesh Kulkarni Date: Wed, 4 Oct 2023 15:46:14 +0530 Message-ID: Subject: PR111648: Fix wrong code-gen due to incorrect VEC_PERM_EXPR folding To: gcc Patches , Richard Sandiford Content-Type: multipart/mixed; boundary="0000000000003837390606e14e16" X-Spam-Status: No, score=-9.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,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: --0000000000003837390606e14e16 Content-Type: text/plain; charset="UTF-8" Hi, The attached patch attempts to fix PR111648. As mentioned in PR, the issue is when a1 is a multiple of vector length, we end up creating following encoding in result: { base_elem, arg[0], arg[1], ... } (assuming S = 1), where arg is chosen input vector, which is incorrect, since the encoding originally in arg would be: { arg[0], arg[1], arg[2], ... } For the test-case mentioned in PR, vectorizer pass creates VEC_PERM_EXPR where: arg0: { -16, -9, -10, -11 } arg1: { -12, -5, -6, -7 } sel = { 3, 4, 5, 6 } arg0, arg1 and sel are encoded with npatterns = 1 and nelts_per_pattern = 3. Since a1 = 4 and arg_len = 4, it ended up creating the result with following encoding: res = { arg0[3], arg1[0], arg1[1] } // npatterns = 1, nelts_per_pattern = 3 = { -11, -12, -5 } So for res[3], it used S = (-5) - (-12) = 7 And hence computed it as -5 + 7 = 2. instead of selecting arg1[2], ie, -6. The patch tweaks valid_mask_for_fold_vec_perm_cst_p to punt if a1 is a multiple of vector length, so a1 ... ae select elements only from stepped part of the pattern from input vector and return false for this case. Since the vectors are VLS, fold_vec_perm_cst then sets: res_npatterns = res_nelts res_nelts_per_pattern = 1 which seems to fix the issue by encoding all the elements. The patch resulted in Case 4 and Case 5 failing from test_nunits_min_2 because they used sel = { 0, 0, 1, ... } and {len, 0, 1, ... } respectively, which used a1 = 0, and thus selected arg1[0]. I removed Case 4 because it was already covered in test_nunits_min_4, and moved Case 5 to test_nunits_min_4, with sel = { len, 1, 2, ... } and added a new Case 9 to test for this issue. Passes bootstrap+test on aarch64-linux-gnu with and without SVE, and on x86_64-linux-gnu. Does the patch look OK ? Thanks, Prathamesh --0000000000003837390606e14e16 Content-Type: text/plain; charset="US-ASCII"; name="gnu-958-3.txt" Content-Disposition: attachment; filename="gnu-958-3.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lnbkgby10 W1BSMTExNjQ4XSBGaXggd3JvbmcgY29kZS1nZW4gZHVlIHRvIGluY29ycmVjdCBWRUNfUEVSTV9F WFBSIGZvbGRpbmcuCgpnY2MvQ2hhbmdlTG9nOgoJUFIgdHJlZS1vcHRpbWl6YXRpb24vMTExNjQ4 CgkqIGZvbGQtY29uc3QuY2MgKHZhbGlkX21hc2tfZm9yX2ZvbGRfdmVjX3Blcm1fY3N0X3ApOiBQ dW50IGlmIGExCglpcyBhIG11bHRpcGxlIG9mIHZlY3RvciBsZW5ndGguCgkodGVzdF9udW5pdHNf bWluXzIpOiBSZW1vdmUgQ2FzZSA0IGFuZCBtb3ZlIENhc2UgNSB0byAuLi4KCSh0ZXN0X251bml0 c19taW5fNCk6IC4uLiBoZXJlIGFuZCByZW5hbWUgY2FzZSBudW1iZXJzLiBBbHNvIGFkZAoJQ2Fz ZSA5LgoKZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6CglQUiB0cmVlLW9wdGltaXphdGlvbi8xMTE2 NDgKCSogZ2NjLmRnL3ZlY3QvcHIxMTE2NDguYzogTmV3IHRlc3QuCgoKZGlmZiAtLWdpdCBhL2dj Yy9mb2xkLWNvbnN0LmNjIGIvZ2NjL2ZvbGQtY29uc3QuY2MKaW5kZXggNGY4NTYxNTA5ZmYuLmM1 ZjQyMWQ2Yjc2IDEwMDY0NAotLS0gYS9nY2MvZm9sZC1jb25zdC5jYworKysgYi9nY2MvZm9sZC1j b25zdC5jYwpAQCAtMTA2ODIsOCArMTA2ODIsOCBAQCB2YWxpZF9tYXNrX2Zvcl9mb2xkX3ZlY19w ZXJtX2NzdF9wICh0cmVlIGFyZzAsIHRyZWUgYXJnMSwKIAkgIHJldHVybiBmYWxzZTsKIAl9CiAK LSAgICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBzdGVwcGVkIHNlcXVlbmNlIGFsd2F5cyBzZWxlY3Rz IGZyb20gdGhlIHNhbWUKLQkgaW5wdXQgcGF0dGVybi4gICovCisgICAgICAvKiBFbnN1cmUgdGhh dCB0aGUgc3RlcHBlZCBzZXF1ZW5jZSBhbHdheXMgc2VsZWN0cyBmcm9tIHRoZSBzdGVwcGVkCisJ IHBhcnQgb2Ygc2FtZSBpbnB1dCBwYXR0ZXJuLiAgKi8KICAgICAgIHVuc2lnbmVkIGFyZ19ucGF0 dGVybnMKIAk9ICgocTEgJiAxKSA9PSAwKSA/IFZFQ1RPUl9DU1RfTlBBVFRFUk5TIChhcmcwKQog CQkJICA6IFZFQ1RPUl9DU1RfTlBBVFRFUk5TIChhcmcxKTsKQEAgLTEwNjk0LDYgKzEwNjk0LDIw IEBAIHZhbGlkX21hc2tfZm9yX2ZvbGRfdmVjX3Blcm1fY3N0X3AgKHRyZWUgYXJnMCwgdHJlZSBh cmcxLAogCSAgICAqcmVhc29uID0gInN0ZXAgaXMgbm90IG11bHRpcGxlIG9mIG5wYXR0ZXJucyI7 CiAJICByZXR1cm4gZmFsc2U7CiAJfQorCisgICAgICAvKiBJZiBhMSBpcyBhIG11bHRpcGxlIG9m IGxlbiwgaXQgd2lsbCBzZWxlY3QgYmFzZSBlbGVtZW50IG9mIGlucHV0CisJIHZlY3RvciByZXN1 bHRpbmcgaW4gZm9sbG93aW5nIGVuY29kaW5nOgorCSB7IGJhc2VfZWxlbSwgYXJnWzBdLCBhcmdb MV0sIC4uLiB9IHdoZXJlIGFyZyBpcyB0aGUgY2hvc2VuIGlucHV0CisJIHZlY3Rvci4gVGhpcyBl bmNvZGluZyBpcyBub3Qgb3JpZ2luYWxseSBwcmVzZW50IGluIGFyZywgc2luY2UgaXQncworCSBk ZWZpbmVkIGFzOgorCSB7IGFyZ1swXSwgYXJnWzFdLCBhcmdbMl0sIC4uLiB9LiAgKi8KKworICAg ICAgaWYgKG11bHRpcGxlX3AgKGExLCBhcmdfbGVuKSkKKwl7CisJICBpZiAocmVhc29uKQorCSAg ICAqcmVhc29uID0gInNlbGVjdGluZyBiYXNlIGVsZW1lbnQgb2YgaW5wdXQgdmVjdG9yIjsKKwkg IHJldHVybiBmYWxzZTsKKwl9CiAgICAgfQogCiAgIHJldHVybiB0cnVlOwpAQCAtMTc0MjUsNDcg KzE3NDM5LDYgQEAgdGVzdF9udW5pdHNfbWluXzIgKG1hY2hpbmVfbW9kZSB2bW9kZSkKIAl0cmVl IGV4cGVjdGVkX3Jlc1tdID0geyBBUkcwKDApLCBBUkcxKDApLCBBUkcwKDEpLCBBUkcxKDEpIH07 CiAJdmFsaWRhdGVfcmVzICgyLCAyLCByZXMsIGV4cGVjdGVkX3Jlcyk7CiAgICAgICB9Ci0KLSAg ICAgIC8qIENhc2UgNDogbWFzayA9IHswLCAwLCAxLCAuLi59IC8vICgxLCAzKQotCSBUZXN0IHRo YXQgdGhlIHN0ZXBwZWQgc2VxdWVuY2Ugb2YgdGhlIHBhdHRlcm4gc2VsZWN0cyBmcm9tCi0JIHNh bWUgaW5wdXQgcGF0dGVybi4gU2luY2UgaW5wdXQgdmVjdG9ycyBoYXZlIG5wYXR0ZXJucyA9IDIs Ci0JIGFuZCBzdGVwIChhMiAtIGExKSA9IDEsIHN0ZXAgaXMgbm90IGEgbXVsdGlwbGUgb2YgbnBh dHRlcm5zCi0JIGluIGlucHV0IHZlY3Rvci4gU28gcmV0dXJuIE5VTExfVFJFRS4gICovCi0gICAg ICB7Ci0JdHJlZSBhcmcwID0gYnVpbGRfdmVjX2NzdF9yYW5kICh2bW9kZSwgMiwgMywgMSk7Ci0J dHJlZSBhcmcxID0gYnVpbGRfdmVjX2NzdF9yYW5kICh2bW9kZSwgMiwgMywgMSk7Ci0JcG9seV91 aW50NjQgbGVuID0gVFlQRV9WRUNUT1JfU1VCUEFSVFMgKFRSRUVfVFlQRSAoYXJnMCkpOwotCi0J dmVjX3Blcm1fYnVpbGRlciBidWlsZGVyIChsZW4sIDEsIDMpOwotCXBvbHlfdWludDY0IG1hc2tf ZWxlbXNbXSA9IHsgMCwgMCwgMSB9OwotCWJ1aWxkZXJfcHVzaF9lbGVtcyAoYnVpbGRlciwgbWFz a19lbGVtcyk7Ci0KLQl2ZWNfcGVybV9pbmRpY2VzIHNlbCAoYnVpbGRlciwgMiwgbGVuKTsKLQlj b25zdCBjaGFyICpyZWFzb247Ci0JdHJlZSByZXMgPSBmb2xkX3ZlY19wZXJtX2NzdCAoVFJFRV9U WVBFIChhcmcwKSwgYXJnMCwgYXJnMSwgc2VsLAotCQkJCSAgICAgICZyZWFzb24pOwotCUFTU0VS VF9UUlVFIChyZXMgPT0gTlVMTF9UUkVFKTsKLQlBU1NFUlRfVFJVRSAoIXN0cmNtcCAocmVhc29u LCAic3RlcCBpcyBub3QgbXVsdGlwbGUgb2YgbnBhdHRlcm5zIikpOwotICAgICAgfQotCi0gICAg ICAvKiBDYXNlIDU6IG1hc2sgPSB7bGVuLCAwLCAxLCAuLi59IC8vICgxLCAzKQotCSBUZXN0IHRo YXQgc3RlcHBlZCBzZXF1ZW5jZSBvZiB0aGUgcGF0dGVybiBzZWxlY3RzIGZyb20gYXJnMC4KLQkg cmVzID0geyBhcmcxWzBdLCBhcmcwWzBdLCBhcmcwWzFdLCAuLi4gfSAvLyAoMSwgMykgICovCi0g ICAgICB7Ci0JdHJlZSBhcmcwID0gYnVpbGRfdmVjX2NzdF9yYW5kICh2bW9kZSwgMSwgMywgMSk7 Ci0JdHJlZSBhcmcxID0gYnVpbGRfdmVjX2NzdF9yYW5kICh2bW9kZSwgMSwgMywgMSk7Ci0JcG9s eV91aW50NjQgbGVuID0gVFlQRV9WRUNUT1JfU1VCUEFSVFMgKFRSRUVfVFlQRSAoYXJnMCkpOwot Ci0JdmVjX3Blcm1fYnVpbGRlciBidWlsZGVyIChsZW4sIDEsIDMpOwotCXBvbHlfdWludDY0IG1h c2tfZWxlbXNbXSA9IHsgbGVuLCAwLCAxIH07Ci0JYnVpbGRlcl9wdXNoX2VsZW1zIChidWlsZGVy LCBtYXNrX2VsZW1zKTsKLQotCXZlY19wZXJtX2luZGljZXMgc2VsIChidWlsZGVyLCAyLCBsZW4p OwotCXRyZWUgcmVzID0gZm9sZF92ZWNfcGVybV9jc3QgKFRSRUVfVFlQRSAoYXJnMCksIGFyZzAs IGFyZzEsIHNlbCk7Ci0KLQl0cmVlIGV4cGVjdGVkX3Jlc1tdID0geyBBUkcxKDApLCBBUkcwKDAp LCBBUkcwKDEpIH07Ci0JdmFsaWRhdGVfcmVzICgxLCAzLCByZXMsIGV4cGVjdGVkX3Jlcyk7Ci0g ICAgICB9CiAgICAgfQogfQogCkBAIC0xNzUyOCw3ICsxNzUwMSwyNiBAQCB0ZXN0X251bml0c19t aW5fNCAobWFjaGluZV9tb2RlIHZtb2RlKQogCXZhbGlkYXRlX3JlcyAoMSwgMywgcmVzLCBleHBl Y3RlZF9yZXMpOwogICAgICAgfQogCi0gICAgICAvKiBDYXNlIDQ6CisgICAgICAvKiBDYXNlIDQ6 IG1hc2sgPSB7bGVuLCAxLCAyLCAuLi59IC8vICgxLCAzKQorCSBUZXN0IHRoYXQgc3RlcHBlZCBz ZXF1ZW5jZSBvZiB0aGUgcGF0dGVybiBzZWxlY3RzIGZyb20gYXJnMC4KKwkgcmVzID0geyBhcmcx WzBdLCBhcmcwWzFdLCBhcmcwWzJdLCAuLi4gfSAvLyAoMSwgMykgICovCisgICAgICB7CisJdHJl ZSBhcmcwID0gYnVpbGRfdmVjX2NzdF9yYW5kICh2bW9kZSwgMSwgMywgMSk7CisJdHJlZSBhcmcx ID0gYnVpbGRfdmVjX2NzdF9yYW5kICh2bW9kZSwgMSwgMywgMSk7CisJcG9seV91aW50NjQgbGVu ID0gVFlQRV9WRUNUT1JfU1VCUEFSVFMgKFRSRUVfVFlQRSAoYXJnMCkpOworCisJdmVjX3Blcm1f YnVpbGRlciBidWlsZGVyIChsZW4sIDEsIDMpOworCXBvbHlfdWludDY0IG1hc2tfZWxlbXNbXSA9 IHsgbGVuLCAxLCAyIH07CisJYnVpbGRlcl9wdXNoX2VsZW1zIChidWlsZGVyLCBtYXNrX2VsZW1z KTsKKworCXZlY19wZXJtX2luZGljZXMgc2VsIChidWlsZGVyLCAyLCBsZW4pOworCXRyZWUgcmVz ID0gZm9sZF92ZWNfcGVybV9jc3QgKFRSRUVfVFlQRSAoYXJnMCksIGFyZzAsIGFyZzEsIHNlbCk7 CisKKwl0cmVlIGV4cGVjdGVkX3Jlc1tdID0geyBBUkcxKDApLCBBUkcwKDEpLCBBUkcwKDIpIH07 CisJdmFsaWRhdGVfcmVzICgxLCAzLCByZXMsIGV4cGVjdGVkX3Jlcyk7CisgICAgICB9CisKKyAg ICAgIC8qIENhc2UgNToKIAlzZWwgPSB7IGxlbiwgMCwgMiwgLi4uIH0gLy8gKDEsIDMpCiAJVGhp cyBzaG91bGQgcmV0dXJuIE5VTEwgYmVjYXVzZSB3ZSBjcm9zcyB0aGUgaW5wdXQgdmVjdG9ycy4K IAlCZWNhdXNlLApAQCAtMTc1NjEsNyArMTc1NTMsNyBAQCB0ZXN0X251bml0c19taW5fNCAobWFj aGluZV9tb2RlIHZtb2RlKQogCUFTU0VSVF9UUlVFICghc3RyY21wIChyZWFzb24sICJjcm9zc2Vk IGlucHV0IHZlY3RvcnMiKSk7CiAgICAgICB9CiAKLSAgICAgIC8qIENhc2UgNTogbnBhdHRlcm5z KGFyZzApID0gNCA+IG5wYXR0ZXJucyhzZWwpID0gMgorICAgICAgLyogQ2FzZSA2OiBucGF0dGVy bnMoYXJnMCkgPSA0ID4gbnBhdHRlcm5zKHNlbCkgPSAyCiAJIG1hc2sgPSB7IDAsIGxlbiwgMSwg bGVuICsgMSwgLi4ufSAvLyAoMiwgMikKIAkgcmVzID0geyBhcmcwWzBdLCBhcmcxWzBdLCBhcmcw WzFdLCBhcmcxWzFdLCAuLi4gfSAvLyAoMiwgMikKIApAQCAtMTc1ODMsNyArMTc1NzUsNyBAQCB0 ZXN0X251bml0c19taW5fNCAobWFjaGluZV9tb2RlIHZtb2RlKQogCXZhbGlkYXRlX3JlcyAoMiwg MiwgcmVzLCBleHBlY3RlZF9yZXMpOwogICAgICAgfQogCi0gICAgICAvKiBDYXNlIDY6IFRlc3Qg Y29tYmluYXRpb24gaW4gc2VsLCB3aGVyZSBvbmUgcGF0dGVybiBpcyBkdXAgYW5kIG90aGVyCisg ICAgICAvKiBDYXNlIDc6IFRlc3QgY29tYmluYXRpb24gaW4gc2VsLCB3aGVyZSBvbmUgcGF0dGVy biBpcyBkdXAgYW5kIG90aGVyCiAJIGlzIHN0ZXBwZWQgc2VxdWVuY2UuCiAJIHNlbCA9IHsgMCwg MCwgMCwgMSwgMCwgMiwgLi4uIH0gLy8gKDIsIDMpCiAJIHJlcyA9IHsgYXJnMFswXSwgYXJnMFsw XSwgYXJnMFswXSwKQEAgLTE3NjA1LDcgKzE3NTk3LDcgQEAgdGVzdF9udW5pdHNfbWluXzQgKG1h Y2hpbmVfbW9kZSB2bW9kZSkKIAl2YWxpZGF0ZV9yZXMgKDIsIDMsIHJlcywgZXhwZWN0ZWRfcmVz KTsKICAgICAgIH0KIAotICAgICAgLyogQ2FzZSA3OiBQUjExMTA0ODogQ2hlY2sgdGhhdCB3ZSBz ZXQgYXJnX25wYXR0ZXJucyBjb3JyZWN0bHksCisgICAgICAvKiBDYXNlIDg6IFBSMTExMDQ4OiBD aGVjayB0aGF0IHdlIHNldCBhcmdfbnBhdHRlcm5zIGNvcnJlY3RseSwKIAkgd2hlbiBhcmcwLCBh cmcxIGFuZCBzZWwgaGF2ZSBkaWZmZXJlbnQgbnVtYmVyIG9mIHBhdHRlcm5zLgogCSBhcmcwIGlz IG9mIHNoYXBlICgxLCAxKQogCSBhcmcxIGlzIG9mIHNoYXBlICg0LCAxKQpAQCAtMTc2MzQsNiAr MTc2MjYsNTEgQEAgdGVzdF9udW5pdHNfbWluXzQgKG1hY2hpbmVfbW9kZSB2bW9kZSkKIAlBU1NF UlRfVFJVRSAocmVzID09IE5VTExfVFJFRSk7CiAJQVNTRVJUX1RSVUUgKCFzdHJjbXAgKHJlYXNv biwgInN0ZXAgaXMgbm90IG11bHRpcGxlIG9mIG5wYXR0ZXJucyIpKTsKICAgICAgIH0KKworICAg ICAgLyogQ2FzZSA5OiBQUjExMTY0OCAtIGExIGlzIG11bHRpcGxlIG9mIHZlY3RvciBsZW5ndGgs CisJIHdoaWNoIHJlc3VsdHMgaW4gaW5jb3JyZWN0IGVuY29kaW5nLiBWZXJpZnkgdGhhdCB3ZSBy ZXR1cm4KKwkgTlVMTCBmb3IgdGhpcyBjYXNlLgorCSBzZWwgPSB7IGJhc2VfZWxlbSwgbGVuLCBs ZW4rMSwgLi4uIH0gLy8gKDEsIDMpCisJIEluIHRoaXMgY2FzZSwgdGhlIHNpbmdsZSBwYXR0ZXJu IGlzOiB7IGJhc2VfZWxlbSBsZW4sIGxlbisxLCAuLi59CisJIExldCdzIGFzc3VtZSB0aGF0IGJh c2VfZWxlbSBpcyB1c2VkIGZvciBpbmRleGluZyBpbnRvIGFyZzAsCisJIGFuZCBhMSAuLi4gYWUg Y2hvb3NlcyBlbGVtZW50cyBmcm9tIGFyZzEuCisJIFNvIHJlcyA9IHsgYXJnMFtiYXNlX2VsZW1d LCBhcmcxWzBdLCBhcmcxWzFdLCAuLi4gfSAvLyAoMSwgMykKKwkgV2hpY2ggY3JlYXRlcyBhbiBp bmNvcnJlY3QgZW5jb2Rpbmcgd2l0aCBTID0gYXJnMVsxXSAtIGFyZzFbMF0KKwkgd2hpbGUgdGhl IG9yaWdpbmFsIGVuY29kaW5nIGluIGFyZzEgaXMKKwkgYXJnMTogeyBhcmcxWzBdLCBhcmcxWzFd LCBhcmcxWzJdLCAuLi4gfQorCSB3aXRoIFMgPSBhcmcxWzJdIC0gYXJnMVsxXS4KKworCSBBcyBh IGNvbmNyZXRlIGV4YW1wbGUsIGZvciBhYm92ZSBQUjoKKwkgYXJnMDogeyAtMTYsIC05LCAtMTAs IC0xMSB9CisJIGFyZzE6IHsgLTEyLCAtNSwgLTYsIC03IH0KKwkgc2VsID0geyAzLCA0LCA1LCA2 IH0KKworCSBhcmcwLCBhcmcxIGFuZCBzZWwgYXJlIGVuY29kZWQgd2l0aCBucGF0dGVybnMgPSAx IGFuZCBuZWx0c19wZXJfcGF0dGVybiA9IDMuCisJIFNpbmNlIGExID0gNCBhbmQgYXJnX2xlbiA9 IDQsIGl0IGVuZGVkIHVwIGNyZWF0aW5nIHRoZSByZXN1bHQgd2l0aAorCSBmb2xsb3dpbmcgZW5j b2Rpbmc6CisJIHJlcyA9IHsgYXJnMFszXSwgYXJnMVswXSwgYXJnMVsxXSB9IC8vICgxLCAzKQor CSAgICAgPSB7IC0xMSwgLTEyLCAtNSB9CisKKwkgU28gZm9yIHJlc1szXSwgaXQgdXNlZCBTID0g KC01KSAtICgtMTIpID0gNworCSBBbmQgaGVuY2UgY29tcHV0ZWQgaXQgYXMgLTUgKyA3ID0gMi4K KwkgaW5zdGVhZCBvZiBhcmcxWzJdLCBpZSwgLTYsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IHZhbHVl LgorCSBFbnN1cmUgdGhhdCB2YWxpZF9tYXNrX2Zvcl9mb2xkX3ZlY19wZXJtX2NzdCByZXR1cm5z IGZhbHNlIGZvciB0aGlzIGNhc2UuICAqLworICAgICAgeworCXRyZWUgYXJnMCA9IGJ1aWxkX3Zl Y19jc3RfcmFuZCAodm1vZGUsIDEsIDMpOworCXRyZWUgYXJnMSA9IGJ1aWxkX3ZlY19jc3RfcmFu ZCAodm1vZGUsIDEsIDMpOworCXBvbHlfdWludDY0IGxlbiA9IFRZUEVfVkVDVE9SX1NVQlBBUlRT IChUUkVFX1RZUEUgKGFyZzApKTsKKworCXZlY19wZXJtX2J1aWxkZXIgYnVpbGRlciAobGVuLCAx LCAzKTsKKwlwb2x5X3VpbnQ2NCBtYXNrX2VsZW1zW10gPSB7IDAsIGxlbiwgbGVuKzEgfTsKKwli dWlsZGVyX3B1c2hfZWxlbXMgKGJ1aWxkZXIsIG1hc2tfZWxlbXMpOworCisJdmVjX3Blcm1faW5k aWNlcyBzZWwgKGJ1aWxkZXIsIDIsIGxlbik7CisJY29uc3QgY2hhciAqcmVhc29uOworCXRyZWUg cmVzID0gZm9sZF92ZWNfcGVybV9jc3QgKFRSRUVfVFlQRSAoYXJnMCksIGFyZzAsIGFyZzEsIHNl bCwgJnJlYXNvbik7CisJQVNTRVJUX1RSVUUgKHJlcyA9PSBOVUxMX1RSRUUpOworCUFTU0VSVF9U UlVFICghc3RyY21wIChyZWFzb24sCisJCQkgICAgICAic2VsZWN0aW5nIGJhc2UgZWxlbWVudCBv ZiBpbnB1dCB2ZWN0b3IiKSk7CisgICAgICB9CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L3ByMTExNjQ4LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ByMTExNjQ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA5 M2UyYjAyNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9w cjExMTY0OC5jCkBAIC0wLDAgKzEsMjMgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7 IGRnLW9wdGlvbnMgIi1PMiAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8KKworaW50IGE7Citp bnQgKmIgPSAmYTsKK3N0YXRpYyBpbnQgKipjID0gJmI7CitzdGF0aWMgaW50IGQ7CitzaG9ydCBl Oworc2hvcnQgZjsKKworX0Jvb2wgZm9vICgpCit7CisgIGYgPSAtMjE7CisgIGZvciAoOyBmIDwg LTU7IGYrKykgeworICAgIGUgPSBmIF4gMzsKKyAgICBkID0gKmI7CisgICAgKipjID0gZTsKKyAg fQorCisgIHJldHVybiBkID09IC02OworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAgInJldHVybiAxIiAib3B0aW1pemVkIiB9IH0gKi8K --0000000000003837390606e14e16--