[llvm] r263105 - [X86][AVX] Improve target shuffle combining of BLEND+zero

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 10 03:50:16 PST 2016


Author: rksimon
Date: Thu Mar 10 05:50:15 2016
New Revision: 263105

URL: http://llvm.org/viewvc/llvm-project?rev=263105&view=rev
Log:
[X86][AVX] Improve target shuffle combining of BLEND+zero

The BLEND+zero combine was failing to combine equivalent BLEND masks.

Follow up to D17483 and D17858

Modified:
    llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
    llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v2.ll

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=263105&r1=263104&r2=263105&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Thu Mar 10 05:50:15 2016
@@ -23916,7 +23916,8 @@ static bool combineX86ShuffleChain(SDVal
         if (Mask[i / MaskRatio] < 0)
           BlendMask |= 1u << i;
 
-      if (Root.getOpcode() != X86ISD::BLENDI ||
+      if (Depth != 1 || RootVT != ShuffleVT ||
+          Root.getOpcode() != X86ISD::BLENDI ||
           Root->getConstantOperandVal(2) != BlendMask) {
         SDValue Zero = getZeroVector(ShuffleVT, Subtarget, DAG, DL);
         Res = DAG.getBitcast(ShuffleVT, Input);

Modified: llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v2.ll?rev=263105&r1=263104&r2=263105&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v2.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v2.ll Thu Mar 10 05:50:15 2016
@@ -941,17 +941,13 @@ define <2 x i64> @shuffle_v2i64_bitcast_
 ;
 ; AVX2-LABEL: shuffle_v2i64_bitcast_z123:
 ; AVX2:       # BB#0:
-; AVX2-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
-; AVX2-NEXT:    vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
-; AVX2-NEXT:    vxorps %xmm1, %xmm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
 ; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
 ; AVX2-NEXT:    retq
 ;
 ; AVX512VL-LABEL: shuffle_v2i64_bitcast_z123:
 ; AVX512VL:       # BB#0:
-; AVX512VL-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
-; AVX512VL-NEXT:    vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
-; AVX512VL-NEXT:    vxorps %xmm1, %xmm1, %xmm1
+; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
 ; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
 ; AVX512VL-NEXT:    retq
   %bitcast32 = bitcast <2 x i64> %x to <4 x float>




More information about the llvm-commits mailing list