Fix a problem with DAGCombine on 64b targets where folding
authorNate Begeman <natebegeman@mac.com>
Sun, 1 Mar 2009 23:44:07 +0000 (23:44 +0000)
committerNate Begeman <natebegeman@mac.com>
Sun, 1 Mar 2009 23:44:07 +0000 (23:44 +0000)
commitcbd88adea66261a2f4372906fe1e08c2093d8718
treeb13fbd9be669309965a23f0a8726ca035e8a93d9
parent932af8f8c35c70e22aea165d16d92dbb68a59cf9
Fix a problem with DAGCombine on 64b targets where folding
extracts + build_vector into a shuffle would fail, because the
type of the new build_vector would not be legal.  Try harder to
create a legal build_vector type.  Note: this will be totally
irrelevant once vector_shuffle no longer takes a build_vector for
shuffle mask.

New:
_foo:
xorps %xmm0, %xmm0
xorps %xmm1, %xmm1
subps %xmm1, %xmm1
mulps %xmm0, %xmm1
addps %xmm0, %xmm1
movaps %xmm1, 0

Old:
_foo:
xorps %xmm0, %xmm0
movss %xmm0, %xmm1
xorps %xmm2, %xmm2
unpcklps %xmm1, %xmm2
pshufd $80, %xmm1, %xmm1
unpcklps %xmm1, %xmm2
pslldq $16, %xmm2
pshufd $57, %xmm2, %xmm1
subps %xmm0, %xmm1
mulps %xmm0, %xmm1
addps %xmm0, %xmm1
movaps %xmm1, 0

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65791 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/DAGCombiner.cpp
test/CodeGen/X86/extract-combine.ll [new file with mode: 0644]