> -----Original Message----- > From: Andrea Corallo <andrea.cora...@arm.com> > Sent: Thursday, November 17, 2022 4:38 PM > To: gcc-patches@gcc.gnu.org > Cc: Kyrylo Tkachov <kyrylo.tkac...@arm.com>; Richard Earnshaw > <richard.earns...@arm.com>; Andrea Corallo <andrea.cora...@arm.com> > Subject: [PATCH 04/35] arm: improve tests and fix vdwdupq* > > gcc/ChangeLog: > > * config/arm/mve.md (mve_vdwdupq_m_wb_u<mode>_insn): Fix > spacing. > > gcc/testsuite/ChangeLog: > > * gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u16.c : Improve test. > * gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u32.c : Likewise. > * gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u8.c : Likewise. > * gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u16.c : Likewise. > * gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u32.c : Likewise. > * gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u8.c : Likewise. > * gcc.target/arm/mve/intrinsics/vdwdupq_n_u16.c : Likewise. > * gcc.target/arm/mve/intrinsics/vdwdupq_n_u32.c : Likewise. > * gcc.target/arm/mve/intrinsics/vdwdupq_n_u8.c : Likewise. > * gcc.target/arm/mve/intrinsics/vdwdupq_wb_u16.c : Likewise. > * gcc.target/arm/mve/intrinsics/vdwdupq_wb_u32.c : Likewise. > * gcc.target/arm/mve/intrinsics/vdwdupq_wb_u8.c : Likewise. > * gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u16.c: Likewise. > * gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u32.c : Likewise. > * gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u8.c : Likewise. > * gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u16.c : Likewise. > * gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u32.c : Likewise. > * gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u8.c : Likewise. Ok. Thanks, Kyrill > --- > gcc/config/arm/mve.md | 2 +- > .../arm/mve/intrinsics/vdwdupq_m_n_u16.c | 44 ++++++++++++++-- > .../arm/mve/intrinsics/vdwdupq_m_n_u32.c | 46 ++++++++++++++--- > .../arm/mve/intrinsics/vdwdupq_m_n_u8.c | 46 ++++++++++++++--- > .../arm/mve/intrinsics/vdwdupq_m_wb_u16.c | 50 ++++++++++++++++--- > .../arm/mve/intrinsics/vdwdupq_m_wb_u32.c | 48 +++++++++++++++--- > .../arm/mve/intrinsics/vdwdupq_m_wb_u8.c | 50 ++++++++++++++++--- > .../arm/mve/intrinsics/vdwdupq_n_u16.c | 32 ++++++++++-- > .../arm/mve/intrinsics/vdwdupq_n_u32.c | 32 ++++++++++-- > .../arm/mve/intrinsics/vdwdupq_n_u8.c | 32 ++++++++++-- > .../arm/mve/intrinsics/vdwdupq_wb_u16.c | 32 ++++++++++-- > .../arm/mve/intrinsics/vdwdupq_wb_u32.c | 32 ++++++++++-- > .../arm/mve/intrinsics/vdwdupq_wb_u8.c | 32 ++++++++++-- > .../arm/mve/intrinsics/vdwdupq_x_n_u16.c | 42 ++++++++++++++-- > .../arm/mve/intrinsics/vdwdupq_x_n_u32.c | 46 ++++++++++++++--- > .../arm/mve/intrinsics/vdwdupq_x_n_u8.c | 46 ++++++++++++++--- > .../arm/mve/intrinsics/vdwdupq_x_wb_u16.c | 50 ++++++++++++++++--- > .../arm/mve/intrinsics/vdwdupq_x_wb_u32.c | 46 ++++++++++++++--- > .../arm/mve/intrinsics/vdwdupq_x_wb_u8.c | 50 ++++++++++++++++--- > 19 files changed, 655 insertions(+), 103 deletions(-) > > diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md > index 1215f845388..58ffe03c499 100644 > --- a/gcc/config/arm/mve.md > +++ b/gcc/config/arm/mve.md > @@ -9195,7 +9195,7 @@ (define_insn > "mve_vdwdupq_m_wb_u<mode>_insn" > VDWDUPQ_M)) > ] > "TARGET_HAVE_MVE" > - "vpst\;\tvdwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5" > + "vpst\;vdwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5" > [(set_attr "type" "mve_move") > (set_attr "length""8")]) > > diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u16.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u16.c > index 5303fd7d361..8f53f5ef0cb 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u16.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u16.c > @@ -1,23 +1,57 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint16x8_t > foo (uint16x8_t inactive, uint32_t a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_m (inactive, a, b, 1, p); > + return vdwdupq_m_n_u16 (inactive, a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u16" } } */ > > +/* > +**foo1: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint16x8_t > foo1 (uint16x8_t inactive, uint32_t a, uint32_t b, mve_pred16_t p) > { > return vdwdupq_m (inactive, a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u16" } } */ > +/* > +**foo2: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint16x8_t > +foo2 (uint16x8_t inactive, mve_pred16_t p) > +{ > + return vdwdupq_m (inactive, 1, 1, 1, p); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u32.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u32.c > index 9f22bd7f852..30e971fb733 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u32.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u32.c > @@ -1,23 +1,57 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint32x4_t > foo (uint32x4_t inactive, uint32_t a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_m (inactive, a, b, 4, p); > + return vdwdupq_m_n_u32 (inactive, a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u32" } } */ > > +/* > +**foo1: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint32x4_t > foo1 (uint32x4_t inactive, uint32_t a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_m (inactive, a, b, 4, p); > + return vdwdupq_m (inactive, a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u32" } } */ > +/* > +**foo2: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint32x4_t > +foo2 (uint32x4_t inactive, mve_pred16_t p) > +{ > + return vdwdupq_m (inactive, 1, 1, 1, p); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u8.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u8.c > index 0591e731958..0abc19a2318 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u8.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u8.c > @@ -1,23 +1,57 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint8x16_t > foo (uint8x16_t inactive, uint32_t a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_m (inactive, a, b, 4, p); > + return vdwdupq_m_n_u8 (inactive, a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u8" } } */ > > +/* > +**foo1: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint8x16_t > foo1 (uint8x16_t inactive, uint32_t a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_m (inactive, a, b, 4, p); > + return vdwdupq_m (inactive, a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u8" } } */ > +/* > +**foo2: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint8x16_t > +foo2 (uint8x16_t inactive, mve_pred16_t p) > +{ > + return vdwdupq_m (inactive, 1, 1, 1, p); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git > a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u16.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u16.c > index e4e7b47e082..b3e6affbf8f 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u16.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u16.c > @@ -1,23 +1,57 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint16x8_t > -foo (uint16x8_t inactive, uint32_t * a, uint32_t b, mve_pred16_t p) > +foo (uint16x8_t inactive, uint32_t *a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_m (inactive, a, b, 8, p); > + return vdwdupq_m_wb_u16 (inactive, a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u16" } } */ > > +/* > +**foo1: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint16x8_t > -foo1 (uint16x8_t inactive, uint32_t * a, uint32_t b, mve_pred16_t p) > +foo1 (uint16x8_t inactive, uint32_t *a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_m (inactive, a, b, 8, p); > + return vdwdupq_m (inactive, a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u16" } } */ > +/* > +**foo2: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint16x8_t > +foo2 (uint16x8_t inactive, mve_pred16_t p) > +{ > + return vdwdupq_m (inactive, 1, 1, 1, p); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git > a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u32.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u32.c > index 42917dc9886..60c52b0d850 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u32.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u32.c > @@ -1,23 +1,57 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint32x4_t > -foo (uint32x4_t inactive, uint32_t * a, uint32_t b, mve_pred16_t p) > +foo (uint32x4_t inactive, uint32_t *a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_m (inactive, a, b, 1, p); > + return vdwdupq_m_wb_u32 (inactive, a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u32" } } */ > > +/* > +**foo1: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint32x4_t > -foo1 (uint32x4_t inactive, uint32_t * a, uint32_t b, mve_pred16_t p) > +foo1 (uint32x4_t inactive, uint32_t *a, uint32_t b, mve_pred16_t p) > { > return vdwdupq_m (inactive, a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u32" } } */ > +/* > +**foo2: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint32x4_t > +foo2 (uint32x4_t inactive, mve_pred16_t p) > +{ > + return vdwdupq_m (inactive, 1, 1, 1, p); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u8.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u8.c > index 32c3153ffb3..459321a7984 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u8.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u8.c > @@ -1,23 +1,57 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint8x16_t > -foo (uint8x16_t inactive, uint32_t * a, uint32_t b, mve_pred16_t p) > +foo (uint8x16_t inactive, uint32_t *a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_m (inactive, a, b, 2, p); > + return vdwdupq_m_wb_u8 (inactive, a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u8" } } */ > > +/* > +**foo1: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint8x16_t > -foo1 (uint8x16_t inactive, uint32_t * a, uint32_t b, mve_pred16_t p) > +foo1 (uint8x16_t inactive, uint32_t *a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_m (inactive, a, b, 2, p); > + return vdwdupq_m (inactive, a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u8" } } */ > +/* > +**foo2: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint8x16_t > +foo2 (uint8x16_t inactive, mve_pred16_t p) > +{ > + return vdwdupq_m (inactive, 1, 1, 1, p); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_n_u16.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_n_u16.c > index 725a6e4bc0e..9f76dbf35eb 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_n_u16.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_n_u16.c > @@ -1,21 +1,45 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vdwdup.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint16x8_t > foo (uint32_t a, uint32_t b) > { > - return vdwdupq_n_u16 (a, b, 2); > + return vdwdupq_n_u16 (a, b, 1); > } > > -/* { dg-final { scan-assembler "vdwdup.u16" } } */ > > +/* > +**foo1: > +** ... > +** vdwdup.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint16x8_t > foo1 (uint32_t a, uint32_t b) > { > - return vdwdupq_u16 (a, b, 2); > + return vdwdupq_u16 (a, b, 1); > } > > -/* { dg-final { scan-assembler "vdwdup.u16" } } */ > +/* > +**foo2: > +** ... > +** vdwdup.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint16x8_t > +foo2 () > +{ > + return vdwdupq_u16 (1, 1, 1); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_n_u32.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_n_u32.c > index 6ceaadb984d..962f766b496 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_n_u32.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_n_u32.c > @@ -1,21 +1,45 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vdwdup.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint32x4_t > foo (uint32_t a, uint32_t b) > { > - return vdwdupq_n_u32 (a, b, 8); > + return vdwdupq_n_u32 (a, b, 1); > } > > -/* { dg-final { scan-assembler "vdwdup.u32" } } */ > > +/* > +**foo1: > +** ... > +** vdwdup.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint32x4_t > foo1 (uint32_t a, uint32_t b) > { > - return vdwdupq_u32 (a, b, 8); > + return vdwdupq_u32 (a, b, 1); > } > > -/* { dg-final { scan-assembler "vdwdup.u32" } } */ > +/* > +**foo2: > +** ... > +** vdwdup.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint32x4_t > +foo2 () > +{ > + return vdwdupq_u32 (1, 1, 1); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_n_u8.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_n_u8.c > index a1712e418be..c73b1b69661 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_n_u8.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_n_u8.c > @@ -1,21 +1,45 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vdwdup.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint8x16_t > foo (uint32_t a, uint32_t b) > { > - return vdwdupq_n_u8 (a, b, 4); > + return vdwdupq_n_u8 (a, b, 1); > } > > -/* { dg-final { scan-assembler "vdwdup.u8" } } */ > > +/* > +**foo1: > +** ... > +** vdwdup.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint8x16_t > foo1 (uint32_t a, uint32_t b) > { > - return vdwdupq_u8 (a, b, 4); > + return vdwdupq_u8 (a, b, 1); > } > > -/* { dg-final { scan-assembler "vdwdup.u8" } } */ > +/* > +**foo2: > +** ... > +** vdwdup.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint8x16_t > +foo2 () > +{ > + return vdwdupq_u8 (1, 1, 1); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_wb_u16.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_wb_u16.c > index 0164ea9502c..3b1968d78aa 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_wb_u16.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_wb_u16.c > @@ -1,21 +1,45 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vdwdup.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint16x8_t > foo (uint32_t *a, uint32_t b) > { > - return vdwdupq_wb_u16 (a, b, 2); > + return vdwdupq_wb_u16 (a, b, 1); > } > > -/* { dg-final { scan-assembler "vdwdup.u16" } } */ > > +/* > +**foo1: > +** ... > +** vdwdup.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint16x8_t > foo1 (uint32_t *a, uint32_t b) > { > - return vdwdupq_u16 (a, b, 2); > + return vdwdupq_u16 (a, b, 1); > } > > -/* { dg-final { scan-assembler "vdwdup.u16" } } */ > +/* > +**foo2: > +** ... > +** vdwdup.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint16x8_t > +foo2 () > +{ > + return vdwdupq_u16 (1, 1, 1); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_wb_u32.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_wb_u32.c > index 7681371b016..8554f62ee6b 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_wb_u32.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_wb_u32.c > @@ -1,21 +1,45 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vdwdup.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint32x4_t > foo (uint32_t *a, uint32_t b) > { > - return vdwdupq_wb_u32 (a, b, 8); > + return vdwdupq_wb_u32 (a, b, 1); > } > > -/* { dg-final { scan-assembler "vdwdup.u32" } } */ > > +/* > +**foo1: > +** ... > +** vdwdup.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint32x4_t > foo1 (uint32_t *a, uint32_t b) > { > - return vdwdupq_u32 (a, b, 8); > + return vdwdupq_u32 (a, b, 1); > } > > -/* { dg-final { scan-assembler "vdwdup.u32" } } */ > +/* > +**foo2: > +** ... > +** vdwdup.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint32x4_t > +foo2 () > +{ > + return vdwdupq_u32 (1, 1, 1); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_wb_u8.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_wb_u8.c > index 6f60bb09b24..eb91a80daf5 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_wb_u8.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_wb_u8.c > @@ -1,21 +1,45 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vdwdup.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint8x16_t > foo (uint32_t *a, uint32_t b) > { > - return vdwdupq_wb_u8 (a, b, 4); > + return vdwdupq_wb_u8 (a, b, 1); > } > > -/* { dg-final { scan-assembler "vdwdup.u8" } } */ > > +/* > +**foo1: > +** ... > +** vdwdup.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint8x16_t > foo1 (uint32_t *a, uint32_t b) > { > - return vdwdupq_u8 (a, b, 4); > + return vdwdupq_u8 (a, b, 1); > } > > -/* { dg-final { scan-assembler "vdwdup.u8" } } */ > +/* > +**foo2: > +** ... > +** vdwdup.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint8x16_t > +foo2 () > +{ > + return vdwdupq_u8 (1, 1, 1); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u16.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u16.c > index ce975267531..9c0fd1e253c 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u16.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u16.c > @@ -1,23 +1,57 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint16x8_t > foo (uint32_t a, uint32_t b, mve_pred16_t p) > { > return vdwdupq_x_n_u16 (a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u16" } } */ > > +/* > +**foo1: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint16x8_t > foo1 (uint32_t a, uint32_t b, mve_pred16_t p) > { > return vdwdupq_x_u16 (a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u16" } } */ > +/* > +**foo2: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint16x8_t > +foo2 (mve_pred16_t p) > +{ > + return vdwdupq_x_u16 (1, 1, 1, p); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u32.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u32.c > index 9ed75d292d8..3107e2fdbbe 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u32.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u32.c > @@ -1,23 +1,57 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint32x4_t > foo (uint32_t a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_x_n_u32 (a, b, 4, p); > + return vdwdupq_x_n_u32 (a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u32" } } */ > > +/* > +**foo1: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint32x4_t > foo1 (uint32_t a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_x_u32 (a, b, 4, p); > + return vdwdupq_x_u32 (a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u32" } } */ > +/* > +**foo2: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint32x4_t > +foo2 (mve_pred16_t p) > +{ > + return vdwdupq_x_u32 (1, 1, 1, p); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u8.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u8.c > index 3705094c4df..03d01e0dd43 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u8.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u8.c > @@ -1,23 +1,57 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint8x16_t > foo (uint32_t a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_x_n_u8 (a, b, 4, p); > + return vdwdupq_x_n_u8 (a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u8" } } */ > > +/* > +**foo1: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint8x16_t > foo1 (uint32_t a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_x_u8 (a, b, 4, p); > + return vdwdupq_x_u8 (a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u8" } } */ > +/* > +**foo2: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint8x16_t > +foo2 (mve_pred16_t p) > +{ > + return vdwdupq_x_u8 (1, 1, 1, p); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git > a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u16.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u16.c > index caf744d7255..f7dca660c03 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u16.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u16.c > @@ -1,23 +1,57 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint16x8_t > -foo (uint32_t * a, uint32_t b, mve_pred16_t p) > +foo (uint32_t *a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_x_wb_u16 (a, b, 8, p); > + return vdwdupq_x_wb_u16 (a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u16" } } */ > > +/* > +**foo1: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint16x8_t > -foo1 (uint32_t * a, uint32_t b, mve_pred16_t p) > +foo1 (uint32_t *a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_x_u16 (a, b, 8, p); > + return vdwdupq_x_u16 (a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u16" } } */ > +/* > +**foo2: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u16 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint16x8_t > +foo2 (mve_pred16_t p) > +{ > + return vdwdupq_x_u16 (1, 1, 1, p); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git > a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u32.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u32.c > index 8c8be86bce6..032ae94e8c3 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u32.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u32.c > @@ -1,23 +1,57 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint32x4_t > -foo (uint32_t * a, uint32_t b, mve_pred16_t p) > +foo (uint32_t *a, uint32_t b, mve_pred16_t p) > { > return vdwdupq_x_wb_u32 (a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u32" } } */ > > +/* > +**foo1: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint32x4_t > -foo1 (uint32_t * a, uint32_t b, mve_pred16_t p) > +foo1 (uint32_t *a, uint32_t b, mve_pred16_t p) > { > return vdwdupq_x_u32 (a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u32" } } */ > +/* > +**foo2: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u32 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint32x4_t > +foo2 (mve_pred16_t p) > +{ > + return vdwdupq_x_u32 (1, 1, 1, p); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u8.c > b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u8.c > index 1c6ef4ed33f..5d238a7a865 100644 > --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u8.c > +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u8.c > @@ -1,23 +1,57 @@ > /* { dg-require-effective-target arm_v8_1m_mve_ok } */ > /* { dg-add-options arm_v8_1m_mve } */ > /* { dg-additional-options "-O2" } */ > +/* { dg-final { check-function-bodies "**" "" } } */ > > #include "arm_mve.h" > > +/* > +**foo: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint8x16_t > -foo (uint32_t * a, uint32_t b, mve_pred16_t p) > +foo (uint32_t *a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_x_wb_u8 (a, b, 2, p); > + return vdwdupq_x_wb_u8 (a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u8" } } */ > > +/* > +**foo1: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > uint8x16_t > -foo1 (uint32_t * a, uint32_t b, mve_pred16_t p) > +foo1 (uint32_t *a, uint32_t b, mve_pred16_t p) > { > - return vdwdupq_x_u8 (a, b, 2, p); > + return vdwdupq_x_u8 (a, b, 1, p); > } > > -/* { dg-final { scan-assembler "vpst" } } */ > -/* { dg-final { scan-assembler "vdwdupt.u8" } } */ > +/* > +**foo2: > +** ... > +** vmsr p0, (?:ip|fp|r[0-9]+)(?: @.*|) > +** ... > +** vpst(?: @.*|) > +** ... > +** vdwdupt.u8 q[0-9]+, (?:ip|fp|r[0-9]+), (?:ip|fp|r[0-9]+), > #[0-9]+(?: > @.*|) > +** ... > +*/ > +uint8x16_t > +foo2 (mve_pred16_t p) > +{ > + return vdwdupq_x_u8 (1, 1, 1, p); > +} > + > +/* { dg-final { scan-assembler-not "__ARM_undef" } } */ > \ No newline at end of file > -- > 2.25.1
RE: [PATCH 04/35] arm: improve tests and fix vdwdupq*
Kyrylo Tkachov via Gcc-patches Fri, 18 Nov 2022 08:37:11 -0800
- [PATCH 00/35] arm: rework MVE testsuite and... Andrea Corallo via Gcc-patches
- [PATCH 02/35] arm: fix 'vmsr' spacing ... Andrea Corallo via Gcc-patches
- RE: [PATCH 02/35] arm: fix 'vmsr' ... Kyrylo Tkachov via Gcc-patches
- [PATCH 03/35] arm: improve tests and f... Andrea Corallo via Gcc-patches
- RE: [PATCH 03/35] arm: improve tes... Kyrylo Tkachov via Gcc-patches
- [PATCH 04/35] arm: improve tests and f... Andrea Corallo via Gcc-patches
- RE: [PATCH 04/35] arm: improve tes... Kyrylo Tkachov via Gcc-patches
- [PATCH 10/35] arm: improve tests for v... Andrea Corallo via Gcc-patches
- RE: [PATCH 10/35] arm: improve tes... Kyrylo Tkachov via Gcc-patches
- Re: [PATCH 10/35] arm: improve... Andrea Corallo via Gcc-patches
- [PATCH 05/35] arm: improve vidupq* tes... Andrea Corallo via Gcc-patches
- RE: [PATCH 05/35] arm: improve vid... Kyrylo Tkachov via Gcc-patches
- [PATCH 06/35] arm: improve tests and f... Andrea Corallo via Gcc-patches
- RE: [PATCH 06/35] arm: improve tes... Kyrylo Tkachov via Gcc-patches
- [PATCH 35/35] arm: improve tests for v... Andrea Corallo via Gcc-patches
- RE: [PATCH 35/35] arm: improve tes... Kyrylo Tkachov via Gcc-patches
- [PATCH 35/35 V2] arm: improve ... Andrea Corallo via Gcc-patches