diff mbox

[testsuite] ARM wmul tests: require arm_dsp_multiply

Message ID 4E03B23D.1050808@codesourcery.com
State New
Headers show

Commit Message

Janis Johnson June 23, 2011, 9:38 p.m. UTC
Tests wmul-[1234].c and mla-2.c in gcc.target/arm require support that
the arm backend identifies as TARGET_DSP_MULTIPLY.  The tests all
specify a -march option with that support, but it is overridden by
multilib flags.

This patch adds a new effective target, arm_dsp_multiply, and requires
it for those tests instead of having them specify a -march value.  This
means that the tests will be skipped for older targets and test coverage
relies on testing for some newer multilibs.

The same effective target is needed for tests smlaltb-1.c, smlaltt-1.c,
smlatb-1.c, and smlatt-1.c, but those also need to be renamed so the
scans don't pass just because the file name is in the assembly file.

OK for trunk, and later for 4.6?

(btw, I'm currently testing ARM compile-only tests with 43 sets of
multilib flags)
2011-06-23  Janis Johnson  <janisjo@codesourcery.com>

	* lib/target-supports.exp (check_effective_target_arm_dsp_multiply):
	New.
	* gcc.target/arm/wmul-1.c: Require arm_dsp_multiply, don't
	supply -march.
	* gcc.target/arm/wmul-2.c: Likewise.
	* gcc.target/arm/wmul-3.c: Likewise.
	* gcc.target/arm/wmul-4.c: Likewise.
	* gcc.target/arm/mla-2.c: Likewise.

Comments

Richard Earnshaw June 29, 2011, 1:25 p.m. UTC | #1
On 23/06/11 22:38, Janis Johnson wrote:
> Tests wmul-[1234].c and mla-2.c in gcc.target/arm require support that
> the arm backend identifies as TARGET_DSP_MULTIPLY.  The tests all
> specify a -march option with that support, but it is overridden by
> multilib flags.
> 
> This patch adds a new effective target, arm_dsp_multiply, and requires
> it for those tests instead of having them specify a -march value.  This
> means that the tests will be skipped for older targets and test coverage
> relies on testing for some newer multilibs.
> 
> The same effective target is needed for tests smlaltb-1.c, smlaltt-1.c,
> smlatb-1.c, and smlatt-1.c, but those also need to be renamed so the
> scans don't pass just because the file name is in the assembly file.
> 
> OK for trunk, and later for 4.6?
> 
> (btw, I'm currently testing ARM compile-only tests with 43 sets of
> multilib flags)
> 

