[llvm] r319726 - [X86] Don't use kunpck for vXi1 concat_vectors if the upper bits are undef.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 4 17:28:06 PST 2017


Author: ctopper
Date: Mon Dec  4 17:28:06 2017
New Revision: 319726

URL: http://llvm.org/viewvc/llvm-project?rev=319726&view=rev
Log:
[X86] Don't use kunpck for vXi1 concat_vectors if the upper bits are undef.

This can be efficiently selected by a COPY_TO_REGCLASS without the need for an extra instruction.

Modified:
    llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
    llvm/trunk/test/CodeGen/X86/avx512-skx-insert-subvec.ll

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=319726&r1=319725&r2=319726&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Mon Dec  4 17:28:06 2017
@@ -8318,6 +8318,11 @@ static SDValue LowerCONCAT_VECTORSvXi1(S
          V1.getValueType().getVectorNumElements() == NumElems/2 &&
          "Unexpected operands in CONCAT_VECTORS");
 
+  // If this can be done with a subreg insert do that first.
+  SDValue ZeroIdx = DAG.getIntPtrConstant(0, dl);
+  if (V2.isUndef())
+    return DAG.getNode(ISD::INSERT_SUBVECTOR, dl, ResVT, Undef, V1, ZeroIdx);
+
   if (ResVT.getSizeInBits() >= 16)
     return Op; // The operation is legal with KUNPCK
 
@@ -8327,9 +8332,6 @@ static SDValue LowerCONCAT_VECTORSvXi1(S
   if (IsZeroV1 && IsZeroV2)
     return ZeroVec;
 
-  SDValue ZeroIdx = DAG.getIntPtrConstant(0, dl);
-  if (V2.isUndef())
-    return DAG.getNode(ISD::INSERT_SUBVECTOR, dl, ResVT, Undef, V1, ZeroIdx);
   if (IsZeroV2)
     return DAG.getNode(ISD::INSERT_SUBVECTOR, dl, ResVT, ZeroVec, V1, ZeroIdx);
 

Modified: llvm/trunk/test/CodeGen/X86/avx512-skx-insert-subvec.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-skx-insert-subvec.ll?rev=319726&r1=319725&r2=319726&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/avx512-skx-insert-subvec.ll (original)
+++ llvm/trunk/test/CodeGen/X86/avx512-skx-insert-subvec.ll Mon Dec  4 17:28:06 2017
@@ -100,7 +100,6 @@ define <16 x i1> @test6(<2 x i1> %a, <2
 ; CHECK-NEXT:    kshiftlb $2, %k0, %k0
 ; CHECK-NEXT:    kshiftrb $2, %k0, %k0
 ; CHECK-NEXT:    korb %k1, %k0, %k0
-; CHECK-NEXT:    kunpckbw %k0, %k0, %k0
 ; CHECK-NEXT:    vpmovm2b %k0, %xmm0
 ; CHECK-NEXT:    retq
 
@@ -119,8 +118,6 @@ define <32 x i1> @test7(<4 x i1> %a, <4
 ; CHECK-NEXT:    kshiftlb $4, %k0, %k0
 ; CHECK-NEXT:    kshiftrb $4, %k0, %k0
 ; CHECK-NEXT:    korb %k1, %k0, %k0
-; CHECK-NEXT:    kunpckbw %k0, %k0, %k0
-; CHECK-NEXT:    kunpckwd %k0, %k0, %k0
 ; CHECK-NEXT:    vpmovm2b %k0, %ymm0
 ; CHECK-NEXT:    retq
 




More information about the llvm-commits mailing list