Follow up to d0858bffa11, add missing REQUIRES x86
[llvm-project.git] / llvm / test / Transforms / Util / libcalls-shrinkwrap-float.ll
blob2a08041e2b1e5f2372ac12e0c099baf9eee43699
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) {
7 entry:
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]]:
56   ret void
59 define void @test_range_error_strictfp(float %value) strictfp {
60 entry:
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]]:
109   ret void
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) {
119 entry:
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]]:
226   ret void
229 define void @test_domain_error_strictfp(float %value) strictfp {
230 entry:
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]]:
337   ret void
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 2000}