diff options
author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2011-08-16 18:21:54 +0000 |
---|---|---|
committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2011-08-16 18:21:54 +0000 |
commit | 3b86598cfaa6fa820af67dc0999f2c59a3bcbe84 (patch) | |
tree | d04a06e8b961f98dc39226594425ee8a5b731e33 /Makefile.common | |
parent | e26a1352487c350acaee62bc5f7fa4002b9bf524 (diff) | |
download | external_llvm-3b86598cfaa6fa820af67dc0999f2c59a3bcbe84.zip external_llvm-3b86598cfaa6fa820af67dc0999f2c59a3bcbe84.tar.gz external_llvm-3b86598cfaa6fa820af67dc0999f2c59a3bcbe84.tar.bz2 |
Instead of always leaving the work to the generic legalizer when
there is no support for native 256-bit shuffles, be more smart in some
cases, for example, when you can extract specific 128-bit parts and use
regular 128-bit shuffles for them. Example:
For this shuffle:
shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32>
<i32 1, i32 0, i32 7, i32 6>
This was expanded to:
vextractf128 $1, %ymm1, %xmm2
vpextrq $0, %xmm2, %rax
vmovd %rax, %xmm1
vpextrq $1, %xmm2, %rax
vmovd %rax, %xmm2
vpunpcklqdq %xmm1, %xmm2, %xmm1
vpextrq $0, %xmm0, %rax
vmovd %rax, %xmm2
vpextrq $1, %xmm0, %rax
vmovd %rax, %xmm0
vpunpcklqdq %xmm2, %xmm0, %xmm0
vinsertf128 $1, %xmm1, %ymm0, %ymm0
ret
Now we get:
vshufpd $1, %xmm0, %xmm0, %xmm0
vextractf128 $1, %ymm1, %xmm1
vshufpd $1, %xmm1, %xmm1, %xmm1
vinsertf128 $1, %xmm1, %ymm0, %ymm0
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137733 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'Makefile.common')
0 files changed, 0 insertions, 0 deletions