[x86] Add a generic unpack-targeted lowering technique. This can be used
authorChandler Carruth <chandlerc@gmail.com>
Mon, 16 Feb 2015 12:28:18 +0000 (12:28 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Mon, 16 Feb 2015 12:28:18 +0000 (12:28 +0000)
commitcbe6ecfc8192f33397817c4b86368f596c17c533
tree16bb08e7426a56a1cf170cb4222d54bba8c2df96
parente62fbca6b7dbb40ed453cc6fb002ef6be7f5c3e6
[x86] Add a generic unpack-targeted lowering technique. This can be used
to generically lower blends and is particularly nice because it is
available frome SSE2 onward. This removes a lot of the remaining domain
crossing blends in SSE2 code.

I'm hoping to replace some of the "interleaved" lowering hacks with
something closer to this which should be more principled. First, this
needs to learn how to detect and use other interleavings besides that of
the natural type provided. That will be a follow-up patch though.

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