Skip to content

Commit 97ac848

Browse files
committed
[X86] Add test coverage for llvm#116977
1 parent a742741 commit 97ac848

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

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

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1594,3 +1594,76 @@ define i1 @select_v2i8(ptr %s0, ptr %s1) {
15941594
%res = select i1 %cmp0, i1 %cmp1, i1 false
15951595
ret i1 %res
15961596
}
1597+
1598+
define i1 @PR116977(<32 x i8> %a, <32 x i8> %b, <32 x i8> %v) {
1599+
; SSE-LABEL: PR116977:
1600+
; SSE: # %bb.0:
1601+
; SSE-NEXT: pcmpeqb %xmm4, %xmm0
1602+
; SSE-NEXT: pcmpeqd %xmm6, %xmm6
1603+
; SSE-NEXT: pxor %xmm6, %xmm0
1604+
; SSE-NEXT: pcmpeqb %xmm5, %xmm1
1605+
; SSE-NEXT: pxor %xmm6, %xmm1
1606+
; SSE-NEXT: pcmpeqb %xmm4, %xmm2
1607+
; SSE-NEXT: pxor %xmm6, %xmm2
1608+
; SSE-NEXT: por %xmm0, %xmm2
1609+
; SSE-NEXT: pcmpeqb %xmm5, %xmm3
1610+
; SSE-NEXT: pxor %xmm6, %xmm3
1611+
; SSE-NEXT: por %xmm1, %xmm3
1612+
; SSE-NEXT: por %xmm2, %xmm3
1613+
; SSE-NEXT: pmovmskb %xmm3, %eax
1614+
; SSE-NEXT: testl %eax, %eax
1615+
; SSE-NEXT: sete %al
1616+
; SSE-NEXT: retq
1617+
;
1618+
; AVX1-LABEL: PR116977:
1619+
; AVX1: # %bb.0:
1620+
; AVX1-NEXT: vpcmpeqb %xmm0, %xmm2, %xmm3
1621+
; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4
1622+
; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
1623+
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
1624+
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
1625+
; AVX1-NEXT: vpcmpeqb %xmm0, %xmm5, %xmm0
1626+
; AVX1-NEXT: vpxor %xmm4, %xmm0, %xmm0
1627+
; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm2
1628+
; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
1629+
; AVX1-NEXT: vpor %xmm2, %xmm3, %xmm2
1630+
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
1631+
; AVX1-NEXT: vpcmpeqb %xmm1, %xmm5, %xmm1
1632+
; AVX1-NEXT: vpxor %xmm4, %xmm1, %xmm1
1633+
; AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0
1634+
; AVX1-NEXT: vpor %xmm0, %xmm2, %xmm0
1635+
; AVX1-NEXT: vpmovmskb %xmm0, %eax
1636+
; AVX1-NEXT: testl %eax, %eax
1637+
; AVX1-NEXT: sete %al
1638+
; AVX1-NEXT: vzeroupper
1639+
; AVX1-NEXT: retq
1640+
;
1641+
; AVX2-LABEL: PR116977:
1642+
; AVX2: # %bb.0:
1643+
; AVX2-NEXT: vpcmpeqb %ymm0, %ymm2, %ymm0
1644+
; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3
1645+
; AVX2-NEXT: vpxor %ymm3, %ymm0, %ymm0
1646+
; AVX2-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1
1647+
; AVX2-NEXT: vpxor %ymm3, %ymm1, %ymm1
1648+
; AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
1649+
; AVX2-NEXT: vpmovmskb %ymm0, %eax
1650+
; AVX2-NEXT: testl %eax, %eax
1651+
; AVX2-NEXT: sete %al
1652+
; AVX2-NEXT: vzeroupper
1653+
; AVX2-NEXT: retq
1654+
;
1655+
; AVX512-LABEL: PR116977:
1656+
; AVX512: # %bb.0:
1657+
; AVX512-NEXT: vpcmpneqb %ymm0, %ymm2, %k0
1658+
; AVX512-NEXT: vpcmpneqb %ymm1, %ymm2, %k1
1659+
; AVX512-NEXT: kortestd %k1, %k0
1660+
; AVX512-NEXT: sete %al
1661+
; AVX512-NEXT: vzeroupper
1662+
; AVX512-NEXT: retq
1663+
%ca = icmp ne <32 x i8> %v, %a
1664+
%cb = icmp ne <32 x i8> %v, %b
1665+
%or = or <32 x i1> %ca, %cb
1666+
%scl = bitcast <32 x i1> %or to i32
1667+
%cmp = icmp eq i32 %scl, 0
1668+
ret i1 %cmp
1669+
}

0 commit comments

Comments
 (0)