OSDN Git Service

* lib/target-supports.exp (check_avx_hw_available): New procedure.
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 23 Jul 2010 11:33:19 +0000 (11:33 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 23 Jul 2010 11:33:19 +0000 (11:33 +0000)
(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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162456 138bc75d-0d04-0410-961f-82ee72b054a4

32 files changed:
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/i386-1.C
gcc/testsuite/g++.dg/other/pr40446.C
gcc/testsuite/g++.dg/vect/vect.exp
gcc/testsuite/gcc.dg/20020418-1.c
gcc/testsuite/gcc.dg/compat/pr38736_main.c
gcc/testsuite/gcc.dg/compat/union-m128-1_main.c
gcc/testsuite/gcc.dg/compat/vector-1a_main.c
gcc/testsuite/gcc.dg/compat/vector-1b_main.c
gcc/testsuite/gcc.dg/compat/vector-2a_main.c
gcc/testsuite/gcc.dg/compat/vector-2b_main.c
gcc/testsuite/gcc.dg/pr32176.c
gcc/testsuite/gcc.dg/pr34856.c
gcc/testsuite/gcc.dg/pr36584.c
gcc/testsuite/gcc.dg/pr36997.c
gcc/testsuite/gcc.dg/pr37544.c
gcc/testsuite/gcc.dg/pr40550.c
gcc/testsuite/gcc.dg/prefetch-loop-arrays-1.c
gcc/testsuite/gcc.dg/torture/pr16104-1.c
gcc/testsuite/gcc.dg/torture/pr35771-1.c
gcc/testsuite/gcc.dg/torture/pr35771-2.c
gcc/testsuite/gcc.dg/torture/pr35771-3.c
gcc/testsuite/gcc.dg/torture/stackalign/alloca-2.c
gcc/testsuite/gcc.dg/torture/stackalign/alloca-3.c
gcc/testsuite/gcc.dg/torture/stackalign/push-1.c
gcc/testsuite/gcc.dg/torture/stackalign/vararg-3.c
gcc/testsuite/gcc.dg/vect/vect.exp
gcc/testsuite/gcc.target/i386/avx-check.h
gcc/testsuite/gfortran.dg/pr28158.f90
gcc/testsuite/gfortran.dg/pr30667.f
gcc/testsuite/gfortran.dg/vect/vect.exp
gcc/testsuite/lib/target-supports.exp

index 571426b..6bc8dd2 100644 (file)
@@ -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.
index 5104868..ec572ec 100644 (file)
@@ -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>
index b4be0d0..72cd196 100644 (file)
@@ -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>
index 18e8355..fe17342 100644 (file)
@@ -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
index 285af2b..7314ec0 100644 (file)
@@ -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);
 
index 88c3586..8f22108 100644 (file)
@@ -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.  */
 
index 602acf8..59e68d9 100644 (file)
@@ -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.  */
index 11b4511..608f5dd 100644 (file)
@@ -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
index fb5a5a9..427e8ca 100644 (file)
@@ -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);
 }
index 8457e5a..e957faf 100644 (file)
@@ -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
index c5a9300..2c19576 100644 (file)
@@ -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);
 }
index e0e63a3..6646db0 100644 (file)
@@ -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)
 {
index 76499f7..6bfc704 100644 (file)
@@ -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;
index 2af71ae..c0b005d 100644 (file)
@@ -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);
index 51b06a7..f87962e 100644 (file)
@@ -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)
index dec321b..99979ce 100644 (file)
@@ -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);
index 2e47729..0895113 100644 (file)
@@ -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))));
index 6c6f0b3..59cebc5 100644 (file)
@@ -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;
 
index d4aed81..ad5eda6 100644 (file)
@@ -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);
index 4e95700..b3fd554 100644 (file)
@@ -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__));
index ae5bb00..a033cae 100644 (file)
@@ -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__));
index 556f786..fcbe86c 100644 (file)
@@ -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__));
index 54232bf..139b74e 100644 (file)
@@ -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>
index 8a91121..31cb0c4 100644 (file)
@@ -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>
index c58d1ec..dd5dffc 100644 (file)
@@ -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>
index 734cf71..5b49685 100644 (file)
@@ -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>
index eecb13a..a68d8c6 100644 (file)
@@ -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
index 7736fc9..b15584a 100644 (file)
@@ -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
index d1cb9a4..4556ecd 100644 (file)
@@ -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)
index 99e536b..0f1af29 100644 (file)
@@ -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
index 2a09df5..5783e92 100644 (file)
@@ -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
index 9c1369a..9fb18d1 100644 (file)
@@ -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