This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fix various x86 tests for --with-arch=bdver3 --with-cpu=bdver3


On Wed, 2 Apr 2014, Uros Bizjak wrote:

> These are due to TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL tuning flag.
> Currently, this flag applies to all vector sizes (128, 256 and 512
> bits), but I guess it is effective only for 128 bit sizes. Can you
> please review usage of this flag in i386/sse.md?

Indeed, the optimization as described in
<http://gcc.gnu.org/ml/gcc-patches/2010-04/msg01464.html> is purely
about reducing code size, and is irrelevant in VEX-prefixed cases.
Thus, this patch adds <MODE_SIZE> == 16 conditionals in relevant cases
(some cases already had such conditionals or otherwise wouldn't be
used for larger vectors).

Tested with no regressions for x86_64-linux-gnu (--with-arch=bdver3
--with-cpu=bdver3, where it fixes most of the remaining scan-assembler
test failures).  OK to commit?

2014-05-05  Joseph Myers  <joseph@codesourcery.com>

	* config/i386/sse.md (*mov<mode>_internal)
	(*<sse>_loadu<ssemodesuffix><avxsizesuffix><mask_name>)
	(*<sse2_avx_avx512f>_loaddqu<mode><mask_name>)
	(<sse>_andnot<mode>3, <code><mode>3, *andnot<mode>3)
	(*<code><mode>3, *andnot<mode>3<mask_name>)
	(<mask_codefor><code><mode>3<mask_name>): Only consider
	TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL for modes of size 16.

Index: gcc/config/i386/sse.md
===================================================================
--- gcc/config/i386/sse.md	(revision 209980)
+++ gcc/config/i386/sse.md	(working copy)
@@ -758,7 +758,8 @@
   [(set_attr "type" "sselog1,ssemov,ssemov")
    (set_attr "prefix" "maybe_vex")
    (set (attr "mode")
-	(cond [(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
+	(cond [(and (match_test "<MODE_SIZE> == 16")
+		    (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL"))
 		 (const_string "<ssePSmode>")
 	       (and (match_test "<MODE_SIZE> == 16")
 		    (and (eq_attr "alternative" "2")
@@ -967,7 +968,8 @@
    (set_attr "ssememalign" "8")
    (set_attr "prefix" "maybe_vex")
    (set (attr "mode")
-	(cond [(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
+	(cond [(and (match_test "<MODE_SIZE> == 16")
+		    (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL"))
 		 (const_string "<ssePSmode>")
 	       (match_test "TARGET_AVX")
 		 (const_string "<MODE>")
@@ -1089,7 +1091,8 @@
      (const_string "1")))
    (set_attr "prefix" "maybe_vex")
    (set (attr "mode")
-	(cond [(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
+	(cond [(and (match_test "<MODE_SIZE> == 16")
+		    (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL"))
 		 (const_string "<ssePSmode>")
 	       (match_test "TARGET_AVX")
 		 (const_string "<sseinsnmode>")
@@ -2377,7 +2380,8 @@
    (set_attr "type" "sselog")
    (set_attr "prefix" "orig,maybe_evex")
    (set (attr "mode")
-	(cond [(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
+	(cond [(and (match_test "<MODE_SIZE> == 16")
+		    (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL"))
 		 (const_string "<ssePSmode>")
 	       (match_test "TARGET_AVX")
 		 (const_string "<MODE>")
@@ -2449,7 +2453,8 @@
    (set_attr "type" "sselog")
    (set_attr "prefix" "orig,maybe_evex")
    (set (attr "mode")
-	(cond [(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
+	(cond [(and (match_test "<MODE_SIZE> == 16")
+		    (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL"))
 		 (const_string "<ssePSmode>")
 	       (match_test "TARGET_AVX")
 		 (const_string "<MODE>")
@@ -2513,7 +2518,8 @@
    (set_attr "type" "sselog")
    (set_attr "prefix" "orig,vex")
    (set (attr "mode")
-	(cond [(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
+	(cond [(and (match_test "<MODE_SIZE> == 16")
+		    (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL"))
 		 (const_string "V4SF")
 	       (match_test "TARGET_AVX")
 		 (const_string "<ssevecmode>")
@@ -2600,7 +2606,8 @@
    (set_attr "type" "sselog")
    (set_attr "prefix" "orig,vex")
    (set (attr "mode")
-	(cond [(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
+	(cond [(and (match_test "<MODE_SIZE> == 16")
+		    (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL"))
 		 (const_string "V4SF")
 	       (match_test "TARGET_AVX")
 		 (const_string "<ssevecmode>")
@@ -9047,7 +9054,8 @@
        (const_string "*")))
    (set_attr "prefix" "<mask_prefix3>")
    (set (attr "mode")
-	(cond [(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
+	(cond [(and (match_test "<MODE_SIZE> == 16")
+		    (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL"))
 		 (const_string "<ssePSmode>")
 	       (match_test "TARGET_AVX2")
 		 (const_string "<sseinsnmode>")
@@ -9140,7 +9148,8 @@
        (const_string "*")))
    (set_attr "prefix" "<mask_prefix3>")
    (set (attr "mode")
-	(cond [(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
+	(cond [(and (match_test "<MODE_SIZE> == 16")
+		    (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL"))
 		 (const_string "<ssePSmode>")
 	       (match_test "TARGET_AVX2")
 		 (const_string "<sseinsnmode>")

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]