Skip to content

Commit 9449548

Browse files
committed
[CodeGenPrepare] Add pre-commit tests. NFC.
1 parent c4d288d commit 9449548

File tree

4 files changed

+221
-7
lines changed

4 files changed

+221
-7
lines changed

llvm/test/CodeGen/AArch64/arm64-popcnt.ll

Lines changed: 65 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ define i32 @cnt32_advsimd(i32 %x) nounwind readnone {
1515
; CHECK-NONEON-LABEL: cnt32_advsimd:
1616
; CHECK-NONEON: // %bb.0:
1717
; CHECK-NONEON-NEXT: lsr w9, w0, #1
18-
; CHECK-NONEON-NEXT: mov w8, #16843009
18+
; CHECK-NONEON-NEXT: mov w8, #16843009 // =0x1010101
1919
; CHECK-NONEON-NEXT: and w9, w9, #0x55555555
2020
; CHECK-NONEON-NEXT: sub w9, w0, w9
2121
; CHECK-NONEON-NEXT: lsr w10, w9, #2
@@ -50,7 +50,7 @@ define i32 @cnt32_advsimd_2(<2 x i32> %x) {
5050
; CHECK-NONEON-LABEL: cnt32_advsimd_2:
5151
; CHECK-NONEON: // %bb.0:
5252
; CHECK-NONEON-NEXT: lsr w9, w0, #1
53-
; CHECK-NONEON-NEXT: mov w8, #16843009
53+
; CHECK-NONEON-NEXT: mov w8, #16843009 // =0x1010101
5454
; CHECK-NONEON-NEXT: and w9, w9, #0x55555555
5555
; CHECK-NONEON-NEXT: sub w9, w0, w9
5656
; CHECK-NONEON-NEXT: lsr w10, w9, #2
@@ -86,7 +86,7 @@ define i64 @cnt64_advsimd(i64 %x) nounwind readnone {
8686
; CHECK-NONEON-LABEL: cnt64_advsimd:
8787
; CHECK-NONEON: // %bb.0:
8888
; CHECK-NONEON-NEXT: lsr x9, x0, #1
89-
; CHECK-NONEON-NEXT: mov x8, #72340172838076673
89+
; CHECK-NONEON-NEXT: mov x8, #72340172838076673 // =0x101010101010101
9090
; CHECK-NONEON-NEXT: and x9, x9, #0x5555555555555555
9191
; CHECK-NONEON-NEXT: sub x9, x0, x9
9292
; CHECK-NONEON-NEXT: lsr x10, x9, #2
@@ -114,7 +114,7 @@ define i32 @cnt32(i32 %x) nounwind readnone noimplicitfloat {
114114
; CHECK-LABEL: cnt32:
115115
; CHECK: // %bb.0:
116116
; CHECK-NEXT: lsr w9, w0, #1
117-
; CHECK-NEXT: mov w8, #16843009
117+
; CHECK-NEXT: mov w8, #16843009 // =0x1010101
118118
; CHECK-NEXT: and w9, w9, #0x55555555
119119
; CHECK-NEXT: sub w9, w0, w9
120120
; CHECK-NEXT: lsr w10, w9, #2
@@ -130,7 +130,7 @@ define i32 @cnt32(i32 %x) nounwind readnone noimplicitfloat {
130130
; CHECK-NONEON-LABEL: cnt32:
131131
; CHECK-NONEON: // %bb.0:
132132
; CHECK-NONEON-NEXT: lsr w9, w0, #1
133-
; CHECK-NONEON-NEXT: mov w8, #16843009
133+
; CHECK-NONEON-NEXT: mov w8, #16843009 // =0x1010101
134134
; CHECK-NONEON-NEXT: and w9, w9, #0x55555555
135135
; CHECK-NONEON-NEXT: sub w9, w0, w9
136136
; CHECK-NONEON-NEXT: lsr w10, w9, #2
@@ -155,7 +155,7 @@ define i64 @cnt64(i64 %x) nounwind readnone noimplicitfloat {
155155
; CHECK-LABEL: cnt64:
156156
; CHECK: // %bb.0:
157157
; CHECK-NEXT: lsr x9, x0, #1
158-
; CHECK-NEXT: mov x8, #72340172838076673
158+
; CHECK-NEXT: mov x8, #72340172838076673 // =0x101010101010101
159159
; CHECK-NEXT: and x9, x9, #0x5555555555555555
160160
; CHECK-NEXT: sub x9, x0, x9
161161
; CHECK-NEXT: lsr x10, x9, #2
@@ -171,7 +171,7 @@ define i64 @cnt64(i64 %x) nounwind readnone noimplicitfloat {
171171
; CHECK-NONEON-LABEL: cnt64:
172172
; CHECK-NONEON: // %bb.0:
173173
; CHECK-NONEON-NEXT: lsr x9, x0, #1
174-
; CHECK-NONEON-NEXT: mov x8, #72340172838076673
174+
; CHECK-NONEON-NEXT: mov x8, #72340172838076673 // =0x101010101010101
175175
; CHECK-NONEON-NEXT: and x9, x9, #0x5555555555555555
176176
; CHECK-NONEON-NEXT: sub x9, x0, x9
177177
; CHECK-NONEON-NEXT: lsr x10, x9, #2
@@ -278,5 +278,63 @@ define i1 @ctpop32_ne_one(i32 %x) nounwind readnone {
278278
ret i1 %cmp
279279
}
280280

281+
define i1 @ctpop32_eq_one_nonzero(i32 %x) {
282+
; CHECK-LABEL: ctpop32_eq_one_nonzero:
283+
; CHECK: // %bb.0: // %entry
284+
; CHECK-NEXT: sub w8, w0, #1
285+
; CHECK-NEXT: eor w9, w0, w8
286+
; CHECK-NEXT: cmp w9, w8
287+
; CHECK-NEXT: cset w0, hi
288+
; CHECK-NEXT: ret
289+
;
290+
; CHECK-NONEON-LABEL: ctpop32_eq_one_nonzero:
291+
; CHECK-NONEON: // %bb.0: // %entry
292+
; CHECK-NONEON-NEXT: sub w8, w0, #1
293+
; CHECK-NONEON-NEXT: eor w9, w0, w8
294+
; CHECK-NONEON-NEXT: cmp w9, w8
295+
; CHECK-NONEON-NEXT: cset w0, hi
296+
; CHECK-NONEON-NEXT: ret
297+
;
298+
; CHECK-CSSC-LABEL: ctpop32_eq_one_nonzero:
299+
; CHECK-CSSC: // %bb.0: // %entry
300+
; CHECK-CSSC-NEXT: cnt w8, w0
301+
; CHECK-CSSC-NEXT: cmp w8, #1
302+
; CHECK-CSSC-NEXT: cset w0, eq
303+
; CHECK-CSSC-NEXT: ret
304+
entry:
305+
%popcnt = call range(i32 1, 33) i32 @llvm.ctpop.i32(i32 %x)
306+
%cmp = icmp eq i32 %popcnt, 1
307+
ret i1 %cmp
308+
}
309+
310+
define i1 @ctpop32_ne_one_nonzero(i32 %x) {
311+
; CHECK-LABEL: ctpop32_ne_one_nonzero:
312+
; CHECK: // %bb.0: // %entry
313+
; CHECK-NEXT: sub w8, w0, #1
314+
; CHECK-NEXT: eor w9, w0, w8
315+
; CHECK-NEXT: cmp w9, w8
316+
; CHECK-NEXT: cset w0, ls
317+
; CHECK-NEXT: ret
318+
;
319+
; CHECK-NONEON-LABEL: ctpop32_ne_one_nonzero:
320+
; CHECK-NONEON: // %bb.0: // %entry
321+
; CHECK-NONEON-NEXT: sub w8, w0, #1
322+
; CHECK-NONEON-NEXT: eor w9, w0, w8
323+
; CHECK-NONEON-NEXT: cmp w9, w8
324+
; CHECK-NONEON-NEXT: cset w0, ls
325+
; CHECK-NONEON-NEXT: ret
326+
;
327+
; CHECK-CSSC-LABEL: ctpop32_ne_one_nonzero:
328+
; CHECK-CSSC: // %bb.0: // %entry
329+
; CHECK-CSSC-NEXT: cnt w8, w0
330+
; CHECK-CSSC-NEXT: cmp w8, #1
331+
; CHECK-CSSC-NEXT: cset w0, ne
332+
; CHECK-CSSC-NEXT: ret
333+
entry:
334+
%popcnt = tail call range(i32 1, 33) i32 @llvm.ctpop.i32(i32 %x)
335+
%cmp = icmp ne i32 %popcnt, 1
336+
ret i1 %cmp
337+
}
338+
281339
declare i32 @llvm.ctpop.i32(i32) nounwind readnone
282340
declare i64 @llvm.ctpop.i64(i64) nounwind readnone

llvm/test/CodeGen/RISCV/rv32zbb.ll

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1441,3 +1441,44 @@ define i32 @srai_slli2(i16 signext %0) {
14411441
%3 = sext i16 %sext to i32
14421442
ret i32 %3
14431443
}
1444+
1445+
define i1 @ctpop32_eq_one_nonzero(i32 %x) {
1446+
; RV32I-LABEL: ctpop32_eq_one_nonzero:
1447+
; RV32I: # %bb.0: # %entry
1448+
; RV32I-NEXT: addi a1, a0, -1
1449+
; RV32I-NEXT: xor a0, a0, a1
1450+
; RV32I-NEXT: sltu a0, a1, a0
1451+
; RV32I-NEXT: ret
1452+
;
1453+
; RV32ZBB-LABEL: ctpop32_eq_one_nonzero:
1454+
; RV32ZBB: # %bb.0: # %entry
1455+
; RV32ZBB-NEXT: cpop a0, a0
1456+
; RV32ZBB-NEXT: addi a0, a0, -1
1457+
; RV32ZBB-NEXT: seqz a0, a0
1458+
; RV32ZBB-NEXT: ret
1459+
entry:
1460+
%popcnt = call range(i32 1, 33) i32 @llvm.ctpop.i32(i32 %x)
1461+
%cmp = icmp eq i32 %popcnt, 1
1462+
ret i1 %cmp
1463+
}
1464+
1465+
define i1 @ctpop32_ne_one_nonzero(i32 %x) {
1466+
; RV32I-LABEL: ctpop32_ne_one_nonzero:
1467+
; RV32I: # %bb.0: # %entry
1468+
; RV32I-NEXT: addi a1, a0, -1
1469+
; RV32I-NEXT: xor a0, a0, a1
1470+
; RV32I-NEXT: sltu a0, a1, a0
1471+
; RV32I-NEXT: xori a0, a0, 1
1472+
; RV32I-NEXT: ret
1473+
;
1474+
; RV32ZBB-LABEL: ctpop32_ne_one_nonzero:
1475+
; RV32ZBB: # %bb.0: # %entry
1476+
; RV32ZBB-NEXT: cpop a0, a0
1477+
; RV32ZBB-NEXT: addi a0, a0, -1
1478+
; RV32ZBB-NEXT: snez a0, a0
1479+
; RV32ZBB-NEXT: ret
1480+
entry:
1481+
%popcnt = tail call range(i32 1, 33) i32 @llvm.ctpop.i32(i32 %x)
1482+
%cmp = icmp ne i32 %popcnt, 1
1483+
ret i1 %cmp
1484+
}

llvm/test/CodeGen/RISCV/rv64zbb.ll

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1618,3 +1618,87 @@ entry:
16181618
%5 = add nsw i32 %4, %0
16191619
ret i32 %5
16201620
}
1621+
1622+
define i1 @ctpop32_eq_one_nonzero(i32 %x) {
1623+
; RV64I-LABEL: ctpop32_eq_one_nonzero:
1624+
; RV64I: # %bb.0: # %entry
1625+
; RV64I-NEXT: addiw a1, a0, -1
1626+
; RV64I-NEXT: xor a0, a0, a1
1627+
; RV64I-NEXT: sext.w a0, a0
1628+
; RV64I-NEXT: sltu a0, a1, a0
1629+
; RV64I-NEXT: ret
1630+
;
1631+
; RV64ZBB-LABEL: ctpop32_eq_one_nonzero:
1632+
; RV64ZBB: # %bb.0: # %entry
1633+
; RV64ZBB-NEXT: cpopw a0, a0
1634+
; RV64ZBB-NEXT: addi a0, a0, -1
1635+
; RV64ZBB-NEXT: seqz a0, a0
1636+
; RV64ZBB-NEXT: ret
1637+
entry:
1638+
%popcnt = call range(i32 1, 33) i32 @llvm.ctpop.i32(i32 %x)
1639+
%cmp = icmp eq i32 %popcnt, 1
1640+
ret i1 %cmp
1641+
}
1642+
1643+
define i1 @ctpop32_ne_one_nonzero(i32 %x) {
1644+
; RV64I-LABEL: ctpop32_ne_one_nonzero:
1645+
; RV64I: # %bb.0: # %entry
1646+
; RV64I-NEXT: addiw a1, a0, -1
1647+
; RV64I-NEXT: xor a0, a0, a1
1648+
; RV64I-NEXT: sext.w a0, a0
1649+
; RV64I-NEXT: sltu a0, a1, a0
1650+
; RV64I-NEXT: xori a0, a0, 1
1651+
; RV64I-NEXT: ret
1652+
;
1653+
; RV64ZBB-LABEL: ctpop32_ne_one_nonzero:
1654+
; RV64ZBB: # %bb.0: # %entry
1655+
; RV64ZBB-NEXT: cpopw a0, a0
1656+
; RV64ZBB-NEXT: addi a0, a0, -1
1657+
; RV64ZBB-NEXT: snez a0, a0
1658+
; RV64ZBB-NEXT: ret
1659+
entry:
1660+
%popcnt = tail call range(i32 1, 33) i32 @llvm.ctpop.i32(i32 %x)
1661+
%cmp = icmp ne i32 %popcnt, 1
1662+
ret i1 %cmp
1663+
}
1664+
1665+
define i1 @ctpop64_eq_one_nonzero(i64 %x) {
1666+
; RV64I-LABEL: ctpop64_eq_one_nonzero:
1667+
; RV64I: # %bb.0: # %entry
1668+
; RV64I-NEXT: addi a1, a0, -1
1669+
; RV64I-NEXT: xor a0, a0, a1
1670+
; RV64I-NEXT: sltu a0, a1, a0
1671+
; RV64I-NEXT: ret
1672+
;
1673+
; RV64ZBB-LABEL: ctpop64_eq_one_nonzero:
1674+
; RV64ZBB: # %bb.0: # %entry
1675+
; RV64ZBB-NEXT: cpop a0, a0
1676+
; RV64ZBB-NEXT: addi a0, a0, -1
1677+
; RV64ZBB-NEXT: seqz a0, a0
1678+
; RV64ZBB-NEXT: ret
1679+
entry:
1680+
%popcnt = call range(i64 1, 65) i64 @llvm.ctpop.i64(i64 %x)
1681+
%cmp = icmp eq i64 %popcnt, 1
1682+
ret i1 %cmp
1683+
}
1684+
1685+
define i1 @ctpop32_eq_one_maybezero(i32 %x) {
1686+
; RV64I-LABEL: ctpop32_eq_one_maybezero:
1687+
; RV64I: # %bb.0: # %entry
1688+
; RV64I-NEXT: addiw a1, a0, -1
1689+
; RV64I-NEXT: xor a0, a0, a1
1690+
; RV64I-NEXT: sext.w a0, a0
1691+
; RV64I-NEXT: sltu a0, a1, a0
1692+
; RV64I-NEXT: ret
1693+
;
1694+
; RV64ZBB-LABEL: ctpop32_eq_one_maybezero:
1695+
; RV64ZBB: # %bb.0: # %entry
1696+
; RV64ZBB-NEXT: cpopw a0, a0
1697+
; RV64ZBB-NEXT: addi a0, a0, -1
1698+
; RV64ZBB-NEXT: seqz a0, a0
1699+
; RV64ZBB-NEXT: ret
1700+
entry:
1701+
%popcnt = call range(i32 0, 16) i32 @llvm.ctpop.i32(i32 %x)
1702+
%cmp = icmp eq i32 %popcnt, 1
1703+
ret i1 %cmp
1704+
}

llvm/test/CodeGen/X86/ispow2.ll

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,3 +220,34 @@ define <4 x i1> @neither_pow2_non_zero_4xv64_x_maybe_z(<4 x i64> %x) {
220220
%r = icmp ne <4 x i64> %cnt, <i64 1, i64 1, i64 1, i64 1>
221221
ret <4 x i1> %r
222222
}
223+
224+
225+
define i1 @ctpop32_eq_one_nonzero(i32 %x) {
226+
; CHECK-LABEL: ctpop32_eq_one_nonzero:
227+
; CHECK: # %bb.0: # %entry
228+
; CHECK-NEXT: # kill: def $edi killed $edi def $rdi
229+
; CHECK-NEXT: leal -1(%rdi), %eax
230+
; CHECK-NEXT: xorl %eax, %edi
231+
; CHECK-NEXT: cmpl %eax, %edi
232+
; CHECK-NEXT: seta %al
233+
; CHECK-NEXT: retq
234+
entry:
235+
%popcnt = call range(i32 1, 33) i32 @llvm.ctpop.i32(i32 %x)
236+
%cmp = icmp eq i32 %popcnt, 1
237+
ret i1 %cmp
238+
}
239+
240+
define i1 @ctpop32_ne_one_nonzero(i32 %x) {
241+
; CHECK-LABEL: ctpop32_ne_one_nonzero:
242+
; CHECK: # %bb.0: # %entry
243+
; CHECK-NEXT: # kill: def $edi killed $edi def $rdi
244+
; CHECK-NEXT: leal -1(%rdi), %eax
245+
; CHECK-NEXT: xorl %eax, %edi
246+
; CHECK-NEXT: cmpl %eax, %edi
247+
; CHECK-NEXT: setbe %al
248+
; CHECK-NEXT: retq
249+
entry:
250+
%popcnt = tail call range(i32 1, 33) i32 @llvm.ctpop.i32(i32 %x)
251+
%cmp = icmp ne i32 %popcnt, 1
252+
ret i1 %cmp
253+
}

0 commit comments

Comments
 (0)