diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2010-07-23 13:33:19 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2010-07-23 13:33:19 +0200 |
commit | 1d8ec041a5b143de07f9cc375c57e49a355ee027 (patch) | |
tree | 864361e650ba529aa3cdf3faf3469f92fb3c0727 /gcc | |
parent | a23c4464d8013c09b319c70dc906770622f0349a (diff) | |
download | gcc-1d8ec041a5b143de07f9cc375c57e49a355ee027.zip gcc-1d8ec041a5b143de07f9cc375c57e49a355ee027.tar.gz gcc-1d8ec041a5b143de07f9cc375c57e49a355ee027.tar.bz2 |
target-supports.exp (check_avx_hw_available): New procedure.
* lib/target-supports.exp (check_avx_hw_available): New procedure.
(check_effective_target_avx_runtime): New procedure.
(check_effective_target_sse2_runtime): Add check_effective_target_sse2.
(check_effective_target_sse_runtime): Add check_effective_target_sse.
* gcc.dg/compat/pr38736_main.c: Use avx_runtime effective target.
* gcc.dg/compat/vector-1b_main.c: Ditto. Remove cpuid.h include
and __get_cpuid test.
* gcc.dg/compat/vector-2b_main.c: Ditto.
* gcc.target/i386/avx-check.h (main): Also check bit_OSXSAVE.
* gcc.dg/20020418-1.c: Do not require sse2 effective target
for compile-time only test.
* gcc.dg/pr32716.c: Ditto.
* gcc.dg/pr34856.c: Ditto.
* gcc.dg/pr36997.c: Ditto.
* gcc.dg/prefetch-loop-arrays-1.c: Ditto.
* gfortran.dg/pr28158.f90: Ditto.
* gfortran.dg/pr30667.f: Ditto.
* gcc.dg/vect/vect.exp: Use check_effective_target_sse2_runtime for
i?86-*-* and x86_64-*-* targets to disable execution on targets
without sse2 runtime support.
* g++.dg/vect/vect.exp: Ditto.
* gfortran.dg/vect/vect.exp: Ditto.
* gcc.dg/pr36584.c: Remove now redundant sse2 effective target check.
* gcc.dg/pr37544.c: Ditto.
* gcc.dg/pr40550.c: Ditto.
* gcc.dg/compat/union-m128-1_main.c: Ditto.
* gcc.dg/compat/vector-1a_main.c: Ditto.
* gcc.dg/compat/vector-2a_main.c: Ditto.
* gcc.dg/torture/pr16104-1.c: Ditto.
* gcc.dg/torture/pr35771-1.c: Ditto.
* gcc.dg/torture/pr35771-2.c: Ditto.
* gcc.dg/torture/pr35771-3.c: Ditto.
* gcc.dg/torture/stackalign/alloca-2.c: Ditto.
* gcc.dg/torture/stackalign/alloca-3.c: Ditto.
* gcc.dg/torture/stackalign/push-1.c: Ditto.
* gcc.dg/torture/stackalign/vararg-3.c: Ditto.
* g++.dg/other/i386-1.C: Ditto.
* g++.dg/other/pr40446.C: Ditto.
From-SVN: r162456
Diffstat (limited to 'gcc')
32 files changed, 99 insertions, 69 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 571426b..6bc8dd2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,49 @@ +2010-06-23 Uros Bizjak <ubizjak@gmail.com> + + * lib/target-supports.exp (check_avx_hw_available): New procedure. + (check_effective_target_avx_runtime): New procedure. + (check_effective_target_sse2_runtime): Add check_effective_target_sse2. + (check_effective_target_sse_runtime): Add check_effective_target_sse. + + * gcc.dg/compat/pr38736_main.c: Use avx_runtime effective target. + * gcc.dg/compat/vector-1b_main.c: Ditto. Remove cpuid.h include + and __get_cpuid test. + * gcc.dg/compat/vector-2b_main.c: Ditto. + + * gcc.target/i386/avx-check.h (main): Also check bit_OSXSAVE. + + * gcc.dg/20020418-1.c: Do not require sse2 effective target + for compile-time only test. + * gcc.dg/pr32716.c: Ditto. + * gcc.dg/pr34856.c: Ditto. + * gcc.dg/pr36997.c: Ditto. + * gcc.dg/prefetch-loop-arrays-1.c: Ditto. + * gfortran.dg/pr28158.f90: Ditto. + * gfortran.dg/pr30667.f: Ditto. + + * gcc.dg/vect/vect.exp: Use check_effective_target_sse2_runtime for + i?86-*-* and x86_64-*-* targets to disable execution on targets + without sse2 runtime support. + * g++.dg/vect/vect.exp: Ditto. + * gfortran.dg/vect/vect.exp: Ditto. + + * gcc.dg/pr36584.c: Remove now redundant sse2 effective target check. + * gcc.dg/pr37544.c: Ditto. + * gcc.dg/pr40550.c: Ditto. + * gcc.dg/compat/union-m128-1_main.c: Ditto. + * gcc.dg/compat/vector-1a_main.c: Ditto. + * gcc.dg/compat/vector-2a_main.c: Ditto. + * gcc.dg/torture/pr16104-1.c: Ditto. + * gcc.dg/torture/pr35771-1.c: Ditto. + * gcc.dg/torture/pr35771-2.c: Ditto. + * gcc.dg/torture/pr35771-3.c: Ditto. + * gcc.dg/torture/stackalign/alloca-2.c: Ditto. + * gcc.dg/torture/stackalign/alloca-3.c: Ditto. + * gcc.dg/torture/stackalign/push-1.c: Ditto. + * gcc.dg/torture/stackalign/vararg-3.c: Ditto. + * g++.dg/other/i386-1.C: Ditto. + * g++.dg/other/pr40446.C: Ditto. + 2010-07-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> * gcc.dg/pr43058.c: Use dg-timeout-factor 4. diff --git a/gcc/testsuite/g++.dg/other/i386-1.C b/gcc/testsuite/g++.dg/other/i386-1.C index 5104868..ec572ec 100644 --- a/gcc/testsuite/g++.dg/other/i386-1.C +++ b/gcc/testsuite/g++.dg/other/i386-1.C @@ -1,6 +1,5 @@ /* { dg-do run { target i?86-*-* x86_64-*-* } } */ /* { dg-options "-msse2" } */ -/* { dg-require-effective-target sse2 } */ /* { dg-require-effective-target sse2_runtime } */ #include <xmmintrin.h> diff --git a/gcc/testsuite/g++.dg/other/pr40446.C b/gcc/testsuite/g++.dg/other/pr40446.C index b4be0d0..72cd196 100644 --- a/gcc/testsuite/g++.dg/other/pr40446.C +++ b/gcc/testsuite/g++.dg/other/pr40446.C @@ -1,7 +1,6 @@ // PR middle-end/40446 // { dg-do run { target i?86-*-* x86_64-*-* } } // { dg-options "-O1 -msse2" } -// { dg-require-effective-target sse2 } // { dg-require-effective-target sse2_runtime } #include <emmintrin.h> diff --git a/gcc/testsuite/g++.dg/vect/vect.exp b/gcc/testsuite/g++.dg/vect/vect.exp index 18e8355..fe17342 100644 --- a/gcc/testsuite/g++.dg/vect/vect.exp +++ b/gcc/testsuite/g++.dg/vect/vect.exp @@ -75,11 +75,8 @@ if [istarget "powerpc-*paired*"] { } elseif { [istarget "spu-*-*"] } { set dg-do-what-default run } elseif { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } { - if { ![check_effective_target_sse2] } then { - return - } lappend DEFAULT_VECTCFLAGS "-msse2" - if { [check_sse2_hw_available] && [check_sse_os_support_available] } { + if { [check_effective_target_sse2_runtime] } { set dg-do-what-default run } else { set dg-do-what-default compile diff --git a/gcc/testsuite/gcc.dg/20020418-1.c b/gcc/testsuite/gcc.dg/20020418-1.c index 285af2b..7314ec0 100644 --- a/gcc/testsuite/gcc.dg/20020418-1.c +++ b/gcc/testsuite/gcc.dg/20020418-1.c @@ -2,7 +2,6 @@ /* { dg-do compile } */ /* { dg-options "-O2" } */ /* { dg-options "-O2 -msse -ffast-math" { target i?86-*-* x86_64-*-* } } */ -/* { dg-require-effective-target sse { target i?86-*-* x86_64-*-* } } */ void bar (float *a, float *b); diff --git a/gcc/testsuite/gcc.dg/compat/pr38736_main.c b/gcc/testsuite/gcc.dg/compat/pr38736_main.c index 88c3586..8f22108 100644 --- a/gcc/testsuite/gcc.dg/compat/pr38736_main.c +++ b/gcc/testsuite/gcc.dg/compat/pr38736_main.c @@ -1,6 +1,6 @@ /* PR target/38736 */ /* { dg-skip-if "attribute ((aligned))" { ! { i?86-*-* x86_64-*-* } } } */ -/* { dg-require-effective-target avx } */ +/* { dg-require-effective-target avx_runtime } */ /* Test compatibility of attribute ((aligned)) with and without -mavx. */ diff --git a/gcc/testsuite/gcc.dg/compat/union-m128-1_main.c b/gcc/testsuite/gcc.dg/compat/union-m128-1_main.c index 602acf8..59e68d9 100644 --- a/gcc/testsuite/gcc.dg/compat/union-m128-1_main.c +++ b/gcc/testsuite/gcc.dg/compat/union-m128-1_main.c @@ -1,6 +1,5 @@ /* { dg-skip-if "test SSE2 support" { ! { i?86-*-* x86_64-*-* } } } */ /* { dg-options "-O" } */ -/* { dg-require-effective-target sse2 } */ /* { dg-require-effective-target sse2_runtime } */ /* Test function argument passing. PR target/15301. */ diff --git a/gcc/testsuite/gcc.dg/compat/vector-1a_main.c b/gcc/testsuite/gcc.dg/compat/vector-1a_main.c index 11b4511..608f5dd 100644 --- a/gcc/testsuite/gcc.dg/compat/vector-1a_main.c +++ b/gcc/testsuite/gcc.dg/compat/vector-1a_main.c @@ -1,5 +1,4 @@ /* { dg-skip-if "test SSE2 vector" { ! { i?86-*-* x86_64-*-* } } } */ -/* { dg-require-effective-target sse2 } */ /* { dg-require-effective-target sse2_runtime } */ /* Test compatibility of vector types: layout between separately-compiled diff --git a/gcc/testsuite/gcc.dg/compat/vector-1b_main.c b/gcc/testsuite/gcc.dg/compat/vector-1b_main.c index fb5a5a9..427e8ca 100644 --- a/gcc/testsuite/gcc.dg/compat/vector-1b_main.c +++ b/gcc/testsuite/gcc.dg/compat/vector-1b_main.c @@ -1,12 +1,10 @@ /* { dg-skip-if "test AVX vector" { ! { i?86-*-* x86_64-*-* } } } */ -/* { dg-require-effective-target avx } */ +/* { dg-require-effective-target avx_runtime } */ /* Test compatibility of vector types: layout between separately-compiled modules, parameter passing, and function return. This test uses vectors of integer values. */ -#include "cpuid.h" - extern void vector_1_x (void); extern void exit (int); int fails; @@ -14,14 +12,6 @@ int fails; int main () { - unsigned int eax, ebx, ecx, edx; - - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) - return 0; - - /* Run AVX vector test only if host has AVX support. */ - if (ecx & bit_AVX) - vector_1_x (); - + vector_1_x (); exit (0); } diff --git a/gcc/testsuite/gcc.dg/compat/vector-2a_main.c b/gcc/testsuite/gcc.dg/compat/vector-2a_main.c index 8457e5a..e957faf 100644 --- a/gcc/testsuite/gcc.dg/compat/vector-2a_main.c +++ b/gcc/testsuite/gcc.dg/compat/vector-2a_main.c @@ -1,5 +1,4 @@ /* { dg-skip-if "test SSE2 support" { ! { i?86-*-* x86_64-*-* } } } */ -/* { dg-require-effective-target sse2 } */ /* { dg-require-effective-target sse2_runtime } */ /* Test compatibility of vector types: layout between separately-compiled diff --git a/gcc/testsuite/gcc.dg/compat/vector-2b_main.c b/gcc/testsuite/gcc.dg/compat/vector-2b_main.c index c5a9300..2c19576 100644 --- a/gcc/testsuite/gcc.dg/compat/vector-2b_main.c +++ b/gcc/testsuite/gcc.dg/compat/vector-2b_main.c @@ -1,12 +1,10 @@ /* { dg-skip-if "test AVX support" { ! { i?86-*-* x86_64-*-* } } } */ -/* { dg-require-effective-target avx } */ +/* { dg-require-effective-target avx_runtime } */ /* Test compatibility of vector types: layout between separately-compiled modules, parameter passing, and function return. This test uses vectors of floating points values. */ -#include "cpuid.h" - extern void vector_2_x (void); extern void exit (int); int fails; @@ -14,14 +12,6 @@ int fails; int main () { - unsigned int eax, ebx, ecx, edx; - - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) - return 0; - - /* Run AVX vector test only if host has AVX support. */ - if (ecx & bit_AVX) - vector_2_x (); - + vector_2_x (); exit (0); } diff --git a/gcc/testsuite/gcc.dg/pr32176.c b/gcc/testsuite/gcc.dg/pr32176.c index e0e63a3..6646db0 100644 --- a/gcc/testsuite/gcc.dg/pr32176.c +++ b/gcc/testsuite/gcc.dg/pr32176.c @@ -3,7 +3,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -fprefetch-loop-arrays -w" } */ /* { dg-options "-O2 -fprefetch-loop-arrays -march=i686 -msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ -/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ void foo (void) { diff --git a/gcc/testsuite/gcc.dg/pr34856.c b/gcc/testsuite/gcc.dg/pr34856.c index 76499f7..6bfc704 100644 --- a/gcc/testsuite/gcc.dg/pr34856.c +++ b/gcc/testsuite/gcc.dg/pr34856.c @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2" } */ /* { dg-options "-O2 -msse2" { target { i?86-*-* x86_64-*-* } } } */ -/* { dg-require-effective-target sse2 { target { i?86-*-* x86_64-*-* } } } */ /* { dg-options "-O2 -maltivec" { target { powerpc*-*-linux* && powerpc_altivec_ok } } } */ typedef unsigned __attribute__ ((__mode__ (__pointer__))) uintptr_t; diff --git a/gcc/testsuite/gcc.dg/pr36584.c b/gcc/testsuite/gcc.dg/pr36584.c index 2af71ae..c0b005d 100644 --- a/gcc/testsuite/gcc.dg/pr36584.c +++ b/gcc/testsuite/gcc.dg/pr36584.c @@ -1,7 +1,6 @@ /* { dg-do run } */ /* { dg-options "-O2 -lm" } */ /* { dg-options "-O2 -msse2 -mfpmath=sse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ -/* { dg-require-effective-target sse2 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ /* { dg-require-effective-target sse2_runtime { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ extern double fabs (double); diff --git a/gcc/testsuite/gcc.dg/pr36997.c b/gcc/testsuite/gcc.dg/pr36997.c index 51b06a7..f87962e 100644 --- a/gcc/testsuite/gcc.dg/pr36997.c +++ b/gcc/testsuite/gcc.dg/pr36997.c @@ -1,6 +1,5 @@ /* { dg-do compile { target x86_64-*-* i?86-*-* } } */ /* { dg-options "-std=c99 -msse2" } */ -/* { dg-require-effective-target sse2 } */ typedef int __m64 __attribute__ ((__vector_size__ (8), __may_alias__)); __m64 _mm_add_si64 (__m64 __m1, __m64 __m2) diff --git a/gcc/testsuite/gcc.dg/pr37544.c b/gcc/testsuite/gcc.dg/pr37544.c index dec321b..99979ce 100644 --- a/gcc/testsuite/gcc.dg/pr37544.c +++ b/gcc/testsuite/gcc.dg/pr37544.c @@ -1,7 +1,6 @@ /* { dg-do run } */ /* { dg-options "-O2" } */ /* { dg-options "-O2 -msse2 -mtune=core2 -mfpmath=387" { target { i?86-*-* x86_64-*-* } } } */ -/* { dg-require-effective-target sse2 { target { i?86-*-* x86_64-*-* } } } */ /* { dg-require-effective-target sse2_runtime { target { i?86-*-* x86_64-*-* } } } */ extern void abort (void); diff --git a/gcc/testsuite/gcc.dg/pr40550.c b/gcc/testsuite/gcc.dg/pr40550.c index 2e47729..0895113 100644 --- a/gcc/testsuite/gcc.dg/pr40550.c +++ b/gcc/testsuite/gcc.dg/pr40550.c @@ -1,6 +1,5 @@ /* { dg-do run } */ /* { dg-options "-msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ -/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ /* { dg-require-effective-target sse_runtime { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ typedef float v2sf __attribute__ ((vector_size (2 * sizeof(float)))); diff --git a/gcc/testsuite/gcc.dg/prefetch-loop-arrays-1.c b/gcc/testsuite/gcc.dg/prefetch-loop-arrays-1.c index 6c6f0b3..59cebc5 100644 --- a/gcc/testsuite/gcc.dg/prefetch-loop-arrays-1.c +++ b/gcc/testsuite/gcc.dg/prefetch-loop-arrays-1.c @@ -2,7 +2,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -fprefetch-loop-arrays -w" } */ /* { dg-options "-O2 -fprefetch-loop-arrays -march=i686 -msse -w" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ -/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ __extension__ typedef __SIZE_TYPE__ size_t; diff --git a/gcc/testsuite/gcc.dg/torture/pr16104-1.c b/gcc/testsuite/gcc.dg/torture/pr16104-1.c index d4aed81..ad5eda6 100644 --- a/gcc/testsuite/gcc.dg/torture/pr16104-1.c +++ b/gcc/testsuite/gcc.dg/torture/pr16104-1.c @@ -1,7 +1,6 @@ /* PR rtl-optimization/16104 */ /* { dg-do run { target i?86-*-* x86_64-*-* } } */ /* { dg-options "-msse2" } */ -/* { dg-require-effective-target sse2 } */ /* { dg-require-effective-target sse2_runtime } */ extern void abort (void); diff --git a/gcc/testsuite/gcc.dg/torture/pr35771-1.c b/gcc/testsuite/gcc.dg/torture/pr35771-1.c index 4e95700..b3fd554 100644 --- a/gcc/testsuite/gcc.dg/torture/pr35771-1.c +++ b/gcc/testsuite/gcc.dg/torture/pr35771-1.c @@ -1,6 +1,5 @@ /* { dg-do run { target i?86-*-* x86_64-*-* } } */ /* { dg-options "-msse2" } */ -/* { dg-require-effective-target sse2 } */ /* { dg-require-effective-target sse2_runtime } */ typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__)); diff --git a/gcc/testsuite/gcc.dg/torture/pr35771-2.c b/gcc/testsuite/gcc.dg/torture/pr35771-2.c index ae5bb00..a033cae 100644 --- a/gcc/testsuite/gcc.dg/torture/pr35771-2.c +++ b/gcc/testsuite/gcc.dg/torture/pr35771-2.c @@ -1,6 +1,5 @@ /* { dg-do run { target i?86-*-* x86_64-*-* } } */ /* { dg-options "-msse2" } */ -/* { dg-require-effective-target sse2 } */ /* { dg-require-effective-target sse2_runtime } */ typedef double __m128d __attribute__ ((__vector_size__ (16), __may_alias__)); diff --git a/gcc/testsuite/gcc.dg/torture/pr35771-3.c b/gcc/testsuite/gcc.dg/torture/pr35771-3.c index 556f786..fcbe86c 100644 --- a/gcc/testsuite/gcc.dg/torture/pr35771-3.c +++ b/gcc/testsuite/gcc.dg/torture/pr35771-3.c @@ -1,6 +1,5 @@ /* { dg-do run { target i?86-*-* x86_64-*-* } } */ /* { dg-options "-msse2" } */ -/* { dg-require-effective-target sse2 } */ /* { dg-require-effective-target sse2_runtime } */ typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__)); diff --git a/gcc/testsuite/gcc.dg/torture/stackalign/alloca-2.c b/gcc/testsuite/gcc.dg/torture/stackalign/alloca-2.c index 54232bf..139b74e 100644 --- a/gcc/testsuite/gcc.dg/torture/stackalign/alloca-2.c +++ b/gcc/testsuite/gcc.dg/torture/stackalign/alloca-2.c @@ -1,7 +1,6 @@ /* PR middle-end/37009 */ /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ /* { dg-options "-msse2" } */ -/* { dg-require-effective-target sse2 } */ /* { dg-require-effective-target sse2_runtime } */ #include <emmintrin.h> diff --git a/gcc/testsuite/gcc.dg/torture/stackalign/alloca-3.c b/gcc/testsuite/gcc.dg/torture/stackalign/alloca-3.c index 8a91121..31cb0c4 100644 --- a/gcc/testsuite/gcc.dg/torture/stackalign/alloca-3.c +++ b/gcc/testsuite/gcc.dg/torture/stackalign/alloca-3.c @@ -1,7 +1,6 @@ /* PR middle-end/37009 */ /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ /* { dg-options "-msse2" } */ -/* { dg-require-effective-target sse2 } */ /* { dg-require-effective-target sse2_runtime } */ #include <emmintrin.h> diff --git a/gcc/testsuite/gcc.dg/torture/stackalign/push-1.c b/gcc/testsuite/gcc.dg/torture/stackalign/push-1.c index c58d1ec..dd5dffc 100644 --- a/gcc/testsuite/gcc.dg/torture/stackalign/push-1.c +++ b/gcc/testsuite/gcc.dg/torture/stackalign/push-1.c @@ -1,7 +1,6 @@ /* PR middle-end/37010 */ /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ /* { dg-options "-msse2 -mpreferred-stack-boundary=2" } */ -/* { dg-require-effective-target sse2 } */ /* { dg-require-effective-target sse2_runtime } */ #include <emmintrin.h> diff --git a/gcc/testsuite/gcc.dg/torture/stackalign/vararg-3.c b/gcc/testsuite/gcc.dg/torture/stackalign/vararg-3.c index 734cf71..5b49685 100644 --- a/gcc/testsuite/gcc.dg/torture/stackalign/vararg-3.c +++ b/gcc/testsuite/gcc.dg/torture/stackalign/vararg-3.c @@ -1,7 +1,6 @@ /* PR middle-end/37009 */ /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ /* { dg-options "-msse2" } */ -/* { dg-require-effective-target sse2 } */ /* { dg-require-effective-target sse2_runtime } */ #include <stdarg.h> diff --git a/gcc/testsuite/gcc.dg/vect/vect.exp b/gcc/testsuite/gcc.dg/vect/vect.exp index eecb13a..a68d8c6 100644 --- a/gcc/testsuite/gcc.dg/vect/vect.exp +++ b/gcc/testsuite/gcc.dg/vect/vect.exp @@ -67,11 +67,8 @@ if [istarget "powerpc-*paired*"] { } elseif { [istarget "spu-*-*"] } { set dg-do-what-default run } elseif { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } { - if { ![check_effective_target_sse2] } then { - return - } lappend DEFAULT_VECTCFLAGS "-msse2" - if { [check_sse2_hw_available] && [check_sse_os_support_available] } { + if { [check_effective_target_sse2_runtime] } { set dg-do-what-default run } else { set dg-do-what-default compile diff --git a/gcc/testsuite/gcc.target/i386/avx-check.h b/gcc/testsuite/gcc.target/i386/avx-check.h index 7736fc9..b15584a 100644 --- a/gcc/testsuite/gcc.target/i386/avx-check.h +++ b/gcc/testsuite/gcc.target/i386/avx-check.h @@ -20,7 +20,7 @@ main () return 0; /* Run AVX test only if host has AVX support. */ - if (ecx & bit_AVX) + if ((ecx & (bit_AVX | bit_OSXSAVE)) == (bit_AVX | bit_OSXSAVE)) { do_test (); #ifdef DEBUG diff --git a/gcc/testsuite/gfortran.dg/pr28158.f90 b/gcc/testsuite/gfortran.dg/pr28158.f90 index d1cb9a4..4556ecd 100644 --- a/gcc/testsuite/gfortran.dg/pr28158.f90 +++ b/gcc/testsuite/gfortran.dg/pr28158.f90 @@ -1,7 +1,6 @@ ! { dg-do compile { target i?86-*-* x86_64-*-* } } ! { dg-require-effective-target ilp32 } ! { dg-options "-O -msse -mfpmath=sse" } -! { dg-require-effective-target sse } subroutine yhalf(z) complex cdexpj,z z=cdexpj((0.d0,1.d0)*z) diff --git a/gcc/testsuite/gfortran.dg/pr30667.f b/gcc/testsuite/gfortran.dg/pr30667.f index 99e536b..0f1af29 100644 --- a/gcc/testsuite/gfortran.dg/pr30667.f +++ b/gcc/testsuite/gfortran.dg/pr30667.f @@ -1,7 +1,6 @@ ! { dg-do compile { target i?86-*-* x86_64-*-* } } ! { dg-require-effective-target ilp32 } ! { dg-options "-O2 -msse -ftree-vectorize" } -! { dg-require-effective-target sse } subroutine cblank_cvb(a,ndim) character*(*) a character*1 blank diff --git a/gcc/testsuite/gfortran.dg/vect/vect.exp b/gcc/testsuite/gfortran.dg/vect/vect.exp index 2a09df5..5783e92 100644 --- a/gcc/testsuite/gfortran.dg/vect/vect.exp +++ b/gcc/testsuite/gfortran.dg/vect/vect.exp @@ -68,11 +68,8 @@ if [istarget "powerpc-*paired*"] { } elseif { [istarget "spu-*-*"] } { set dg-do-what-default run } elseif { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } { - if { ![check_effective_target_sse2] } then { - return - } lappend DEFAULT_VECTCFLAGS "-msse2" - if { [check_sse2_hw_available] && [check_sse_os_support_available] } { + if { [check_effective_target_sse2_runtime] } { set dg-do-what-default run } else { set dg-do-what-default compile diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 9c1369a..9fb18d1 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -953,7 +953,7 @@ proc check_sse_hw_available { } { #include "cpuid.h" int main () { - unsigned int eax, ebx, ecx, edx = 0; + unsigned int eax, ebx, ecx, edx; if (__get_cpuid (1, &eax, &ebx, &ecx, &edx)) return !(edx & bit_SSE); return 1; @@ -976,7 +976,7 @@ proc check_sse2_hw_available { } { #include "cpuid.h" int main () { - unsigned int eax, ebx, ecx, edx = 0; + unsigned int eax, ebx, ecx, edx; if (__get_cpuid (1, &eax, &ebx, &ecx, &edx)) return !(edx & bit_SSE2); return 1; @@ -986,24 +986,60 @@ proc check_sse2_hw_available { } { }] } +# Return 1 if the target supports executing AVX instructions, 0 +# otherwise. Cache the result. + +proc check_avx_hw_available { } { + return [check_cached_effective_target avx_hw_available { + # If this is not the right target then we can skip the test. + if { !([istarget x86_64-*-*] || [istarget i?86-*-*]) } { + expr 0 + } else { + check_runtime_nocache avx_hw_available { + #include "cpuid.h" + int main () + { + unsigned int eax, ebx, ecx, edx; + if (__get_cpuid (1, &eax, &ebx, &ecx, &edx)) + return ((ecx & (bit_AVX | bit_OSXSAVE)) + != (bit_AVX | bit_OSXSAVE)); + return 1; + } + } "" + } + }] +} + # Return 1 if the target supports running SSE executables, 0 otherwise. proc check_effective_target_sse_runtime { } { - if { [check_sse_hw_available] && [check_sse_os_support_available] } { + if { [check_effective_target_sse] + && [check_sse_hw_available] + && [check_sse_os_support_available] } { return 1 - } else { - return 0 } + return 0 } # Return 1 if the target supports running SSE2 executables, 0 otherwise. proc check_effective_target_sse2_runtime { } { - if { [check_sse2_hw_available] && [check_sse_os_support_available] } { + if { [check_effective_target_sse2] + && [check_sse2_hw_available] + && [check_sse_os_support_available] } { return 1 - } else { - return 0 } + return 0 +} + +# Return 1 if the target supports running AVX executables, 0 otherwise. + +proc check_effective_target_avx_runtime { } { + if { [check_effective_target_avx] + && [check_avx_hw_available] } { + return 1 + } + return 0 } # Return 1 if the target supports executing VSX instructions, 0 |