Skip to content

Commit 3fe01f8

Browse files
author
git apple-llvm automerger
committed
Merge commit 'd0902a8665b1' from llvm.org/main into apple/main
2 parents 34bc3a9 + d0902a8 commit 3fe01f8

File tree

3 files changed

+15
-7
lines changed

3 files changed

+15
-7
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9979,7 +9979,8 @@ static SDValue createVariablePermute(MVT VT, SDValue SrcVec, SDValue IndicesVec,
99799979
"Illegal variable permute mask size");
99809980
if (IndicesVec.getValueType().getVectorNumElements() > NumElts) {
99819981
if (IndicesVec.getValueSizeInBits() == SizeInBits)
9982-
IndicesVec = DAG.getBitcast(IndicesVT, IndicesVec);
9982+
IndicesVec = DAG.getNode(ISD::ZERO_EXTEND_VECTOR_INREG, SDLoc(IndicesVec),
9983+
IndicesVT, IndicesVec);
99839984
else
99849985
IndicesVec = extractSubVector(IndicesVec, 0, DAG, SDLoc(IndicesVec),
99859986
NumElts * VT.getScalarSizeInBits());

llvm/test/CodeGen/X86/var-permute-128.ll

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1162,6 +1162,7 @@ define void @indices_convert() {
11621162
; XOP: # %bb.0: # %bb
11631163
; XOP-NEXT: vpshufd {{.*#+}} xmm0 = mem[2,3,2,3]
11641164
; XOP-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0
1165+
; XOP-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11651166
; XOP-NEXT: vmovapd (%rax), %xmm1
11661167
; XOP-NEXT: vpaddq %xmm0, %xmm0, %xmm0
11671168
; XOP-NEXT: vpermil2pd $0, %xmm0, %xmm1, %xmm1, %xmm0
@@ -1172,6 +1173,7 @@ define void @indices_convert() {
11721173
; AVX1: # %bb.0: # %bb
11731174
; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = mem[2,3,2,3]
11741175
; AVX1-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0
1176+
; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11751177
; AVX1-NEXT: vmovapd (%rax), %xmm1
11761178
; AVX1-NEXT: vpaddq %xmm0, %xmm0, %xmm0
11771179
; AVX1-NEXT: vpermilpd %xmm0, %xmm1, %xmm0
@@ -1183,6 +1185,7 @@ define void @indices_convert() {
11831185
; AVX2-NEXT: vpbroadcastq (%rax), %xmm0
11841186
; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [7,7,7,7]
11851187
; AVX2-NEXT: vpand %xmm1, %xmm0, %xmm0
1188+
; AVX2-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11861189
; AVX2-NEXT: vpaddq %xmm0, %xmm0, %xmm0
11871190
; AVX2-NEXT: vmovapd (%rax), %xmm1
11881191
; AVX2-NEXT: vpermilpd %xmm0, %xmm1, %xmm0
@@ -1191,19 +1194,21 @@ define void @indices_convert() {
11911194
;
11921195
; AVX512-LABEL: indices_convert:
11931196
; AVX512: # %bb.0: # %bb
1194-
; AVX512-NEXT: vmovaps (%rax), %ymm0
1195-
; AVX512-NEXT: vmovddup {{.*#+}} xmm1 = mem[0,0]
1196-
; AVX512-NEXT: vbroadcastss {{.*#+}} xmm2 = [7,7,7,7]
1197-
; AVX512-NEXT: vandps %xmm2, %xmm1, %xmm1
1198-
; AVX512-NEXT: vpermpd %zmm0, %zmm1, %zmm0
1199-
; AVX512-NEXT: vmovups %xmm0, (%rax)
1197+
; AVX512-NEXT: vmovdqa (%rax), %ymm0
1198+
; AVX512-NEXT: vpbroadcastq (%rax), %xmm1
1199+
; AVX512-NEXT: vpbroadcastd {{.*#+}} xmm2 = [7,7,7,7]
1200+
; AVX512-NEXT: vpand %xmm2, %xmm1, %xmm1
1201+
; AVX512-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero
1202+
; AVX512-NEXT: vpermq %zmm0, %zmm1, %zmm0
1203+
; AVX512-NEXT: vmovdqu %xmm0, (%rax)
12001204
; AVX512-NEXT: vzeroupper
12011205
; AVX512-NEXT: retq
12021206
;
12031207
; AVX512VL-LABEL: indices_convert:
12041208
; AVX512VL: # %bb.0: # %bb
12051209
; AVX512VL-NEXT: vpbroadcastq (%rax), %xmm0
12061210
; AVX512VL-NEXT: vpandd {{.*}}(%rip){1to4}, %xmm0, %xmm0
1211+
; AVX512VL-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12071212
; AVX512VL-NEXT: vpermq (%rax), %ymm0, %ymm0
12081213
; AVX512VL-NEXT: vmovdqu %xmm0, (%rax)
12091214
; AVX512VL-NEXT: vzeroupper

llvm/test/CodeGen/X86/var-permute-256.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,6 +1142,7 @@ define <4 x i64> @PR50356(<4 x i64> %0, <4 x i32> %1, <4 x i64> %2) unnamed_addr
11421142
; XOP-LABEL: PR50356:
11431143
; XOP: # %bb.0:
11441144
; XOP-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1
1145+
; XOP-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero
11451146
; XOP-NEXT: vextractf128 $1, %ymm0, %xmm3
11461147
; XOP-NEXT: vpaddq %xmm1, %xmm1, %xmm1
11471148
; XOP-NEXT: vpermil2pd $0, %xmm1, %xmm3, %xmm0, %xmm0
@@ -1157,6 +1158,7 @@ define <4 x i64> @PR50356(<4 x i64> %0, <4 x i32> %1, <4 x i64> %2) unnamed_addr
11571158
; AVX1-LABEL: PR50356:
11581159
; AVX1: # %bb.0:
11591160
; AVX1-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1
1161+
; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero
11601162
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
11611163
; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm1
11621164
; AVX1-NEXT: vpermilpd %xmm1, %xmm3, %xmm3

0 commit comments

Comments
 (0)