Re: [PATCH][AArch32] MVE: Split refactoring of remaining complex instrinsics

2020-12-18 Thread Christophe Lyon via Gcc-patches
On Fri, 18 Dec 2020 at 17:20, Tamar Christina  wrote:
>
> Hi Christoph,
>
> > -Original Message-
> > From: Christophe Lyon 
> > Sent: Friday, December 18, 2020 2:22 PM
> > To: Tamar Christina 
> > Cc: gcc Patches ; Richard Earnshaw
> > ; nd ; Ramana Radhakrishnan
> > 
> > Subject: Re: [PATCH][AArch32] MVE: Split refactoring of remaining complex
> > instrinsics
> >
> > On Wed, 16 Dec 2020 at 21:43, Tamar Christina via Gcc-patches  > patc...@gcc.gnu.org> wrote:
> > >
> > > Hi All,
> > >
> > > This refactors the complex numbers bits of MVE to go through the same
> > > unspecs as the NEON variant.
> > >
> > > This is pre-work to allow code to be shared between NEON and MVE for
> > > the complex vectorization patches.
> > >
> > > Bootstrapped Regtested on arm-none-linux-gnueabihf and no issues.
> > > Codegen tested for -march=armv8.1-m.main+mve.fp -mfloat-abi=hard
> > > -mfpu=auto and no issues.
> > >
> >
> > Hi Tamar,
> >
> > This patch causes regressions for me:
> > gcc.target/arm/mve/intrinsics/vcmulq_f16.c (test for excess errors)
> > gcc.target/arm/mve/intrinsics/vcmulq_f32.c (test for excess errors)
> > gcc.target/arm/mve/intrinsics/vcmulq_rot180_f16.c (test for excess 
> > errors)
> > gcc.target/arm/mve/intrinsics/vcmulq_rot180_f32.c (test for excess 
> > errors)
> > gcc.target/arm/mve/intrinsics/vcmulq_rot270_f16.c (test for excess 
> > errors)
> > gcc.target/arm/mve/intrinsics/vcmulq_rot270_f32.c (test for excess 
> > errors)
> > gcc.target/arm/mve/intrinsics/vcmulq_rot90_f16.c (test for excess 
> > errors)
> > gcc.target/arm/mve/intrinsics/vcmulq_rot90_f32.c (test for excess 
> > errors)
> >
> > I can see:
> > FAIL: gcc.target/arm/mve/intrinsics/vcmulq_f16.c (test for excess errors)
> > Excess errors:
> > vcmulq_f16.s:40: Warning: missing operand; zero assumed
> > vcmulq_f16.s:61: Warning: missing operand; zero assumed
> >
> > I didn't check the code manually yet, and I am using binutils-2.34:
> > has something
> > related to this changed in more recent gas?
>
> No, A hunk didn't get committed.  This should be fixed now.
>

Yeah, I saw your other patch, cool this was an easy fix!

Thanks

