Skip to content
This repository was archived by the owner on Apr 23, 2020. It is now read-only.

Commit 0ffe6c0

Browse files
committed
[X86][SSE] Add initial support for combining (V)PMOVZX with shuffles.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288049 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 01ad79b commit 0ffe6c0

File tree

5 files changed

+18
-17
lines changed

5 files changed

+18
-17
lines changed

lib/Target/X86/X86ISelLowering.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5509,6 +5509,15 @@ static bool getFauxShuffleMask(SDValue N, SmallVectorImpl<int> &Mask,
55095509
}
55105510
return true;
55115511
}
5512+
case X86ISD::VZEXT: {
5513+
// TODO - add support for VPMOVZX with smaller input vector types.
5514+
SDValue Op0 = N.getOperand(0);
5515+
if (VT.getSizeInBits() != Op0.getValueSizeInBits())
5516+
break;
5517+
DecodeZeroExtendMask(Op0.getSimpleValueType().getScalarType(), VT, Mask);
5518+
Ops.push_back(Op0);
5519+
return true;
5520+
}
55125521
}
55135522

55145523
return false;

test/CodeGen/X86/2011-10-21-widen-cmp.ll

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ define void @cmp_2_floats(<2 x float> %a, <2 x float> %b) {
99
; CHECK: # BB#0: # %entry
1010
; CHECK-NEXT: movaps %xmm0, %xmm2
1111
; CHECK-NEXT: cmpordps %xmm0, %xmm0
12-
; CHECK-NEXT: pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13-
; CHECK-NEXT: psllq $32, %xmm0
14-
; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]
12+
; CHECK-NEXT: insertps {{.*#+}} xmm0 = xmm0[0,1],zero,xmm0[1]
1513
; CHECK-NEXT: pslld $31, %xmm0
1614
; CHECK-NEXT: blendvps %xmm2, %xmm1
1715
; CHECK-NEXT: movlps %xmm1, (%rax)
@@ -26,7 +24,7 @@ entry:
2624
define void @cmp_2_doubles(<2 x double> %a, <2 x double> %b) {
2725
; CHECK-LABEL: cmp_2_doubles:
2826
; CHECK: # BB#0: # %entry
29-
; CHECK-NEXT: movapd %xmm0, %xmm2
27+
; CHECK-NEXT: movapd %xmm0, %xmm2
3028
; CHECK-NEXT: cmpordpd %xmm0, %xmm0
3129
; CHECK-NEXT: blendvpd %xmm2, %xmm1
3230
; CHECK-NEXT: movapd %xmm1, (%rax)

test/CodeGen/X86/avx2-vbroadcast.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -279,15 +279,15 @@ define <16 x i16> @broadcast_mem_v4i16_v16i16(<4 x i16>* %ptr) {
279279
; X32-AVX2-LABEL: broadcast_mem_v4i16_v16i16:
280280
; X32-AVX2: ## BB#0:
281281
; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax
282-
; X32-AVX2-NEXT: vpmovzxwd {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
283-
; X32-AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
282+
; X32-AVX2-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
283+
; X32-AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6,7,4,5,6,7,6,7],zero,zero
284284
; X32-AVX2-NEXT: vpbroadcastq %xmm0, %ymm0
285285
; X32-AVX2-NEXT: retl
286286
;
287287
; X64-AVX2-LABEL: broadcast_mem_v4i16_v16i16:
288288
; X64-AVX2: ## BB#0:
289-
; X64-AVX2-NEXT: vpmovzxwd {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
290-
; X64-AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
289+
; X64-AVX2-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
290+
; X64-AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6,7,4,5,6,7,6,7],zero,zero
291291
; X64-AVX2-NEXT: vpbroadcastq %xmm0, %ymm0
292292
; X64-AVX2-NEXT: retq
293293
;

test/CodeGen/X86/avx512-cvt.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -923,9 +923,7 @@ define <2 x float> @sitofp_2i1_float(<2 x float> %a) {
923923
; KNL: ## BB#0:
924924
; KNL-NEXT: vxorps %xmm1, %xmm1, %xmm1
925925
; KNL-NEXT: vcmpltps %xmm0, %xmm1, %xmm0
926-
; KNL-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
927-
; KNL-NEXT: vpsllq $32, %xmm0, %xmm0
928-
; KNL-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]
926+
; KNL-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],zero,xmm0[1]
929927
; KNL-NEXT: vcvtdq2ps %xmm0, %xmm0
930928
; KNL-NEXT: retq
931929
;

test/CodeGen/X86/sse-minmax.ll

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1337,9 +1337,7 @@ define <2 x float> @test_maxps_illegal_v2f32(<2 x float> %x, <2 x float> %y) {
13371337
; STRICT-NEXT: movaps %xmm0, %xmm2
13381338
; STRICT-NEXT: movaps %xmm1, %xmm0
13391339
; STRICT-NEXT: cmpleps %xmm2, %xmm0
1340-
; STRICT-NEXT: pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
1341-
; STRICT-NEXT: psllq $32, %xmm0
1342-
; STRICT-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]
1340+
; STRICT-NEXT: insertps {{.*#+}} xmm0 = xmm0[0,1],zero,xmm0[1]
13431341
; STRICT-NEXT: pslld $31, %xmm0
13441342
; STRICT-NEXT: blendvps %xmm2, %xmm1
13451343
; STRICT-NEXT: movaps %xmm1, %xmm0
@@ -1360,9 +1358,7 @@ define <2 x float> @test_minps_illegal_v2f32(<2 x float> %x, <2 x float> %y) {
13601358
; STRICT: # BB#0:
13611359
; STRICT-NEXT: movaps %xmm0, %xmm2
13621360
; STRICT-NEXT: cmpleps %xmm1, %xmm0
1363-
; STRICT-NEXT: pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
1364-
; STRICT-NEXT: psllq $32, %xmm0
1365-
; STRICT-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]
1361+
; STRICT-NEXT: insertps {{.*#+}} xmm0 = xmm0[0,1],zero,xmm0[1]
13661362
; STRICT-NEXT: pslld $31, %xmm0
13671363
; STRICT-NEXT: blendvps %xmm2, %xmm1
13681364
; STRICT-NEXT: movaps %xmm1, %xmm0

0 commit comments

Comments
 (0)