On Mon, May 5, 2014 at 6:44 PM, Joseph S. Myers <jos...@codesourcery.com> 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.

This is OK for mainline with a slight change below.

> 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")

Please merge the changed first and the second conditional to:

    (cond [(and (match_test "<MODE_SIZE> == 16")
                   (ior (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
                 (and (eq_attr "alternative" "2")
                  (match_test "TARGET_SSE_TYPELESS_STORES"))))
         (const_string "<ssePSmode>")

Thanks,
Uros.

Reply via email to