> Thanks,
> Tamar
>
> >
> > Thanks
> >
> > Christophe
> >
> > > This is just a splitting of a previously approved patch due to it
> > > having a dependency on the AArch64 bits which have been requested to
> > be reworked.
> > >
> > > Will commit under the previous approval.
> > >
> > > Thanks,
> > > Tamar
> > >
> > > gcc/ChangeLog:
> > >
> > > * config/arm/arm_mve.h (__arm_vcmulq_rot90_f16):
> > > (__arm_vcmulq_rot270_f16, _arm_vcmulq_rot180_f16,
> > __arm_vcmulq_f16,
> > > __arm_vcmulq_rot90_f32, __arm_vcmulq_rot270_f32,
> > > __arm_vcmulq_rot180_f32, __arm_vcmulq_f32, __arm_vcmlaq_f16,
> > > __arm_vcmlaq_rot180_f16, __arm_vcmlaq_rot270_f16,
> > > __arm_vcmlaq_rot90_f16, __arm_vcmlaq_f32,
> > __arm_vcmlaq_rot180_f32,
> > > __arm_vcmlaq_rot270_f32, __arm_vcmlaq_rot90_f32): Update builtin
> > calls.
> > > * config/arm/arm_mve_builtins.def (vcmulq_f, vcmulq_rot90_f,
> > > vcmulq_rot180_f, vcmulq_rot270_f, vcmlaq_f, vcmlaq_rot90_f,
> > > vcmlaq_rot180_f, vcmlaq_rot270_f): Removed.
> > > (vcmulq, vcmulq_rot90, vcmulq_rot180, vcmulq_rot270, vcmlaq,
> > > vcmlaq_rot90, vcmlaq_rot180, vcmlaq_rot270): New.
> > > * config/arm/iterators.md (mve_rot): Add UNSPEC_VCMLA,
> > UNSPEC_VCMLA90,
> > > UNSPEC_VCMLA180, UNSPEC_VCMLA270, UNSPEC_VCMUL,
> > UNSPEC_VCMUL90,
> > > UNSPEC_VCMUL180, UNSPEC_VCMUL270.
> > > (VCMUL): New.
> > > * config/arm/mve.md (mve_vcmulq_f > mve_vcmulq_rot180_f,
> > > mve_vcmulq_rot270_f, mve_vcmulq_rot90_f,
> > mve_vcmlaq_f,
> > > mve_vcmlaq_rot180_f, mve_vcmlaq_rot270_f,
> > > mve_vcmlaq_rot90_f): Removed.
> > > (mve_vcmlaq, mve_vcmulq,
> > > mve_vcaddq, cadd3,
> > mve_vcaddq):
> > > New.
> > > * config/arm/unspecs.md (UNSPEC_VCMUL90, UNSPEC_VCMUL270,
> > UNSPEC_VCMUL,
> > > UNSPEC_VCMUL180): New.
> > > (VCMULQ_F, VCMULQ_ROT180_F, VCMULQ_ROT270_F,
> > VCMULQ_ROT

RE: [PATCH][AArch32] MVE: Split refactoring of remaining complex instrinsics

2020-12-18 Thread Tamar Christina via Gcc-patches
Hi Christoph,

> -Original Message-
> From: Christophe Lyon 
> Sent: Friday, December 18, 2020 2:22 PM
> To: Tamar Christina 
> Cc: gcc Patches ; Richard Earnshaw
> ; nd ; Ramana Radhakrishnan
> 
> Subject: Re: [PATCH][AArch32] MVE: Split refactoring of remaining complex
> instrinsics
> 
> On Wed, 16 Dec 2020 at 21:43, Tamar Christina via Gcc-patches  patc...@gcc.gnu.org> wrote:
> >
> > Hi All,
> >
> > This refactors the complex numbers bits of MVE to go through the same
> > unspecs as the NEON variant.
> >
> > This is pre-work to allow code to be shared between NEON and MVE for
> > the complex vectorization patches.
> >
> > Bootstrapped Regtested on arm-none-linux-gnueabihf and no issues.
> > Codegen tested for -march=armv8.1-m.main+mve.fp -mfloat-abi=hard
> > -mfpu=auto and no issues.
> >
> 
> Hi Tamar,
> 
> This patch causes regressions for me:
> gcc.target/arm/mve/intrinsics/vcmulq_f16.c (test for excess errors)
> gcc.target/arm/mve/intrinsics/vcmulq_f32.c (test for excess errors)
> gcc.target/arm/mve/intrinsics/vcmulq_rot180_f16.c (test for excess errors)
> gcc.target/arm/mve/intrinsics/vcmulq_rot180_f32.c (test for excess errors)
> gcc.target/arm/mve/intrinsics/vcmulq_rot270_f16.c (test for excess errors)
> gcc.target/arm/mve/intrinsics/vcmulq_rot270_f32.c (test for excess errors)
> gcc.target/arm/mve/intrinsics/vcmulq_rot90_f16.c (test for excess errors)
> gcc.target/arm/mve/intrinsics/vcmulq_rot90_f32.c (test for excess errors)
> 
> I can see:
> FAIL: gcc.target/arm/mve/intrinsics/vcmulq_f16.c (test for excess errors)
> Excess errors:
> vcmulq_f16.s:40: Warning: missing operand; zero assumed
> vcmulq_f16.s:61: Warning: missing operand; zero assumed
> 
> I didn't check the code manually yet, and I am using binutils-2.34:
> has something
> related to this changed in more recent gas?

No, A hunk didn't get committed.  This should be fixed now.

Thanks,
Tamar

> 
> Thanks
> 
> Christophe
> 
> > This is just a splitting of a previously approved patch due to it
> > having a dependency on the AArch64 bits which have been requested to
> be reworked.
> >
> > Will commit under the previous approval.
> >
> > Thanks,
> > Tamar
> >
> > gcc/ChangeLog:
> >
> > * config/arm/arm_mve.h (__arm_vcmulq_rot90_f16):
> > (__arm_vcmulq_rot270_f16, _arm_vcmulq_rot180_f16,
> __arm_vcmulq_f16,
> > __arm_vcmulq_rot90_f32, __arm_vcmulq_rot270_f32,
> > __arm_vcmulq_rot180_f32, __arm_vcmulq_f32, __arm_vcmlaq_f16,
> > __arm_vcmlaq_rot180_f16, __arm_vcmlaq_rot270_f16,
> > __arm_vcmlaq_rot90_f16, __arm_vcmlaq_f32,
> __arm_vcmlaq_rot180_f32,
> > __arm_vcmlaq_rot270_f32, __arm_vcmlaq_rot90_f32): Update builtin
> calls.
> > * config/arm/arm_mve_builtins.def (vcmulq_f, vcmulq_rot90_f,
> > vcmulq_rot180_f, vcmulq_rot270_f, vcmlaq_f, vcmlaq_rot90_f,
> > vcmlaq_rot180_f, vcmlaq_rot270_f): Removed.
> > (vcmulq, vcmulq_rot90, vcmulq_rot180, vcmulq_rot270, vcmlaq,
> > vcmlaq_rot90, vcmlaq_rot180, vcmlaq_rot270): New.
> > * config/arm/iterators.md (mve_rot): Add UNSPEC_VCMLA,
> UNSPEC_VCMLA90,
> > UNSPEC_VCMLA180, UNSPEC_VCMLA270, UNSPEC_VCMUL,
> UNSPEC_VCMUL90,
> > UNSPEC_VCMUL180, UNSPEC_VCMUL270.
> > (VCMUL): New.
> > * config/arm/mve.md (mve_vcmulq_f mve_vcmulq_rot180_f,
> > mve_vcmulq_rot270_f, mve_vcmulq_rot90_f,
> mve_vcmlaq_f,
> > mve_vcmlaq_rot180_f, mve_vcmlaq_rot270_f,
> > mve_vcmlaq_rot90_f): Removed.
> > (mve_vcmlaq, mve_vcmulq,
> > mve_vcaddq, cadd3,
> mve_vcaddq):
> > New.
> > * config/arm/unspecs.md (UNSPEC_VCMUL90, UNSPEC_VCMUL270,
> UNSPEC_VCMUL,
> > UNSPEC_VCMUL180): New.
> > (VCMULQ_F, VCMULQ_ROT180_F, VCMULQ_ROT270_F,
> VCMULQ_ROT90_F,
> > VCMLAQ_F, VCMLAQ_ROT180_F, VCMLAQ_ROT90_F,
> VCMLAQ_ROT270_F): Removed.
> >
> > --- inline copy of patch --
> > diff --git a/gcc/config/arm/arm_mve.h b/gcc/config/arm/arm_mve.h index
> >
> 987495dd234ad96ba1163a1f482fe183a46ff437..45014621f2533497e90ddf5257
> fb
> > 04e1fd9325b4 100644
> > --- a/gcc/config/arm/arm_mve.h
> > +++ b/gcc/config/arm/arm_mve.h
> > @@ -17348,28 +17348,28 @@ __extension__ extern __inline float16x8_t
> > __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
> >  __arm_vcmulq_rot90_f16 (float16x8_t __a, float16x8_t __b)  {
> > -  return __builtin_mve_

RE: [PATCH][AArch32] MVE: Split refactoring of remaining complex instrinsics

2020-12-18 Thread Tamar Christina via Gcc-patches
Hi Christophe,

> -Original Message-
> From: Christophe Lyon 
> Sent: Friday, December 18, 2020 2:22 PM
> To: Tamar Christina 
> Cc: gcc Patches ; Richard Earnshaw
> ; nd ; Ramana Radhakrishnan
> 
> Subject: Re: [PATCH][AArch32] MVE: Split refactoring of remaining complex
> instrinsics
> 
> On Wed, 16 Dec 2020 at 21:43, Tamar Christina via Gcc-patches  patc...@gcc.gnu.org> wrote:
> >
> > Hi All,
> >
> > This refactors the complex numbers bits of MVE to go through the same
> > unspecs as the NEON variant.
> >
> > This is pre-work to allow code to be shared between NEON and MVE for
> > the complex vectorization patches.
> >
> > Bootstrapped Regtested on arm-none-linux-gnueabihf and no issues.
> > Codegen tested for -march=armv8.1-m.main+mve.fp -mfloat-abi=hard
> > -mfpu=auto and no issues.
> >
> 
> Hi Tamar,
> 
> This patch causes regressions for me:
> gcc.target/arm/mve/intrinsics/vcmulq_f16.c (test for excess errors)
> gcc.target/arm/mve/intrinsics/vcmulq_f32.c (test for excess errors)
> gcc.target/arm/mve/intrinsics/vcmulq_rot180_f16.c (test for excess errors)
> gcc.target/arm/mve/intrinsics/vcmulq_rot180_f32.c (test for excess errors)
> gcc.target/arm/mve/intrinsics/vcmulq_rot270_f16.c (test for excess errors)
> gcc.target/arm/mve/intrinsics/vcmulq_rot270_f32.c (test for excess errors)
> gcc.target/arm/mve/intrinsics/vcmulq_rot90_f16.c (test for excess errors)
> gcc.target/arm/mve/intrinsics/vcmulq_rot90_f32.c (test for excess errors)
> 
> I can see:
> FAIL: gcc.target/arm/mve/intrinsics/vcmulq_f16.c (test for excess errors)
> Excess errors:
> vcmulq_f16.s:40: Warning: missing operand; zero assumed
> vcmulq_f16.s:61: Warning: missing operand; zero assumed

That's quite odd.

I'll check it out thanks.

Regards,
Tamar

> 
> I didn't check the code manually yet, and I am using binutils-2.34:
> has something
> related to this changed in more recent gas?
> 
> Thanks
> 
> Christophe
> 
> > This is just a splitting of a previously approved patch due to it
> > having a dependency on the AArch64 bits which have been requested to
> be reworked.
> >
> > Will commit under the previous approval.
> >
> > Thanks,
> > Tamar
> >
> > gcc/ChangeLog:
> >
> > * config/arm/arm_mve.h (__arm_vcmulq_rot90_f16):
> > (__arm_vcmulq_rot270_f16, _arm_vcmulq_rot180_f16,
> __arm_vcmulq_f16,
> > __arm_vcmulq_rot90_f32, __arm_vcmulq_rot270_f32,
> > __arm_vcmulq_rot180_f32, __arm_vcmulq_f32, __arm_vcmlaq_f16,
> > __arm_vcmlaq_rot180_f16, __arm_vcmlaq_rot270_f16,
> > __arm_vcmlaq_rot90_f16, __arm_vcmlaq_f32,
> __arm_vcmlaq_rot180_f32,
> > __arm_vcmlaq_rot270_f32, __arm_vcmlaq_rot90_f32): Update builtin
> calls.
> > * config/arm/arm_mve_builtins.def (vcmulq_f, vcmulq_rot90_f,
> > vcmulq_rot180_f, vcmulq_rot270_f, vcmlaq_f, vcmlaq_rot90_f,
> > vcmlaq_rot180_f, vcmlaq_rot270_f): Removed.
> > (vcmulq, vcmulq_rot90, vcmulq_rot180, vcmulq_rot270, vcmlaq,
> > vcmlaq_rot90, vcmlaq_rot180, vcmlaq_rot270): New.
> > * config/arm/iterators.md (mve_rot): Add UNSPEC_VCMLA,
> UNSPEC_VCMLA90,
> > UNSPEC_VCMLA180, UNSPEC_VCMLA270, UNSPEC_VCMUL,
> UNSPEC_VCMUL90,
> > UNSPEC_VCMUL180, UNSPEC_VCMUL270.
> > (VCMUL): New.
> > * config/arm/mve.md (mve_vcmulq_f mve_vcmulq_rot180_f,
> > mve_vcmulq_rot270_f, mve_vcmulq_rot90_f,
> mve_vcmlaq_f,
> > mve_vcmlaq_rot180_f, mve_vcmlaq_rot270_f,
> > mve_vcmlaq_rot90_f): Removed.
> > (mve_vcmlaq, mve_vcmulq,
> > mve_vcaddq, cadd3,
> mve_vcaddq):
> > New.
> > * config/arm/unspecs.md (UNSPEC_VCMUL90, UNSPEC_VCMUL270,
> UNSPEC_VCMUL,
> > UNSPEC_VCMUL180): New.
> > (VCMULQ_F, VCMULQ_ROT180_F, VCMULQ_ROT270_F,
> VCMULQ_ROT90_F,
> > VCMLAQ_F, VCMLAQ_ROT180_F, VCMLAQ_ROT90_F,
> VCMLAQ_ROT270_F): Removed.
> >
> > --- inline copy of patch --
> > diff --git a/gcc/config/arm/arm_mve.h b/gcc/config/arm/arm_mve.h index
> >
> 987495dd234ad96ba1163a1f482fe183a46ff437..45014621f2533497e90ddf5257
> fb
> > 04e1fd9325b4 100644
> > --- a/gcc/config/arm/arm_mve.h
> > +++ b/gcc/config/arm/arm_mve.h
> > @@ -17348,28 +17348,28 @@ __extension__ extern __inline float16x8_t
> > __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
> >  __arm_vcmulq_rot90_f16 (float16x8_t __a, float16x8_t __b)  {
> > -  return __builtin_mve_vcmulq_rot90_fv8hf (__a, _

Re: [PATCH][AArch32] MVE: Split refactoring of remaining complex instrinsics

2020-12-18 Thread Christophe Lyon via Gcc-patches
On Wed, 16 Dec 2020 at 21:43, Tamar Christina via Gcc-patches
 wrote:
>
> Hi All,
>
> This refactors the complex numbers bits of MVE to go through the same unspecs
> as the NEON variant.
>
> This is pre-work to allow code to be shared between NEON and MVE for the 
> complex
> vectorization patches.
>
> Bootstrapped Regtested on arm-none-linux-gnueabihf and no issues.
> Codegen tested for -march=armv8.1-m.main+mve.fp -mfloat-abi=hard -mfpu=auto
> and no issues.
>

Hi Tamar,

This patch causes regressions for me:
gcc.target/arm/mve/intrinsics/vcmulq_f16.c (test for excess errors)
gcc.target/arm/mve/intrinsics/vcmulq_f32.c (test for excess errors)
gcc.target/arm/mve/intrinsics/vcmulq_rot180_f16.c (test for excess errors)
gcc.target/arm/mve/intrinsics/vcmulq_rot180_f32.c (test for excess errors)
gcc.target/arm/mve/intrinsics/vcmulq_rot270_f16.c (test for excess errors)
gcc.target/arm/mve/intrinsics/vcmulq_rot270_f32.c (test for excess errors)
gcc.target/arm/mve/intrinsics/vcmulq_rot90_f16.c (test for excess errors)
gcc.target/arm/mve/intrinsics/vcmulq_rot90_f32.c (test for excess errors)

I can see:
FAIL: gcc.target/arm/mve/intrinsics/vcmulq_f16.c (test for excess errors)
Excess errors:
vcmulq_f16.s:40: Warning: missing operand; zero assumed
vcmulq_f16.s:61: Warning: missing operand; zero assumed

I didn't check the code manually yet, and I am using binutils-2.34:
has something
related to this changed in more recent gas?

Thanks

Christophe

> This is just a splitting of a previously approved patch due to it having a
> dependency on the AArch64 bits which have been requested to be reworked.
>
> Will commit under the previous approval.
>
> Thanks,
> Tamar
>
> gcc/ChangeLog:
>
> * config/arm/arm_mve.h (__arm_vcmulq_rot90_f16):
> (__arm_vcmulq_rot270_f16, _arm_vcmulq_rot180_f16, __arm_vcmulq_f16,
> __arm_vcmulq_rot90_f32, __arm_vcmulq_rot270_f32,
> __arm_vcmulq_rot180_f32, __arm_vcmulq_f32, __arm_vcmlaq_f16,
> __arm_vcmlaq_rot180_f16, __arm_vcmlaq_rot270_f16,
> __arm_vcmlaq_rot90_f16, __arm_vcmlaq_f32, __arm_vcmlaq_rot180_f32,
> __arm_vcmlaq_rot270_f32, __arm_vcmlaq_rot90_f32): Update builtin 
> calls.
> * config/arm/arm_mve_builtins.def (vcmulq_f, vcmulq_rot90_f,
> vcmulq_rot180_f, vcmulq_rot270_f, vcmlaq_f, vcmlaq_rot90_f,
> vcmlaq_rot180_f, vcmlaq_rot270_f): Removed.
> (vcmulq, vcmulq_rot90, vcmulq_rot180, vcmulq_rot270, vcmlaq,
> vcmlaq_rot90, vcmlaq_rot180, vcmlaq_rot270): New.
> * config/arm/iterators.md (mve_rot): Add UNSPEC_VCMLA, UNSPEC_VCMLA90,
> UNSPEC_VCMLA180, UNSPEC_VCMLA270, UNSPEC_VCMUL, UNSPEC_VCMUL90,
> UNSPEC_VCMUL180, UNSPEC_VCMUL270.
> (VCMUL): New.
> * config/arm/mve.md (mve_vcmulq_f,
> mve_vcmulq_rot270_f, mve_vcmulq_rot90_f, 
> mve_vcmlaq_f,
> mve_vcmlaq_rot180_f, mve_vcmlaq_rot270_f,
> mve_vcmlaq_rot90_f): Removed.
> (mve_vcmlaq, mve_vcmulq,
> mve_vcaddq, cadd3, 
> mve_vcaddq):
> New.
> * config/arm/unspecs.md (UNSPEC_VCMUL90, UNSPEC_VCMUL270, 
> UNSPEC_VCMUL,
> UNSPEC_VCMUL180): New.
> (VCMULQ_F, VCMULQ_ROT180_F, VCMULQ_ROT270_F, VCMULQ_ROT90_F,
> VCMLAQ_F, VCMLAQ_ROT180_F, VCMLAQ_ROT90_F, VCMLAQ_ROT270_F): Removed.
>
> --- inline copy of patch --
> diff --git a/gcc/config/arm/arm_mve.h b/gcc/config/arm/arm_mve.h
> index 
> 987495dd234ad96ba1163a1f482fe183a46ff437..45014621f2533497e90ddf5257fb04e1fd9325b4
>  100644
> --- a/gcc/config/arm/arm_mve.h
> +++ b/gcc/config/arm/arm_mve.h
> @@ -17348,28 +17348,28 @@ __extension__ extern __inline float16x8_t
>  __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __arm_vcmulq_rot90_f16 (float16x8_t __a, float16x8_t __b)
>  {
> -  return __builtin_mve_vcmulq_rot90_fv8hf (__a, __b);
> +  return __builtin_mve_vcmulq_rot90v8hf (__a, __b);
>  }
>
>  __extension__ extern __inline float16x8_t
>  __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __arm_vcmulq_rot270_f16 (float16x8_t __a, float16x8_t __b)
>  {
> -  return __builtin_mve_vcmulq_rot270_fv8hf (__a, __b);
> +  return __builtin_mve_vcmulq_rot270v8hf (__a, __b);
>  }
>
>  __extension__ extern __inline float16x8_t
>  __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __arm_vcmulq_rot180_f16 (float16x8_t __a, float16x8_t __b)
>  {
> -  return __builtin_mve_vcmulq_rot180_fv8hf (__a, __b);
> +  return __builtin_mve_vcmulq_rot180v8hf (__a, __b);
>  }
>
>  __extension__ extern __inline float16x8_t
>  __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __arm_vcmulq_f16 (float16x8_t __a, float16x8_t __b)
>  {
> -  return __builtin_mve_vcmulq_fv8hf (__a, __b);
> +  return __builtin_mve_vcmulqv8hf (__a, __b);
>  }
>
>  __extension__ extern __inline float16x8_t
> @@ -17600,28 +17600,28 @@ __extension__ extern __inline float32x4_t
>  __attribute__ ((__always_inline__, __gnu_inline__, __art

[PATCH][AArch32] MVE: Split refactoring of remaining complex instrinsics

2020-12-16 Thread Tamar Christina via Gcc-patches
Hi All,

This refactors the complex numbers bits of MVE to go through the same unspecs
as the NEON variant.

This is pre-work to allow code to be shared between NEON and MVE for the complex
vectorization patches.

Bootstrapped Regtested on arm-none-linux-gnueabihf and no issues.
Codegen tested for -march=armv8.1-m.main+mve.fp -mfloat-abi=hard -mfpu=auto
and no issues.

This is just a splitting of a previously approved patch due to it having a
dependency on the AArch64 bits which have been requested to be reworked.

Will commit under the previous approval.

Thanks,
Tamar

gcc/ChangeLog:

* config/arm/arm_mve.h (__arm_vcmulq_rot90_f16):
(__arm_vcmulq_rot270_f16, _arm_vcmulq_rot180_f16, __arm_vcmulq_f16,
__arm_vcmulq_rot90_f32, __arm_vcmulq_rot270_f32,
__arm_vcmulq_rot180_f32, __arm_vcmulq_f32, __arm_vcmlaq_f16,
__arm_vcmlaq_rot180_f16, __arm_vcmlaq_rot270_f16,
__arm_vcmlaq_rot90_f16, __arm_vcmlaq_f32, __arm_vcmlaq_rot180_f32,
__arm_vcmlaq_rot270_f32, __arm_vcmlaq_rot90_f32): Update builtin calls.
* config/arm/arm_mve_builtins.def (vcmulq_f, vcmulq_rot90_f,
vcmulq_rot180_f, vcmulq_rot270_f, vcmlaq_f, vcmlaq_rot90_f,
vcmlaq_rot180_f, vcmlaq_rot270_f): Removed.
(vcmulq, vcmulq_rot90, vcmulq_rot180, vcmulq_rot270, vcmlaq,
vcmlaq_rot90, vcmlaq_rot180, vcmlaq_rot270): New.
* config/arm/iterators.md (mve_rot): Add UNSPEC_VCMLA, UNSPEC_VCMLA90,
UNSPEC_VCMLA180, UNSPEC_VCMLA270, UNSPEC_VCMUL, UNSPEC_VCMUL90,
UNSPEC_VCMUL180, UNSPEC_VCMUL270.
(VCMUL): New.
* config/arm/mve.md (mve_vcmulq_f,
mve_vcmulq_rot270_f, mve_vcmulq_rot90_f, mve_vcmlaq_f,
mve_vcmlaq_rot180_f, mve_vcmlaq_rot270_f,
mve_vcmlaq_rot90_f): Removed.
(mve_vcmlaq, mve_vcmulq,
mve_vcaddq, cadd3, mve_vcaddq):
New.
* config/arm/unspecs.md (UNSPEC_VCMUL90, UNSPEC_VCMUL270, UNSPEC_VCMUL,
UNSPEC_VCMUL180): New.
(VCMULQ_F, VCMULQ_ROT180_F, VCMULQ_ROT270_F, VCMULQ_ROT90_F,
VCMLAQ_F, VCMLAQ_ROT180_F, VCMLAQ_ROT90_F, VCMLAQ_ROT270_F): Removed.

--- inline copy of patch -- 
diff --git a/gcc/config/arm/arm_mve.h b/gcc/config/arm/arm_mve.h
index 
987495dd234ad96ba1163a1f482fe183a46ff437..45014621f2533497e90ddf5257fb04e1fd9325b4
 100644
--- a/gcc/config/arm/arm_mve.h
+++ b/gcc/config/arm/arm_mve.h
@@ -17348,28 +17348,28 @@ __extension__ extern __inline float16x8_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
 __arm_vcmulq_rot90_f16 (float16x8_t __a, float16x8_t __b)
 {
-  return __builtin_mve_vcmulq_rot90_fv8hf (__a, __b);
+  return __builtin_mve_vcmulq_rot90v8hf (__a, __b);
 }
 
 __extension__ extern __inline float16x8_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
 __arm_vcmulq_rot270_f16 (float16x8_t __a, float16x8_t __b)
 {
-  return __builtin_mve_vcmulq_rot270_fv8hf (__a, __b);
+  return __builtin_mve_vcmulq_rot270v8hf (__a, __b);
 }
 
 __extension__ extern __inline float16x8_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
 __arm_vcmulq_rot180_f16 (float16x8_t __a, float16x8_t __b)
 {
-  return __builtin_mve_vcmulq_rot180_fv8hf (__a, __b);
+  return __builtin_mve_vcmulq_rot180v8hf (__a, __b);
 }
 
 __extension__ extern __inline float16x8_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
 __arm_vcmulq_f16 (float16x8_t __a, float16x8_t __b)
 {
-  return __builtin_mve_vcmulq_fv8hf (__a, __b);
+  return __builtin_mve_vcmulqv8hf (__a, __b);
 }
 
 __extension__ extern __inline float16x8_t
@@ -17600,28 +17600,28 @@ __extension__ extern __inline float32x4_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
 __arm_vcmulq_rot90_f32 (float32x4_t __a, float32x4_t __b)
 {
-  return __builtin_mve_vcmulq_rot90_fv4sf (__a, __b);
+  return __builtin_mve_vcmulq_rot90v4sf (__a, __b);
 }
 
 __extension__ extern __inline float32x4_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
 __arm_vcmulq_rot270_f32 (float32x4_t __a, float32x4_t __b)
 {
-  return __builtin_mve_vcmulq_rot270_fv4sf (__a, __b);
+  return __builtin_mve_vcmulq_rot270v4sf (__a, __b);
 }
 
 __extension__ extern __inline float32x4_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
 __arm_vcmulq_rot180_f32 (float32x4_t __a, float32x4_t __b)
 {
-  return __builtin_mve_vcmulq_rot180_fv4sf (__a, __b);
+  return __builtin_mve_vcmulq_rot180v4sf (__a, __b);
 }
 
 __extension__ extern __inline float32x4_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
 __arm_vcmulq_f32 (float32x4_t __a, float32x4_t __b)
 {
-  return __builtin_mve_vcmulq_fv4sf (__a, __b);
+  return __builtin_mve_vcmulqv4sf (__a, __b);
 }
 
 __extension__ extern __inline float32x4_t
@@ -17790,28 +17790,28 @@ __extension__ extern __inline float16x8_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
 __arm_vcmlaq_f16 (float16x8_t __a, float16x8_t __b, float16x8_t