diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 9c1369a..9bb0816 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -3323,15 +3323,28 @@ proc check_effective_target_automatic_stack_alignment  { } {
     }
 }
 
-# Return 1 if avx instructions can be compiled.
+# Return 1 if avx instructions can be compiled and run.
 
 proc check_effective_target_avx { } {
-    return [check_no_compiler_messages avx object {
-	void _mm256_zeroall (void)
+    return [check_runtime avx {
+	#include <cpuid.h>
+
+	/* Check if assembler accepts AVX instructons.  */
+	void foo (void)
 	{
-	   __builtin_ia32_vzeroall ();
+	    __asm__ volatile ("vzeroall");
+	}
+	int main ()
+	{
+	    unsigned int eax, ebx, ecx, edx;
+	    if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
+		return 1;
+
+	    /* Run AVX test only if host has AVX runtime support.  */
+	    return ((ecx & (bit_AVX | bit_OSXSAVE))
+		    == (bit_AVX | bit_OSXSAVE)) ? 0 : 1;
 	}
-    } "-O2 -mavx" ]
+    } "-O0" ]
 }
 
 # Return 1 if sse instructions can be compiled.
