[x86] Tweak the v16i8 single input special case lowering for shuffles
authorChandler Carruth <chandlerc@gmail.com>
Thu, 10 Jul 2014 09:16:40 +0000 (09:16 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Thu, 10 Jul 2014 09:16:40 +0000 (09:16 +0000)
commitdc90a3ab8ffc841a442888940635306de6131d2f
tree8d033f9b0a90658d0ac99df4b7468c07a54dfb6a
parent8892dbf2bbd0eafb0e5ca29eab454d0b691fa9bb
[x86] Tweak the v16i8 single input special case lowering for shuffles
that splat i8s into i16s.

Previously, we would try much too hard to arrange a sequence of i8s in
one half of the input such that we could unpack them into i16s and
shuffle those into place. This isn't always going to be a cheaper i8
shuffle than our other strategies. The case where it is always going to
be cheaper is when we can arrange all the necessary inputs into one half
using just i16 shuffles. It happens that viewing the problem this way
also makes it much easier to produce an efficient set of shuffles to
move the inputs into one half and then unpack them.

With this, our splat code gets one step closer to being not terrible
with the new experimental lowering strategy. It also exposes two
combines missing which I will add next.

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