1 ; RUN: opt < %s -passes=libcalls-shrinkwrap -S | FileCheck %s
3 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
4 target triple = "x86_64-unknown-linux-gnu"
6 define void @test_range_error(float %value) {
8 %call_0 = call float @coshf(float %value)
9 ; CHECK: [[COND1:%[0-9]+]] = fcmp olt float %value, -8.900000e+01
10 ; CHECK: [[COND2:%[0-9]+]] = fcmp ogt float %value, 8.900000e+01
11 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
12 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT:[0-9]+]]
13 ; CHECK: [[CALL_LABEL]]:
14 ; CHECK-NEXT: %call_0 = call float @coshf(float %value)
15 ; CHECK-NEXT: br label %[[END_LABEL]]
16 ; CHECK: [[END_LABEL]]:
18 %call_1 = call float @expf(float %value)
19 ; CHECK: [[COND1:%[0-9]+]] = fcmp olt float %value, -1.030000e+02
20 ; CHECK: [[COND2:%[0-9]+]] = fcmp ogt float %value, 8.800000e+01
21 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
22 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
23 ; CHECK: [[CALL_LABEL]]:
24 ; CHECK-NEXT: %call_1 = call float @expf(float %value)
25 ; CHECK-NEXT: br label %[[END_LABEL]]
26 ; CHECK: [[END_LABEL]]:
28 %call_3 = call float @exp2f(float %value)
29 ; CHECK: [[COND1:%[0-9]+]] = fcmp olt float %value, -1.490000e+02
30 ; CHECK: [[COND2:%[0-9]+]] = fcmp ogt float %value, 1.270000e+02
31 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
32 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
33 ; CHECK: [[CALL_LABEL]]:
34 ; CHECK-NEXT: %call_3 = call float @exp2f(float %value)
35 ; CHECK-NEXT: br label %[[END_LABEL]]
36 ; CHECK: [[END_LABEL]]:
38 %call_4 = call float @sinhf(float %value)
39 ; CHECK: [[COND1:%[0-9]+]] = fcmp olt float %value, -8.900000e+01
40 ; CHECK: [[COND2:%[0-9]+]] = fcmp ogt float %value, 8.900000e+01
41 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
42 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
43 ; CHECK: [[CALL_LABEL]]:
44 ; CHECK-NEXT: %call_4 = call float @sinhf(float %value)
45 ; CHECK-NEXT: br label %[[END_LABEL]]
46 ; CHECK: [[END_LABEL]]:
48 %call_5 = call float @expm1f(float %value)
49 ; CHECK: [[COND:%[0-9]+]] = fcmp ogt float %value, 8.800000e+01
50 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
51 ; CHECK: [[CALL_LABEL]]:
52 ; CHECK-NEXT: %call_5 = call float @expm1f(float %value)
53 ; CHECK-NEXT: br label %[[END_LABEL]]
54 ; CHECK: [[END_LABEL]]:
59 define void @test_range_error_strictfp(float %value) strictfp {
61 %call_0 = call float @coshf(float %value) strictfp
62 ; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE:%.*]], float -8.900000e+01, metadata !"olt", metadata !"fpexcept.strict")
63 ; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 8.900000e+01, metadata !"ogt", metadata !"fpexcept.strict")
64 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
65 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT:[0-9]+]]
66 ; CHECK: [[CALL_LABEL]]:
67 ; CHECK-NEXT: %call_0 = call float @coshf(float %value)
68 ; CHECK-NEXT: br label %[[END_LABEL]]
69 ; CHECK: [[END_LABEL]]:
71 %call_1 = call float @expf(float %value) strictfp
72 ; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float -1.030000e+02, metadata !"olt", metadata !"fpexcept.strict")
73 ; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 8.800000e+01, metadata !"ogt", metadata !"fpexcept.strict")
74 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
75 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
76 ; CHECK: [[CALL_LABEL]]:
77 ; CHECK-NEXT: %call_1 = call float @expf(float %value)
78 ; CHECK-NEXT: br label %[[END_LABEL]]
79 ; CHECK: [[END_LABEL]]:
81 %call_3 = call float @exp2f(float %value) strictfp
82 ; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float -1.490000e+02, metadata !"olt", metadata !"fpexcept.strict")
83 ; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 1.270000e+02, metadata !"ogt", metadata !"fpexcept.strict")
84 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
85 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
86 ; CHECK: [[CALL_LABEL]]:
87 ; CHECK-NEXT: %call_3 = call float @exp2f(float %value)
88 ; CHECK-NEXT: br label %[[END_LABEL]]
89 ; CHECK: [[END_LABEL]]:
91 %call_4 = call float @sinhf(float %value) strictfp
92 ; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float -8.900000e+01, metadata !"olt", metadata !"fpexcept.strict")
93 ; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 8.900000e+01, metadata !"ogt", metadata !"fpexcept.strict")
94 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
95 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
96 ; CHECK: [[CALL_LABEL]]:
97 ; CHECK-NEXT: %call_4 = call float @sinhf(float %value)
98 ; CHECK-NEXT: br label %[[END_LABEL]]
99 ; CHECK: [[END_LABEL]]:
101 %call_5 = call float @expm1f(float %value) strictfp
102 ; CHECK: [[COND:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 8.800000e+01, metadata !"ogt", metadata !"fpexcept.strict")
103 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
104 ; CHECK: [[CALL_LABEL]]:
105 ; CHECK-NEXT: %call_5 = call float @expm1f(float %value)
106 ; CHECK-NEXT: br label %[[END_LABEL]]
107 ; CHECK: [[END_LABEL]]:
112 declare float @coshf(float)
113 declare float @expf(float)
114 declare float @exp2f(float)
115 declare float @sinhf(float)
116 declare float @expm1f(float)
118 define void @test_domain_error(float %value) {
121 %call_00 = call float @acosf(float %value)
122 ; CHECK: [[COND1:%[0-9]+]] = fcmp ogt float %value, 1.000000e+00
123 ; CHECK: [[COND2:%[0-9]+]] = fcmp olt float %value, -1.000000e+00
124 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
125 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
126 ; CHECK: [[CALL_LABEL]]:
127 ; CHECK-NEXT: %call_00 = call float @acosf(float %value)
128 ; CHECK-NEXT: br label %[[END_LABEL]]
129 ; CHECK: [[END_LABEL]]:
131 %call_01 = call float @asinf(float %value)
132 ; CHECK: [[COND1:%[0-9]+]] = fcmp ogt float %value, 1.000000e+00
133 ; CHECK: [[COND2:%[0-9]+]] = fcmp olt float %value, -1.000000e+00
134 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
135 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
136 ; CHECK: [[CALL_LABEL]]:
137 ; CHECK-NEXT: %call_01 = call float @asinf(float %value)
138 ; CHECK-NEXT: br label %[[END_LABEL]]
139 ; CHECK: [[END_LABEL]]:
141 %call_02 = call float @cosf(float %value)
142 ; CHECK: [[COND1:%[0-9]+]] = fcmp oeq float %value, 0xFFF0000000000000
143 ; CHECK: [[COND2:%[0-9]+]] = fcmp oeq float %value, 0x7FF0000000000000
144 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
145 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
146 ; CHECK: [[CALL_LABEL]]:
147 ; CHECK-NEXT: %call_02 = call float @cosf(float %value)
148 ; CHECK-NEXT: br label %[[END_LABEL]]
149 ; CHECK: [[END_LABEL]]:
151 %call_03 = call float @sinf(float %value)
152 ; CHECK: [[COND1:%[0-9]+]] = fcmp oeq float %value, 0xFFF0000000000000
153 ; CHECK: [[COND2:%[0-9]+]] = fcmp oeq float %value, 0x7FF0000000000000
154 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
155 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
156 ; CHECK: [[CALL_LABEL]]:
157 ; CHECK-NEXT: %call_03 = call float @sinf(float %value)
158 ; CHECK-NEXT: br label %[[END_LABEL]]
159 ; CHECK: [[END_LABEL]]:
161 %call_04 = call float @acoshf(float %value)
162 ; CHECK: [[COND:%[0-9]+]] = fcmp olt float %value, 1.000000e+00
163 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
164 ; CHECK: [[CALL_LABEL]]:
165 ; CHECK-NEXT: %call_04 = call float @acoshf(float %value)
166 ; CHECK-NEXT: br label %[[END_LABEL]]
167 ; CHECK: [[END_LABEL]]:
169 %call_05 = call float @sqrtf(float %value)
170 ; CHECK: [[COND:%[0-9]+]] = fcmp olt float %value, 0.000000e+00
171 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
172 ; CHECK: [[CALL_LABEL]]:
173 ; CHECK-NEXT: %call_05 = call float @sqrtf(float %value)
174 ; CHECK-NEXT: br label %[[END_LABEL]]
175 ; CHECK: [[END_LABEL]]:
177 %call_06 = call float @atanhf(float %value)
178 ; CHECK: [[COND1:%[0-9]+]] = fcmp oge float %value, 1.000000e+00
179 ; CHECK: [[COND2:%[0-9]+]] = fcmp ole float %value, -1.000000e+00
180 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
181 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
182 ; CHECK: [[CALL_LABEL]]:
183 ; CHECK-NEXT: %call_06 = call float @atanhf(float %value)
184 ; CHECK-NEXT: br label %[[END_LABEL]]
185 ; CHECK: [[END_LABEL]]:
187 %call_07 = call float @logf(float %value)
188 ; CHECK: [[COND:%[0-9]+]] = fcmp ole float %value, 0.000000e+00
189 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
190 ; CHECK: [[CALL_LABEL]]:
191 ; CHECK-NEXT: %call_07 = call float @logf(float %value)
192 ; CHECK-NEXT: br label %[[END_LABEL]]
193 ; CHECK: [[END_LABEL]]:
195 %call_08 = call float @log10f(float %value)
196 ; CHECK: [[COND:%[0-9]+]] = fcmp ole float %value, 0.000000e+00
197 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
198 ; CHECK: [[CALL_LABEL]]:
199 ; CHECK-NEXT: %call_08 = call float @log10f(float %value)
200 ; CHECK-NEXT: br label %[[END_LABEL]]
201 ; CHECK: [[END_LABEL]]:
203 %call_09 = call float @log2f(float %value)
204 ; CHECK: [[COND:%[0-9]+]] = fcmp ole float %value, 0.000000e+00
205 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
206 ; CHECK: [[CALL_LABEL]]:
207 ; CHECK-NEXT: %call_09 = call float @log2f(float %value)
208 ; CHECK-NEXT: br label %[[END_LABEL]]
209 ; CHECK: [[END_LABEL]]:
211 %call_10 = call float @logbf(float %value)
212 ; CHECK: [[COND:%[0-9]+]] = fcmp ole float %value, 0.000000e+00
213 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
214 ; CHECK: [[CALL_LABEL]]:
215 ; CHECK-NEXT: %call_10 = call float @logbf(float %value)
216 ; CHECK-NEXT: br label %[[END_LABEL]]
217 ; CHECK: [[END_LABEL]]:
219 %call_11 = call float @log1pf(float %value)
220 ; CHECK: [[COND:%[0-9]+]] = fcmp ole float %value, -1.000000e+00
221 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
222 ; CHECK: [[CALL_LABEL]]:
223 ; CHECK-NEXT: %call_11 = call float @log1pf(float %value)
224 ; CHECK-NEXT: br label %[[END_LABEL]]
225 ; CHECK: [[END_LABEL]]:
229 define void @test_domain_error_strictfp(float %value) strictfp {
232 %call_00 = call float @acosf(float %value) strictfp
233 ; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE:%.*]], float 1.000000e+00, metadata !"ogt", metadata !"fpexcept.strict")
234 ; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float -1.000000e+00, metadata !"olt", metadata !"fpexcept.strict")
235 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
236 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
237 ; CHECK: [[CALL_LABEL]]:
238 ; CHECK-NEXT: %call_00 = call float @acosf(float %value)
239 ; CHECK-NEXT: br label %[[END_LABEL]]
240 ; CHECK: [[END_LABEL]]:
242 %call_01 = call float @asinf(float %value) strictfp
243 ; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 1.000000e+00, metadata !"ogt", metadata !"fpexcept.strict")
244 ; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float -1.000000e+00, metadata !"olt", metadata !"fpexcept.strict")
245 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
246 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
247 ; CHECK: [[CALL_LABEL]]:
248 ; CHECK-NEXT: %call_01 = call float @asinf(float %value)
249 ; CHECK-NEXT: br label %[[END_LABEL]]
250 ; CHECK: [[END_LABEL]]:
252 %call_02 = call float @cosf(float %value) strictfp
253 ; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0xFFF0000000000000, metadata !"oeq", metadata !"fpexcept.strict")
254 ; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0x7FF0000000000000, metadata !"oeq", metadata !"fpexcept.strict")
255 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
256 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
257 ; CHECK: [[CALL_LABEL]]:
258 ; CHECK-NEXT: %call_02 = call float @cosf(float %value)
259 ; CHECK-NEXT: br label %[[END_LABEL]]
260 ; CHECK: [[END_LABEL]]:
262 %call_03 = call float @sinf(float %value) strictfp
263 ; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0xFFF0000000000000, metadata !"oeq", metadata !"fpexcept.strict")
264 ; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0x7FF0000000000000, metadata !"oeq", metadata !"fpexcept.strict")
265 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
266 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
267 ; CHECK: [[CALL_LABEL]]:
268 ; CHECK-NEXT: %call_03 = call float @sinf(float %value)
269 ; CHECK-NEXT: br label %[[END_LABEL]]
270 ; CHECK: [[END_LABEL]]:
272 %call_04 = call float @acoshf(float %value) strictfp
273 ; CHECK: [[COND:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 1.000000e+00, metadata !"olt", metadata !"fpexcept.strict")
274 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
275 ; CHECK: [[CALL_LABEL]]:
276 ; CHECK-NEXT: %call_04 = call float @acoshf(float %value)
277 ; CHECK-NEXT: br label %[[END_LABEL]]
278 ; CHECK: [[END_LABEL]]:
280 %call_05 = call float @sqrtf(float %value) strictfp
281 ; CHECK: [[COND:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0.000000e+00, metadata !"olt", metadata !"fpexcept.strict")
282 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
283 ; CHECK: [[CALL_LABEL]]:
284 ; CHECK-NEXT: %call_05 = call float @sqrtf(float %value)
285 ; CHECK-NEXT: br label %[[END_LABEL]]
286 ; CHECK: [[END_LABEL]]:
288 %call_06 = call float @atanhf(float %value) strictfp
289 ; CHECK: [[COND1:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 1.000000e+00, metadata !"oge", metadata !"fpexcept.strict")
290 ; CHECK: [[COND2:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float -1.000000e+00, metadata !"ole", metadata !"fpexcept.strict")
291 ; CHECK: [[COND:%[0-9]+]] = or i1 [[COND2]], [[COND1]]
292 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
293 ; CHECK: [[CALL_LABEL]]:
294 ; CHECK-NEXT: %call_06 = call float @atanhf(float %value)
295 ; CHECK-NEXT: br label %[[END_LABEL]]
296 ; CHECK: [[END_LABEL]]:
298 %call_07 = call float @logf(float %value) strictfp
299 ; CHECK: [[COND:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0.000000e+00, metadata !"ole", metadata !"fpexcept.strict")
300 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
301 ; CHECK: [[CALL_LABEL]]:
302 ; CHECK-NEXT: %call_07 = call float @logf(float %value)
303 ; CHECK-NEXT: br label %[[END_LABEL]]
304 ; CHECK: [[END_LABEL]]:
306 %call_08 = call float @log10f(float %value) strictfp
307 ; CHECK: [[COND:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0.000000e+00, metadata !"ole", metadata !"fpexcept.strict")
308 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
309 ; CHECK: [[CALL_LABEL]]:
310 ; CHECK-NEXT: %call_08 = call float @log10f(float %value)
311 ; CHECK-NEXT: br label %[[END_LABEL]]
312 ; CHECK: [[END_LABEL]]:
314 %call_09 = call float @log2f(float %value) strictfp
315 ; CHECK: [[COND:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0.000000e+00, metadata !"ole", metadata !"fpexcept.strict")
316 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
317 ; CHECK: [[CALL_LABEL]]:
318 ; CHECK-NEXT: %call_09 = call float @log2f(float %value)
319 ; CHECK-NEXT: br label %[[END_LABEL]]
320 ; CHECK: [[END_LABEL]]:
322 %call_10 = call float @logbf(float %value) strictfp
323 ; CHECK: [[COND:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float 0.000000e+00, metadata !"ole", metadata !"fpexcept.strict")
324 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
325 ; CHECK: [[CALL_LABEL]]:
326 ; CHECK-NEXT: %call_10 = call float @logbf(float %value)
327 ; CHECK-NEXT: br label %[[END_LABEL]]
328 ; CHECK: [[END_LABEL]]:
330 %call_11 = call float @log1pf(float %value) strictfp
331 ; CHECK: [[COND:%[0-9]+]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[VALUE]], float -1.000000e+00, metadata !"ole", metadata !"fpexcept.strict")
332 ; CHECK: br i1 [[COND]], label %[[CALL_LABEL:cdce.call[0-9]*]], label %[[END_LABEL:cdce.end[0-9]*]], !prof ![[BRANCH_WEIGHT]]
333 ; CHECK: [[CALL_LABEL]]:
334 ; CHECK-NEXT: %call_11 = call float @log1pf(float %value)
335 ; CHECK-NEXT: br label %[[END_LABEL]]
336 ; CHECK: [[END_LABEL]]:
340 declare float @acosf(float)
341 declare float @asinf(float)
342 declare float @cosf(float)
343 declare float @sinf(float)
344 declare float @acoshf(float)
345 declare float @sqrtf(float)
346 declare float @atanhf(float)
347 declare float @logf(float)
348 declare float @log10f(float)
349 declare float @log2f(float)
350 declare float @logbf(float)
351 declare float @log1pf(float)
353 ; CHECK: ![[BRANCH_WEIGHT]] = !{!"branch_weights", i32 1, i32 1048575}