]> granicus.if.org Git - llvm/commitdiff
[X86][SSE] Detect unary PBLEND shuffles.
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Tue, 31 Jan 2017 13:58:01 +0000 (13:58 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Tue, 31 Jan 2017 13:58:01 +0000 (13:58 +0000)
These can appear during shuffle combining.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293628 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelLowering.cpp
test/CodeGen/X86/clear_upper_vector_element_bits.ll

index 6b235d08ce3f6e6c444f57c38574af69327b3046..f1d6c70401755daaac23d4832c9d80693406ea65 100644 (file)
@@ -5397,6 +5397,7 @@ static bool getTargetShuffleMask(SDNode *N, MVT VT, bool AllowSentinelZero,
   case X86ISD::BLENDI:
     ImmN = N->getOperand(N->getNumOperands()-1);
     DecodeBLENDMask(VT, cast<ConstantSDNode>(ImmN)->getZExtValue(), Mask);
+    IsUnary = IsFakeUnary = N->getOperand(0) == N->getOperand(1);
     break;
   case X86ISD::SHUFP:
     ImmN = N->getOperand(N->getNumOperands()-1);
index d22c2e3d98ce51eb3a4e0754e965f0ec4bbb9843..bedc68e00007f9b84c3ac22f45311d555df65ec9 100644 (file)
@@ -94,8 +94,7 @@ define <8 x i16> @_clearupper8xi16a(<8 x i16>) nounwind {
 ;
 ; AVX-LABEL: _clearupper8xi16a:
 ; AVX:       # BB#0:
-; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6,7]
-; AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
+; AVX-NEXT:    vandps {{.*}}(%rip), %xmm0, %xmm0
 ; AVX-NEXT:    retq
   %x0 = extractelement <8 x i16> %0, i32 0
   %x1 = extractelement <8 x i16> %0, i32 1