xref: /llvm-project/llvm/test/Transforms/Util/libcalls-shrinkwrap-float.ll (revision d3c0ed387c478dc07daac575b2ec1216b8044b56)
1; RUN: opt < %s -passes=libcalls-shrinkwrap -S | FileCheck %s
2
3target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
4target triple = "x86_64-unknown-linux-gnu"
5
6define void @test_range_error(float %value) {
7entry:
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]]:
17
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]]:
27
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]]:
37
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]]:
47
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]]:
55
56  ret void
57}
58
59define void @test_range_error_strictfp(float %value) strictfp {
60entry:
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]]:
70
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]]:
80
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]]:
90
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]]:
100
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]]:
108
109  ret void
110}
111
112declare float @coshf(float)
113declare float @expf(float)
114declare float @exp2f(float)
115declare float @sinhf(float)
116declare float @expm1f(float)
117
118define void @test_domain_error(float %value) {
119entry:
120
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]]:
130
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]]:
140
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]]:
150
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]]:
160
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]]:
168
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]]:
176
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]]:
186
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]]:
194
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]]:
202
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]]:
210
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]]:
218
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
227}
228
229define void @test_domain_error_strictfp(float %value) strictfp {
230entry:
231
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]]:
241
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]]:
251
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]]:
261
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]]:
271
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]]:
279
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]]:
287
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]]:
297
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]]:
305
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]]:
313
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]]:
321
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]]:
329
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
338}
339
340declare float @acosf(float)
341declare float @asinf(float)
342declare float @cosf(float)
343declare float @sinf(float)
344declare float @acoshf(float)
345declare float @sqrtf(float)
346declare float @atanhf(float)
347declare float @logf(float)
348declare float @log10f(float)
349declare float @log2f(float)
350declare float @logbf(float)
351declare float @log1pf(float)
352
353; CHECK: ![[BRANCH_WEIGHT]] = !{!"branch_weights", i32 1, i32 1048575}
354