[x86] Make the previous logic significantly less conservative and get
authorChandler Carruth <chandlerc@gmail.com>
Fri, 21 Nov 2014 14:33:24 +0000 (14:33 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Fri, 21 Nov 2014 14:33:24 +0000 (14:33 +0000)
commit0889d65fd51eecb93043172035ca67af0fa2da2e
treee3e0a0898c1e5206721877451e1d3d8e25b547ae
parent607099b6972b59c9b786a147655c674299bae4de
[x86] Make the previous logic significantly less conservative and get
a bunch more improvements.

Non-lane-crossing is fine, the key is that lane merging only makes sense
for single-input shuffles. Not sure why I got so turned around here. The
code all works, I was just using the wrong model for it.

This only updates v4 and v8 lowering. The v16 and v32 lowering requires
restructuring the entire check sequence.

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