diff mbox

Avoid SIMD clone dg-do run tests if assembler doesn't support AVX2 (PR lto/59326)

Message ID 20131128230250.GT892@tucnak.redhat.com
State New
Headers show

Commit Message

Jakub Jelinek Nov. 28, 2013, 11:02 p.m. UTC
Hi!

As we create SIMD clones for all of SSE2, AVX and AVX2 ISAs right now,
the assembler needs to support SSE2, AVX and AVX2.  Apparently some folks
are still using binutils that don't handle that, this patch conditionalizes
the test on that.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2013-11-28  Jakub Jelinek  <jakub@redhat.com>

	PR lto/59326
	* gcc.target/i386/i386.exp (check_effective_target_avx2): Move to...
	* lib/target-supports.exp (check_effective_target_avx2): ... here.
	(check_effective_target_vect_simd_clones): New.
	* gcc.dg/vect/vect-simd-clone-1.c: Add dg-require-effective-target
	vect_simd_clones.
	* gcc.dg/vect/vect-simd-clone-2.c: Likewise.
	* gcc.dg/vect/vect-simd-clone-3.c: Likewise.
	* gcc.dg/vect/vect-simd-clone-4.c: Likewise.
	* gcc.dg/vect/vect-simd-clone-5.c: Likewise.
	* gcc.dg/vect/vect-simd-clone-6.c: Likewise.
	* gcc.dg/vect/vect-simd-clone-7.c: Likewise.
	* gcc.dg/vect/vect-simd-clone-8.c: Likewise.
	* gcc.dg/vect/vect-simd-clone-9.c: Likewise.
	* gcc.dg/vect/vect-simd-clone-10.c: Likewise.
	* gcc.dg/vect/vect-simd-clone-11.c: Likewise.


	Jakub

Comments

Richard Henderson Dec. 2, 2013, 6:28 p.m. UTC | #1
On 11/29/2013 12:02 PM, Jakub Jelinek wrote:
> As we create SIMD clones for all of SSE2, AVX and AVX2 ISAs right now,
> the assembler needs to support SSE2, AVX and AVX2.  Apparently some folks
> are still using binutils that don't handle that, this patch conditionalizes
> the test on that.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

Ok.


r~
diff mbox

Patch

--- gcc/testsuite/gcc.target/i386/i386.exp.jj	2013-01-11 09:02:38.000000000 +0100
+++ gcc/testsuite/gcc.target/i386/i386.exp	2013-11-28 13:36:40.464167773 +0100
@@ -209,18 +209,6 @@  proc check_effective_target_lzcnt { } {
     } "-mlzcnt" ]
 }
 
