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  <jos...@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
jos...@codesourcery.com

Reply via email to