> -----Original Message-----
> From: Richard Sandiford <richard.sandif...@arm.com>
> Sent: Monday, September 9, 2024 9:29 AM
> To: Tamar Christina <tamar.christ...@arm.com>
> Cc: gcc-patches@gcc.gnu.org; nd <n...@arm.com>; Richard Earnshaw
> <richard.earns...@arm.com>; Marcus Shawcroft
> <marcus.shawcr...@arm.com>; ktkac...@gcc.gnu.org
> Subject: Re: [PATCH 4/4]AArch64: Define VECTOR_STORE_FLAG_VALUE.
> 
> Tamar Christina <tamar.christ...@arm.com> writes:
> > Hi All,
> >
> > This defines VECTOR_STORE_FLAG_VALUE to CONST1_RTX for AArch64
> > so we simplify vector comparisons in AArch64.
> >
> > With this enabled
> >
> > res:
> >         movi    v0.4s, 0
> >         cmeq    v0.4s, v0.4s, v0.4s
> >         ret
> >
> > is simplified to:
> >
> > res:
> >         mvni    v0.4s, 0
> >         ret
> >
> > NOTE: I don't really like the testcase as it depends on an
> > uninitialised value to hide the constant from GIMPLE.
> >
> > Happy to go with something else if there are any suggestions.
> > I thought about an RTL testcase, but those seem painful.
> 
> Like you say, I think an RTL testcase would be better.  Could you use
> the attached (for gcc.dg/rtl/aarch64)?
> 

Thanks, do you have any tips for writing these? If there a way to dump a
skeleton like with the gimple tests?

Thanks,
Tamar

> > Bootstrapped Regtested on aarch64-none-linux-gnu and no issues.
> >
> > Ok for master?
> >
> > Thanks,
> > Tamar
> >
> > gcc/ChangeLog:
> >
> >     * config/aarch64/aarch64.h (VECTOR_STORE_FLAG_VALUE): New.
> >
> > gcc/testsuite/ChangeLog:
> >
> >     * gcc.target/aarch64/vector-cmp-rtl-elim.c: New test.
> >
> > ---
> >
> > diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
> > index
> 2dfb999bea53414498a2355bb30db938f6b94100..b99f69103ab7e1d44e5e41e
> e89fb9a74450c57ca 100644
> > --- a/gcc/config/aarch64/aarch64.h
> > +++ b/gcc/config/aarch64/aarch64.h
> > @@ -156,6 +156,8 @@
> >
> >  #define PCC_BITFIELD_TYPE_MATTERS  1
> >
> > +#define VECTOR_STORE_FLAG_VALUE(MODE) CONST1_RTX
> (GET_MODE_INNER (MODE))
> > +
> 
> I think it'd be useful to capture the reasons we discussed internally
> for preferring this choice.
> 
> /* Use the same RTL truth representation for vector elements as we do
>    for scalars.  This maintains the property that a comparison like
>    eq:V4SI is a composition of 4 individual eq:SIs, just like plus:V4SI
>    is a composition of 4 individual plus:SIs.
> 
>    This means that Advanced SIMD comparisons are represented in RTL as
>    (neg (op ...)).  */
> 
> OK with those changes, thanks.
> 
> Richard
> 
> >  #ifndef USED_FOR_TARGET
> >
> >  /* Define an enum of all features (ISA modes, architectures and 
> > extensions).
> > diff --git a/gcc/testsuite/gcc.target/aarch64/vector-cmp-rtl-elim.c
> b/gcc/testsuite/gcc.target/aarch64/vector-cmp-rtl-elim.c
> > new file mode 100644
> > index
> 0000000000000000000000000000000000000000..d67baa216d8332a26bdc6
> 4350402b77d87379f28
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/aarch64/vector-cmp-rtl-elim.c
> > @@ -0,0 +1,18 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-O3" } */
> > +/* { dg-final { check-function-bodies "**" "" "" } } */
> > +
> > +#include <arm_neon.h>
> > +
> > +/*
> > +** res:
> > +** mvni    v0.4s, 0
> > +** ret
> > +*/
> > +uint32x4_t res ()
> > +{
> > +  uint32x4_t a;
> > +  uint32x4_t b = {0, 0, 0, 0};
> > +  return vceqq_u32 (a, b);
> > +}
> > +

Reply via email to