From 07327a8871d8e8eec1f33be31ea0bfdc0596ddd8 Mon Sep 17 00:00:00 2001
From: Sergey Shalnov <Sergey.Shalnov@intel.com>
Date: Fri, 22 Sep 2017 12:43:11 +0300
Subject: [PATCH 1/1] Avoid useing zmm if TARGET_PREFER_AVX256

---
 gcc/config/i386/i386.md                                   |  6 ++++--
 .../gcc.target/i386/avx512f-constant-float-return.c       | 15 +++++++++++++++
 2 files changed, 19 insertions(+), 2 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/i386/avx512f-constant-float-return.c

diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index f51e02c..b9a3928 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -3524,7 +3524,8 @@
 	       (eq_attr "alternative" "12,16")
 		 (cond [(not (match_test "TARGET_SSE2"))
 		 	  (const_string "V4SF")
-			(match_test "TARGET_AVX512F")
+			(and (match_test "TARGET_AVX512F")
+			  (not (match_test "TARGET_PREFER_AVX256")))
 			  (const_string "XI")
 			(match_test "TARGET_AVX")
 			  (const_string "V2DF")
@@ -3693,7 +3694,8 @@
 	       (eq_attr "alternative" "5")
 		 (cond [(not (match_test "TARGET_SSE2"))
  		 	  (const_string "V4SF")
-			(match_test "TARGET_AVX512F")
+			(and (match_test "TARGET_AVX512F")
+			  (not (match_test "TARGET_PREFER_AVX256")))
 			  (const_string "V16SF")
 			(match_test "TARGET_AVX")
 			  (const_string "V4SF")
diff --git a/gcc/testsuite/gcc.target/i386/avx512f-constant-float-return.c b/gcc/testsuite/gcc.target/i386/avx512f-constant-float-return.c
new file mode 100644
index 0000000..153cf69
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx512f-constant-float-return.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -march=skylake-avx512 -mprefer-avx256" } */
+/* { dg-final { scan-assembler-not "%zmm\[0-9\]+" } } */
+
+float
+my_test_f()
+{
+  return 0.0f;
+}
+
+double
+my_test_d()
+{
+  return 0.0;
+}
-- 
1.8.3.1

