Skip to content

Commit f17421e

Browse files
committed
[ConstantFolding] Consolidate and extend bitcount intrinsic tests; NFC
Move constant folding tests into ConstantFolding/bitcount.ll and drop various tests in other places. Add coverage for undefs. llvm-svn: 349806
1 parent 6d79e43 commit f17421e

File tree

4 files changed

+187
-57
lines changed

4 files changed

+187
-57
lines changed
Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt < %s -constprop -S | FileCheck %s
3+
4+
declare i31 @llvm.ctpop.i31(i31 %val)
5+
declare i32 @llvm.cttz.i32(i32 %val, i1)
6+
declare i33 @llvm.ctlz.i33(i33 %val, i1)
7+
declare <2 x i31> @llvm.ctpop.v2i31(<2 x i31> %val)
8+
declare <2 x i32> @llvm.cttz.v2i32(<2 x i32> %val, i1)
9+
declare <2 x i33> @llvm.ctlz.v2i33(<2 x i33> %val, i1)
10+
11+
define i31 @ctpop_const() {
12+
; CHECK-LABEL: @ctpop_const(
13+
; CHECK-NEXT: ret i31 12
14+
;
15+
%x = call i31 @llvm.ctpop.i31(i31 12415124)
16+
ret i31 %x
17+
}
18+
19+
define i32 @cttz_const() {
20+
; CHECK-LABEL: @cttz_const(
21+
; CHECK-NEXT: ret i32 1
22+
;
23+
%x = call i32 @llvm.cttz.i32(i32 87359874, i1 true)
24+
ret i32 %x
25+
}
26+
27+
define i33 @ctlz_const() {
28+
; CHECK-LABEL: @ctlz_const(
29+
; CHECK-NEXT: ret i33 6
30+
;
31+
%x = call i33 @llvm.ctlz.i33(i33 87359874, i1 true)
32+
ret i33 %x
33+
}
34+
35+
define i31 @ctpop_zero() {
36+
; CHECK-LABEL: @ctpop_zero(
37+
; CHECK-NEXT: ret i31 0
38+
;
39+
%x = call i31 @llvm.ctpop.i31(i31 0)
40+
ret i31 %x
41+
}
42+
43+
define i32 @cttz_zero_defined() {
44+
; CHECK-LABEL: @cttz_zero_defined(
45+
; CHECK-NEXT: ret i32 32
46+
;
47+
%x = call i32 @llvm.cttz.i32(i32 0, i1 false)
48+
ret i32 %x
49+
}
50+
51+
define i32 @cttz_zero_undefined() {
52+
; CHECK-LABEL: @cttz_zero_undefined(
53+
; CHECK-NEXT: ret i32 undef
54+
;
55+
%x = call i32 @llvm.cttz.i32(i32 0, i1 true)
56+
ret i32 %x
57+
}
58+
59+
define i33 @ctlz_zero_defined() {
60+
; CHECK-LABEL: @ctlz_zero_defined(
61+
; CHECK-NEXT: ret i33 33
62+
;
63+
%x = call i33 @llvm.ctlz.i33(i33 0, i1 false)
64+
ret i33 %x
65+
}
66+
67+
define i33 @ctlz_zero_undefined() {
68+
; CHECK-LABEL: @ctlz_zero_undefined(
69+
; CHECK-NEXT: ret i33 undef
70+
;
71+
%x = call i33 @llvm.ctlz.i33(i33 0, i1 true)
72+
ret i33 %x
73+
}
74+
75+
define i31 @ctpop_undef() {
76+
; CHECK-LABEL: @ctpop_undef(
77+
; CHECK-NEXT: [[X:%.*]] = call i31 @llvm.ctpop.i31(i31 undef)
78+
; CHECK-NEXT: ret i31 [[X]]
79+
;
80+
%x = call i31 @llvm.ctpop.i31(i31 undef)
81+
ret i31 %x
82+
}
83+
84+
define i32 @cttz_undef_defined() {
85+
; CHECK-LABEL: @cttz_undef_defined(
86+
; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.cttz.i32(i32 undef, i1 false)
87+
; CHECK-NEXT: ret i32 [[X]]
88+
;
89+
%x = call i32 @llvm.cttz.i32(i32 undef, i1 false)
90+
ret i32 %x
91+
}
92+
93+
define i32 @cttz_undef_undefined() {
94+
; CHECK-LABEL: @cttz_undef_undefined(
95+
; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.cttz.i32(i32 undef, i1 true)
96+
; CHECK-NEXT: ret i32 [[X]]
97+
;
98+
%x = call i32 @llvm.cttz.i32(i32 undef, i1 true)
99+
ret i32 %x
100+
}
101+
102+
define i33 @ctlz_undef_defined() {
103+
; CHECK-LABEL: @ctlz_undef_defined(
104+
; CHECK-NEXT: [[X:%.*]] = call i33 @llvm.ctlz.i33(i33 undef, i1 false)
105+
; CHECK-NEXT: ret i33 [[X]]
106+
;
107+
%x = call i33 @llvm.ctlz.i33(i33 undef, i1 false)
108+
ret i33 %x
109+
}
110+
111+
define i33 @ctlz_undef_undefined() {
112+
; CHECK-LABEL: @ctlz_undef_undefined(
113+
; CHECK-NEXT: [[X:%.*]] = call i33 @llvm.ctlz.i33(i33 undef, i1 true)
114+
; CHECK-NEXT: ret i33 [[X]]
115+
;
116+
%x = call i33 @llvm.ctlz.i33(i33 undef, i1 true)
117+
ret i33 %x
118+
}
119+
120+
define <2 x i31> @ctpop_vector() {
121+
; CHECK-LABEL: @ctpop_vector(
122+
; CHECK-NEXT: ret <2 x i31> <i31 8, i31 1>
123+
;
124+
%x = call <2 x i31> @llvm.ctpop.v2i31(<2 x i31> <i31 255, i31 16>)
125+
ret <2 x i31> %x
126+
}
127+
128+
define <2 x i31> @ctpop_vector_undef() {
129+
; CHECK-LABEL: @ctpop_vector_undef(
130+
; CHECK-NEXT: [[X:%.*]] = call <2 x i31> @llvm.ctpop.v2i31(<2 x i31> <i31 0, i31 undef>)
131+
; CHECK-NEXT: ret <2 x i31> [[X]]
132+
;
133+
%x = call <2 x i31> @llvm.ctpop.v2i31(<2 x i31> <i31 0, i31 undef>)
134+
ret <2 x i31> %x
135+
}
136+
137+
define <2 x i32> @cttz_vector() {
138+
; CHECK-LABEL: @cttz_vector(
139+
; CHECK-NEXT: ret <2 x i32> <i32 0, i32 4>
140+
;
141+
%x = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> <i32 255, i32 16>, i1 true)
142+
ret <2 x i32> %x
143+
}
144+
145+
define <2 x i32> @cttz_vector_undef_defined() {
146+
; CHECK-LABEL: @cttz_vector_undef_defined(
147+
; CHECK-NEXT: [[X:%.*]] = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> <i32 0, i32 undef>, i1 false)
148+
; CHECK-NEXT: ret <2 x i32> [[X]]
149+
;
150+
%x = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> <i32 0, i32 undef>, i1 false)
151+
ret <2 x i32> %x
152+
}
153+
154+
define <2 x i32> @cttz_vector_undef_undefined() {
155+
; CHECK-LABEL: @cttz_vector_undef_undefined(
156+
; CHECK-NEXT: [[X:%.*]] = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> <i32 0, i32 undef>, i1 true)
157+
; CHECK-NEXT: ret <2 x i32> [[X]]
158+
;
159+
%x = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> <i32 0, i32 undef>, i1 true)
160+
ret <2 x i32> %x
161+
}
162+
163+
define <2 x i33> @ctlz_vector() {
164+
; CHECK-LABEL: @ctlz_vector(
165+
; CHECK-NEXT: ret <2 x i33> <i33 25, i33 28>
166+
;
167+
%x = call <2 x i33> @llvm.ctlz.v2i33(<2 x i33> <i33 255, i33 16>, i1 true)
168+
ret <2 x i33> %x
169+
}
170+
171+
define <2 x i33> @ctlz_vector_undef_defined() {
172+
; CHECK-LABEL: @ctlz_vector_undef_defined(
173+
; CHECK-NEXT: [[X:%.*]] = call <2 x i33> @llvm.ctlz.v2i33(<2 x i33> <i33 0, i33 undef>, i1 false)
174+
; CHECK-NEXT: ret <2 x i33> [[X]]
175+
;
176+
%x = call <2 x i33> @llvm.ctlz.v2i33(<2 x i33> <i33 0, i33 undef>, i1 false)
177+
ret <2 x i33> %x
178+
}
179+
180+
define <2 x i33> @ctlz_vector_undef_undefined() {
181+
; CHECK-LABEL: @ctlz_vector_undef_undefined(
182+
; CHECK-NEXT: [[X:%.*]] = call <2 x i33> @llvm.ctlz.v2i33(<2 x i33> <i33 0, i33 undef>, i1 true)
183+
; CHECK-NEXT: ret <2 x i33> [[X]]
184+
;
185+
%x = call <2 x i33> @llvm.ctlz.v2i33(<2 x i33> <i33 0, i33 undef>, i1 true)
186+
ret <2 x i33> %x
187+
}

llvm/test/Transforms/ConstProp/2007-11-23-cttz.ll

Lines changed: 0 additions & 8 deletions
This file was deleted.

llvm/test/Transforms/InstCombine/bitcount.ll

Lines changed: 0 additions & 19 deletions
This file was deleted.

llvm/test/Transforms/InstSimplify/call.ll

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -189,36 +189,6 @@ define {i8, i1} @test_smul4(i8 %V) {
189189
ret {i8, i1} %x
190190
}
191191

192-
declare i256 @llvm.cttz.i256(i256 %src, i1 %is_zero_undef)
193-
194-
define i256 @test_cttz() {
195-
; CHECK-LABEL: @test_cttz(
196-
; CHECK-NEXT: ret i256 1
197-
;
198-
%x = call i256 @llvm.cttz.i256(i256 10, i1 false)
199-
ret i256 %x
200-
}
201-
202-
declare <2 x i256> @llvm.cttz.v2i256(<2 x i256> %src, i1 %is_zero_undef)
203-
204-
define <2 x i256> @test_cttz_vec() {
205-
; CHECK-LABEL: @test_cttz_vec(
206-
; CHECK-NEXT: ret <2 x i256> <i256 1, i256 1>
207-
;
208-
%x = call <2 x i256> @llvm.cttz.v2i256(<2 x i256> <i256 10, i256 10>, i1 false)
209-
ret <2 x i256> %x
210-
}
211-
212-
declare i256 @llvm.ctpop.i256(i256 %src)
213-
214-
define i256 @test_ctpop() {
215-
; CHECK-LABEL: @test_ctpop(
216-
; CHECK-NEXT: ret i256 2
217-
;
218-
%x = call i256 @llvm.ctpop.i256(i256 10)
219-
ret i256 %x
220-
}
221-
222192
; Test a non-intrinsic that we know about as a library call.
223193
declare float @fabs(float %x)
224194

0 commit comments

Comments
 (0)