Skip to content

Commit 2d8f322

Browse files
RKSimonAlexisPerry
authored andcommitted
[X86] combineConcatVectorOps - add pmaddwd/pmaddubsw handling
1 parent 44311a6 commit 2d8f322

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55921,6 +55921,8 @@ static SDValue combineConcatVectorOps(const SDLoc &DL, MVT VT,
5592155921
break;
5592255922
case X86ISD::PSHUFB:
5592355923
case X86ISD::PSADBW:
55924+
case X86ISD::VPMADDUBSW:
55925+
case X86ISD::VPMADDWD:
5592455926
if (!IsSplat && ((VT.is256BitVector() && Subtarget.hasInt256()) ||
5592555927
(VT.is512BitVector() && Subtarget.useBWIRegs()))) {
5592655928
MVT SrcVT = Op0.getOperand(0).getSimpleValueType();

llvm/test/CodeGen/X86/combine-pmadd.ll

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,11 @@ define <8 x i32> @combine_pmaddwd_concat(<8 x i16> %a0, <8 x i16> %a1, <8 x i16>
5151
;
5252
; AVX2-LABEL: combine_pmaddwd_concat:
5353
; AVX2: # %bb.0:
54-
; AVX2-NEXT: vpmaddwd %xmm1, %xmm0, %xmm0
55-
; AVX2-NEXT: vpmaddwd %xmm3, %xmm2, %xmm1
56-
; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
54+
; AVX2-NEXT: # kill: def $xmm1 killed $xmm1 def $ymm1
55+
; AVX2-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
56+
; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm1, %ymm1
57+
; AVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0
58+
; AVX2-NEXT: vpmaddwd %ymm1, %ymm0, %ymm0
5759
; AVX2-NEXT: retq
5860
%1 = call <4 x i32> @llvm.x86.sse2.pmadd.wd(<8 x i16> %a0, <8 x i16> %a1)
5961
%2 = call <4 x i32> @llvm.x86.sse2.pmadd.wd(<8 x i16> %a2, <8 x i16> %a3)
@@ -116,9 +118,11 @@ define <16 x i16> @combine_pmaddubsw_concat(<16 x i8> %a0, <16 x i8> %a1, <16 x
116118
;
117119
; AVX2-LABEL: combine_pmaddubsw_concat:
118120
; AVX2: # %bb.0:
119-
; AVX2-NEXT: vpmaddubsw %xmm1, %xmm0, %xmm0
120-
; AVX2-NEXT: vpmaddubsw %xmm3, %xmm2, %xmm1
121-
; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
121+
; AVX2-NEXT: # kill: def $xmm1 killed $xmm1 def $ymm1
122+
; AVX2-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
123+
; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm1, %ymm1
124+
; AVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0
125+
; AVX2-NEXT: vpmaddubsw %ymm1, %ymm0, %ymm0
122126
; AVX2-NEXT: retq
123127
%1 = call <8 x i16> @llvm.x86.ssse3.pmadd.ub.sw.128(<16 x i8> %a0, <16 x i8> %a1)
124128
%2 = call <8 x i16> @llvm.x86.ssse3.pmadd.ub.sw.128(<16 x i8> %a2, <16 x i8> %a3)

0 commit comments

Comments
 (0)