@@ -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