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
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
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
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
37 ; CHECK-LABEL: frem_f32:
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
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
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
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
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
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
79 ; CHECK-LABEL: sitofp_f32_i32:
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
86 ; CHECK-LABEL: uitofp_f32_i32:
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
93 ; CHECK-LABEL: sitofp_f32_i64:
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
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
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
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
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
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
135 ; CHECK-LABEL: sin_f32:
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
142 ; CHECK-LABEL: cos_f32:
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
149 ; CHECK-LABEL: pow_f32:
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
156 ; CHECK-LABEL: log_f32:
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
163 ; CHECK-LABEL: log10_f32:
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
170 ; CHECK-LABEL: log2_f32:
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
177 ; CHECK-LABEL: exp_f32:
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
184 ; CHECK-LABEL: exp2_f32:
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
298 ; CHECK-LABEL: fcmp_olt_f32:
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
306 ; CHECK-LABEL: fcmp_ole_f32:
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
314 ; CHECK-LABEL: fcmp_ogt_f32:
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
322 ; CHECK-LABEL: fcmp_oge_f32:
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
330 ; CHECK-LABEL: fcmp_oeq_f32:
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
338 ; CHECK-LABEL: fcmp_one_f32:
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
346 ; CHECK-LABEL: fcmp_ult_f32:
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
354 ; CHECK-LABEL: fcmp_ule_f32:
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
362 ; CHECK-LABEL: fcmp_ugt_f32:
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
370 ; CHECK-LABEL: fcmp_uge_f32:
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
378 ; CHECK-LABEL: fcmp_ueq_f32:
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
386 ; CHECK-LABEL: fcmp_une_f32:
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
521 ; CHECK-LABEL: frem_f64:
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
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
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
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
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
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
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
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
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
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
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
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
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
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
619 ; CHECK-LABEL: sin_f64:
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
626 ; CHECK-LABEL: cos_f64:
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
633 ; CHECK-LABEL: pow_f64:
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
640 ; CHECK-LABEL: log_f64:
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
647 ; CHECK-LABEL: log10_f64:
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
654 ; CHECK-LABEL: log2_f64:
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
661 ; CHECK-LABEL: exp_f64:
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
668 ; CHECK-LABEL: exp2_f64:
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
782 ; CHECK-LABEL: fcmp_olt_f64:
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
790 ; CHECK-LABEL: fcmp_ole_f64:
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
798 ; CHECK-LABEL: fcmp_ogt_f64:
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
806 ; CHECK-LABEL: fcmp_oge_f64:
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
814 ; CHECK-LABEL: fcmp_oeq_f64:
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
822 ; CHECK-LABEL: fcmp_one_f64:
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
830 ; CHECK-LABEL: fcmp_ult_f64:
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
838 ; CHECK-LABEL: fcmp_ule_f64:
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
846 ; CHECK-LABEL: fcmp_ugt_f64:
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
854 ; CHECK-LABEL: fcmp_uge_f64:
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
862 ; CHECK-LABEL: fcmp_ueq_f64:
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
870 ; CHECK-LABEL: fcmp_une_f64:
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
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
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
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
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
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
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
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
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
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
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
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
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
975 ; Long-double-precision intrinsics
977 ; CHECK-LABEL: add_f128:
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
984 ; CHECK-LABEL: sub_f128:
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
991 ; CHECK-LABEL: mul_f128:
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
998 ; CHECK-LABEL: div_f128:
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
1005 ; CHECK-LABEL: frem_f128:
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
1012 ; CHECK-LABEL: fma_f128:
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
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
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
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
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
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
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
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
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
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
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
1089 ; CHECK-LABEL: sqrt_f128:
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
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
1103 ; CHECK-LABEL: sin_f128:
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
1110 ; CHECK-LABEL: cos_f128:
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
1117 ; CHECK-LABEL: pow_f128:
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
1124 ; CHECK-LABEL: log_f128:
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
1131 ; CHECK-LABEL: log10_f128:
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
1138 ; CHECK-LABEL: log2_f128:
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
1145 ; CHECK-LABEL: exp_f128:
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
1152 ; CHECK-LABEL: exp2_f128:
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
1159 ; CHECK-LABEL: rint_f128:
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
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
1173 ; CHECK-LABEL: lrint_f128:
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
1180 ; CHECK-LABEL: llrint_f128:
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
1187 ; CHECK-LABEL: maxnum_f128:
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
1194 ; CHECK-LABEL: minnum_f128:
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
1201 ; CHECK-LABEL: ceil_f128:
1203 define fp128 @ceil_f128(fp128 %x) #0 {
1204 %val = call fp128 @llvm.experimental.constrained.ceil.f128(fp128 %x, metadata !"fpexcept.strict") #0
1208 ; CHECK-LABEL: floor_f128:
1210 define fp128 @floor_f128(fp128 %x) #0 {
1211 %val = call fp128 @llvm.experimental.constrained.floor.f128(fp128 %x, metadata !"fpexcept.strict") #0
1215 ; CHECK-LABEL: lround_f128:
1217 define i32 @lround_f128(fp128 %x) #0 {
1218 %val = call i32 @llvm.experimental.constrained.lround.f128(fp128 %x, metadata !"fpexcept.strict") #0
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
1229 ; CHECK-LABEL: round_f128:
1231 define fp128 @round_f128(fp128 %x) #0 {
1232 %val = call fp128 @llvm.experimental.constrained.round.f128(fp128 %x, metadata !"fpexcept.strict") #0
1236 ; CHECK-LABEL: trunc_f128:
1238 define fp128 @trunc_f128(fp128 %x) #0 {
1239 %val = call fp128 @llvm.experimental.constrained.trunc.f128(fp128 %x, metadata !"fpexcept.strict") #0
1243 ; CHECK-LABEL: fcmp_olt_f128:
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
1251 ; CHECK-LABEL: fcmp_ole_f128:
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
1259 ; CHECK-LABEL: fcmp_ogt_f128:
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
1267 ; CHECK-LABEL: fcmp_oge_f128:
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
1275 ; CHECK-LABEL: fcmp_oeq_f128:
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
1283 ; CHECK-LABEL: fcmp_one_f128:
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
1291 ; CHECK-LABEL: fcmp_ult_f128:
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
1299 ; CHECK-LABEL: fcmp_ule_f128:
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
1307 ; CHECK-LABEL: fcmp_ugt_f128:
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
1315 ; CHECK-LABEL: fcmp_uge_f128:
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
1323 ; CHECK-LABEL: fcmp_ueq_f128:
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
1331 ; CHECK-LABEL: fcmp_une_f128:
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
1339 ; CHECK-LABEL: fcmps_olt_f128:
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
1347 ; CHECK-LABEL: fcmps_ole_f128:
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
1355 ; CHECK-LABEL: fcmps_ogt_f128:
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
1363 ; CHECK-LABEL: fcmps_oge_f128:
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
1371 ; CHECK-LABEL: fcmps_oeq_f128:
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
1379 ; CHECK-LABEL: fcmps_one_f128:
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
1387 ; CHECK-LABEL: fcmps_ult_f128:
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
1395 ; CHECK-LABEL: fcmps_ule_f128:
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
1403 ; CHECK-LABEL: fcmps_ugt_f128:
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
1411 ; CHECK-LABEL: fcmps_uge_f128:
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
1419 ; CHECK-LABEL: fcmps_ueq_f128:
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
1427 ; CHECK-LABEL: fcmps_une_f128:
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
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
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
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
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
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
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
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)