[x86] Delete a bunch of really bad and totally unnecessary code in the
authorChandler Carruth <chandlerc@gmail.com>
Mon, 29 Sep 2014 02:01:20 +0000 (02:01 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Mon, 29 Sep 2014 02:01:20 +0000 (02:01 +0000)
commitd23f1883d3eef7c002f865a306887c2403a3ec31
treee03b2e3b020a00670f0cdfd084cbb5ff74a22cdf
parent3589550b3ef0f25f3383a63dd7071861c401de4c
[x86] Delete a bunch of really bad and totally unnecessary code in the
X86 target-specific DAG combining that tried to convert VSELECT nodes
into VECTOR_SHUFFLE nodes that it "knew" would lower into
immediate-controlled blend nodes.

Turns out, we have perfectly good lowering of all these VSELECT nodes,
and indeed that lowering already knows how to handle lowering through
BLENDI to immediate-controlled blend nodes. The code just wasn't getting
used much because this thing forced the world to go through the vector
shuffle lowering. Yuck.

This also exposes that I was too aggressive in avoiding domain crossing
in v218588 with that lowering -- when the other option is to expand into
two 128-bit vectors, it is worth domain crossing. Restore that behavior
now that we have nice tests covering it.

The test updates here fall into two camps. One is where previously we
ended up with an unsigned encoding of the blend operand and now we get
a signed encoding. In most of those places there were elaborate comments
explaining exactly what these operands really mean. Rather than that,
just switch these tests to use the nicely decoded comments that make it
obvious that the final shuffle matches.

The other updates are just removing pointless domain crossing by
blending integers with PBLENDW rather than BLENDPS.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218589 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86ISelLowering.cpp
test/CodeGen/X86/avx-blend.ll
test/CodeGen/X86/blend-msb.ll
test/CodeGen/X86/sse41-blend.ll