Skip to content

Commit 55ed34c

Browse files
authored
[X86] setcc-wide-types.ll - add tests for anyof/allof bits tests for i128/i256/i512 memory as scalar integers (llvm#163198)
1 parent 0dc44b3 commit 55ed34c

File tree

1 file changed

+155
-0
lines changed

1 file changed

+155
-0
lines changed

llvm/test/CodeGen/X86/setcc-wide-types.ll

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1447,3 +1447,158 @@ define i1 @eq_i512_load_arg(ptr%p, i512 %b) {
14471447
%r = icmp eq i512 %a, %b
14481448
ret i1 %r
14491449
}
1450+
1451+
; Tests for any/allbits from memory.
1452+
1453+
define i1 @anybits_i128_load_arg(ptr %w) {
1454+
; ANY-LABEL: anybits_i128_load_arg:
1455+
; ANY: # %bb.0:
1456+
; ANY-NEXT: movq (%rdi), %rax
1457+
; ANY-NEXT: orq 8(%rdi), %rax
1458+
; ANY-NEXT: setne %al
1459+
; ANY-NEXT: retq
1460+
%ld = load i128, ptr %w
1461+
%cmp = icmp ne i128 %ld, 0
1462+
ret i1 %cmp
1463+
}
1464+
1465+
define i1 @allbits_i128_load_arg(ptr %w) {
1466+
; SSE2-LABEL: allbits_i128_load_arg:
1467+
; SSE2: # %bb.0:
1468+
; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
1469+
; SSE2-NEXT: pcmpeqb (%rdi), %xmm0
1470+
; SSE2-NEXT: pmovmskb %xmm0, %eax
1471+
; SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
1472+
; SSE2-NEXT: sete %al
1473+
; SSE2-NEXT: retq
1474+
;
1475+
; SSE41-LABEL: allbits_i128_load_arg:
1476+
; SSE41: # %bb.0:
1477+
; SSE41-NEXT: movdqa (%rdi), %xmm0
1478+
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
1479+
; SSE41-NEXT: ptest %xmm1, %xmm0
1480+
; SSE41-NEXT: setb %al
1481+
; SSE41-NEXT: retq
1482+
;
1483+
; AVXANY-LABEL: allbits_i128_load_arg:
1484+
; AVXANY: # %bb.0:
1485+
; AVXANY-NEXT: vmovdqa (%rdi), %xmm0
1486+
; AVXANY-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
1487+
; AVXANY-NEXT: vptest %xmm1, %xmm0
1488+
; AVXANY-NEXT: setb %al
1489+
; AVXANY-NEXT: retq
1490+
%ld = load i128, ptr %w
1491+
%cmp = icmp eq i128 %ld, -1
1492+
ret i1 %cmp
1493+
}
1494+
1495+
define i1 @anybits_i256_load_arg(ptr %w) {
1496+
; ANY-LABEL: anybits_i256_load_arg:
1497+
; ANY: # %bb.0:
1498+
; ANY-NEXT: movq (%rdi), %rax
1499+
; ANY-NEXT: movq 8(%rdi), %rcx
1500+
; ANY-NEXT: orq 24(%rdi), %rcx
1501+
; ANY-NEXT: orq 16(%rdi), %rax
1502+
; ANY-NEXT: orq %rcx, %rax
1503+
; ANY-NEXT: setne %al
1504+
; ANY-NEXT: retq
1505+
%ld = load i256, ptr %w
1506+
%cmp = icmp ne i256 %ld, 0
1507+
ret i1 %cmp
1508+
}
1509+
1510+
define i1 @allbits_i256_load_arg(ptr %w) {
1511+
; SSE-LABEL: allbits_i256_load_arg:
1512+
; SSE: # %bb.0:
1513+
; SSE-NEXT: movq (%rdi), %rax
1514+
; SSE-NEXT: movq 8(%rdi), %rcx
1515+
; SSE-NEXT: andq 24(%rdi), %rcx
1516+
; SSE-NEXT: andq 16(%rdi), %rax
1517+
; SSE-NEXT: andq %rcx, %rax
1518+
; SSE-NEXT: cmpq $-1, %rax
1519+
; SSE-NEXT: sete %al
1520+
; SSE-NEXT: retq
1521+
;
1522+
; AVX1-LABEL: allbits_i256_load_arg:
1523+
; AVX1: # %bb.0:
1524+
; AVX1-NEXT: vmovdqu (%rdi), %ymm0
1525+
; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
1526+
; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
1527+
; AVX1-NEXT: vptest %ymm1, %ymm0
1528+
; AVX1-NEXT: setb %al
1529+
; AVX1-NEXT: vzeroupper
1530+
; AVX1-NEXT: retq
1531+
;
1532+
; AVX2-LABEL: allbits_i256_load_arg:
1533+
; AVX2: # %bb.0:
1534+
; AVX2-NEXT: vmovdqu (%rdi), %ymm0
1535+
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
1536+
; AVX2-NEXT: vptest %ymm1, %ymm0
1537+
; AVX2-NEXT: setb %al
1538+
; AVX2-NEXT: vzeroupper
1539+
; AVX2-NEXT: retq
1540+
;
1541+
; AVX512-LABEL: allbits_i256_load_arg:
1542+
; AVX512: # %bb.0:
1543+
; AVX512-NEXT: vmovdqu (%rdi), %ymm0
1544+
; AVX512-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
1545+
; AVX512-NEXT: vptest %ymm1, %ymm0
1546+
; AVX512-NEXT: setb %al
1547+
; AVX512-NEXT: vzeroupper
1548+
; AVX512-NEXT: retq
1549+
%ld = load i256, ptr %w
1550+
%cmp = icmp eq i256 %ld, -1
1551+
ret i1 %cmp
1552+
}
1553+
1554+
define i1 @anybits_i512_load_arg(ptr %w) {
1555+
; ANY-LABEL: anybits_i512_load_arg:
1556+
; ANY: # %bb.0:
1557+
; ANY-NEXT: movq 16(%rdi), %rax
1558+
; ANY-NEXT: movq (%rdi), %rcx
1559+
; ANY-NEXT: movq 8(%rdi), %rdx
1560+
; ANY-NEXT: movq 24(%rdi), %rsi
1561+
; ANY-NEXT: orq 56(%rdi), %rsi
1562+
; ANY-NEXT: orq 40(%rdi), %rdx
1563+
; ANY-NEXT: orq %rsi, %rdx
1564+
; ANY-NEXT: orq 48(%rdi), %rax
1565+
; ANY-NEXT: orq 32(%rdi), %rcx
1566+
; ANY-NEXT: orq %rax, %rcx
1567+
; ANY-NEXT: orq %rdx, %rcx
1568+
; ANY-NEXT: setne %al
1569+
; ANY-NEXT: retq
1570+
%ld = load i512, ptr %w
1571+
%cmp = icmp ne i512 %ld, 0
1572+
ret i1 %cmp
1573+
}
1574+
1575+
define i1 @allbits_i512_load_arg(ptr %w) {
1576+
; NO512-LABEL: allbits_i512_load_arg:
1577+
; NO512: # %bb.0:
1578+
; NO512-NEXT: movq 16(%rdi), %rax
1579+
; NO512-NEXT: movq (%rdi), %rcx
1580+
; NO512-NEXT: movq 8(%rdi), %rdx
1581+
; NO512-NEXT: movq 24(%rdi), %rsi
1582+
; NO512-NEXT: andq 56(%rdi), %rsi
1583+
; NO512-NEXT: andq 40(%rdi), %rdx
1584+
; NO512-NEXT: andq %rsi, %rdx
1585+
; NO512-NEXT: andq 48(%rdi), %rax
1586+
; NO512-NEXT: andq 32(%rdi), %rcx
1587+
; NO512-NEXT: andq %rax, %rcx
1588+
; NO512-NEXT: andq %rdx, %rcx
1589+
; NO512-NEXT: cmpq $-1, %rcx
1590+
; NO512-NEXT: sete %al
1591+
; NO512-NEXT: retq
1592+
;
1593+
; AVX512-LABEL: allbits_i512_load_arg:
1594+
; AVX512: # %bb.0:
1595+
; AVX512-NEXT: vpternlogd {{.*#+}} zmm0 = -1
1596+
; AVX512-NEXT: vpcmpneqd (%rdi), %zmm0, %k0
1597+
; AVX512-NEXT: kortestw %k0, %k0
1598+
; AVX512-NEXT: sete %al
1599+
; AVX512-NEXT: vzeroupper
1600+
; AVX512-NEXT: retq
1601+
%ld = load i512, ptr %w
1602+
%cmp = icmp eq i512 %ld, -1
1603+
ret i1 %cmp
1604+
}

0 commit comments

Comments
 (0)