This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Fix various x86 tests for --with-arch=bdver3 --with-cpu=bdver3
- From: "Joseph S. Myers" <joseph at codesourcery dot com>
- To: Uros Bizjak <ubizjak at gmail dot com>
- Cc: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Date: Mon, 5 May 2014 16:44:06 +0000
- Subject: Re: Fix various x86 tests for --with-arch=bdver3 --with-cpu=bdver3
- Authentication-results: sourceware.org; auth=none
- References: <Pine dot LNX dot 4 dot 64 dot 1404012225590 dot 28709 at digraph dot polyomino dot org dot uk> <CAFULd4a_TUzWY1iiFmVUEPGFa=SaxrbXDQMhKw7HPRDY8XW9NQ at mail dot gmail dot com>
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