Skip to content

Commit 1746c78

Browse files
committed
[X86] Add DAG test coverage for Issue llvm#59867 patterns
1 parent 5b9f030 commit 1746c78

File tree

2 files changed

+106
-0
lines changed

2 files changed

+106
-0
lines changed

llvm/test/CodeGen/X86/vector-compare-all_of.ll

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1534,3 +1534,53 @@ define i1 @bool_reduction_v32i8(<32 x i8> %x, <32 x i8> %y) {
15341534
%g = extractelement <32 x i1> %f, i32 0
15351535
ret i1 %g
15361536
}
1537+
1538+
; PR59867
1539+
define i1 @select_v2i8(ptr %s0, ptr %s1) {
1540+
; SSE2-LABEL: select_v2i8:
1541+
; SSE2: # %bb.0:
1542+
; SSE2-NEXT: movzwl (%rdi), %eax
1543+
; SSE2-NEXT: movd %eax, %xmm0
1544+
; SSE2-NEXT: movzwl (%rsi), %eax
1545+
; SSE2-NEXT: movd %eax, %xmm1
1546+
; SSE2-NEXT: pcmpeqb %xmm0, %xmm1
1547+
; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1548+
; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,1,4,5,6,7]
1549+
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
1550+
; SSE2-NEXT: movmskpd %xmm0, %eax
1551+
; SSE2-NEXT: cmpl $3, %eax
1552+
; SSE2-NEXT: sete %al
1553+
; SSE2-NEXT: retq
1554+
;
1555+
; SSE42-LABEL: select_v2i8:
1556+
; SSE42: # %bb.0:
1557+
; SSE42-NEXT: pmovzxbq {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero
1558+
; SSE42-NEXT: pmovzxbq {{.*#+}} xmm1 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero
1559+
; SSE42-NEXT: pxor %xmm0, %xmm1
1560+
; SSE42-NEXT: ptest %xmm1, %xmm1
1561+
; SSE42-NEXT: sete %al
1562+
; SSE42-NEXT: retq
1563+
;
1564+
; AVX1OR2-LABEL: select_v2i8:
1565+
; AVX1OR2: # %bb.0:
1566+
; AVX1OR2-NEXT: vpmovzxbq {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero
1567+
; AVX1OR2-NEXT: vpmovzxbq {{.*#+}} xmm1 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero
1568+
; AVX1OR2-NEXT: vpxor %xmm1, %xmm0, %xmm0
1569+
; AVX1OR2-NEXT: vptest %xmm0, %xmm0
1570+
; AVX1OR2-NEXT: sete %al
1571+
; AVX1OR2-NEXT: retq
1572+
;
1573+
; AVX512-LABEL: select_v2i8:
1574+
; AVX512: # %bb.0:
1575+
; AVX512-NEXT: movzwl (%rdi), %eax
1576+
; AVX512-NEXT: cmpw (%rsi), %ax
1577+
; AVX512-NEXT: sete %al
1578+
; AVX512-NEXT: retq
1579+
%v0 = load <2 x i8>, ptr %s0, align 1
1580+
%v1 = load <2 x i8>, ptr %s1, align 1
1581+
%cmp = icmp eq <2 x i8> %v0, %v1
1582+
%cmp0 = extractelement <2 x i1> %cmp, i32 0
1583+
%cmp1 = extractelement <2 x i1> %cmp, i32 1
1584+
%res = select i1 %cmp0, i1 %cmp1, i1 false
1585+
ret i1 %res
1586+
}

llvm/test/CodeGen/X86/vector-compare-any_of.ll

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1417,3 +1417,59 @@ define {i32, i1} @test_v16i8_muti_uses(<16 x i8> %x, <16 x i8>%y, <16 x i8> %z)
14171417
%r2 = insertvalue {i32, i1} %r1, i1 %c, 1
14181418
ret {i32, i1} %r2
14191419
}
1420+
1421+
; PR59867
1422+
define i1 @select_v2i8(ptr %s0, ptr %s1) {
1423+
; SSE2-LABEL: select_v2i8:
1424+
; SSE2: # %bb.0:
1425+
; SSE2-NEXT: movzwl (%rdi), %eax
1426+
; SSE2-NEXT: movd %eax, %xmm0
1427+
; SSE2-NEXT: movzwl (%rsi), %eax
1428+
; SSE2-NEXT: movd %eax, %xmm1
1429+
; SSE2-NEXT: pcmpeqb %xmm0, %xmm1
1430+
; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1431+
; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,1,4,5,6,7]
1432+
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
1433+
; SSE2-NEXT: movmskpd %xmm0, %eax
1434+
; SSE2-NEXT: testl %eax, %eax
1435+
; SSE2-NEXT: setne %al
1436+
; SSE2-NEXT: retq
1437+
;
1438+
; SSE42-LABEL: select_v2i8:
1439+
; SSE42: # %bb.0:
1440+
; SSE42-NEXT: pmovzxbq {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero
1441+
; SSE42-NEXT: pmovzxbq {{.*#+}} xmm1 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero
1442+
; SSE42-NEXT: pcmpeqq %xmm0, %xmm1
1443+
; SSE42-NEXT: movmskpd %xmm1, %eax
1444+
; SSE42-NEXT: testl %eax, %eax
1445+
; SSE42-NEXT: setne %al
1446+
; SSE42-NEXT: retq
1447+
;
1448+
; AVX1OR2-LABEL: select_v2i8:
1449+
; AVX1OR2: # %bb.0:
1450+
; AVX1OR2-NEXT: vpmovzxbq {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero
1451+
; AVX1OR2-NEXT: vpmovzxbq {{.*#+}} xmm1 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero
1452+
; AVX1OR2-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
1453+
; AVX1OR2-NEXT: vtestpd %xmm0, %xmm0
1454+
; AVX1OR2-NEXT: setne %al
1455+
; AVX1OR2-NEXT: retq
1456+
;
1457+
; AVX512-LABEL: select_v2i8:
1458+
; AVX512: # %bb.0:
1459+
; AVX512-NEXT: movzwl (%rdi), %eax
1460+
; AVX512-NEXT: vmovd %eax, %xmm0
1461+
; AVX512-NEXT: movzwl (%rsi), %eax
1462+
; AVX512-NEXT: vmovd %eax, %xmm1
1463+
; AVX512-NEXT: vpcmpeqb %xmm1, %xmm0, %k0
1464+
; AVX512-NEXT: kmovd %k0, %eax
1465+
; AVX512-NEXT: testb $3, %al
1466+
; AVX512-NEXT: setne %al
1467+
; AVX512-NEXT: retq
1468+
%v0 = load <2 x i8>, ptr %s0, align 1
1469+
%v1 = load <2 x i8>, ptr %s1, align 1
1470+
%cmp = icmp eq <2 x i8> %v0, %v1
1471+
%cmp0 = extractelement <2 x i1> %cmp, i32 0
1472+
%cmp1 = extractelement <2 x i1> %cmp, i32 1
1473+
%res = select i1 %cmp0, i1 true, i1 %cmp1
1474+
ret i1 %res
1475+
}

0 commit comments

Comments
 (0)