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: [PATCH 1/2, x86] Add palignr support for AVX2.


On Wed, Oct 1, 2014 at 2:17 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Wed, Oct 01, 2014 at 01:45:54PM +0200, Uros Bizjak wrote:
>> OK.
>
> Thanks.  Second step is a tiny optimization, for the
> simplified 122 (now 24) vshuf-v4di.c testcase:
> typedef unsigned long long V __attribute__ ((vector_size (32)));
> V a, b, c, d;
>
> int
> main ()
> {
>   int i;
>   for (i = 0; i < 4; ++i)
>     {
>       a[i] = i + 2;
>       b[i] = 4 + i + 2;
>     }
>   asm volatile ("" : : : "memory");
>   c = __builtin_shuffle (a, b, (V) { 2, 5, 6, 3 });
>   d = __builtin_shuffle ((V) { 2, 3, 4, 5 }, (V) { 6, 7, 8, 9 }, (V) { 2, 5, 6, 3 });
>   if (__builtin_memcmp (&c, &d, sizeof (c)))
>     __builtin_abort ();
>   return 0;
> }
>
> this patch allows better code to be generated:
> -       vmovdqa b(%rip), %ymm0
> +       vpermq  $238, a(%rip), %ymm1
>         movl    $32, %edx
> -       movl    $d, %esi
> -       vmovdqa a(%rip), %ymm1
> +       vmovdqa b(%rip), %ymm0
> +       movl    $d, %esi
>         movl    $c, %edi
> -       vperm2i128      $17, %ymm0, %ymm1, %ymm1
>         vpblendd        $195, %ymm1, %ymm0, %ymm0
>         vmovdqa %ymm0, c(%rip)
>
> That is because vperm2i128 $17 unnecessarily uses
> two operands when all the data it grabs are from a single one.
> So, by canonicalizing the permutation we can emit
> vpermq $238 instead.  Perhaps more places might benefit from
> extra canonicalize_perm calls (two spots already use that beyond
> the single one on the expansion/testing entry point).
>
> Tested again with
> GCC_TEST_RUN_EXPENSIVE=1 make check-gcc \
> RUNTESTFLAGS='--target_board=unix/-mavx2 dg-torture.exp=vshuf*.c'
> on x86_64-linux.  Ok for trunk?
>
> 2014-10-01  Jakub Jelinek  <jakub@redhat.com>
>
>         * config/i386/i386.c (expand_vec_perm_vperm2f128): Canonicalize
>         dfirst permutation.

OK.

Thanks,
Uros.


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