> -----Original Message----- > From: Kyrylo Tkachov > Sent: Thursday, January 26, 2023 3:02 PM > To: Andre Vieira (lists) <andre.simoesdiasvie...@arm.com>; gcc- > patc...@gcc.gnu.org > Cc: Richard Earnshaw <richard.earns...@arm.com> > Subject: RE: [PATCH 1/3] arm: Fix sign of MVE predicate mve_pred16_t [PR > 107674] > > Hi Andre, > > > -----Original Message----- > > From: Andre Vieira (lists) <andre.simoesdiasvie...@arm.com> > > Sent: Tuesday, January 24, 2023 1:41 PM > > To: gcc-patches@gcc.gnu.org > > Cc: Kyrylo Tkachov <kyrylo.tkac...@arm.com>; Richard Earnshaw > > <richard.earns...@arm.com> > > 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 <arm_mve.h> > +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?
The patch looks fine to me btw. With a more robust testcase and the cosmetic fix above it can go in. Thanks, Kyrill > > Thanks, > Kyrill