Hi Christophe, Sorry for the delay.
> -----Original Message----- > From: Gcc-patches <gcc-patches- > bounces+kyrylo.tkachov=arm....@gcc.gnu.org> On Behalf Of Christophe > Lyon via Gcc-patches > Sent: 07 September 2021 10:15 > To: gcc-patches@gcc.gnu.org > Subject: [PATCH 01/13] arm: Add new tests for comparison vectorization > with Neon and MVE > > This patch mainly adds Neon tests similar to existing MVE ones, > to make sure we do not break Neon when fixing MVE. > > mve-vcmp-f32-2.c is similar to mve-vcmp-f32.c but uses a conditional > with 2.0f and 3.0f constants to help scan-assembler-times. > > 2021-09-01 Christophe Lyon <christophe.l...@foss.st.com> > > gcc/testsuite/ > * gcc.target/arm/simd/mve-vcmp-f32-2.c: New. > * gcc.target/arm/simd/neon-compare-1.c: New. > * gcc.target/arm/simd/neon-compare-2.c: New. > * gcc.target/arm/simd/neon-compare-3.c: New. > * gcc.target/arm/simd/neon-compare-scalar-1.c: New. > * gcc.target/arm/simd/neon-vcmp-f16.c: New. > * gcc.target/arm/simd/neon-vcmp-f32-2.c: New. > * gcc.target/arm/simd/neon-vcmp-f32-3.c: New. > * gcc.target/arm/simd/neon-vcmp-f32.c: New. > * gcc.target/arm/simd/neon-vcmp.c: New. Thanks, Kyrill > > diff --git a/gcc/testsuite/gcc.target/arm/simd/mve-vcmp-f32-2.c > b/gcc/testsuite/gcc.target/arm/simd/mve-vcmp-f32-2.c > new file mode 100644 > index 00000000000..917a95bf141 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/arm/simd/mve-vcmp-f32-2.c > @@ -0,0 +1,32 @@ > +/* { dg-do assemble } */ > +/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ > +/* { dg-add-options arm_v8_1m_mve_fp } */ > +/* { dg-additional-options "-O3 -funsafe-math-optimizations" } */ > + > +#include <stdint.h> > + > +#define NB 4 > + > +#define FUNC(OP, NAME) > \ > + void test_ ## NAME ##_f (float * __restrict__ dest, float *a, float *b) { \ > + int i; \ > + for (i=0; i<NB; i++) { \ > + dest[i] = (a[i] OP b[i]) ? 2.0f : 3.0f; > \ > + } > \ > + } > + > +FUNC(==, vcmpeq) > +FUNC(!=, vcmpne) > +FUNC(<, vcmplt) > +FUNC(<=, vcmple) > +FUNC(>, vcmpgt) > +FUNC(>=, vcmpge) > + > +/* { dg-final { scan-assembler-times {\tvcmp.f32\teq, q[0-9]+, q[0-9]+\n} > 1 } } */ > +/* { dg-final { scan-assembler-times {\tvcmp.f32\tne, q[0-9]+, q[0-9]+\n} > 1 } } */ > +/* { dg-final { scan-assembler-times {\tvcmp.f32\tlt, q[0-9]+, q[0-9]+\n} > 1 } } */ > +/* { dg-final { scan-assembler-times {\tvcmp.f32\tle, q[0-9]+, q[0-9]+\n} > 1 } } */ > +/* { dg-final { scan-assembler-times {\tvcmp.f32\tgt, q[0-9]+, q[0-9]+\n} > 1 } } */ > +/* { dg-final { scan-assembler-times {\tvcmp.f32\tge, q[0-9]+, q[0-9]+\n} > 1 } } */ > +/* { dg-final { scan-assembler-times {\t.word\t1073741824\n} 24 } } */ /* > Constant 2.0f. */ > +/* { dg-final { scan-assembler-times {\t.word\t1077936128\n} 24 } } */ /* > Constant 3.0f. */ > diff --git a/gcc/testsuite/gcc.target/arm/simd/neon-compare-1.c > b/gcc/testsuite/gcc.target/arm/simd/neon-compare-1.c > new file mode 100644 > index 00000000000..2e0222a71f2 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/arm/simd/neon-compare-1.c > @@ -0,0 +1,78 @@ > +/* { dg-do compile } */ > +/* { dg-require-effective-target arm_neon_ok } */ > +/* { dg-add-options arm_neon } */ > +/* { dg-additional-options "-O3" } */ > + > +#include "mve-compare-1.c" > + > +/* 64-bit vectors. */ > +/* vmvn is used by 'ne' comparisons: 3 sizes * 2 (signed/unsigned) * 2 > + (register/zero) = 12. */ > +/* { dg-final { scan-assembler-times {\tvmvn\td[0-9]+, d[0-9]+\n} 12 } } */ > + > +/* { 8 bits } x { eq, ne, lt, le, gt, ge }. */ > +/* ne uses eq, lt/le only apply to comparison with zero, they use gt/ge > + otherwise. */ > +/* { dg-final { scan-assembler-times {\tvceq.i8\td[0-9]+, d[0-9]+, d[0-9]+\n} > 4 } } */ > +/* { dg-final { scan-assembler-times {\tvceq.i8\td[0-9]+, d[0-9]+, #0\n} 4 } > } > */ > +/* { dg-final { scan-assembler-times {\tvclt.s8\td[0-9]+, d[0-9]+, #0\n} 1 } > } > */ > +/* { dg-final { scan-assembler-times {\tvcle.s8\td[0-9]+, d[0-9]+, #0\n} 1 } > } > */ > +/* { dg-final { scan-assembler-times {\tvcgt.s8\td[0-9]+, d[0-9]+, d[0-9]+\n} > 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s8\td[0-9]+, d[0-9]+, #0\n} 1 } > } > */ > +/* { dg-final { scan-assembler-times {\tvcge.s8\td[0-9]+, d[0-9]+, d[0-9]+\n} > 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s8\td[0-9]+, d[0-9]+, #0\n} 1 } > } > */ > + > +/* { 16 bits } x { eq, ne, lt, le, gt, ge }. */ > +/* { dg-final { scan-assembler-times {\tvceq.i16\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 4 } } */ > +/* { dg-final { scan-assembler-times {\tvceq.i16\td[0-9]+, d[0-9]+, #0\n} > 4 } } */ > +/* { dg-final { scan-assembler-times {\tvclt.s16\td[0-9]+, d[0-9]+, #0\n} 1 > } } > */ > +/* { dg-final { scan-assembler-times {\tvcle.s16\td[0-9]+, d[0-9]+, #0\n} > 1 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s16\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s16\td[0-9]+, d[0-9]+, #0\n} > 1 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s16\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s16\td[0-9]+, d[0-9]+, #0\n} > 1 } } */ > + > +/* { 32 bits } x { eq, ne, lt, le, gt, ge }. */ > +/* { dg-final { scan-assembler-times {\tvceq.i32\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 4 } } */ > +/* { dg-final { scan-assembler-times {\tvceq.i32\td[0-9]+, d[0-9]+, #0\n} > 4 } } */ > +/* { dg-final { scan-assembler-times {\tvclt.s32\td[0-9]+, d[0-9]+, #0\n} 1 > } } > */ > +/* { dg-final { scan-assembler-times {\tvcle.s32\td[0-9]+, d[0-9]+, #0\n} > 1 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s32\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s32\td[0-9]+, d[0-9]+, #0\n} > 1 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s32\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s32\td[0-9]+, d[0-9]+, #0\n} > 1 } } */ > + > +/* 128-bit vectors. */ > + > +/* vmvn is used by 'ne' comparisons. */ > +/* { dg-final { scan-assembler-times {\tvmvn\tq[0-9]+, q[0-9]+\n} 12 } } */ > + > +/* { 8 bits } x { eq, ne, lt, le, gt, ge }. */ > +/* { dg-final { scan-assembler-times {\tvceq.i8\tq[0-9]+, q[0-9]+, q[0-9]+\n} > 4 } } */ > +/* { dg-final { scan-assembler-times {\tvceq.i8\tq[0-9]+, q[0-9]+, #0\n} 4 } > } > */ > +/* { dg-final { scan-assembler-times {\tvclt.s8\tq[0-9]+, q[0-9]+, #0\n} 1 } > } > */ > +/* { dg-final { scan-assembler-times {\tvcle.s8\tq[0-9]+, q[0-9]+, #0\n} 1 } > } > */ > +/* { dg-final { scan-assembler-times {\tvcgt.s8\tq[0-9]+, q[0-9]+, q[0-9]+\n} > 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s8\tq[0-9]+, q[0-9]+, #0\n} 1 } > } > */ > +/* { dg-final { scan-assembler-times {\tvcge.s8\tq[0-9]+, q[0-9]+, q[0-9]+\n} > 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s8\tq[0-9]+, q[0-9]+, #0\n} 1 } > } > */ > + > +/* { 16 bits } x { eq, ne, lt, le, gt, ge }. */ > +/* { dg-final { scan-assembler-times {\tvceq.i16\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 4 } } */ > +/* { dg-final { scan-assembler-times {\tvceq.i16\tq[0-9]+, q[0-9]+, #0\n} > 4 } } */ > +/* { dg-final { scan-assembler-times {\tvclt.s16\tq[0-9]+, q[0-9]+, #0\n} 1 > } } > */ > +/* { dg-final { scan-assembler-times {\tvcle.s16\tq[0-9]+, q[0-9]+, #0\n} > 1 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s16\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s16\tq[0-9]+, q[0-9]+, #0\n} > 1 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s16\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s16\tq[0-9]+, q[0-9]+, #0\n} > 1 } } */ > + > +/* { 32 bits } x { eq, ne, lt, le, gt, ge }. */ > +/* { dg-final { scan-assembler-times {\tvceq.i32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 4 } } */ > +/* { dg-final { scan-assembler-times {\tvceq.i32\tq[0-9]+, q[0-9]+, #0\n} > 4 } } */ > +/* { dg-final { scan-assembler-times {\tvclt.s32\tq[0-9]+, q[0-9]+, #0\n} 1 > } } > */ > +/* { dg-final { scan-assembler-times {\tvcle.s32\tq[0-9]+, q[0-9]+, #0\n} > 1 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s32\tq[0-9]+, q[0-9]+, #0\n} > 1 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s32\tq[0-9]+, q[0-9]+, #0\n} > 1 } } */ > diff --git a/gcc/testsuite/gcc.target/arm/simd/neon-compare-2.c > b/gcc/testsuite/gcc.target/arm/simd/neon-compare-2.c > new file mode 100644 > index 00000000000..06f3c14c91e > --- /dev/null > +++ b/gcc/testsuite/gcc.target/arm/simd/neon-compare-2.c > @@ -0,0 +1,13 @@ > +/* { dg-do compile } */ > +/* { dg-require-effective-target arm_neon_ok } */ > +/* { dg-add-options arm_neon } */ > +/* { dg-additional-options "-O3 -funsafe-math-optimizations" } */ > + > +#include "mve-compare-2.c" > + > +/* eq, ne, lt, le, gt, ge. */ > +/* ne uses eq+vmvn, lt/le use gt/ge with swapped operands. */ > +/* { dg-final { scan-assembler-times {\tvceq.f32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvmvn\tq[0-9]+, q[0-9]+\n} 1 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.f32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.f32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > diff --git a/gcc/testsuite/gcc.target/arm/simd/neon-compare-3.c > b/gcc/testsuite/gcc.target/arm/simd/neon-compare-3.c > new file mode 100644 > index 00000000000..9c9f108843b > --- /dev/null > +++ b/gcc/testsuite/gcc.target/arm/simd/neon-compare-3.c > @@ -0,0 +1,14 @@ > +/* { dg-do compile } */ > +/* { dg-require-effective-target arm_v8_2a_fp16_neon_ok } */ > +/* { dg-add-options arm_v8_2a_fp16_neon } */ > +/* { dg-additional-options "-O3 -funsafe-math-optimizations" } */ > + > +#include "mve-compare-3.c" > + > + > +/* eq, ne, lt, le, gt, ge. */ > +/* ne uses eq+vmvn, lt/le use gt/ge with swapped operands. */ > +/* { dg-final { scan-assembler-times {\tvceq.f16\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvmvn\tq[0-9]+, q[0-9]+\n} 1 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.f16\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.f16\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > diff --git a/gcc/testsuite/gcc.target/arm/simd/neon-compare-scalar-1.c > b/gcc/testsuite/gcc.target/arm/simd/neon-compare-scalar-1.c > new file mode 100644 > index 00000000000..0783624a3f2 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/arm/simd/neon-compare-scalar-1.c > @@ -0,0 +1,57 @@ > +/* { dg-do compile } */ > +/* { dg-require-effective-target arm_neon_ok } */ > +/* { dg-add-options arm_neon } */ > +/* { dg-additional-options "-O3" } */ > + > +#include "mve-compare-scalar-1.c" > + > +/* 64-bit vectors. */ > +/* vmvn is used by 'ne' comparisons. */ > +/* { dg-final { scan-assembler-times {\tvmvn\td[0-9]+, d[0-9]+\n} 6 } } */ > + > +/* { 8 bits } x { eq, ne, lt, le, gt, ge }. */ > +/* { dg-final { scan-assembler-times {\tvceq.i8\td[0-9]+, d[0-9]+, d[0-9]+\n} > 4 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s8\td[0-9]+, d[0-9]+, d[0-9]+\n} > 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.u8\td[0-9]+, d[0-9]+, d[0-9]+\n} > 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s8\td[0-9]+, d[0-9]+, d[0-9]+\n} > 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.u8\td[0-9]+, d[0-9]+, d[0-9]+\n} > 2 } } */ > + > +/* { 16 bits } x { eq, ne, lt, le, gt, ge }. */ > +/* { dg-final { scan-assembler-times {\tvceq.i16\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 4 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s16\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.u16\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s16\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.u16\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 2 } } */ > + > +/* { 32 bits } x { eq, ne, lt, le, gt, ge }. */ > +/* { dg-final { scan-assembler-times {\tvceq.i32\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 4 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s32\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.u32\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s32\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.u32\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 2 } } */ > + > +/* 128-bit vectors. */ > + > +/* vmvn is used by 'ne' comparisons. */ > +/* { dg-final { scan-assembler-times {\tvmvn\tq[0-9]+, q[0-9]+\n} 6 } } */ > + > +/* { 8 bits } x { eq, ne, lt, le, gt, ge }. */ > +/* { dg-final { scan-assembler-times {\tvceq.i8\tq[0-9]+, q[0-9]+, q[0-9]+\n} > 4 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s8\tq[0-9]+, q[0-9]+, q[0-9]+\n} > 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.u8\tq[0-9]+, q[0-9]+, q[0-9]+\n} > 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s8\tq[0-9]+, q[0-9]+, q[0-9]+\n} > 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.u8\tq[0-9]+, q[0-9]+, q[0-9]+\n} > 2 } } */ > + > +/* { 16 bits } x { eq, ne, lt, le, gt, ge }. */ > +/* { dg-final { scan-assembler-times {\tvceq.i16\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 4 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s16\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.u16\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s16\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.u16\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > + > +/* { 32 bits } x { eq, ne, lt, le, gt, ge }. */ > +/* { dg-final { scan-assembler-times {\tvceq.i32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 4 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.u32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.u32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > diff --git a/gcc/testsuite/gcc.target/arm/simd/neon-vcmp-f16.c > b/gcc/testsuite/gcc.target/arm/simd/neon-vcmp-f16.c > new file mode 100644 > index 00000000000..688fd9a235f > --- /dev/null > +++ b/gcc/testsuite/gcc.target/arm/simd/neon-vcmp-f16.c > @@ -0,0 +1,12 @@ > +/* { dg-do compile } */ > +/* { dg-require-effective-target arm_v8_2a_fp16_neon_ok } */ > +/* { dg-add-options arm_v8_2a_fp16_neon } */ > +/* { dg-additional-options "-O3 -funsafe-math-optimizations" } */ > + > +#include "mve-vcmp-f16.c" > + > +/* 'ne' uses vceq. */ > +/* le and lt use ge and gt with inverted operands. */ > +/* { dg-final { scan-assembler-times {\tvceq.f16\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.f16\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.f16\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > diff --git a/gcc/testsuite/gcc.target/arm/simd/neon-vcmp-f32-2.c > b/gcc/testsuite/gcc.target/arm/simd/neon-vcmp-f32-2.c > new file mode 100644 > index 00000000000..a22923eb242 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/arm/simd/neon-vcmp-f32-2.c > @@ -0,0 +1,15 @@ > +/* { dg-do compile } */ > +/* { dg-require-effective-target arm_neon_ok } */ > +/* { dg-add-options arm_neon } */ > +/* { dg-additional-options "-O3 -funsafe-math-optimizations" } */ > + > +#include "mve-vcmp-f32-2.c" > + > +/* 'ne' uses vceq. */ > +/* le and lt use ge and gt with inverted operands. */ > +/* { dg-final { scan-assembler-times {\tvceq.f32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.f32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.f32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > + > +/* { dg-final { scan-assembler-times {\tvmov.f32\tq[0-9]+, #2.0e\+0} 6 } } > */ > +/* { dg-final { scan-assembler-times {\tvmov.f32\tq[0-9]+, #3.0e\+0} 6 } } > */ > diff --git a/gcc/testsuite/gcc.target/arm/simd/neon-vcmp-f32-3.c > b/gcc/testsuite/gcc.target/arm/simd/neon-vcmp-f32-3.c > new file mode 100644 > index 00000000000..4f12f043d3a > --- /dev/null > +++ b/gcc/testsuite/gcc.target/arm/simd/neon-vcmp-f32-3.c > @@ -0,0 +1,12 @@ > +/* { dg-do compile } */ > +/* { dg-require-effective-target arm_neon_ok } */ > +/* { dg-add-options arm_neon } */ > +/* { dg-additional-options "-O3" } */ > + > +#include "mve-vcmp-f32.c" > + > +/* Should not be vectorized, since we do not use -funsafe-math- > optimizations. */ > + > +/* { dg-final { scan-assembler-not {\tvceq.f32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} } } */ > +/* { dg-final { scan-assembler-not {\tvcge.f32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} } } */ > +/* { dg-final { scan-assembler-not {\tvcgt.f32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} } } */ > diff --git a/gcc/testsuite/gcc.target/arm/simd/neon-vcmp-f32.c > b/gcc/testsuite/gcc.target/arm/simd/neon-vcmp-f32.c > new file mode 100644 > index 00000000000..06e5c4fd1d1 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/arm/simd/neon-vcmp-f32.c > @@ -0,0 +1,12 @@ > +/* { dg-do compile } */ > +/* { dg-require-effective-target arm_neon_ok } */ > +/* { dg-add-options arm_neon } */ > +/* { dg-additional-options "-O3 -funsafe-math-optimizations" } */ > + > +#include "mve-vcmp-f32.c" > + > +/* 'ne' uses vceq. */ > +/* le and lt use ge and gt with inverted operands. */ > +/* { dg-final { scan-assembler-times {\tvceq.f32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.f32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.f32\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 2 } } */ > diff --git a/gcc/testsuite/gcc.target/arm/simd/neon-vcmp.c > b/gcc/testsuite/gcc.target/arm/simd/neon-vcmp.c > new file mode 100644 > index 00000000000..f2b92b1be7f > --- /dev/null > +++ b/gcc/testsuite/gcc.target/arm/simd/neon-vcmp.c > @@ -0,0 +1,22 @@ > +/* { dg-do compile } */ > +/* { dg-require-effective-target arm_neon_ok } */ > +/* { dg-add-options arm_neon } */ > +/* { dg-additional-options "-O3" } */ > + > +#include "mve-vcmp.c" > + > +/* vceq is also used for 'ne' comparisons. */ > +/* { dg-final { scan-assembler-times {\tvceq.i[0-9]+\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 12 } } */ > +/* { dg-final { scan-assembler-times {\tvceq.i[0-9]+\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 12 } } */ > + > +/* lt and le are replaced with the opposite condition, hence the double > number > + of matches for gt and ge. */ > +/* { dg-final { scan-assembler-times {\tvcge.s[0-9]+\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 6 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.s[0-9]+\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 6 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.u[0-9]+\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 6 } } */ > +/* { dg-final { scan-assembler-times {\tvcge.u[0-9]+\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 6 } } */ > + > +/* { dg-final { scan-assembler-times {\tvcgt.s[0-9]+\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 6 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.s[0-9]+\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 6 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.u[0-9]+\td[0-9]+, d[0-9]+, d[0- > 9]+\n} 6 } } */ > +/* { dg-final { scan-assembler-times {\tvcgt.u[0-9]+\tq[0-9]+, q[0-9]+, q[0- > 9]+\n} 6 } } */ > -- > 2.25.1