@@ -1594,3 +1594,76 @@ define i1 @select_v2i8(ptr %s0, ptr %s1) {
1594
1594
%res = select i1 %cmp0 , i1 %cmp1 , i1 false
1595
1595
ret i1 %res
1596
1596
}
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