Skip to content

Commit 742e04d

Browse files
committed
[X86] combineConcatVectorOps - handle *_EXTEND nodes
1 parent 8411214 commit 742e04d

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56929,6 +56929,23 @@ static SDValue combineConcatVectorOps(const SDLoc &DL, MVT VT,
5692956929
}
5693056930
}
5693156931
break;
56932+
case ISD::ANY_EXTEND:
56933+
case ISD::SIGN_EXTEND:
56934+
case ISD::ZERO_EXTEND:
56935+
// TODO: Handle ANY_EXTEND combos with SIGN/ZERO_EXTEND.
56936+
if (!IsSplat && NumOps == 2 &&
56937+
((VT.is256BitVector() && Subtarget.hasInt256()) ||
56938+
(VT.is512BitVector() && Subtarget.useAVX512Regs() &&
56939+
(EltSizeInBits >= 32 || Subtarget.useBWIRegs())))) {
56940+
EVT SrcVT = Ops[0].getOperand(0).getValueType();
56941+
if (SrcVT.isSimple() && SrcVT.is128BitVector() &&
56942+
SrcVT == Ops[1].getOperand(0).getValueType()) {
56943+
EVT NewSrcVT = SrcVT.getDoubleNumVectorElementsVT(Ctx);
56944+
return DAG.getNode(Op0.getOpcode(), DL, VT,
56945+
ConcatSubOperand(NewSrcVT, Ops, 0));
56946+
}
56947+
}
56948+
break;
5693256949
case X86ISD::VSHLI:
5693356950
case X86ISD::VSRLI:
5693456951
// Special case: SHL/SRL AVX1 V4i64 by 32-bits can lower as a shuffle.

llvm/test/CodeGen/X86/zero_extend_vector_inreg.ll

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4754,10 +4754,7 @@ define void @vec384_v12i32_to_v6i64_factor2(ptr %in.vec.base.ptr, ptr %in.vec.bi
47544754
; AVX512BW: # %bb.0:
47554755
; AVX512BW-NEXT: vmovdqa (%rdi), %ymm0
47564756
; AVX512BW-NEXT: vpaddb (%rsi), %ymm0, %ymm0
4757-
; AVX512BW-NEXT: vpmovzxdq {{.*#+}} ymm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
4758-
; AVX512BW-NEXT: vextracti128 $1, %ymm0, %xmm0
4759-
; AVX512BW-NEXT: vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
4760-
; AVX512BW-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
4757+
; AVX512BW-NEXT: vpmovzxdq {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero
47614758
; AVX512BW-NEXT: vpaddb (%rdx), %zmm0, %zmm0
47624759
; AVX512BW-NEXT: vmovdqa64 %zmm0, (%rcx)
47634760
; AVX512BW-NEXT: vzeroupper

0 commit comments

Comments
 (0)