Optimize vec_extract for 256/512-bit vector when index exceeds the lower 128 bits.
authorliuhongt <hongtao.liu@intel.com>
Wed, 8 Sep 2021 08:19:37 +0000 (16:19 +0800)
committerliuhongt <hongtao.liu@intel.com>
Thu, 9 Sep 2021 01:33:40 +0000 (09:33 +0800)
commit60eec23b5eda0f350e572586eee738eab0804a74
tree2b6f7a765bac97ef89278cfb643d2166181bddd1
parentb6db7cd41ccf821ffb10ff4f18845465e98803cd
Optimize vec_extract for 256/512-bit vector when index exceeds the lower 128 bits.

- vextracti32x8 $0x1, %zmm0, %ymm0
- vmovd %xmm0, %eax
+ valignd $8, %zmm0, %zmm0, %zmm1
+ vmovd %xmm1, %eax

- vextracti32x8 $0x1, %zmm0, %ymm0
- vextracti128 $0x1, %ymm0, %xmm0
- vpextrd $3, %xmm0, %eax
+ valignd $15, %zmm0, %zmm0, %zmm1
+ vmovd %xmm1, %eax

- vextractf64x2 $0x1, %ymm0, %xmm0
+ valignq $2, %ymm0, %ymm0, %ymm0

- vextractf64x4 $0x1, %zmm0, %ymm0
- vextractf64x2 $0x1, %ymm0, %xmm0
- vunpckhpd %xmm0, %xmm0, %xmm0
+ valignq $7, %zmm0, %zmm0, %zmm0

gcc/ChangeLog:

PR target/91103
* config/i386/sse.md (*vec_extract<mode><ssescalarmodelower>_valign):
New define_insn.

gcc/testsuite/ChangeLog:

PR target/91103
* gcc.target/i386/pr91103-1.c: New test.
* gcc.target/i386/pr91103-2.c: New test.
gcc/config/i386/sse.md
gcc/testsuite/gcc.target/i386/pr91103-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr91103-2.c [new file with mode: 0644]