From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id D16FE3858D1E for ; Mon, 30 Jan 2023 16:38:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D16FE3858D1E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 691911A00; Mon, 30 Jan 2023 08:39:30 -0800 (PST) Received: from [10.57.76.155] (unknown [10.57.76.155]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id CD3A53F882; Mon, 30 Jan 2023 08:38:47 -0800 (PST) Content-Type: multipart/mixed; boundary="------------wBW292rP0vIJpBN4C03NSDf0" Message-ID: <95f42cb0-a238-bc78-2ef6-2ef888953e62@arm.com> Date: Mon, 30 Jan 2023 16:38:42 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH 1/3] arm: Fix sign of MVE predicate mve_pred16_t [PR 107674] Content-Language: en-US To: Kyrylo Tkachov , "gcc-patches@gcc.gnu.org" Cc: Richard Earnshaw References: <13d03aef-f5d1-03fe-5281-31921d24dce0@arm.com> From: "Andre Vieira (lists)" In-Reply-To: X-Spam-Status: No, score=-16.4 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_NONE,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,KAM_LOTSOFHASH,KAM_SHORT,NICE_REPLY_A,SPF_HELO_NONE,SPF_NONE,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: This is a multi-part message in MIME format. --------------wBW292rP0vIJpBN4C03NSDf0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Here's a new version with a more robust test. OK for trunk? On 27/01/2023 09:56, Kyrylo Tkachov wrote: > > >> -----Original Message----- >> From: Andre Vieira (lists) >> Sent: Friday, January 27, 2023 9:54 AM >> To: Kyrylo Tkachov ; gcc-patches@gcc.gnu.org >> Cc: Richard Earnshaw >> Subject: Re: [PATCH 1/3] arm: Fix sign of MVE predicate mve_pred16_t [PR >> 107674] >> >> >> >> On 26/01/2023 15:02, Kyrylo Tkachov wrote: >>> Hi Andre, >>> >>>> -----Original Message----- >>>> From: Andre Vieira (lists) >>>> Sent: Tuesday, January 24, 2023 1:41 PM >>>> To: gcc-patches@gcc.gnu.org >>>> Cc: Kyrylo Tkachov ; Richard Earnshaw >>>> >>>> Subject: [PATCH 1/3] arm: Fix sign of MVE predicate mve_pred16_t [PR >>>> 107674] >>>> >>>> Hi, >>>> >>>> The ACLE defines mve_pred16_t as an unsigned short. This patch makes >>>> sure GCC treats the predicate as an unsigned type, rather than signed. >>>> >>>> Bootstrapped on aarch64-none-eabi and regression tested on arm-none- >> eabi >>>> and armeb-none-eabi for armv8.1-m.main+mve.fp. >>>> >>>> OK for trunk? >>>> >>>> gcc/ChangeLog: >>>> >>>> PR target/107674 >>>> * config/arm/arm-builtins.cc (arm_simd_builtin_type): Rewrite to >>>> use >>>> new qualifiers parameter and use unsigned short type for MVE >>>> predicate. >>>> (arm_init_builtin): Call arm_simd_builtin_type with qualifiers >>>> parameter. >>>> (arm_init_crypto_builtins): Likewise. >>>> >>>> gcc/testsuite/ChangeLog: >>>> >>>> PR target/107674 >>>> * gcc.target/arm/mve/mve_vpt.c: New test. >>> >>> diff --git a/gcc/config/arm/arm-builtins.cc b/gcc/config/arm/arm-builtins.cc >>> index >> 11d7478d9df69139802a9d42c09dd0de7480b60e..6c67cec93ff76a4b42f3a0b3 >> 05f697142e88fcd9 100644 >>> --- a/gcc/config/arm/arm-builtins.cc >>> +++ b/gcc/config/arm/arm-builtins.cc >>> @@ -1489,12 +1489,14 @@ arm_lookup_simd_builtin_type >> (machine_mode mode, >>> } >>> >>> static tree >>> -arm_simd_builtin_type (machine_mode mode, bool unsigned_p, bool >> poly_p) >>> +arm_simd_builtin_type (machine_mode mode, enum arm_type_qualifiers >> qualifiers) >>> { >>> >>> I think in C++ now we can leave out the "enum" here. >>> >>> diff --git a/gcc/testsuite/gcc.target/arm/mve/mve_vpt.c >> b/gcc/testsuite/gcc.target/arm/mve/mve_vpt.c >>> new file mode 100644 >>> index >> 0000000000000000000000000000000000000000..26a565b79dd1348e361b3a >> a23a1d6e6d13bffce8 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/arm/mve/mve_vpt.c >>> @@ -0,0 +1,27 @@ >>> +/* { dg-options "-O2" } */ >>> +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ >>> +/* { dg-add-options arm_v8_1m_mve } */ >>> +/* { dg-final { check-function-bodies "**" "" } } */ >>> +#include >>> +void test0 (uint8_t *a, uint8_t *b, uint8_t *c) >>> +{ >>> + uint8x16_t va = vldrbq_u8 (a); >>> + uint8x16_t vb = vldrbq_u8 (b); >>> + mve_pred16_t p = vcmpeqq_u8 (va, vb); >>> + uint8x16_t vc = vaddq_x_u8 (va, vb, p); >>> + vstrbq_p_u8 (c, vc, p); >>> +} >>> +/* >>> +** test0: >>> +** vldrb.8 q2, \[r0\] >>> +** vldrb.8 q1, \[r1\] >>> +** vcmp.i8 eq, q2, q1 >>> +** vmrs r3, p0 @ movhi >>> +** uxth r3, r3 >>> +** vmsr p0, r3 @ movhi >>> +** vpst >>> +** vaddt.i8 q3, q2, q1 >>> +** vpst >>> +** vstrbt.8 q3, \[r2\] >>> +** bx lr >>> +*/ >>> >>> This explicit assembly matching looks quite fragile and sensitive to future >> scheduling and RA changes. >>> Is there something more targeted we could scan for to check that the >> predicate is unsigned now? >> No not really, as it's not unsigned everywhere, only in its intermediate >> representation between intrinsics. GCC is aware that mve_pred16_t is an >> unsigned short, so as soon as you try to use the value on its own or >> pass it as an argument or return, there is an implicit cast. >> >> I could make this particular test-case more robust by not checking >> specific registers. Though the sequence of loads-cmp-add-store will >> always be the same as it's data-dependent. > > Yeah, I suspected as such. Ok, let's abstract the registers away (I think check-function-bodies can use regex capturing to record particular registers) then. > Thanks, > Kyrill > --------------wBW292rP0vIJpBN4C03NSDf0 Content-Type: text/plain; charset=UTF-8; name="pr107674-1v2.patch" Content-Disposition: attachment; filename="pr107674-1v2.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2FybS1idWlsdGlucy5jYyBiL2djYy9jb25m aWcvYXJtL2FybS1idWlsdGlucy5jYwppbmRleCAxMWQ3NDc4ZDlkZjY5MTM5ODAyYTlkNDJj MDlkZDBkZTc0ODBiNjBlLi41OGJmODU2ZjA4ZDhkNDgzNmQwMWM1ZTQ1NDVkYzViYWIyZjM5 YzE0IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FybS9hcm0tYnVpbHRpbnMuY2MKKysrIGIv Z2NjL2NvbmZpZy9hcm0vYXJtLWJ1aWx0aW5zLmNjCkBAIC0xNDg5LDEyICsxNDg5LDE0IEBA IGFybV9sb29rdXBfc2ltZF9idWlsdGluX3R5cGUgKG1hY2hpbmVfbW9kZSBtb2RlLAogfQog CiBzdGF0aWMgdHJlZQotYXJtX3NpbWRfYnVpbHRpbl90eXBlIChtYWNoaW5lX21vZGUgbW9k ZSwgYm9vbCB1bnNpZ25lZF9wLCBib29sIHBvbHlfcCkKK2FybV9zaW1kX2J1aWx0aW5fdHlw ZSAobWFjaGluZV9tb2RlIG1vZGUsIGFybV90eXBlX3F1YWxpZmllcnMgcXVhbGlmaWVycykK IHsKLSAgaWYgKHBvbHlfcCkKKyAgaWYgKChxdWFsaWZpZXJzICYgcXVhbGlmaWVyX3BvbHkp ICE9IDApCiAgICAgcmV0dXJuIGFybV9sb29rdXBfc2ltZF9idWlsdGluX3R5cGUgKG1vZGUs IHF1YWxpZmllcl9wb2x5KTsKLSAgZWxzZSBpZiAodW5zaWduZWRfcCkKKyAgZWxzZSBpZiAo KHF1YWxpZmllcnMgJiBxdWFsaWZpZXJfdW5zaWduZWQpICE9IDApCiAgICAgcmV0dXJuIGFy bV9sb29rdXBfc2ltZF9idWlsdGluX3R5cGUgKG1vZGUsIHF1YWxpZmllcl91bnNpZ25lZCk7 CisgIGVsc2UgaWYgKChxdWFsaWZpZXJzICYgcXVhbGlmaWVyX3ByZWRpY2F0ZSkgIT0gMCkK KyAgICByZXR1cm4gdW5zaWduZWRfaW50SElfdHlwZV9ub2RlOwogICBlbHNlCiAgICAgcmV0 dXJuIGFybV9sb29rdXBfc2ltZF9idWlsdGluX3R5cGUgKG1vZGUsIHF1YWxpZmllcl9ub25l KTsKIH0KQEAgLTE3NTUsOSArMTc1Nyw3IEBAIGFybV9pbml0X2J1aWx0aW4gKHVuc2lnbmVk IGludCBmY29kZSwgYXJtX2J1aWx0aW5fZGF0dW0gKmQsCiAgICAgICBlbHNlCiAJewogCSAg ZWx0eXBlCi0JICAgID0gYXJtX3NpbWRfYnVpbHRpbl90eXBlIChvcF9tb2RlLAotCQkJCSAg ICAgKHF1YWxpZmllcnMgJiBxdWFsaWZpZXJfdW5zaWduZWQpICE9IDAsCi0JCQkJICAgICAo cXVhbGlmaWVycyAmIHF1YWxpZmllcl9wb2x5KSAhPSAwKTsKKwkgICAgPSBhcm1fc2ltZF9i dWlsdGluX3R5cGUgKG9wX21vZGUsIHF1YWxpZmllcnMpOwogCSAgZ2NjX2Fzc2VydCAoZWx0 eXBlICE9IE5VTEwpOwogCiAJICAvKiBBZGQgcXVhbGlmaWVycy4gICovCkBAIC0xOTI5LDEw ICsxOTI5LDEwIEBAIHN0YXRpYyB2b2lkCiBhcm1faW5pdF9jcnlwdG9fYnVpbHRpbnMgKHZv aWQpCiB7CiAgIHRyZWUgVjE2VVFJX3R5cGVfbm9kZQotICAgID0gYXJtX3NpbWRfYnVpbHRp bl90eXBlIChWMTZRSW1vZGUsIHRydWUsIGZhbHNlKTsKKyAgICA9IGFybV9zaW1kX2J1aWx0 aW5fdHlwZSAoVjE2UUltb2RlLCBxdWFsaWZpZXJfdW5zaWduZWQpOwogCiAgIHRyZWUgVjRV U0lfdHlwZV9ub2RlCi0gICAgPSBhcm1fc2ltZF9idWlsdGluX3R5cGUgKFY0U0ltb2RlLCB0 cnVlLCBmYWxzZSk7CisgICAgPSBhcm1fc2ltZF9idWlsdGluX3R5cGUgKFY0U0ltb2RlLCBx dWFsaWZpZXJfdW5zaWduZWQpOwogCiAgIHRyZWUgdjE2dXFpX2Z0eXBlX3YxNnVxaQogICAg ID0gYnVpbGRfZnVuY3Rpb25fdHlwZV9saXN0IChWMTZVUUlfdHlwZV9ub2RlLCBWMTZVUUlf dHlwZV9ub2RlLApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9t dmUvbXZlX3ZwdC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9tdmUvbXZlX3Zw dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLjI4ZTQ2OTdjM2M1YmNjODliMzdmY2IyOTZmNGI0NmM4NjFh ZWQyN2QKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJt L212ZS9tdmVfdnB0LmMKQEAgLTAsMCArMSwyNyBAQAorLyogeyBkZy1vcHRpb25zICItTzIi IH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGFybV92OF8xbV9tdmVf b2sgfSAqLworLyogeyBkZy1hZGQtb3B0aW9ucyBhcm1fdjhfMW1fbXZlIH0gKi8KKy8qIHsg ZGctZmluYWwgeyBjaGVjay1mdW5jdGlvbi1ib2RpZXMgIioqIiAiIiB9IH0gKi8KKyNpbmNs dWRlIDxhcm1fbXZlLmg+Cit2b2lkIHRlc3QwICh1aW50OF90ICphLCB1aW50OF90ICpiLCB1 aW50OF90ICpjKQoreworICAgIHVpbnQ4eDE2X3QgdmEgPSB2bGRyYnFfdTggKGEpOworICAg IHVpbnQ4eDE2X3QgdmIgPSB2bGRyYnFfdTggKGIpOworICAgIG12ZV9wcmVkMTZfdCBwID0g dmNtcGVxcV91OCAodmEsIHZiKTsKKyAgICB1aW50OHgxNl90IHZjID0gdmFkZHFfeF91OCAo dmEsIHZiLCBwKTsKKyAgICB2c3RyYnFfcF91OCAoYywgdmMsIHApOworfQorLyoKKyoqIHRl c3QwOgorKioJdmxkcmIuOAlxWzAtOV0rLCBcW3JbMC05XStcXQorKioJdmxkcmIuOAlxWzAt OV0rLCBcW3JbMC05XStcXQorKioJdmNtcC5pOAllcSwgcVswLTldKywgcVswLTldKworKioJ dm1ycwkoclswLTldKyksIHAwCUAgbW92aGkKKyoqCXV4dGgJXDEsIFwxCisqKgl2bXNyCXAw LCBcMQlAIG1vdmhpCisqKgl2cHN0CisqKgl2YWRkdC5pOAkocVswLTldKyksIHFbMC05XSss IHFbMC05XSsKKyoqCXZwc3QKKyoqCXZzdHJidC44CVwyLCBcW3JbMC05XStcXQorKioJYngJ bHIKKyovCg== --------------wBW292rP0vIJpBN4C03NSDf0--