Skip to content

Commit 1351f71

Browse files
committed
[InstSimplify] add tests for ctpop; NFC (PR48608)
1 parent 87c032f commit 1351f71

File tree

1 file changed

+59
-1
lines changed
  • llvm/test/Transforms/InstSimplify

1 file changed

+59
-1
lines changed

llvm/test/Transforms/InstSimplify/call.ll

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1287,6 +1287,8 @@ define i32 @call_undef_musttail() {
12871287

12881288
; This is not the builtin fmax, so we don't know anything about its behavior.
12891289

1290+
declare float @fmaxf(float, float)
1291+
12901292
define float @nobuiltin_fmax() {
12911293
; CHECK-LABEL: @nobuiltin_fmax(
12921294
; CHECK-NEXT: [[M:%.*]] = call float @fmaxf(float 0.000000e+00, float 1.000000e+00) [[ATTR3:#.*]]
@@ -1298,6 +1300,62 @@ define float @nobuiltin_fmax() {
12981300
ret float %r
12991301
}
13001302

1301-
declare float @fmaxf(float, float)
1303+
1304+
declare i32 @llvm.ctpop.i32(i32)
1305+
declare <3 x i33> @llvm.ctpop.v3i33(<3 x i33>)
1306+
declare i1 @llvm.ctpop.i1(i1)
1307+
1308+
define i32 @ctpop_lowbit(i32 %x) {
1309+
; CHECK-LABEL: @ctpop_lowbit(
1310+
; CHECK-NEXT: [[B:%.*]] = and i32 [[X:%.*]], 1
1311+
; CHECK-NEXT: [[R:%.*]] = call i32 @llvm.ctpop.i32(i32 [[B]])
1312+
; CHECK-NEXT: ret i32 [[R]]
1313+
;
1314+
%b = and i32 %x, 1
1315+
%r = call i32 @llvm.ctpop.i32(i32 %b)
1316+
ret i32 %r
1317+
}
1318+
1319+
define i32 @ctpop_pow2(i32 %x) {
1320+
; CHECK-LABEL: @ctpop_pow2(
1321+
; CHECK-NEXT: [[B:%.*]] = and i32 [[X:%.*]], 4
1322+
; CHECK-NEXT: [[R:%.*]] = call i32 @llvm.ctpop.i32(i32 [[B]])
1323+
; CHECK-NEXT: ret i32 [[R]]
1324+
;
1325+
%b = and i32 %x, 4
1326+
%r = call i32 @llvm.ctpop.i32(i32 %b)
1327+
ret i32 %r
1328+
}
1329+
1330+
define <3 x i33> @ctpop_signbit(<3 x i33> %x) {
1331+
; CHECK-LABEL: @ctpop_signbit(
1332+
; CHECK-NEXT: [[B:%.*]] = lshr <3 x i33> [[X:%.*]], <i33 32, i33 32, i33 32>
1333+
; CHECK-NEXT: [[R:%.*]] = tail call <3 x i33> @llvm.ctpop.v3i33(<3 x i33> [[B]])
1334+
; CHECK-NEXT: ret <3 x i33> [[R]]
1335+
;
1336+
%b = lshr <3 x i33> %x, <i33 32, i33 32, i33 32>
1337+
%r = tail call <3 x i33> @llvm.ctpop.v3i33(<3 x i33> %b)
1338+
ret <3 x i33> %r
1339+
}
1340+
1341+
define <3 x i33> @ctpop_notsignbit(<3 x i33> %x) {
1342+
; CHECK-LABEL: @ctpop_notsignbit(
1343+
; CHECK-NEXT: [[B:%.*]] = lshr <3 x i33> [[X:%.*]], <i33 31, i33 31, i33 31>
1344+
; CHECK-NEXT: [[R:%.*]] = tail call <3 x i33> @llvm.ctpop.v3i33(<3 x i33> [[B]])
1345+
; CHECK-NEXT: ret <3 x i33> [[R]]
1346+
;
1347+
%b = lshr <3 x i33> %x, <i33 31, i33 31, i33 31>
1348+
%r = tail call <3 x i33> @llvm.ctpop.v3i33(<3 x i33> %b)
1349+
ret <3 x i33> %r
1350+
}
1351+
1352+
define i1 @ctpop_bool(i1 %x) {
1353+
; CHECK-LABEL: @ctpop_bool(
1354+
; CHECK-NEXT: [[R:%.*]] = tail call i1 @llvm.ctpop.i1(i1 [[X:%.*]])
1355+
; CHECK-NEXT: ret i1 [[R]]
1356+
;
1357+
%r = tail call i1 @llvm.ctpop.i1(i1 %x)
1358+
ret i1 %r
1359+
}
13021360

13031361
attributes #0 = { nobuiltin readnone }

0 commit comments

Comments
 (0)