[x86] Initial step of teaching the new vector shuffle lowering about
authorChandler Carruth <chandlerc@gmail.com>
Thu, 18 Sep 2014 04:11:29 +0000 (04:11 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Thu, 18 Sep 2014 04:11:29 +0000 (04:11 +0000)
commit3ff76847baebdc6f7256a5bdb0056191ce00f4a0
tree9318b0ec383aac7fbb7f3e26061d1c06737b535c
parent5bf65590d0e8297353398ab01f219fb2d7b7b36e
[x86] Initial step of teaching the new vector shuffle lowering about
PALIGNR. This just adds it to the v8i16 and v16i8 lowering steps where
it is completely unmatched. It also introduces the logic for detecting
rotation shuffle masks even in the presence of single input or blend
masks and arbitrarily undef lanes.

I've added fairly comprehensive tests for the matching logic in v8i16
because the tests at that size are much easier to write and manage.

I've not checked the SSE2 code generated for these tests because the
code is *horrible*. It is absolute madness. Testing it will just make
the test brittle without giving any interesting improvements in the
correctness confidence.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218013 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86ISelLowering.cpp
test/CodeGen/X86/vector-shuffle-128-v16.ll
test/CodeGen/X86/vector-shuffle-128-v8.ll