-# Return 1 if avx2 instructions can be compiled.
-proc check_effective_target_avx2 { } {
-    return [check_no_compiler_messages avx2 object {
-	typedef long long __v4di __attribute__ ((__vector_size__ (32)));
-	__v4di
-	mm256_is32_andnotsi256  (__v4di __X, __v4di __Y)
-        {
-	   return __builtin_ia32_andnotsi256 (__X, __Y);
-	}
-    } "-O0 -mavx2" ]
-}
-
 # Return 1 if bmi instructions can be compiled.
 proc check_effective_target_bmi { } {
     return [check_no_compiler_messages bmi object {
--- gcc/testsuite/lib/target-supports.exp.jj	2013-11-15 09:39:37.000000000 +0100
+++ gcc/testsuite/lib/target-supports.exp	2013-11-28 13:35:54.408422777 +0100
@@ -2146,6 +2146,32 @@  proc check_effective_target_vect_floatui
     return $et_vect_floatuint_cvt_saved
 }
 
+# Return 1 if the target supports #pragma omp declare simd, 0 otherwise.
+#
+# This won't change for different subtargets so cache the result.
+
+proc check_effective_target_vect_simd_clones { } {
+    global et_vect_simd_clones_saved
+
+    if [info exists et_vect_simd_clones_saved] {
+	verbose "check_effective_target_vect_simd_clones: using cached result" 2
+    } else {
+	set et_vect_simd_clones_saved 0
+	if { [istarget i?86-*-*] || [istarget x86_64-*-*] } {
+	    # On i?86/x86_64 #pragma omp declare simd builds a sse2, avx and
+	    # avx2 clone.  Only the right clone for the specified arch will be
+	    # chosen, but still we need to at least be able to assemble
+	    # avx2.
+	    if { [check_effective_target_avx2] } {
+		set et_vect_simd_clones_saved 1
+	    }
+	}
+    }
+
+    verbose "check_effective_target_vect_simd_clones: returning $et_vect_simd_clones_saved" 2
+    return $et_vect_simd_clones_saved
+}
+
 # Return 1 if this is a AArch64 target supporting big endian
 proc check_effective_target_aarch64_big_endian { } {
     return [check_no_compiler_messages aarch64_big_endian assembly {
@@ -5106,6 +5132,18 @@  proc check_effective_target_avx { } {
     } "-O2 -mavx" ]
 }
 
+# Return 1 if avx2 instructions can be compiled.
+proc check_effective_target_avx2 { } {
+    return [check_no_compiler_messages avx2 object {
+	typedef long long __v4di __attribute__ ((__vector_size__ (32)));
+	__v4di
+	mm256_is32_andnotsi256  (__v4di __X, __v4di __Y)
+        {
+	   return __builtin_ia32_andnotsi256 (__X, __Y);
+	}
+    } "-O0 -mavx2" ]
+}
+
 # Return 1 if sse instructions can be compiled.
 proc check_effective_target_sse { } {
     return [check_no_compiler_messages sse object {
--- gcc/testsuite/gcc.dg/vect/vect-simd-clone-1.c.jj	2013-11-27 12:15:14.000000000 +0100
+++ gcc/testsuite/gcc.dg/vect/vect-simd-clone-1.c	2013-11-28 13:24:55.345839723 +0100
@@ -1,3 +1,4 @@ 
+/* { dg-require-effective-target vect_simd_clones } */
 /* { dg-additional-options "-fopenmp-simd" } */
 /* { dg-additional-options "-mavx" { target avx_runtime } } */
 
--- gcc/testsuite/gcc.dg/vect/vect-simd-clone-2.c.jj	2013-11-27 12:15:14.000000000 +0100
+++ gcc/testsuite/gcc.dg/vect/vect-simd-clone-2.c	2013-11-28 13:25:43.158572535 +0100
@@ -1,3 +1,4 @@ 
+/* { dg-require-effective-target vect_simd_clones } */
 /* { dg-additional-options "-fopenmp-simd" } */
 /* { dg-additional-options "-mavx" { target avx_runtime } } */
 
--- gcc/testsuite/gcc.dg/vect/vect-simd-clone-3.c.jj	2013-11-27 12:15:14.000000000 +0100
+++ gcc/testsuite/gcc.dg/vect/vect-simd-clone-3.c	2013-11-28 13:25:46.065577204 +0100
@@ -1,3 +1,4 @@ 
+/* { dg-require-effective-target vect_simd_clones } */
 /* { dg-additional-options "-fopenmp-simd" } */
 /* { dg-additional-options "-mavx" { target avx_runtime } } */
 
--- gcc/testsuite/gcc.dg/vect/vect-simd-clone-4.c.jj	2013-11-27 12:15:14.000000000 +0100
+++ gcc/testsuite/gcc.dg/vect/vect-simd-clone-4.c	2013-11-28 13:25:48.995559597 +0100
@@ -1,3 +1,4 @@ 
+/* { dg-require-effective-target vect_simd_clones } */
 /* { dg-additional-options "-fopenmp-simd" } */
 /* { dg-additional-options "-mavx" { target avx_runtime } } */
 
--- gcc/testsuite/gcc.dg/vect/vect-simd-clone-5.c.jj	2013-11-27 12:15:14.000000000 +0100
+++ gcc/testsuite/gcc.dg/vect/vect-simd-clone-5.c	2013-11-28 13:25:51.973546669 +0100
@@ -1,3 +1,4 @@ 
+/* { dg-require-effective-target vect_simd_clones } */
 /* { dg-additional-options "-fopenmp-simd" } */
 /* { dg-additional-options "-mavx" { target avx_runtime } } */
 
--- gcc/testsuite/gcc.dg/vect/vect-simd-clone-6.c.jj	2013-11-27 12:15:14.000000000 +0100
+++ gcc/testsuite/gcc.dg/vect/vect-simd-clone-6.c	2013-11-28 13:25:56.014520288 +0100
@@ -1,3 +1,4 @@ 
+/* { dg-require-effective-target vect_simd_clones } */
 /* { dg-additional-options "-fopenmp-simd" } */
 /* { dg-additional-options "-mavx" { target avx_runtime } } */
 
--- gcc/testsuite/gcc.dg/vect/vect-simd-clone-7.c.jj	2013-11-27 12:15:14.000000000 +0100
+++ gcc/testsuite/gcc.dg/vect/vect-simd-clone-7.c	2013-11-28 13:25:59.357501867 +0100
@@ -1,3 +1,4 @@ 
+/* { dg-require-effective-target vect_simd_clones } */
 /* { dg-additional-options "-fopenmp-simd" } */
 /* { dg-additional-options "-mavx" { target avx_runtime } } */
 
--- gcc/testsuite/gcc.dg/vect/vect-simd-clone-8.c.jj	2013-11-27 12:15:14.000000000 +0100
+++ gcc/testsuite/gcc.dg/vect/vect-simd-clone-8.c	2013-11-28 13:26:02.247490531 +0100
@@ -1,3 +1,4 @@ 
+/* { dg-require-effective-target vect_simd_clones } */
 /* { dg-additional-options "-fopenmp-simd" } */
 /* { dg-additional-options "-mavx" { target avx_runtime } } */
 
--- gcc/testsuite/gcc.dg/vect/vect-simd-clone-9.c.jj	2013-11-27 12:15:14.000000000 +0100
+++ gcc/testsuite/gcc.dg/vect/vect-simd-clone-9.c	2013-11-28 13:26:05.176474430 +0100
@@ -1,3 +1,4 @@ 
+/* { dg-require-effective-target vect_simd_clones } */
 /* { dg-additional-options "-fopenmp-simd" } */
 /* { dg-additional-options "-mavx" { target avx_runtime } } */
 
--- gcc/testsuite/gcc.dg/vect/vect-simd-clone-10.c.jj	2013-11-27 12:15:14.000000000 +0100
+++ gcc/testsuite/gcc.dg/vect/vect-simd-clone-10.c	2013-11-28 13:25:07.801776994 +0100
@@ -1,3 +1,4 @@ 
+/* { dg-require-effective-target vect_simd_clones } */
 /* { dg-additional-options "-fopenmp-simd" } */
 /* { dg-additional-options "-mavx" { target avx_runtime } } */
 /* { dg-additional-sources vect-simd-clone-10a.c } */
--- gcc/testsuite/gcc.dg/vect/vect-simd-clone-11.c.jj	2013-11-27 12:15:14.000000000 +0100
+++ gcc/testsuite/gcc.dg/vect/vect-simd-clone-11.c	2013-11-28 13:25:18.300726999 +0100
@@ -1,3 +1,4 @@ 
+/* { dg-require-effective-target vect_simd_clones } */
 /* { dg-additional-options "-fopenmp-simd" } */
 /* { dg-additional-options "-mavx" { target avx_runtime } } */