[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)
commita34a8e230d05250871047c4ab4de50a92587a35c
treede8db144e3958ae8533a403ca8cc154d875a070f
parent794d4dde4892b42a6e5f56c2775489d31876a448
[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.

llvm-svn: 212692
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/vector-shuffle-128-v16.ll