[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / fp-intrinsics.ll
blobf80a8df18a03a239061651ecce71d4cc319b2261
1 ; RUN: llc -mtriple=aarch64 %s -o - | FileCheck %s
2 ; RUN: llc -mtriple=aarch64 -global-isel=true -global-isel-abort=2 %s -o - | FileCheck %s
4 ; Check that constrained fp intrinsics are correctly lowered.
7 ; Single-precision intrinsics
9 ; CHECK-LABEL: add_f32:
10 ; CHECK: fadd s0, s0, s1
11 define float @add_f32(float %x, float %y) #0 {
12   %val = call float @llvm.experimental.constrained.fadd.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
13   ret float %val
16 ; CHECK-LABEL: sub_f32:
17 ; CHECK: fsub s0, s0, s1
18 define float @sub_f32(float %x, float %y) #0 {
19   %val = call float @llvm.experimental.constrained.fsub.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
20   ret float %val
23 ; CHECK-LABEL: mul_f32:
24 ; CHECK: fmul s0, s0, s1
25 define float @mul_f32(float %x, float %y) #0 {
26   %val = call float @llvm.experimental.constrained.fmul.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
27   ret float %val
30 ; CHECK-LABEL: div_f32:
31 ; CHECK: fdiv s0, s0, s1
32 define float @div_f32(float %x, float %y) #0 {
33   %val = call float @llvm.experimental.constrained.fdiv.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
34   ret float %val
37 ; CHECK-LABEL: frem_f32:
38 ; CHECK: bl fmodf
39 define float @frem_f32(float %x, float %y) #0 {
40   %val = call float @llvm.experimental.constrained.frem.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
41   ret float %val
44 ; CHECK-LABEL: fma_f32:
45 ; CHECK: fmadd s0, s0, s1, s2
46 define float @fma_f32(float %x, float %y, float %z) #0 {
47   %val = call float @llvm.experimental.constrained.fma.f32(float %x, float %y, float %z, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
48   ret float %val
51 ; CHECK-LABEL: fptosi_i32_f32:
52 ; CHECK: fcvtzs w0, s0
53 define i32 @fptosi_i32_f32(float %x) #0 {
54   %val = call i32 @llvm.experimental.constrained.fptosi.i32.f32(float %x, metadata !"fpexcept.strict") #0
55   ret i32 %val
58 ; CHECK-LABEL: fptoui_i32_f32:
59 ; CHECK: fcvtzu w0, s0
60 define i32 @fptoui_i32_f32(float %x) #0 {
61   %val = call i32 @llvm.experimental.constrained.fptoui.i32.f32(float %x, metadata !"fpexcept.strict") #0
62   ret i32 %val
65 ; CHECK-LABEL: fptosi_i64_f32:
66 ; CHECK: fcvtzs x0, s0
67 define i64 @fptosi_i64_f32(float %x) #0 {
68   %val = call i64 @llvm.experimental.constrained.fptosi.i64.f32(float %x, metadata !"fpexcept.strict") #0
69   ret i64 %val
72 ; CHECK-LABEL: fptoui_i64_f32:
73 ; CHECK: fcvtzu x0, s0
74 define i64 @fptoui_i64_f32(float %x) #0 {
75   %val = call i64 @llvm.experimental.constrained.fptoui.i64.f32(float %x, metadata !"fpexcept.strict") #0
76   ret i64 %val
79 ; CHECK-LABEL: sitofp_f32_i32:
80 ; CHECK: scvtf s0, w0
81 define float @sitofp_f32_i32(i32 %x) #0 {
82   %val = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
83   ret float %val
86 ; CHECK-LABEL: uitofp_f32_i32:
87 ; CHECK: ucvtf s0, w0
88 define float @uitofp_f32_i32(i32 %x) #0 {
89   %val = call float @llvm.experimental.constrained.uitofp.f32.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
90   ret float %val
93 ; CHECK-LABEL: sitofp_f32_i64:
94 ; CHECK: scvtf s0, x0
95 define float @sitofp_f32_i64(i64 %x) #0 {
96   %val = call float @llvm.experimental.constrained.sitofp.f32.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
97   ret float %val
100 ; CHECK-LABEL: uitofp_f32_i64:
101 ; CHECK: ucvtf s0, x0
102 define float @uitofp_f32_i64(i64 %x) #0 {
103   %val = call float @llvm.experimental.constrained.uitofp.f32.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
104   ret float %val
107 ; CHECK-LABEL: sitofp_f32_i128:
108 ; CHECK: bl __floattisf
109 define float @sitofp_f32_i128(i128 %x) #0 {
110   %val = call float @llvm.experimental.constrained.sitofp.f32.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
111   ret float %val
114 ; CHECK-LABEL: uitofp_f32_i128:
115 ; CHECK: bl __floatuntisf
116 define float @uitofp_f32_i128(i128 %x) #0 {
117   %val = call float @llvm.experimental.constrained.uitofp.f32.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
118   ret float %val
121 ; CHECK-LABEL: sqrt_f32:
122 ; CHECK: fsqrt s0, s0
123 define float @sqrt_f32(float %x) #0 {
124   %val = call float @llvm.experimental.constrained.sqrt.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
125   ret float %val
128 ; CHECK-LABEL: powi_f32:
129 ; CHECK: bl __powisf2
130 define float @powi_f32(float %x, i32 %y) #0 {
131   %val = call float @llvm.experimental.constrained.powi.f32(float %x, i32 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
132   ret float %val
135 ; CHECK-LABEL: sin_f32:
136 ; CHECK: bl sinf
137 define float @sin_f32(float %x) #0 {
138   %val = call float @llvm.experimental.constrained.sin.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
139   ret float %val
142 ; CHECK-LABEL: cos_f32:
143 ; CHECK: bl cosf
144 define float @cos_f32(float %x) #0 {
145   %val = call float @llvm.experimental.constrained.cos.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
146   ret float %val
149 ; CHECK-LABEL: pow_f32:
150 ; CHECK: bl powf
151 define float @pow_f32(float %x, float %y) #0 {
152   %val = call float @llvm.experimental.constrained.pow.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
153   ret float %val
156 ; CHECK-LABEL: log_f32:
157 ; CHECK: bl logf
158 define float @log_f32(float %x) #0 {
159   %val = call float @llvm.experimental.constrained.log.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
160   ret float %val
163 ; CHECK-LABEL: log10_f32:
164 ; CHECK: bl log10f
165 define float @log10_f32(float %x) #0 {
166   %val = call float @llvm.experimental.constrained.log10.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
167   ret float %val
170 ; CHECK-LABEL: log2_f32:
171 ; CHECK: bl log2f
172 define float @log2_f32(float %x) #0 {
173   %val = call float @llvm.experimental.constrained.log2.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
174   ret float %val
177 ; CHECK-LABEL: exp_f32:
178 ; CHECK: bl expf
179 define float @exp_f32(float %x) #0 {
180   %val = call float @llvm.experimental.constrained.exp.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
181   ret float %val
184 ; CHECK-LABEL: exp2_f32:
185 ; CHECK: bl exp2f
186 define float @exp2_f32(float %x) #0 {
187   %val = call float @llvm.experimental.constrained.exp2.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
188   ret float %val
191 ; CHECK-LABEL: rint_f32:
192 ; CHECK: frintx s0, s0
193 define float @rint_f32(float %x) #0 {
194   %val = call float @llvm.experimental.constrained.rint.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
195   ret float %val
198 ; CHECK-LABEL: nearbyint_f32:
199 ; CHECK: frinti s0, s0
200 define float @nearbyint_f32(float %x) #0 {
201   %val = call float @llvm.experimental.constrained.nearbyint.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
202   ret float %val
205 ; CHECK-LABEL: lrint_f32:
206 ; CHECK: frintx [[REG:s[0-9]+]], s0
207 ; CHECK: fcvtzs w0, [[REG]]
208 define i32 @lrint_f32(float %x) #0 {
209   %val = call i32 @llvm.experimental.constrained.lrint.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
210   ret i32 %val
213 ; CHECK-LABEL: llrint_f32:
214 ; CHECK: frintx [[REG:s[0-9]+]], s0
215 ; CHECK: fcvtzs x0, [[REG]]
216 define i64 @llrint_f32(float %x) #0 {
217   %val = call i64 @llvm.experimental.constrained.llrint.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
218   ret i64 %val
221 ; CHECK-LABEL: maxnum_f32:
222 ; CHECK: fmaxnm s0, s0, s1
223 define float @maxnum_f32(float %x, float %y) #0 {
224   %val = call float @llvm.experimental.constrained.maxnum.f32(float %x, float %y, metadata !"fpexcept.strict") #0
225   ret float %val
228 ; CHECK-LABEL: minnum_f32:
229 ; CHECK: fminnm s0, s0, s1
230 define float @minnum_f32(float %x, float %y) #0 {
231   %val = call float @llvm.experimental.constrained.minnum.f32(float %x, float %y, metadata !"fpexcept.strict") #0
232   ret float %val
235 ; CHECK-LABEL: maximum_f32:
236 ; CHECK: fmax s0, s0, s1
237 define float @maximum_f32(float %x, float %y) #0 {
238   %val = call float @llvm.experimental.constrained.maximum.f32(float %x, float %y, metadata !"fpexcept.strict") #0
239   ret float %val
242 ; CHECK-LABEL: minimum_f32:
243 ; CHECK: fmin s0, s0, s1
244 define float @minimum_f32(float %x, float %y) #0 {
245   %val = call float @llvm.experimental.constrained.minimum.f32(float %x, float %y, metadata !"fpexcept.strict") #0
246   ret float %val
249 ; CHECK-LABEL: ceil_f32:
250 ; CHECK: frintp s0, s0
251 define float @ceil_f32(float %x) #0 {
252   %val = call float @llvm.experimental.constrained.ceil.f32(float %x, metadata !"fpexcept.strict") #0
253   ret float %val
256 ; CHECK-LABEL: floor_f32:
257 ; CHECK: frintm s0, s0
258 define float @floor_f32(float %x) #0 {
259   %val = call float @llvm.experimental.constrained.floor.f32(float %x, metadata !"fpexcept.strict") #0
260   ret float %val
263 ; CHECK-LABEL: lround_f32:
264 ; CHECK: fcvtas w0, s0
265 define i32 @lround_f32(float %x) #0 {
266   %val = call i32 @llvm.experimental.constrained.lround.f32(float %x, metadata !"fpexcept.strict") #0
267   ret i32 %val
270 ; CHECK-LABEL: llround_f32:
271 ; CHECK: fcvtas x0, s0
272 define i64 @llround_f32(float %x) #0 {
273   %val = call i64 @llvm.experimental.constrained.llround.f32(float %x, metadata !"fpexcept.strict") #0
274   ret i64 %val
277 ; CHECK-LABEL: round_f32:
278 ; CHECK: frinta s0, s0
279 define float @round_f32(float %x) #0 {
280   %val = call float @llvm.experimental.constrained.round.f32(float %x, metadata !"fpexcept.strict") #0
281   ret float %val
284 ; CHECK-LABEL: roundeven_f32:
285 ; CHECK: frintn s0, s0
286 define float @roundeven_f32(float %x) #0 {
287   %val = call float @llvm.experimental.constrained.roundeven.f32(float %x, metadata !"fpexcept.strict") #0
288   ret float %val
291 ; CHECK-LABEL: trunc_f32:
292 ; CHECK: frintz s0, s0
293 define float @trunc_f32(float %x) #0 {
294   %val = call float @llvm.experimental.constrained.trunc.f32(float %x, metadata !"fpexcept.strict") #0
295   ret float %val
298 ; CHECK-LABEL: fcmp_olt_f32:
299 ; CHECK: fcmp s0, s1
300 define i32 @fcmp_olt_f32(float %a, float %b) #0 {
301   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"olt", metadata !"fpexcept.strict") #0
302   %conv = zext i1 %cmp to i32
303   ret i32 %conv
306 ; CHECK-LABEL: fcmp_ole_f32:
307 ; CHECK: fcmp s0, s1
308 define i32 @fcmp_ole_f32(float %a, float %b) #0 {
309   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ole", metadata !"fpexcept.strict") #0
310   %conv = zext i1 %cmp to i32
311   ret i32 %conv
314 ; CHECK-LABEL: fcmp_ogt_f32:
315 ; CHECK: fcmp s0, s1
316 define i32 @fcmp_ogt_f32(float %a, float %b) #0 {
317   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ogt", metadata !"fpexcept.strict") #0
318   %conv = zext i1 %cmp to i32
319   ret i32 %conv
322 ; CHECK-LABEL: fcmp_oge_f32:
323 ; CHECK: fcmp s0, s1
324 define i32 @fcmp_oge_f32(float %a, float %b) #0 {
325   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"oge", metadata !"fpexcept.strict") #0
326   %conv = zext i1 %cmp to i32
327   ret i32 %conv
330 ; CHECK-LABEL: fcmp_oeq_f32:
331 ; CHECK: fcmp s0, s1
332 define i32 @fcmp_oeq_f32(float %a, float %b) #0 {
333   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"oeq", metadata !"fpexcept.strict") #0
334   %conv = zext i1 %cmp to i32
335   ret i32 %conv
338 ; CHECK-LABEL: fcmp_one_f32:
339 ; CHECK: fcmp s0, s1
340 define i32 @fcmp_one_f32(float %a, float %b) #0 {
341   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"one", metadata !"fpexcept.strict") #0
342   %conv = zext i1 %cmp to i32
343   ret i32 %conv
346 ; CHECK-LABEL: fcmp_ult_f32:
347 ; CHECK: fcmp s0, s1
348 define i32 @fcmp_ult_f32(float %a, float %b) #0 {
349   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ult", metadata !"fpexcept.strict") #0
350   %conv = zext i1 %cmp to i32
351   ret i32 %conv
354 ; CHECK-LABEL: fcmp_ule_f32:
355 ; CHECK: fcmp s0, s1
356 define i32 @fcmp_ule_f32(float %a, float %b) #0 {
357   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ule", metadata !"fpexcept.strict") #0
358   %conv = zext i1 %cmp to i32
359   ret i32 %conv
362 ; CHECK-LABEL: fcmp_ugt_f32:
363 ; CHECK: fcmp s0, s1
364 define i32 @fcmp_ugt_f32(float %a, float %b) #0 {
365   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ugt", metadata !"fpexcept.strict") #0
366   %conv = zext i1 %cmp to i32
367   ret i32 %conv
370 ; CHECK-LABEL: fcmp_uge_f32:
371 ; CHECK: fcmp s0, s1
372 define i32 @fcmp_uge_f32(float %a, float %b) #0 {
373   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"uge", metadata !"fpexcept.strict") #0
374   %conv = zext i1 %cmp to i32
375   ret i32 %conv
378 ; CHECK-LABEL: fcmp_ueq_f32:
379 ; CHECK: fcmp s0, s1
380 define i32 @fcmp_ueq_f32(float %a, float %b) #0 {
381   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ueq", metadata !"fpexcept.strict") #0
382   %conv = zext i1 %cmp to i32
383   ret i32 %conv
386 ; CHECK-LABEL: fcmp_une_f32:
387 ; CHECK: fcmp s0, s1
388 define i32 @fcmp_une_f32(float %a, float %b) #0 {
389   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"une", metadata !"fpexcept.strict") #0
390   %conv = zext i1 %cmp to i32
391   ret i32 %conv
394 ; CHECK-LABEL: fcmps_olt_f32:
395 ; CHECK: fcmpe s0, s1
396 define i32 @fcmps_olt_f32(float %a, float %b) #0 {
397   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"olt", metadata !"fpexcept.strict") #0
398   %conv = zext i1 %cmp to i32
399   ret i32 %conv
402 ; CHECK-LABEL: fcmps_ole_f32:
403 ; CHECK: fcmpe s0, s1
404 define i32 @fcmps_ole_f32(float %a, float %b) #0 {
405   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ole", metadata !"fpexcept.strict") #0
406   %conv = zext i1 %cmp to i32
407   ret i32 %conv
410 ; CHECK-LABEL: fcmps_ogt_f32:
411 ; CHECK: fcmpe s0, s1
412 define i32 @fcmps_ogt_f32(float %a, float %b) #0 {
413   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ogt", metadata !"fpexcept.strict") #0
414   %conv = zext i1 %cmp to i32
415   ret i32 %conv
418 ; CHECK-LABEL: fcmps_oge_f32:
419 ; CHECK: fcmpe s0, s1
420 define i32 @fcmps_oge_f32(float %a, float %b) #0 {
421   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"oge", metadata !"fpexcept.strict") #0
422   %conv = zext i1 %cmp to i32
423   ret i32 %conv
426 ; CHECK-LABEL: fcmps_oeq_f32:
427 ; CHECK: fcmpe s0, s1
428 define i32 @fcmps_oeq_f32(float %a, float %b) #0 {
429   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"oeq", metadata !"fpexcept.strict") #0
430   %conv = zext i1 %cmp to i32
431   ret i32 %conv
434 ; CHECK-LABEL: fcmps_one_f32:
435 ; CHECK: fcmpe s0, s1
436 define i32 @fcmps_one_f32(float %a, float %b) #0 {
437   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"one", metadata !"fpexcept.strict") #0
438   %conv = zext i1 %cmp to i32
439   ret i32 %conv
442 ; CHECK-LABEL: fcmps_ult_f32:
443 ; CHECK: fcmpe s0, s1
444 define i32 @fcmps_ult_f32(float %a, float %b) #0 {
445   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ult", metadata !"fpexcept.strict") #0
446   %conv = zext i1 %cmp to i32
447   ret i32 %conv
450 ; CHECK-LABEL: fcmps_ule_f32:
451 ; CHECK: fcmpe s0, s1
452 define i32 @fcmps_ule_f32(float %a, float %b) #0 {
453   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ule", metadata !"fpexcept.strict") #0
454   %conv = zext i1 %cmp to i32
455   ret i32 %conv
458 ; CHECK-LABEL: fcmps_ugt_f32:
459 ; CHECK: fcmpe s0, s1
460 define i32 @fcmps_ugt_f32(float %a, float %b) #0 {
461   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ugt", metadata !"fpexcept.strict") #0
462   %conv = zext i1 %cmp to i32
463   ret i32 %conv
466 ; CHECK-LABEL: fcmps_uge_f32:
467 ; CHECK: fcmpe s0, s1
468 define i32 @fcmps_uge_f32(float %a, float %b) #0 {
469   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"uge", metadata !"fpexcept.strict") #0
470   %conv = zext i1 %cmp to i32
471   ret i32 %conv
474 ; CHECK-LABEL: fcmps_ueq_f32:
475 ; CHECK: fcmpe s0, s1
476 define i32 @fcmps_ueq_f32(float %a, float %b) #0 {
477   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ueq", metadata !"fpexcept.strict") #0
478   %conv = zext i1 %cmp to i32
479   ret i32 %conv
482 ; CHECK-LABEL: fcmps_une_f32:
483 ; CHECK: fcmpe s0, s1
484 define i32 @fcmps_une_f32(float %a, float %b) #0 {
485   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"une", metadata !"fpexcept.strict") #0
486   %conv = zext i1 %cmp to i32
487   ret i32 %conv
491 ; Double-precision intrinsics
493 ; CHECK-LABEL: add_f64:
494 ; CHECK: fadd d0, d0, d1
495 define double @add_f64(double %x, double %y) #0 {
496   %val = call double @llvm.experimental.constrained.fadd.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
497   ret double %val
500 ; CHECK-LABEL: sub_f64:
501 ; CHECK: fsub d0, d0, d1
502 define double @sub_f64(double %x, double %y) #0 {
503   %val = call double @llvm.experimental.constrained.fsub.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
504   ret double %val
507 ; CHECK-LABEL: mul_f64:
508 ; CHECK: fmul d0, d0, d1
509 define double @mul_f64(double %x, double %y) #0 {
510   %val = call double @llvm.experimental.constrained.fmul.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
511   ret double %val
514 ; CHECK-LABEL: div_f64:
515 ; CHECK: fdiv d0, d0, d1
516 define double @div_f64(double %x, double %y) #0 {
517   %val = call double @llvm.experimental.constrained.fdiv.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
518   ret double %val
521 ; CHECK-LABEL: frem_f64:
522 ; CHECK: bl fmod
523 define double @frem_f64(double %x, double %y) #0 {
524   %val = call double @llvm.experimental.constrained.frem.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
525   ret double %val
528 ; CHECK-LABEL: fma_f64:
529 ; CHECK: fmadd d0, d0, d1, d2
530 define double @fma_f64(double %x, double %y, double %z) #0 {
531   %val = call double @llvm.experimental.constrained.fma.f64(double %x, double %y, double %z, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
532   ret double %val
535 ; CHECK-LABEL: fptosi_i32_f64:
536 ; CHECK: fcvtzs w0, d0
537 define i32 @fptosi_i32_f64(double %x) #0 {
538   %val = call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %x, metadata !"fpexcept.strict") #0
539   ret i32 %val
542 ; CHECK-LABEL: fptoui_i32_f64:
543 ; CHECK: fcvtzu w0, d0
544 define i32 @fptoui_i32_f64(double %x) #0 {
545   %val = call i32 @llvm.experimental.constrained.fptoui.i32.f64(double %x, metadata !"fpexcept.strict") #0
546   ret i32 %val
549 ; CHECK-LABEL: fptosi_i64_f64:
550 ; CHECK: fcvtzs x0, d0
551 define i64 @fptosi_i64_f64(double %x) #0 {
552   %val = call i64 @llvm.experimental.constrained.fptosi.i64.f64(double %x, metadata !"fpexcept.strict") #0
553   ret i64 %val
556 ; CHECK-LABEL: fptoui_i64_f64:
557 ; CHECK: fcvtzu x0, d0
558 define i64 @fptoui_i64_f64(double %x) #0 {
559   %val = call i64 @llvm.experimental.constrained.fptoui.i64.f64(double %x, metadata !"fpexcept.strict") #0
560   ret i64 %val
563 ; CHECK-LABEL: sitofp_f64_i32:
564 ; CHECK: scvtf d0, w0
565 define double @sitofp_f64_i32(i32 %x) #0 {
566   %val = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
567   ret double %val
570 ; CHECK-LABEL: uitofp_f64_i32:
571 ; CHECK: ucvtf d0, w0
572 define double @uitofp_f64_i32(i32 %x) #0 {
573   %val = call double @llvm.experimental.constrained.uitofp.f64.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
574   ret double %val
577 ; CHECK-LABEL: sitofp_f64_i64:
578 ; CHECK: scvtf d0, x0
579 define double @sitofp_f64_i64(i64 %x) #0 {
580   %val = call double @llvm.experimental.constrained.sitofp.f64.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
581   ret double %val
584 ; CHECK-LABEL: uitofp_f64_i64:
585 ; CHECK: ucvtf d0, x0
586 define double @uitofp_f64_i64(i64 %x) #0 {
587   %val = call double @llvm.experimental.constrained.uitofp.f64.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
588   ret double %val
591 ; CHECK-LABEL: sitofp_f64_i128:
592 ; CHECK: bl __floattidf
593 define double @sitofp_f64_i128(i128 %x) #0 {
594   %val = call double @llvm.experimental.constrained.sitofp.f64.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
595   ret double %val
598 ; CHECK-LABEL: uitofp_f64_i128:
599 ; CHECK: bl __floatuntidf
600 define double @uitofp_f64_i128(i128 %x) #0 {
601   %val = call double @llvm.experimental.constrained.uitofp.f64.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
602   ret double %val
605 ; CHECK-LABEL: sqrt_f64:
606 ; CHECK: fsqrt d0, d0
607 define double @sqrt_f64(double %x) #0 {
608   %val = call double @llvm.experimental.constrained.sqrt.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
609   ret double %val
612 ; CHECK-LABEL: powi_f64:
613 ; CHECK: bl __powidf2
614 define double @powi_f64(double %x, i32 %y) #0 {
615   %val = call double @llvm.experimental.constrained.powi.f64(double %x, i32 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
616   ret double %val
619 ; CHECK-LABEL: sin_f64:
620 ; CHECK: bl sin
621 define double @sin_f64(double %x) #0 {
622   %val = call double @llvm.experimental.constrained.sin.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
623   ret double %val
626 ; CHECK-LABEL: cos_f64:
627 ; CHECK: bl cos
628 define double @cos_f64(double %x) #0 {
629   %val = call double @llvm.experimental.constrained.cos.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
630   ret double %val
633 ; CHECK-LABEL: pow_f64:
634 ; CHECK: bl pow
635 define double @pow_f64(double %x, double %y) #0 {
636   %val = call double @llvm.experimental.constrained.pow.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
637   ret double %val
640 ; CHECK-LABEL: log_f64:
641 ; CHECK: bl log
642 define double @log_f64(double %x) #0 {
643   %val = call double @llvm.experimental.constrained.log.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
644   ret double %val
647 ; CHECK-LABEL: log10_f64:
648 ; CHECK: bl log10
649 define double @log10_f64(double %x) #0 {
650   %val = call double @llvm.experimental.constrained.log10.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
651   ret double %val
654 ; CHECK-LABEL: log2_f64:
655 ; CHECK: bl log2
656 define double @log2_f64(double %x) #0 {
657   %val = call double @llvm.experimental.constrained.log2.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
658   ret double %val
661 ; CHECK-LABEL: exp_f64:
662 ; CHECK: bl exp
663 define double @exp_f64(double %x) #0 {
664   %val = call double @llvm.experimental.constrained.exp.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
665   ret double %val
668 ; CHECK-LABEL: exp2_f64:
669 ; CHECK: bl exp2
670 define double @exp2_f64(double %x) #0 {
671   %val = call double @llvm.experimental.constrained.exp2.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
672   ret double %val
675 ; CHECK-LABEL: rint_f64:
676 ; CHECK: frintx d0, d0
677 define double @rint_f64(double %x) #0 {
678   %val = call double @llvm.experimental.constrained.rint.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
679   ret double %val
682 ; CHECK-LABEL: nearbyint_f64:
683 ; CHECK: frinti d0, d0
684 define double @nearbyint_f64(double %x) #0 {
685   %val = call double @llvm.experimental.constrained.nearbyint.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
686   ret double %val
689 ; CHECK-LABEL: lrint_f64:
690 ; CHECK: frintx [[REG:d[0-9]+]], d0
691 ; CHECK: fcvtzs w0, [[REG]]
692 define i32 @lrint_f64(double %x) #0 {
693   %val = call i32 @llvm.experimental.constrained.lrint.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
694   ret i32 %val
697 ; CHECK-LABEL: llrint_f64:
698 ; CHECK: frintx [[REG:d[0-9]+]], d0
699 ; CHECK: fcvtzs x0, [[REG]]
700 define i64 @llrint_f64(double %x) #0 {
701   %val = call i64 @llvm.experimental.constrained.llrint.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
702   ret i64 %val
705 ; CHECK-LABEL: maxnum_f64:
706 ; CHECK: fmaxnm d0, d0, d1
707 define double @maxnum_f64(double %x, double %y) #0 {
708   %val = call double @llvm.experimental.constrained.maxnum.f64(double %x, double %y, metadata !"fpexcept.strict") #0
709   ret double %val
712 ; CHECK-LABEL: minnum_f64:
713 ; CHECK: fminnm d0, d0, d1
714 define double @minnum_f64(double %x, double %y) #0 {
715   %val = call double @llvm.experimental.constrained.minnum.f64(double %x, double %y, metadata !"fpexcept.strict") #0
716   ret double %val
719 ; CHECK-LABEL: maximum_f64:
720 ; CHECK: fmax d0, d0, d1
721 define double @maximum_f64(double %x, double %y) #0 {
722   %val = call double @llvm.experimental.constrained.maximum.f64(double %x, double %y, metadata !"fpexcept.strict") #0
723   ret double %val
726 ; CHECK-LABEL: minimum_f64:
727 ; CHECK: fmin d0, d0, d1
728 define double @minimum_f64(double %x, double %y) #0 {
729   %val = call double @llvm.experimental.constrained.minimum.f64(double %x, double %y, metadata !"fpexcept.strict") #0
730   ret double %val
733 ; CHECK-LABEL: ceil_f64:
734 ; CHECK: frintp d0, d0
735 define double @ceil_f64(double %x) #0 {
736   %val = call double @llvm.experimental.constrained.ceil.f64(double %x, metadata !"fpexcept.strict") #0
737   ret double %val
740 ; CHECK-LABEL: floor_f64:
741 ; CHECK: frintm d0, d0
742 define double @floor_f64(double %x) #0 {
743   %val = call double @llvm.experimental.constrained.floor.f64(double %x, metadata !"fpexcept.strict") #0
744   ret double %val
747 ; CHECK-LABEL: lround_f64:
748 ; CHECK: fcvtas w0, d0
749 define i32 @lround_f64(double %x) #0 {
750   %val = call i32 @llvm.experimental.constrained.lround.f64(double %x, metadata !"fpexcept.strict") #0
751   ret i32 %val
754 ; CHECK-LABEL: llround_f64:
755 ; CHECK: fcvtas x0, d0
756 define i64 @llround_f64(double %x) #0 {
757   %val = call i64 @llvm.experimental.constrained.llround.f64(double %x, metadata !"fpexcept.strict") #0
758   ret i64 %val
761 ; CHECK-LABEL: round_f64:
762 ; CHECK: frinta d0, d0
763 define double @round_f64(double %x) #0 {
764   %val = call double @llvm.experimental.constrained.round.f64(double %x, metadata !"fpexcept.strict") #0
765   ret double %val
768 ; CHECK-LABEL: roundeven_f64:
769 ; CHECK: frintn d0, d0
770 define double @roundeven_f64(double %x) #0 {
771   %val = call double @llvm.experimental.constrained.roundeven.f64(double %x, metadata !"fpexcept.strict") #0
772   ret double %val
775 ; CHECK-LABEL: trunc_f64:
776 ; CHECK: frintz d0, d0
777 define double @trunc_f64(double %x) #0 {
778   %val = call double @llvm.experimental.constrained.trunc.f64(double %x, metadata !"fpexcept.strict") #0
779   ret double %val
782 ; CHECK-LABEL: fcmp_olt_f64:
783 ; CHECK: fcmp d0, d1
784 define i32 @fcmp_olt_f64(double %a, double %b) #0 {
785   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"olt", metadata !"fpexcept.strict") #0
786   %conv = zext i1 %cmp to i32
787   ret i32 %conv
790 ; CHECK-LABEL: fcmp_ole_f64:
791 ; CHECK: fcmp d0, d1
792 define i32 @fcmp_ole_f64(double %a, double %b) #0 {
793   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ole", metadata !"fpexcept.strict") #0
794   %conv = zext i1 %cmp to i32
795   ret i32 %conv
798 ; CHECK-LABEL: fcmp_ogt_f64:
799 ; CHECK: fcmp d0, d1
800 define i32 @fcmp_ogt_f64(double %a, double %b) #0 {
801   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ogt", metadata !"fpexcept.strict") #0
802   %conv = zext i1 %cmp to i32
803   ret i32 %conv
806 ; CHECK-LABEL: fcmp_oge_f64:
807 ; CHECK: fcmp d0, d1
808 define i32 @fcmp_oge_f64(double %a, double %b) #0 {
809   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"oge", metadata !"fpexcept.strict") #0
810   %conv = zext i1 %cmp to i32
811   ret i32 %conv
814 ; CHECK-LABEL: fcmp_oeq_f64:
815 ; CHECK: fcmp d0, d1
816 define i32 @fcmp_oeq_f64(double %a, double %b) #0 {
817   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.strict") #0
818   %conv = zext i1 %cmp to i32
819   ret i32 %conv
822 ; CHECK-LABEL: fcmp_one_f64:
823 ; CHECK: fcmp d0, d1
824 define i32 @fcmp_one_f64(double %a, double %b) #0 {
825   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"one", metadata !"fpexcept.strict") #0
826   %conv = zext i1 %cmp to i32
827   ret i32 %conv
830 ; CHECK-LABEL: fcmp_ult_f64:
831 ; CHECK: fcmp d0, d1
832 define i32 @fcmp_ult_f64(double %a, double %b) #0 {
833   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ult", metadata !"fpexcept.strict") #0
834   %conv = zext i1 %cmp to i32
835   ret i32 %conv
838 ; CHECK-LABEL: fcmp_ule_f64:
839 ; CHECK: fcmp d0, d1
840 define i32 @fcmp_ule_f64(double %a, double %b) #0 {
841   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ule", metadata !"fpexcept.strict") #0
842   %conv = zext i1 %cmp to i32
843   ret i32 %conv
846 ; CHECK-LABEL: fcmp_ugt_f64:
847 ; CHECK: fcmp d0, d1
848 define i32 @fcmp_ugt_f64(double %a, double %b) #0 {
849   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ugt", metadata !"fpexcept.strict") #0
850   %conv = zext i1 %cmp to i32
851   ret i32 %conv
854 ; CHECK-LABEL: fcmp_uge_f64:
855 ; CHECK: fcmp d0, d1
856 define i32 @fcmp_uge_f64(double %a, double %b) #0 {
857   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"uge", metadata !"fpexcept.strict") #0
858   %conv = zext i1 %cmp to i32
859   ret i32 %conv
862 ; CHECK-LABEL: fcmp_ueq_f64:
863 ; CHECK: fcmp d0, d1
864 define i32 @fcmp_ueq_f64(double %a, double %b) #0 {
865   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ueq", metadata !"fpexcept.strict") #0
866   %conv = zext i1 %cmp to i32
867   ret i32 %conv
870 ; CHECK-LABEL: fcmp_une_f64:
871 ; CHECK: fcmp d0, d1
872 define i32 @fcmp_une_f64(double %a, double %b) #0 {
873   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"une", metadata !"fpexcept.strict") #0
874   %conv = zext i1 %cmp to i32
875   ret i32 %conv
878 ; CHECK-LABEL: fcmps_olt_f64:
879 ; CHECK: fcmpe d0, d1
880 define i32 @fcmps_olt_f64(double %a, double %b) #0 {
881   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"olt", metadata !"fpexcept.strict") #0
882   %conv = zext i1 %cmp to i32
883   ret i32 %conv
886 ; CHECK-LABEL: fcmps_ole_f64:
887 ; CHECK: fcmpe d0, d1
888 define i32 @fcmps_ole_f64(double %a, double %b) #0 {
889   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ole", metadata !"fpexcept.strict") #0
890   %conv = zext i1 %cmp to i32
891   ret i32 %conv
894 ; CHECK-LABEL: fcmps_ogt_f64:
895 ; CHECK: fcmpe d0, d1
896 define i32 @fcmps_ogt_f64(double %a, double %b) #0 {
897   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ogt", metadata !"fpexcept.strict") #0
898   %conv = zext i1 %cmp to i32
899   ret i32 %conv
902 ; CHECK-LABEL: fcmps_oge_f64:
903 ; CHECK: fcmpe d0, d1
904 define i32 @fcmps_oge_f64(double %a, double %b) #0 {
905   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"oge", metadata !"fpexcept.strict") #0
906   %conv = zext i1 %cmp to i32
907   ret i32 %conv
910 ; CHECK-LABEL: fcmps_oeq_f64:
911 ; CHECK: fcmpe d0, d1
912 define i32 @fcmps_oeq_f64(double %a, double %b) #0 {
913   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.strict") #0
914   %conv = zext i1 %cmp to i32
915   ret i32 %conv
918 ; CHECK-LABEL: fcmps_one_f64:
919 ; CHECK: fcmpe d0, d1
920 define i32 @fcmps_one_f64(double %a, double %b) #0 {
921   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"one", metadata !"fpexcept.strict") #0
922   %conv = zext i1 %cmp to i32
923   ret i32 %conv
926 ; CHECK-LABEL: fcmps_ult_f64:
927 ; CHECK: fcmpe d0, d1
928 define i32 @fcmps_ult_f64(double %a, double %b) #0 {
929   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ult", metadata !"fpexcept.strict") #0
930   %conv = zext i1 %cmp to i32
931   ret i32 %conv
934 ; CHECK-LABEL: fcmps_ule_f64:
935 ; CHECK: fcmpe d0, d1
936 define i32 @fcmps_ule_f64(double %a, double %b) #0 {
937   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ule", metadata !"fpexcept.strict") #0
938   %conv = zext i1 %cmp to i32
939   ret i32 %conv
942 ; CHECK-LABEL: fcmps_ugt_f64:
943 ; CHECK: fcmpe d0, d1
944 define i32 @fcmps_ugt_f64(double %a, double %b) #0 {
945   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ugt", metadata !"fpexcept.strict") #0
946   %conv = zext i1 %cmp to i32
947   ret i32 %conv
950 ; CHECK-LABEL: fcmps_uge_f64:
951 ; CHECK: fcmpe d0, d1
952 define i32 @fcmps_uge_f64(double %a, double %b) #0 {
953   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"uge", metadata !"fpexcept.strict") #0
954   %conv = zext i1 %cmp to i32
955   ret i32 %conv
958 ; CHECK-LABEL: fcmps_ueq_f64:
959 ; CHECK: fcmpe d0, d1
960 define i32 @fcmps_ueq_f64(double %a, double %b) #0 {
961   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ueq", metadata !"fpexcept.strict") #0
962   %conv = zext i1 %cmp to i32
963   ret i32 %conv
966 ; CHECK-LABEL: fcmps_une_f64:
967 ; CHECK: fcmpe d0, d1
968 define i32 @fcmps_une_f64(double %a, double %b) #0 {
969   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"une", metadata !"fpexcept.strict") #0
970   %conv = zext i1 %cmp to i32
971   ret i32 %conv
975 ; Long-double-precision intrinsics
977 ; CHECK-LABEL: add_f128:
978 ; CHECK: bl __addtf3
979 define fp128 @add_f128(fp128 %x, fp128 %y) #0 {
980   %val = call fp128 @llvm.experimental.constrained.fadd.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
981   ret fp128 %val
984 ; CHECK-LABEL: sub_f128:
985 ; CHECK: bl __subtf3
986 define fp128 @sub_f128(fp128 %x, fp128 %y) #0 {
987   %val = call fp128 @llvm.experimental.constrained.fsub.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
988   ret fp128 %val
991 ; CHECK-LABEL: mul_f128:
992 ; CHECK: bl __multf3
993 define fp128 @mul_f128(fp128 %x, fp128 %y) #0 {
994   %val = call fp128 @llvm.experimental.constrained.fmul.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
995   ret fp128 %val
998 ; CHECK-LABEL: div_f128:
999 ; CHECK: bl __divtf3
1000 define fp128 @div_f128(fp128 %x, fp128 %y) #0 {
1001   %val = call fp128 @llvm.experimental.constrained.fdiv.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1002   ret fp128 %val
1005 ; CHECK-LABEL: frem_f128:
1006 ; CHECK: bl fmodl
1007 define fp128 @frem_f128(fp128 %x, fp128 %y) #0 {
1008   %val = call fp128 @llvm.experimental.constrained.frem.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1009   ret fp128 %val
1012 ; CHECK-LABEL: fma_f128:
1013 ; CHECK: fmal
1014 define fp128 @fma_f128(fp128 %x, fp128 %y, fp128 %z) #0 {
1015   %val = call fp128 @llvm.experimental.constrained.fma.f128(fp128 %x, fp128 %y, fp128 %z, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1016   ret fp128 %val
1019 ; CHECK-LABEL: fptosi_i32_f128:
1020 ; CHECK: bl __fixtfsi
1021 define i32 @fptosi_i32_f128(fp128 %x) #0 {
1022   %val = call i32 @llvm.experimental.constrained.fptosi.i32.f128(fp128 %x, metadata !"fpexcept.strict") #0
1023   ret i32 %val
1026 ; CHECK-LABEL: fptoui_i32_f128:
1027 ; CHECK: bl __fixunstfsi
1028 define i32 @fptoui_i32_f128(fp128 %x) #0 {
1029   %val = call i32 @llvm.experimental.constrained.fptoui.i32.f128(fp128 %x, metadata !"fpexcept.strict") #0
1030   ret i32 %val
1033 ; CHECK-LABEL: fptosi_i64_f128:
1034 ; CHECK: bl __fixtfdi
1035 define i64 @fptosi_i64_f128(fp128 %x) #0 {
1036   %val = call i64 @llvm.experimental.constrained.fptosi.i64.f128(fp128 %x, metadata !"fpexcept.strict") #0
1037   ret i64 %val
1040 ; CHECK-LABEL: fptoui_i64_f128:
1041 ; CHECK: bl __fixunstfdi
1042 define i64 @fptoui_i64_f128(fp128 %x) #0 {
1043   %val = call i64 @llvm.experimental.constrained.fptoui.i64.f128(fp128 %x, metadata !"fpexcept.strict") #0
1044   ret i64 %val
1047 ; CHECK-LABEL: sitofp_f128_i32:
1048 ; CHECK: bl __floatsitf
1049 define fp128 @sitofp_f128_i32(i32 %x) #0 {
1050   %val = call fp128 @llvm.experimental.constrained.sitofp.f128.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1051   ret fp128 %val
1054 ; CHECK-LABEL: uitofp_f128_i32:
1055 ; CHECK: bl __floatunsitf
1056 define fp128 @uitofp_f128_i32(i32 %x) #0 {
1057   %val = call fp128 @llvm.experimental.constrained.uitofp.f128.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1058   ret fp128 %val
1061 ; CHECK-LABEL: sitofp_f128_i64:
1062 ; CHECK: bl __floatditf
1063 define fp128 @sitofp_f128_i64(i64 %x) #0 {
1064   %val = call fp128 @llvm.experimental.constrained.sitofp.f128.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1065   ret fp128 %val
1068 ; CHECK-LABEL: uitofp_f128_i64:
1069 ; CHECK: bl __floatunditf
1070 define fp128 @uitofp_f128_i64(i64 %x) #0 {
1071   %val = call fp128 @llvm.experimental.constrained.uitofp.f128.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1072   ret fp128 %val
1075 ; CHECK-LABEL: sitofp_f128_i128:
1076 ; CHECK: bl __floattitf
1077 define fp128 @sitofp_f128_i128(i128 %x) #0 {
1078   %val = call fp128 @llvm.experimental.constrained.sitofp.f128.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1079   ret fp128 %val
1082 ; CHECK-LABEL: uitofp_f128_i128:
1083 ; CHECK: bl __floatuntitf
1084 define fp128 @uitofp_f128_i128(i128 %x) #0 {
1085   %val = call fp128 @llvm.experimental.constrained.uitofp.f128.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1086   ret fp128 %val
1089 ; CHECK-LABEL: sqrt_f128:
1090 ; CHECK: bl sqrtl
1091 define fp128 @sqrt_f128(fp128 %x) #0 {
1092   %val = call fp128 @llvm.experimental.constrained.sqrt.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1093   ret fp128 %val
1096 ; CHECK-LABEL: powi_f128:
1097 ; CHECK: bl __powitf2
1098 define fp128 @powi_f128(fp128 %x, i32 %y) #0 {
1099   %val = call fp128 @llvm.experimental.constrained.powi.f128(fp128 %x, i32 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1100   ret fp128 %val
1103 ; CHECK-LABEL: sin_f128:
1104 ; CHECK: bl sinl
1105 define fp128 @sin_f128(fp128 %x) #0 {
1106   %val = call fp128 @llvm.experimental.constrained.sin.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1107   ret fp128 %val
1110 ; CHECK-LABEL: cos_f128:
1111 ; CHECK: bl cosl
1112 define fp128 @cos_f128(fp128 %x) #0 {
1113   %val = call fp128 @llvm.experimental.constrained.cos.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1114   ret fp128 %val
1117 ; CHECK-LABEL: pow_f128:
1118 ; CHECK: bl powl
1119 define fp128 @pow_f128(fp128 %x, fp128 %y) #0 {
1120   %val = call fp128 @llvm.experimental.constrained.pow.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1121   ret fp128 %val
1124 ; CHECK-LABEL: log_f128:
1125 ; CHECK: bl logl
1126 define fp128 @log_f128(fp128 %x) #0 {
1127   %val = call fp128 @llvm.experimental.constrained.log.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1128   ret fp128 %val
1131 ; CHECK-LABEL: log10_f128:
1132 ; CHECK: bl log10l
1133 define fp128 @log10_f128(fp128 %x) #0 {
1134   %val = call fp128 @llvm.experimental.constrained.log10.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1135   ret fp128 %val
1138 ; CHECK-LABEL: log2_f128:
1139 ; CHECK: bl log2l
1140 define fp128 @log2_f128(fp128 %x) #0 {
1141   %val = call fp128 @llvm.experimental.constrained.log2.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1142   ret fp128 %val
1145 ; CHECK-LABEL: exp_f128:
1146 ; CHECK: bl expl
1147 define fp128 @exp_f128(fp128 %x) #0 {
1148   %val = call fp128 @llvm.experimental.constrained.exp.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1149   ret fp128 %val
1152 ; CHECK-LABEL: exp2_f128:
1153 ; CHECK: bl exp2l
1154 define fp128 @exp2_f128(fp128 %x) #0 {
1155   %val = call fp128 @llvm.experimental.constrained.exp2.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1156   ret fp128 %val
1159 ; CHECK-LABEL: rint_f128:
1160 ; CHECK: bl rintl
1161 define fp128 @rint_f128(fp128 %x) #0 {
1162   %val = call fp128 @llvm.experimental.constrained.rint.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1163   ret fp128 %val
1166 ; CHECK-LABEL: nearbyint_f128:
1167 ; CHECK: bl nearbyintl
1168 define fp128 @nearbyint_f128(fp128 %x) #0 {
1169   %val = call fp128 @llvm.experimental.constrained.nearbyint.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1170   ret fp128 %val
1173 ; CHECK-LABEL: lrint_f128:
1174 ; CHECK: bl lrintl
1175 define i32 @lrint_f128(fp128 %x) #0 {
1176   %val = call i32 @llvm.experimental.constrained.lrint.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1177   ret i32 %val
1180 ; CHECK-LABEL: llrint_f128:
1181 ; CHECK: bl llrintl
1182 define i64 @llrint_f128(fp128 %x) #0 {
1183   %val = call i64 @llvm.experimental.constrained.llrint.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1184   ret i64 %val
1187 ; CHECK-LABEL: maxnum_f128:
1188 ; CHECK: bl fmaxl
1189 define fp128 @maxnum_f128(fp128 %x, fp128 %y) #0 {
1190   %val = call fp128 @llvm.experimental.constrained.maxnum.f128(fp128 %x, fp128 %y, metadata !"fpexcept.strict") #0
1191   ret fp128 %val
1194 ; CHECK-LABEL: minnum_f128:
1195 ; CHECK: bl fminl
1196 define fp128 @minnum_f128(fp128 %x, fp128 %y) #0 {
1197   %val = call fp128 @llvm.experimental.constrained.minnum.f128(fp128 %x, fp128 %y, metadata !"fpexcept.strict") #0
1198   ret fp128 %val
1201 ; CHECK-LABEL: ceil_f128:
1202 ; CHECK: bl ceill
1203 define fp128 @ceil_f128(fp128 %x) #0 {
1204   %val = call fp128 @llvm.experimental.constrained.ceil.f128(fp128 %x, metadata !"fpexcept.strict") #0
1205   ret fp128 %val
1208 ; CHECK-LABEL: floor_f128:
1209 ; CHECK: bl floorl
1210 define fp128 @floor_f128(fp128 %x) #0 {
1211   %val = call fp128 @llvm.experimental.constrained.floor.f128(fp128 %x, metadata !"fpexcept.strict") #0
1212   ret fp128 %val
1215 ; CHECK-LABEL: lround_f128:
1216 ; CHECK: bl lroundl
1217 define i32 @lround_f128(fp128 %x) #0 {
1218   %val = call i32 @llvm.experimental.constrained.lround.f128(fp128 %x, metadata !"fpexcept.strict") #0
1219   ret i32 %val
1222 ; CHECK-LABEL: llround_f128:
1223 ; CHECK: bl llroundl
1224 define i64 @llround_f128(fp128 %x) #0 {
1225   %val = call i64 @llvm.experimental.constrained.llround.f128(fp128 %x, metadata !"fpexcept.strict") #0
1226   ret i64 %val
1229 ; CHECK-LABEL: round_f128:
1230 ; CHECK: bl roundl
1231 define fp128 @round_f128(fp128 %x) #0 {
1232   %val = call fp128 @llvm.experimental.constrained.round.f128(fp128 %x, metadata !"fpexcept.strict") #0
1233   ret fp128 %val
1236 ; CHECK-LABEL: trunc_f128:
1237 ; CHECK: bl truncl
1238 define fp128 @trunc_f128(fp128 %x) #0 {
1239   %val = call fp128 @llvm.experimental.constrained.trunc.f128(fp128 %x, metadata !"fpexcept.strict") #0
1240   ret fp128 %val
1243 ; CHECK-LABEL: fcmp_olt_f128:
1244 ; CHECK: bl __lttf2
1245 define i32 @fcmp_olt_f128(fp128 %a, fp128 %b) #0 {
1246   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0
1247   %conv = zext i1 %cmp to i32
1248   ret i32 %conv
1251 ; CHECK-LABEL: fcmp_ole_f128:
1252 ; CHECK: bl __letf2
1253 define i32 @fcmp_ole_f128(fp128 %a, fp128 %b) #0 {
1254   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0
1255   %conv = zext i1 %cmp to i32
1256   ret i32 %conv
1259 ; CHECK-LABEL: fcmp_ogt_f128:
1260 ; CHECK: bl __gttf2
1261 define i32 @fcmp_ogt_f128(fp128 %a, fp128 %b) #0 {
1262   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0
1263   %conv = zext i1 %cmp to i32
1264   ret i32 %conv
1267 ; CHECK-LABEL: fcmp_oge_f128:
1268 ; CHECK: bl __getf2
1269 define i32 @fcmp_oge_f128(fp128 %a, fp128 %b) #0 {
1270   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0
1271   %conv = zext i1 %cmp to i32
1272   ret i32 %conv
1275 ; CHECK-LABEL: fcmp_oeq_f128:
1276 ; CHECK: bl __eqtf2
1277 define i32 @fcmp_oeq_f128(fp128 %a, fp128 %b) #0 {
1278   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0
1279   %conv = zext i1 %cmp to i32
1280   ret i32 %conv
1283 ; CHECK-LABEL: fcmp_one_f128:
1284 ; CHECK: bl __eqtf2
1285 define i32 @fcmp_one_f128(fp128 %a, fp128 %b) #0 {
1286   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0
1287   %conv = zext i1 %cmp to i32
1288   ret i32 %conv
1291 ; CHECK-LABEL: fcmp_ult_f128:
1292 ; CHECK: bl __getf2
1293 define i32 @fcmp_ult_f128(fp128 %a, fp128 %b) #0 {
1294   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0
1295   %conv = zext i1 %cmp to i32
1296   ret i32 %conv
1299 ; CHECK-LABEL: fcmp_ule_f128:
1300 ; CHECK: bl __gttf2
1301 define i32 @fcmp_ule_f128(fp128 %a, fp128 %b) #0 {
1302   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0
1303   %conv = zext i1 %cmp to i32
1304   ret i32 %conv
1307 ; CHECK-LABEL: fcmp_ugt_f128:
1308 ; CHECK: bl __letf2
1309 define i32 @fcmp_ugt_f128(fp128 %a, fp128 %b) #0 {
1310   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0
1311   %conv = zext i1 %cmp to i32
1312   ret i32 %conv
1315 ; CHECK-LABEL: fcmp_uge_f128:
1316 ; CHECK: bl __lttf2
1317 define i32 @fcmp_uge_f128(fp128 %a, fp128 %b) #0 {
1318   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0
1319   %conv = zext i1 %cmp to i32
1320   ret i32 %conv
1323 ; CHECK-LABEL: fcmp_ueq_f128:
1324 ; CHECK: bl __eqtf2
1325 define i32 @fcmp_ueq_f128(fp128 %a, fp128 %b) #0 {
1326   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0
1327   %conv = zext i1 %cmp to i32
1328   ret i32 %conv
1331 ; CHECK-LABEL: fcmp_une_f128:
1332 ; CHECK: bl __netf2
1333 define i32 @fcmp_une_f128(fp128 %a, fp128 %b) #0 {
1334   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0
1335   %conv = zext i1 %cmp to i32
1336   ret i32 %conv
1339 ; CHECK-LABEL: fcmps_olt_f128:
1340 ; CHECK: bl __lttf2
1341 define i32 @fcmps_olt_f128(fp128 %a, fp128 %b) #0 {
1342   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0
1343   %conv = zext i1 %cmp to i32
1344   ret i32 %conv
1347 ; CHECK-LABEL: fcmps_ole_f128:
1348 ; CHECK: bl __letf2
1349 define i32 @fcmps_ole_f128(fp128 %a, fp128 %b) #0 {
1350   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0
1351   %conv = zext i1 %cmp to i32
1352   ret i32 %conv
1355 ; CHECK-LABEL: fcmps_ogt_f128:
1356 ; CHECK: bl __gttf2
1357 define i32 @fcmps_ogt_f128(fp128 %a, fp128 %b) #0 {
1358   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0
1359   %conv = zext i1 %cmp to i32
1360   ret i32 %conv
1363 ; CHECK-LABEL: fcmps_oge_f128:
1364 ; CHECK: bl __getf2
1365 define i32 @fcmps_oge_f128(fp128 %a, fp128 %b) #0 {
1366   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0
1367   %conv = zext i1 %cmp to i32
1368   ret i32 %conv
1371 ; CHECK-LABEL: fcmps_oeq_f128:
1372 ; CHECK: bl __eqtf2
1373 define i32 @fcmps_oeq_f128(fp128 %a, fp128 %b) #0 {
1374   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0
1375   %conv = zext i1 %cmp to i32
1376   ret i32 %conv
1379 ; CHECK-LABEL: fcmps_one_f128:
1380 ; CHECK: bl __eqtf2
1381 define i32 @fcmps_one_f128(fp128 %a, fp128 %b) #0 {
1382   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0
1383   %conv = zext i1 %cmp to i32
1384   ret i32 %conv
1387 ; CHECK-LABEL: fcmps_ult_f128:
1388 ; CHECK: bl __getf2
1389 define i32 @fcmps_ult_f128(fp128 %a, fp128 %b) #0 {
1390   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0
1391   %conv = zext i1 %cmp to i32
1392   ret i32 %conv
1395 ; CHECK-LABEL: fcmps_ule_f128:
1396 ; CHECK: bl __gttf2
1397 define i32 @fcmps_ule_f128(fp128 %a, fp128 %b) #0 {
1398   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0
1399   %conv = zext i1 %cmp to i32
1400   ret i32 %conv
1403 ; CHECK-LABEL: fcmps_ugt_f128:
1404 ; CHECK: bl __letf2
1405 define i32 @fcmps_ugt_f128(fp128 %a, fp128 %b) #0 {
1406   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0
1407   %conv = zext i1 %cmp to i32
1408   ret i32 %conv
1411 ; CHECK-LABEL: fcmps_uge_f128:
1412 ; CHECK: bl __lttf2
1413 define i32 @fcmps_uge_f128(fp128 %a, fp128 %b) #0 {
1414   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0
1415   %conv = zext i1 %cmp to i32
1416   ret i32 %conv
1419 ; CHECK-LABEL: fcmps_ueq_f128:
1420 ; CHECK: bl __eqtf2
1421 define i32 @fcmps_ueq_f128(fp128 %a, fp128 %b) #0 {
1422   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0
1423   %conv = zext i1 %cmp to i32
1424   ret i32 %conv
1427 ; CHECK-LABEL: fcmps_une_f128:
1428 ; CHECK: bl __netf2
1429 define i32 @fcmps_une_f128(fp128 %a, fp128 %b) #0 {
1430   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0
1431   %conv = zext i1 %cmp to i32
1432   ret i32 %conv
1436 ; Intrinsics to convert between floating-point types
1438 ; CHECK-LABEL: fptrunc_f32_f64:
1439 ; CHECK: fcvt s0, d0
1440 define float @fptrunc_f32_f64(double %x) #0 {
1441   %val = call float @llvm.experimental.constrained.fptrunc.f32.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1442   ret float %val
1445 ; CHECK-LABEL: fptrunc_f32_f128:
1446 ; CHECK: bl __trunctfsf2
1447 define float @fptrunc_f32_f128(fp128 %x) #0 {
1448   %val = call float @llvm.experimental.constrained.fptrunc.f32.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1449   ret float %val
1452 ; CHECK-LABEL: fptrunc_f64_f128:
1453 ; CHECK: bl __trunctfdf2
1454 define double @fptrunc_f64_f128(fp128 %x) #0 {
1455   %val = call double @llvm.experimental.constrained.fptrunc.f64.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1456   ret double %val
1459 ; CHECK-LABEL: fpext_f64_f32:
1460 ; CHECK: fcvt d0, s0
1461 define double @fpext_f64_f32(float %x) #0 {
1462   %val = call double @llvm.experimental.constrained.fpext.f64.f32(float %x, metadata !"fpexcept.strict") #0
1463   ret double %val
1466 ; CHECK-LABEL: fpext_f128_f32:
1467 ; CHECK: bl __extendsftf2
1468 define fp128 @fpext_f128_f32(float %x) #0 {
1469   %val = call fp128 @llvm.experimental.constrained.fpext.f128.f32(float %x, metadata !"fpexcept.strict") #0
1470   ret fp128 %val
1473 ; CHECK-LABEL: fpext_f128_f64:
1474 ; CHECK: bl __extenddftf2
1475 define fp128 @fpext_f128_f64(double %x) #0 {
1476   %val = call fp128 @llvm.experimental.constrained.fpext.f128.f64(double %x, metadata !"fpexcept.strict") #0
1477   ret fp128 %val
1481 attributes #0 = { strictfp }
1483 declare float @llvm.experimental.constrained.fadd.f32(float, float, metadata, metadata)
1484 declare float @llvm.experimental.constrained.fsub.f32(float, float, metadata, metadata)
1485 declare float @llvm.experimental.constrained.fmul.f32(float, float, metadata, metadata)
1486 declare float @llvm.experimental.constrained.fdiv.f32(float, float, metadata, metadata)
1487 declare float @llvm.experimental.constrained.frem.f32(float, float, metadata, metadata)
1488 declare float @llvm.experimental.constrained.fma.f32(float, float, float, metadata, metadata)
1489 declare i32 @llvm.experimental.constrained.fptosi.i32.f32(float, metadata)
1490 declare i32 @llvm.experimental.constrained.fptoui.i32.f32(float, metadata)
1491 declare i64 @llvm.experimental.constrained.fptosi.i64.f32(float, metadata)
1492 declare i64 @llvm.experimental.constrained.fptoui.i64.f32(float, metadata)
1493 declare float @llvm.experimental.constrained.sitofp.f32.i32(i32, metadata, metadata)
1494 declare float @llvm.experimental.constrained.uitofp.f32.i32(i32, metadata, metadata)
1495 declare float @llvm.experimental.constrained.sitofp.f32.i64(i64, metadata, metadata)
1496 declare float @llvm.experimental.constrained.uitofp.f32.i64(i64, metadata, metadata)
1497 declare float @llvm.experimental.constrained.sitofp.f32.i128(i128, metadata, metadata)
1498 declare float @llvm.experimental.constrained.uitofp.f32.i128(i128, metadata, metadata)
1499 declare float @llvm.experimental.constrained.sqrt.f32(float, metadata, metadata)
1500 declare float @llvm.experimental.constrained.powi.f32(float, i32, metadata, metadata)
1501 declare float @llvm.experimental.constrained.sin.f32(float, metadata, metadata)
1502 declare float @llvm.experimental.constrained.cos.f32(float, metadata, metadata)
1503 declare float @llvm.experimental.constrained.pow.f32(float, float, metadata, metadata)
1504 declare float @llvm.experimental.constrained.log.f32(float, metadata, metadata)
1505 declare float @llvm.experimental.constrained.log10.f32(float, metadata, metadata)
1506 declare float @llvm.experimental.constrained.log2.f32(float, metadata, metadata)
1507 declare float @llvm.experimental.constrained.exp.f32(float, metadata, metadata)
1508 declare float @llvm.experimental.constrained.exp2.f32(float, metadata, metadata)
1509 declare float @llvm.experimental.constrained.rint.f32(float, metadata, metadata)
1510 declare float @llvm.experimental.constrained.nearbyint.f32(float, metadata, metadata)
1511 declare i32 @llvm.experimental.constrained.lrint.f32(float, metadata, metadata)
1512 declare i64 @llvm.experimental.constrained.llrint.f32(float, metadata, metadata)
1513 declare float @llvm.experimental.constrained.maxnum.f32(float, float, metadata)
1514 declare float @llvm.experimental.constrained.minnum.f32(float, float, metadata)
1515 declare float @llvm.experimental.constrained.maximum.f32(float, float, metadata)
1516 declare float @llvm.experimental.constrained.minimum.f32(float, float, metadata)
1517 declare float @llvm.experimental.constrained.ceil.f32(float, metadata)
1518 declare float @llvm.experimental.constrained.floor.f32(float, metadata)
1519 declare i32 @llvm.experimental.constrained.lround.f32(float, metadata)
1520 declare i64 @llvm.experimental.constrained.llround.f32(float, metadata)
1521 declare float @llvm.experimental.constrained.round.f32(float, metadata)
1522 declare float @llvm.experimental.constrained.roundeven.f32(float, metadata)
1523 declare float @llvm.experimental.constrained.trunc.f32(float, metadata)
1524 declare i1 @llvm.experimental.constrained.fcmps.f32(float, float, metadata, metadata)
1525 declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata)
1527 declare double @llvm.experimental.constrained.fadd.f64(double, double, metadata, metadata)
1528 declare double @llvm.experimental.constrained.fsub.f64(double, double, metadata, metadata)
1529 declare double @llvm.experimental.constrained.fmul.f64(double, double, metadata, metadata)
1530 declare double @llvm.experimental.constrained.fdiv.f64(double, double, metadata, metadata)
1531 declare double @llvm.experimental.constrained.frem.f64(double, double, metadata, metadata)
1532 declare double @llvm.experimental.constrained.fma.f64(double, double, double, metadata, metadata)
1533 declare i32 @llvm.experimental.constrained.fptosi.i32.f64(double, metadata)
1534 declare i32 @llvm.experimental.constrained.fptoui.i32.f64(double, metadata)
1535 declare i64 @llvm.experimental.constrained.fptosi.i64.f64(double, metadata)
1536 declare i64 @llvm.experimental.constrained.fptoui.i64.f64(double, metadata)
1537 declare double @llvm.experimental.constrained.sitofp.f64.i32(i32, metadata, metadata)
1538 declare double @llvm.experimental.constrained.uitofp.f64.i32(i32, metadata, metadata)
1539 declare double @llvm.experimental.constrained.sitofp.f64.i64(i64, metadata, metadata)
1540 declare double @llvm.experimental.constrained.uitofp.f64.i64(i64, metadata, metadata)
1541 declare double @llvm.experimental.constrained.sitofp.f64.i128(i128, metadata, metadata)
1542 declare double @llvm.experimental.constrained.uitofp.f64.i128(i128, metadata, metadata)
1543 declare double @llvm.experimental.constrained.sqrt.f64(double, metadata, metadata)
1544 declare double @llvm.experimental.constrained.powi.f64(double, i32, metadata, metadata)
1545 declare double @llvm.experimental.constrained.sin.f64(double, metadata, metadata)
1546 declare double @llvm.experimental.constrained.cos.f64(double, metadata, metadata)
1547 declare double @llvm.experimental.constrained.pow.f64(double, double, metadata, metadata)
1548 declare double @llvm.experimental.constrained.log.f64(double, metadata, metadata)
1549 declare double @llvm.experimental.constrained.log10.f64(double, metadata, metadata)
1550 declare double @llvm.experimental.constrained.log2.f64(double, metadata, metadata)
1551 declare double @llvm.experimental.constrained.exp.f64(double, metadata, metadata)
1552 declare double @llvm.experimental.constrained.exp2.f64(double, metadata, metadata)
1553 declare double @llvm.experimental.constrained.rint.f64(double, metadata, metadata)
1554 declare double @llvm.experimental.constrained.nearbyint.f64(double, metadata, metadata)
1555 declare i32 @llvm.experimental.constrained.lrint.f64(double, metadata, metadata)
1556 declare i64 @llvm.experimental.constrained.llrint.f64(double, metadata, metadata)
1557 declare double @llvm.experimental.constrained.maxnum.f64(double, double, metadata)
1558 declare double @llvm.experimental.constrained.minnum.f64(double, double, metadata)
1559 declare double @llvm.experimental.constrained.maximum.f64(double, double, metadata)
1560 declare double @llvm.experimental.constrained.minimum.f64(double, double, metadata)
1561 declare double @llvm.experimental.constrained.ceil.f64(double, metadata)
1562 declare double @llvm.experimental.constrained.floor.f64(double, metadata)
1563 declare i32 @llvm.experimental.constrained.lround.f64(double, metadata)
1564 declare i64 @llvm.experimental.constrained.llround.f64(double, metadata)
1565 declare double @llvm.experimental.constrained.round.f64(double, metadata)
1566 declare double @llvm.experimental.constrained.roundeven.f64(double, metadata)
1567 declare double @llvm.experimental.constrained.trunc.f64(double, metadata)
1568 declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)
1569 declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)
1571 declare fp128 @llvm.experimental.constrained.fadd.f128(fp128, fp128, metadata, metadata)
1572 declare fp128 @llvm.experimental.constrained.fsub.f128(fp128, fp128, metadata, metadata)
1573 declare fp128 @llvm.experimental.constrained.fmul.f128(fp128, fp128, metadata, metadata)
1574 declare fp128 @llvm.experimental.constrained.fdiv.f128(fp128, fp128, metadata, metadata)
1575 declare fp128 @llvm.experimental.constrained.frem.f128(fp128, fp128, metadata, metadata)
1576 declare fp128 @llvm.experimental.constrained.fma.f128(fp128, fp128, fp128, metadata, metadata)
1577 declare i32 @llvm.experimental.constrained.fptosi.i32.f128(fp128, metadata)
1578 declare i32 @llvm.experimental.constrained.fptoui.i32.f128(fp128, metadata)
1579 declare i64 @llvm.experimental.constrained.fptosi.i64.f128(fp128, metadata)
1580 declare i64 @llvm.experimental.constrained.fptoui.i64.f128(fp128, metadata)
1581 declare fp128 @llvm.experimental.constrained.sitofp.f128.i32(i32, metadata, metadata)
1582 declare fp128 @llvm.experimental.constrained.uitofp.f128.i32(i32, metadata, metadata)
1583 declare fp128 @llvm.experimental.constrained.sitofp.f128.i64(i64, metadata, metadata)
1584 declare fp128 @llvm.experimental.constrained.uitofp.f128.i64(i64, metadata, metadata)
1585 declare fp128 @llvm.experimental.constrained.sitofp.f128.i128(i128, metadata, metadata)
1586 declare fp128 @llvm.experimental.constrained.uitofp.f128.i128(i128, metadata, metadata)
1587 declare fp128 @llvm.experimental.constrained.sqrt.f128(fp128, metadata, metadata)
1588 declare fp128 @llvm.experimental.constrained.powi.f128(fp128, i32, metadata, metadata)
1589 declare fp128 @llvm.experimental.constrained.sin.f128(fp128, metadata, metadata)
1590 declare fp128 @llvm.experimental.constrained.cos.f128(fp128, metadata, metadata)
1591 declare fp128 @llvm.experimental.constrained.pow.f128(fp128, fp128, metadata, metadata)
1592 declare fp128 @llvm.experimental.constrained.log.f128(fp128, metadata, metadata)
1593 declare fp128 @llvm.experimental.constrained.log10.f128(fp128, metadata, metadata)
1594 declare fp128 @llvm.experimental.constrained.log2.f128(fp128, metadata, metadata)
1595 declare fp128 @llvm.experimental.constrained.exp.f128(fp128, metadata, metadata)
1596 declare fp128 @llvm.experimental.constrained.exp2.f128(fp128, metadata, metadata)
1597 declare fp128 @llvm.experimental.constrained.rint.f128(fp128, metadata, metadata)
1598 declare fp128 @llvm.experimental.constrained.nearbyint.f128(fp128, metadata, metadata)
1599 declare i32 @llvm.experimental.constrained.lrint.f128(fp128, metadata, metadata)
1600 declare i64 @llvm.experimental.constrained.llrint.f128(fp128, metadata, metadata)
1601 declare fp128 @llvm.experimental.constrained.maxnum.f128(fp128, fp128, metadata)
1602 declare fp128 @llvm.experimental.constrained.minnum.f128(fp128, fp128, metadata)
1603 declare fp128 @llvm.experimental.constrained.ceil.f128(fp128, metadata)
1604 declare fp128 @llvm.experimental.constrained.floor.f128(fp128, metadata)
1605 declare i32 @llvm.experimental.constrained.lround.f128(fp128, metadata)
1606 declare i64 @llvm.experimental.constrained.llround.f128(fp128, metadata)
1607 declare fp128 @llvm.experimental.constrained.round.f128(fp128, metadata)
1608 declare fp128 @llvm.experimental.constrained.trunc.f128(fp128, metadata)
1609 declare i1 @llvm.experimental.constrained.fcmps.f128(fp128, fp128, metadata, metadata)
1610 declare i1 @llvm.experimental.constrained.fcmp.f128(fp128, fp128, metadata, metadata)
1612 declare float @llvm.experimental.constrained.fptrunc.f32.f64(double, metadata, metadata)
1613 declare float @llvm.experimental.constrained.fptrunc.f32.f128(fp128, metadata, metadata)
1614 declare double @llvm.experimental.constrained.fptrunc.f64.f128(fp128, metadata, metadata)
1615 declare double @llvm.experimental.constrained.fpext.f64.f32(float, metadata)
1616 declare fp128 @llvm.experimental.constrained.fpext.f128.f32(float, metadata)
1617 declare fp128 @llvm.experimental.constrained.fpext.f128.f64(double, metadata)