I've recently approved a patch from James Greenhalgh
(http://gcc.gnu.org/ml/gcc-patches/2011-06/msg01852.html) that defines
__ARM_DSP_MULTIPLY when these features are available.  That should
simplify your target-supports change and also serve as a check that we
aren't erroneously defining that macro.

R.

> 
> gcc-20110623-2
> 
> 
> 2011-06-23  Janis Johnson  <janisjo@codesourcery.com>
> 
> 	* lib/target-supports.exp (check_effective_target_arm_dsp_multiply):
> 	New.
> 	* gcc.target/arm/wmul-1.c: Require arm_dsp_multiply, don't
> 	supply -march.
> 	* gcc.target/arm/wmul-2.c: Likewise.
> 	* gcc.target/arm/wmul-3.c: Likewise.
> 	* gcc.target/arm/wmul-4.c: Likewise.
> 	* gcc.target/arm/mla-2.c: Likewise.
> 
> Index: lib/target-supports.exp
> ===================================================================
> --- lib/target-supports.exp	(revision 175313)
> +++ lib/target-supports.exp	(working copy)
> @@ -1902,6 +1902,33 @@
>      }
>  }
>  
> +# Return 1 if this is an ARM target that supports DSP multiply with
> +# current multilib flags.
> +
> +proc check_effective_target_arm_dsp_multiply { } {
> +    return [check_no_compiler_messages arm_dsp_multiply assembly {
> +	#if defined(__ARM_ARCH_2__) || defined(__ARM_ARCH_2A__) \
> +	    || defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__) \
> +	    || defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) \
> +	    || defined(__ARM_ARCH_5T__)
> +	#  error NOT_SUPPORTED
> +	#elif defined(__thumb__) || defined(__thumb2__)
> +	#  if defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_6__) \
> +	      || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6M__) \
> +	      || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) \
> +	      || defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7M__) \
> +	      || defined(__ARM_ARCH_IWMMXT__) || defined(__ARM_ARCH_IWMMXT2__)
> +	#    error NOT_SUPPORTED
> +	#  endif
> +	#else
> +	#  if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_EP9312__)
> +	#    error NOT_SUPPORTED
> +	#  endif
> +	#endif
> +	int i;
> +    }]
> +}
> +
>  # Add the options needed for NEON.  We need either -mfloat-abi=softfp
>  # or -mfloat-abi=hard, but if one is already specified by the
>  # multilib, use it.  Similarly, if a -mfpu option already enables
> Index: gcc.target/arm/wmul-1.c
> ===================================================================
> --- gcc.target/arm/wmul-1.c	(revision 175313)
> +++ gcc.target/arm/wmul-1.c	(working copy)
> @@ -1,5 +1,6 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -march=armv6t2" } */
> +/* { dg-require-effective-target arm_dsp_multiply } */
> +/* { dg-options "-O2" } */
>  
>  int mac(const short *a, const short *b, int sqr, int *sum)
>  {
> Index: gcc.target/arm/wmul-2.c
> ===================================================================
> --- gcc.target/arm/wmul-2.c	(revision 175313)
> +++ gcc.target/arm/wmul-2.c	(working copy)
> @@ -1,5 +1,6 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -march=armv6t2" } */
> +/* { dg-require-effective-target arm_dsp_multiply } */
> +/* { dg-options "-O2" } */
>  
>  void vec_mpy(int y[], const short x[], short scaler)
>  {
> Index: gcc.target/arm/wmul-3.c
> ===================================================================
> --- gcc.target/arm/wmul-3.c	(revision 175313)
> +++ gcc.target/arm/wmul-3.c	(working copy)
> @@ -1,5 +1,6 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -march=armv6t2" } */
> +/* { dg-require-effective-target arm_dsp_multiply } */
> +/* { dg-options "-O2" } */
>  
>  int mac(const short *a, const short *b, int sqr, int *sum)
>  {
> Index: gcc.target/arm/wmul-4.c
> ===================================================================
> --- gcc.target/arm/wmul-4.c	(revision 175313)
> +++ gcc.target/arm/wmul-4.c	(working copy)
> @@ -1,5 +1,6 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -march=armv6t2" } */
> +/* { dg-require-effective-target arm_dsp_multiply } */
> +/* { dg-options "-O2" } */
>  
>  int mac(const int *a, const int *b, long long sqr, long long *sum)
>  {
> Index: gcc.target/arm/mla-2.c
> ===================================================================
> --- gcc.target/arm/mla-2.c	(revision 175313)
> +++ gcc.target/arm/mla-2.c	(working copy)
> @@ -1,5 +1,6 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -march=armv7-a" } */
> +/* { dg-require-effective-target arm_dsp_multiply } */
> +/* { dg-options "-O2" } */
>  
>  long long foolong (long long x, short *a, short *b)
>  {
diff mbox

Patch

Index: lib/target-supports.exp
===================================================================
--- lib/target-supports.exp	(revision 175313)
+++ lib/target-supports.exp	(working copy)
@@ -1902,6 +1902,33 @@ 
     }
 }
 
+# Return 1 if this is an ARM target that supports DSP multiply with
+# current multilib flags.
+
+proc check_effective_target_arm_dsp_multiply { } {
+    return [check_no_compiler_messages arm_dsp_multiply assembly {
+	#if defined(__ARM_ARCH_2__) || defined(__ARM_ARCH_2A__) \
+	    || defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__) \
+	    || defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) \
+	    || defined(__ARM_ARCH_5T__)
+	#  error NOT_SUPPORTED
+	#elif defined(__thumb__) || defined(__thumb2__)
+	#  if defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_6__) \
+	      || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6M__) \
+	      || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) \
+	      || defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7M__) \
+	      || defined(__ARM_ARCH_IWMMXT__) || defined(__ARM_ARCH_IWMMXT2__)
+	#    error NOT_SUPPORTED
+	#  endif
+	#else
+	#  if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_EP9312__)
+	#    error NOT_SUPPORTED
+	#  endif
+	#endif
+	int i;
+    }]
+}
+
 # Add the options needed for NEON.  We need either -mfloat-abi=softfp
 # or -mfloat-abi=hard, but if one is already specified by the
 # multilib, use it.  Similarly, if a -mfpu option already enables
Index: gcc.target/arm/wmul-1.c
===================================================================
--- gcc.target/arm/wmul-1.c	(revision 175313)
+++ gcc.target/arm/wmul-1.c	(working copy)
@@ -1,5 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O2 -march=armv6t2" } */
+/* { dg-require-effective-target arm_dsp_multiply } */
+/* { dg-options "-O2" } */
 
 int mac(const short *a, const short *b, int sqr, int *sum)
 {
Index: gcc.target/arm/wmul-2.c
===================================================================
--- gcc.target/arm/wmul-2.c	(revision 175313)
+++ gcc.target/arm/wmul-2.c	(working copy)
@@ -1,5 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O2 -march=armv6t2" } */
+/* { dg-require-effective-target arm_dsp_multiply } */
+/* { dg-options "-O2" } */
 
 void vec_mpy(int y[], const short x[], short scaler)
 {
Index: gcc.target/arm/wmul-3.c
===================================================================
--- gcc.target/arm/wmul-3.c	(revision 175313)
+++ gcc.target/arm/wmul-3.c	(working copy)
@@ -1,5 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O2 -march=armv6t2" } */
+/* { dg-require-effective-target arm_dsp_multiply } */
+/* { dg-options "-O2" } */
 
 int mac(const short *a, const short *b, int sqr, int *sum)
 {
Index: gcc.target/arm/wmul-4.c
===================================================================
--- gcc.target/arm/wmul-4.c	(revision 175313)
+++ gcc.target/arm/wmul-4.c	(working copy)
@@ -1,5 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O2 -march=armv6t2" } */
+/* { dg-require-effective-target arm_dsp_multiply } */
+/* { dg-options "-O2" } */
 
 int mac(const int *a, const int *b, long long sqr, long long *sum)
 {
Index: gcc.target/arm/mla-2.c
===================================================================
--- gcc.target/arm/mla-2.c	(revision 175313)
+++ gcc.target/arm/mla-2.c	(working copy)
@@ -1,5 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O2 -march=armv7-a" } */
+/* { dg-require-effective-target arm_dsp_multiply } */
+/* { dg-options "-O2" } */
 
 long long foolong (long long x, short *a, short *b)
 {