brintos

brintos / llvm-project-archived public Read only

0
0
Text · 51.2 KiB · 86029a7 Raw
1385 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64 %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-NOFP163; RUN: llc -mtriple=aarch64 -mattr=+fullfp16 %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-FP164; RUN: llc -mtriple=aarch64 -global-isel=true -global-isel-abort=2 %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI5; RUN: llc -mtriple=aarch64 -global-isel=true -global-isel-abort=2 -mattr=+fullfp16 %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI6 7; CHECK-GI:       warning: Instruction selection used fallback path for add_f168; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sub_f169; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for mul_f1610; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for div_f1611; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for frem_f1612; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fma_f1613; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptosi_i32_f1614; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptoui_i32_f1615; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptosi_i64_f1616; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptoui_i64_f1617; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_f16_i3218; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_f16_i3219; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_f16_i6420; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_f16_i6421; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_f16_i12822; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_f16_i12823; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrt_f1624; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for powi_f1625; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sin_f1626; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for cos_f1627; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for tan_f1628; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for asin_f1629; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for acos_f1630; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for atan_f1631; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for atan2_f1632; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sinh_f1633; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for cosh_f1634; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for tanh_f1635; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for pow_f1636; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for log_f1637; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for log10_f1638; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for log2_f1639; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for exp_f1640; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for exp2_f1641; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for rint_f1642; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for nearbyint_f1643; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for lrint_f1644; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for llrint_f1645; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for maxnum_f1646; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for minnum_f1647; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for ceil_f1648; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for floor_f1649; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for lround_f1650; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for llround_f1651; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for round_f1652; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for roundeven_f1653; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for trunc_f1654; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for ldexp_f1655; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_olt_f1656; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ole_f1657; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ogt_f1658; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_oge_f1659; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_oeq_f1660; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_one_f1661; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ult_f1662; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ule_f1663; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ugt_f1664; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_uge_f1665; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ueq_f1666; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_une_f1667; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_olt_f1668; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ole_f1669; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ogt_f1670; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_oge_f1671; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_oeq_f1672; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_one_f1673; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ult_f1674; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ule_f1675; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ugt_f1676; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_uge_f1677; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ueq_f1678; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_une_f1679; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptrunc_f16_f3280; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fpext_f32_f1681 82; Check that constrained fp intrinsics are correctly lowered.83 84; Half-precision intrinsics85 86define half @add_f16(half %x, half %y) #0 {87; CHECK-NOFP16-LABEL: add_f16:88; CHECK-NOFP16:       // %bb.0:89; CHECK-NOFP16-NEXT:    fcvt s1, h190; CHECK-NOFP16-NEXT:    fcvt s0, h091; CHECK-NOFP16-NEXT:    fadd s0, s0, s192; CHECK-NOFP16-NEXT:    fcvt h0, s093; CHECK-NOFP16-NEXT:    ret94;95; CHECK-FP16-LABEL: add_f16:96; CHECK-FP16:       // %bb.0:97; CHECK-FP16-NEXT:    fadd h0, h0, h198; CHECK-FP16-NEXT:    ret99  %val = call half @llvm.experimental.constrained.fadd.f16(half %x, half %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0100  ret half %val101}102 103define half @sub_f16(half %x, half %y) #0 {104; CHECK-NOFP16-LABEL: sub_f16:105; CHECK-NOFP16:       // %bb.0:106; CHECK-NOFP16-NEXT:    fcvt s1, h1107; CHECK-NOFP16-NEXT:    fcvt s0, h0108; CHECK-NOFP16-NEXT:    fsub s0, s0, s1109; CHECK-NOFP16-NEXT:    fcvt h0, s0110; CHECK-NOFP16-NEXT:    ret111;112; CHECK-FP16-LABEL: sub_f16:113; CHECK-FP16:       // %bb.0:114; CHECK-FP16-NEXT:    fsub h0, h0, h1115; CHECK-FP16-NEXT:    ret116  %val = call half @llvm.experimental.constrained.fsub.f16(half %x, half %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0117  ret half %val118}119 120define half @mul_f16(half %x, half %y) #0 {121; CHECK-NOFP16-LABEL: mul_f16:122; CHECK-NOFP16:       // %bb.0:123; CHECK-NOFP16-NEXT:    fcvt s1, h1124; CHECK-NOFP16-NEXT:    fcvt s0, h0125; CHECK-NOFP16-NEXT:    fmul s0, s0, s1126; CHECK-NOFP16-NEXT:    fcvt h0, s0127; CHECK-NOFP16-NEXT:    ret128;129; CHECK-FP16-LABEL: mul_f16:130; CHECK-FP16:       // %bb.0:131; CHECK-FP16-NEXT:    fmul h0, h0, h1132; CHECK-FP16-NEXT:    ret133  %val = call half @llvm.experimental.constrained.fmul.f16(half %x, half %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0134  ret half %val135}136 137define half @div_f16(half %x, half %y) #0 {138; CHECK-NOFP16-LABEL: div_f16:139; CHECK-NOFP16:       // %bb.0:140; CHECK-NOFP16-NEXT:    fcvt s1, h1141; CHECK-NOFP16-NEXT:    fcvt s0, h0142; CHECK-NOFP16-NEXT:    fdiv s0, s0, s1143; CHECK-NOFP16-NEXT:    fcvt h0, s0144; CHECK-NOFP16-NEXT:    ret145;146; CHECK-FP16-LABEL: div_f16:147; CHECK-FP16:       // %bb.0:148; CHECK-FP16-NEXT:    fdiv h0, h0, h1149; CHECK-FP16-NEXT:    ret150  %val = call half @llvm.experimental.constrained.fdiv.f16(half %x, half %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0151  ret half %val152}153 154define half @frem_f16(half %x, half %y) #0 {155; CHECK-LABEL: frem_f16:156; CHECK:       // %bb.0:157; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill158; CHECK-NEXT:    .cfi_def_cfa_offset 16159; CHECK-NEXT:    .cfi_offset w30, -16160; CHECK-NEXT:    fcvt s1, h1161; CHECK-NEXT:    fcvt s0, h0162; CHECK-NEXT:    bl fmodf163; CHECK-NEXT:    fcvt h0, s0164; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload165; CHECK-NEXT:    ret166  %val = call half @llvm.experimental.constrained.frem.f16(half %x, half %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0167  ret half %val168}169 170define half @fma_f16(half %x, half %y, half %z) #0 {171; CHECK-NOFP16-LABEL: fma_f16:172; CHECK-NOFP16:       // %bb.0:173; CHECK-NOFP16-NEXT:    fcvt s2, h2174; CHECK-NOFP16-NEXT:    fcvt s1, h1175; CHECK-NOFP16-NEXT:    fcvt s0, h0176; CHECK-NOFP16-NEXT:    fmadd s0, s0, s1, s2177; CHECK-NOFP16-NEXT:    fcvt h0, s0178; CHECK-NOFP16-NEXT:    ret179;180; CHECK-FP16-LABEL: fma_f16:181; CHECK-FP16:       // %bb.0:182; CHECK-FP16-NEXT:    fmadd h0, h0, h1, h2183; CHECK-FP16-NEXT:    ret184  %val = call half @llvm.experimental.constrained.fma.f16(half %x, half %y, half %z, metadata !"round.tonearest", metadata !"fpexcept.strict") #0185  ret half %val186}187 188define i32 @fptosi_i32_f16(half %x) #0 {189; CHECK-NOFP16-LABEL: fptosi_i32_f16:190; CHECK-NOFP16:       // %bb.0:191; CHECK-NOFP16-NEXT:    fcvt s0, h0192; CHECK-NOFP16-NEXT:    fcvtzs w0, s0193; CHECK-NOFP16-NEXT:    ret194;195; CHECK-FP16-LABEL: fptosi_i32_f16:196; CHECK-FP16:       // %bb.0:197; CHECK-FP16-NEXT:    fcvtzs w0, h0198; CHECK-FP16-NEXT:    ret199  %val = call i32 @llvm.experimental.constrained.fptosi.i32.f16(half %x, metadata !"fpexcept.strict") #0200  ret i32 %val201}202 203define i32 @fptoui_i32_f16(half %x) #0 {204; CHECK-NOFP16-LABEL: fptoui_i32_f16:205; CHECK-NOFP16:       // %bb.0:206; CHECK-NOFP16-NEXT:    fcvt s0, h0207; CHECK-NOFP16-NEXT:    fcvtzu w0, s0208; CHECK-NOFP16-NEXT:    ret209;210; CHECK-FP16-LABEL: fptoui_i32_f16:211; CHECK-FP16:       // %bb.0:212; CHECK-FP16-NEXT:    fcvtzu w0, h0213; CHECK-FP16-NEXT:    ret214  %val = call i32 @llvm.experimental.constrained.fptoui.i32.f16(half %x, metadata !"fpexcept.strict") #0215  ret i32 %val216}217 218define i64 @fptosi_i64_f16(half %x) #0 {219; CHECK-NOFP16-LABEL: fptosi_i64_f16:220; CHECK-NOFP16:       // %bb.0:221; CHECK-NOFP16-NEXT:    fcvt s0, h0222; CHECK-NOFP16-NEXT:    fcvtzs x0, s0223; CHECK-NOFP16-NEXT:    ret224;225; CHECK-FP16-LABEL: fptosi_i64_f16:226; CHECK-FP16:       // %bb.0:227; CHECK-FP16-NEXT:    fcvtzs x0, h0228; CHECK-FP16-NEXT:    ret229  %val = call i64 @llvm.experimental.constrained.fptosi.i64.f16(half %x, metadata !"fpexcept.strict") #0230  ret i64 %val231}232 233define i64 @fptoui_i64_f16(half %x) #0 {234; CHECK-NOFP16-LABEL: fptoui_i64_f16:235; CHECK-NOFP16:       // %bb.0:236; CHECK-NOFP16-NEXT:    fcvt s0, h0237; CHECK-NOFP16-NEXT:    fcvtzu x0, s0238; CHECK-NOFP16-NEXT:    ret239;240; CHECK-FP16-LABEL: fptoui_i64_f16:241; CHECK-FP16:       // %bb.0:242; CHECK-FP16-NEXT:    fcvtzu x0, h0243; CHECK-FP16-NEXT:    ret244  %val = call i64 @llvm.experimental.constrained.fptoui.i64.f16(half %x, metadata !"fpexcept.strict") #0245  ret i64 %val246}247 248define half @sitofp_f16_i32(i32 %x) #0 {249; CHECK-NOFP16-LABEL: sitofp_f16_i32:250; CHECK-NOFP16:       // %bb.0:251; CHECK-NOFP16-NEXT:    scvtf s0, w0252; CHECK-NOFP16-NEXT:    fcvt h0, s0253; CHECK-NOFP16-NEXT:    ret254;255; CHECK-FP16-LABEL: sitofp_f16_i32:256; CHECK-FP16:       // %bb.0:257; CHECK-FP16-NEXT:    scvtf h0, w0258; CHECK-FP16-NEXT:    ret259  %val = call half @llvm.experimental.constrained.sitofp.f16.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0260  ret half %val261}262 263define half @uitofp_f16_i32(i32 %x) #0 {264; CHECK-NOFP16-LABEL: uitofp_f16_i32:265; CHECK-NOFP16:       // %bb.0:266; CHECK-NOFP16-NEXT:    ucvtf s0, w0267; CHECK-NOFP16-NEXT:    fcvt h0, s0268; CHECK-NOFP16-NEXT:    ret269;270; CHECK-FP16-LABEL: uitofp_f16_i32:271; CHECK-FP16:       // %bb.0:272; CHECK-FP16-NEXT:    ucvtf h0, w0273; CHECK-FP16-NEXT:    ret274  %val = call half @llvm.experimental.constrained.uitofp.f16.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0275  ret half %val276}277 278define half @sitofp_f16_i64(i64 %x) #0 {279; CHECK-NOFP16-LABEL: sitofp_f16_i64:280; CHECK-NOFP16:       // %bb.0:281; CHECK-NOFP16-NEXT:    scvtf s0, x0282; CHECK-NOFP16-NEXT:    fcvt h0, s0283; CHECK-NOFP16-NEXT:    ret284;285; CHECK-FP16-LABEL: sitofp_f16_i64:286; CHECK-FP16:       // %bb.0:287; CHECK-FP16-NEXT:    scvtf h0, x0288; CHECK-FP16-NEXT:    ret289  %val = call half @llvm.experimental.constrained.sitofp.f16.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0290  ret half %val291}292 293define half @uitofp_f16_i64(i64 %x) #0 {294; CHECK-NOFP16-LABEL: uitofp_f16_i64:295; CHECK-NOFP16:       // %bb.0:296; CHECK-NOFP16-NEXT:    ucvtf s0, x0297; CHECK-NOFP16-NEXT:    fcvt h0, s0298; CHECK-NOFP16-NEXT:    ret299;300; CHECK-FP16-LABEL: uitofp_f16_i64:301; CHECK-FP16:       // %bb.0:302; CHECK-FP16-NEXT:    ucvtf h0, x0303; CHECK-FP16-NEXT:    ret304  %val = call half @llvm.experimental.constrained.uitofp.f16.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0305  ret half %val306}307 308define half @sitofp_f16_i128(i128 %x) #0 {309; CHECK-NOFP16-LABEL: sitofp_f16_i128:310; CHECK-NOFP16:       // %bb.0:311; CHECK-NOFP16-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill312; CHECK-NOFP16-NEXT:    .cfi_def_cfa_offset 16313; CHECK-NOFP16-NEXT:    .cfi_offset w30, -16314; CHECK-NOFP16-NEXT:    bl __floattisf315; CHECK-NOFP16-NEXT:    fcvt h0, s0316; CHECK-NOFP16-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload317; CHECK-NOFP16-NEXT:    ret318;319; CHECK-FP16-LABEL: sitofp_f16_i128:320; CHECK-FP16:       // %bb.0:321; CHECK-FP16-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill322; CHECK-FP16-NEXT:    .cfi_def_cfa_offset 16323; CHECK-FP16-NEXT:    .cfi_offset w30, -16324; CHECK-FP16-NEXT:    bl __floattihf325; CHECK-FP16-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload326; CHECK-FP16-NEXT:    ret327  %val = call half @llvm.experimental.constrained.sitofp.f16.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0328  ret half %val329}330 331define half @uitofp_f16_i128(i128 %x) #0 {332; CHECK-NOFP16-LABEL: uitofp_f16_i128:333; CHECK-NOFP16:       // %bb.0:334; CHECK-NOFP16-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill335; CHECK-NOFP16-NEXT:    .cfi_def_cfa_offset 16336; CHECK-NOFP16-NEXT:    .cfi_offset w30, -16337; CHECK-NOFP16-NEXT:    bl __floatuntisf338; CHECK-NOFP16-NEXT:    fcvt h0, s0339; CHECK-NOFP16-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload340; CHECK-NOFP16-NEXT:    ret341;342; CHECK-FP16-LABEL: uitofp_f16_i128:343; CHECK-FP16:       // %bb.0:344; CHECK-FP16-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill345; CHECK-FP16-NEXT:    .cfi_def_cfa_offset 16346; CHECK-FP16-NEXT:    .cfi_offset w30, -16347; CHECK-FP16-NEXT:    bl __floatuntihf348; CHECK-FP16-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload349; CHECK-FP16-NEXT:    ret350  %val = call half @llvm.experimental.constrained.uitofp.f16.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0351  ret half %val352}353 354define half @sqrt_f16(half %x) #0 {355; CHECK-NOFP16-LABEL: sqrt_f16:356; CHECK-NOFP16:       // %bb.0:357; CHECK-NOFP16-NEXT:    fcvt s0, h0358; CHECK-NOFP16-NEXT:    fsqrt s0, s0359; CHECK-NOFP16-NEXT:    fcvt h0, s0360; CHECK-NOFP16-NEXT:    ret361;362; CHECK-FP16-LABEL: sqrt_f16:363; CHECK-FP16:       // %bb.0:364; CHECK-FP16-NEXT:    fsqrt h0, h0365; CHECK-FP16-NEXT:    ret366  %val = call half @llvm.experimental.constrained.sqrt.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0367  ret half %val368}369 370define half @powi_f16(half %x, i32 %y) #0 {371; CHECK-LABEL: powi_f16:372; CHECK:       // %bb.0:373; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill374; CHECK-NEXT:    .cfi_def_cfa_offset 16375; CHECK-NEXT:    .cfi_offset w30, -16376; CHECK-NEXT:    fcvt s0, h0377; CHECK-NEXT:    bl __powisf2378; CHECK-NEXT:    fcvt h0, s0379; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload380; CHECK-NEXT:    ret381  %val = call half @llvm.experimental.constrained.powi.f16(half %x, i32 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0382  ret half %val383}384 385define half @sin_f16(half %x) #0 {386; CHECK-LABEL: sin_f16:387; CHECK:       // %bb.0:388; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill389; CHECK-NEXT:    .cfi_def_cfa_offset 16390; CHECK-NEXT:    .cfi_offset w30, -16391; CHECK-NEXT:    fcvt s0, h0392; CHECK-NEXT:    bl sinf393; CHECK-NEXT:    fcvt h0, s0394; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload395; CHECK-NEXT:    ret396  %val = call half @llvm.experimental.constrained.sin.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0397  ret half %val398}399 400define half @cos_f16(half %x) #0 {401; CHECK-LABEL: cos_f16:402; CHECK:       // %bb.0:403; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill404; CHECK-NEXT:    .cfi_def_cfa_offset 16405; CHECK-NEXT:    .cfi_offset w30, -16406; CHECK-NEXT:    fcvt s0, h0407; CHECK-NEXT:    bl cosf408; CHECK-NEXT:    fcvt h0, s0409; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload410; CHECK-NEXT:    ret411  %val = call half @llvm.experimental.constrained.cos.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0412  ret half %val413}414 415define half @tan_f16(half %x) #0 {416; CHECK-LABEL: tan_f16:417; CHECK:       // %bb.0:418; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill419; CHECK-NEXT:    .cfi_def_cfa_offset 16420; CHECK-NEXT:    .cfi_offset w30, -16421; CHECK-NEXT:    fcvt s0, h0422; CHECK-NEXT:    bl tanf423; CHECK-NEXT:    fcvt h0, s0424; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload425; CHECK-NEXT:    ret426  %val = call half @llvm.experimental.constrained.tan.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0427  ret half %val428}429 430define half @asin_f16(half %x) #0 {431; CHECK-LABEL: asin_f16:432; CHECK:       // %bb.0:433; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill434; CHECK-NEXT:    .cfi_def_cfa_offset 16435; CHECK-NEXT:    .cfi_offset w30, -16436; CHECK-NEXT:    fcvt s0, h0437; CHECK-NEXT:    bl asinf438; CHECK-NEXT:    fcvt h0, s0439; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload440; CHECK-NEXT:    ret441  %val = call half @llvm.experimental.constrained.asin.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0442  ret half %val443}444 445define half @acos_f16(half %x) #0 {446; CHECK-LABEL: acos_f16:447; CHECK:       // %bb.0:448; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill449; CHECK-NEXT:    .cfi_def_cfa_offset 16450; CHECK-NEXT:    .cfi_offset w30, -16451; CHECK-NEXT:    fcvt s0, h0452; CHECK-NEXT:    bl acosf453; CHECK-NEXT:    fcvt h0, s0454; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload455; CHECK-NEXT:    ret456  %val = call half @llvm.experimental.constrained.acos.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0457  ret half %val458}459 460define half @atan_f16(half %x) #0 {461; CHECK-LABEL: atan_f16:462; CHECK:       // %bb.0:463; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill464; CHECK-NEXT:    .cfi_def_cfa_offset 16465; CHECK-NEXT:    .cfi_offset w30, -16466; CHECK-NEXT:    fcvt s0, h0467; CHECK-NEXT:    bl atanf468; CHECK-NEXT:    fcvt h0, s0469; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload470; CHECK-NEXT:    ret471  %val = call half @llvm.experimental.constrained.atan.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0472  ret half %val473}474 475define half @atan2_f16(half %x, half %y) #0 {476; CHECK-LABEL: atan2_f16:477; CHECK:       // %bb.0:478; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill479; CHECK-NEXT:    .cfi_def_cfa_offset 16480; CHECK-NEXT:    .cfi_offset w30, -16481; CHECK-NEXT:    fcvt s1, h1482; CHECK-NEXT:    fcvt s0, h0483; CHECK-NEXT:    bl atan2f484; CHECK-NEXT:    fcvt h0, s0485; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload486; CHECK-NEXT:    ret487  %val = call half @llvm.experimental.constrained.atan2.f16(half %x, half %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0488  ret half %val489}490 491define half @sinh_f16(half %x) #0 {492; CHECK-LABEL: sinh_f16:493; CHECK:       // %bb.0:494; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill495; CHECK-NEXT:    .cfi_def_cfa_offset 16496; CHECK-NEXT:    .cfi_offset w30, -16497; CHECK-NEXT:    fcvt s0, h0498; CHECK-NEXT:    bl sinhf499; CHECK-NEXT:    fcvt h0, s0500; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload501; CHECK-NEXT:    ret502  %val = call half @llvm.experimental.constrained.sinh.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0503  ret half %val504}505 506define half @cosh_f16(half %x) #0 {507; CHECK-LABEL: cosh_f16:508; CHECK:       // %bb.0:509; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill510; CHECK-NEXT:    .cfi_def_cfa_offset 16511; CHECK-NEXT:    .cfi_offset w30, -16512; CHECK-NEXT:    fcvt s0, h0513; CHECK-NEXT:    bl coshf514; CHECK-NEXT:    fcvt h0, s0515; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload516; CHECK-NEXT:    ret517  %val = call half @llvm.experimental.constrained.cosh.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0518  ret half %val519}520 521define half @tanh_f16(half %x) #0 {522; CHECK-LABEL: tanh_f16:523; CHECK:       // %bb.0:524; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill525; CHECK-NEXT:    .cfi_def_cfa_offset 16526; CHECK-NEXT:    .cfi_offset w30, -16527; CHECK-NEXT:    fcvt s0, h0528; CHECK-NEXT:    bl tanhf529; CHECK-NEXT:    fcvt h0, s0530; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload531; CHECK-NEXT:    ret532  %val = call half @llvm.experimental.constrained.tanh.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0533  ret half %val534}535 536define half @pow_f16(half %x, half %y) #0 {537; CHECK-LABEL: pow_f16:538; CHECK:       // %bb.0:539; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill540; CHECK-NEXT:    .cfi_def_cfa_offset 16541; CHECK-NEXT:    .cfi_offset w30, -16542; CHECK-NEXT:    fcvt s1, h1543; CHECK-NEXT:    fcvt s0, h0544; CHECK-NEXT:    bl powf545; CHECK-NEXT:    fcvt h0, s0546; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload547; CHECK-NEXT:    ret548  %val = call half @llvm.experimental.constrained.pow.f16(half %x, half %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0549  ret half %val550}551 552define half @log_f16(half %x) #0 {553; CHECK-LABEL: log_f16:554; CHECK:       // %bb.0:555; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill556; CHECK-NEXT:    .cfi_def_cfa_offset 16557; CHECK-NEXT:    .cfi_offset w30, -16558; CHECK-NEXT:    fcvt s0, h0559; CHECK-NEXT:    bl logf560; CHECK-NEXT:    fcvt h0, s0561; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload562; CHECK-NEXT:    ret563  %val = call half @llvm.experimental.constrained.log.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0564  ret half %val565}566 567define half @log10_f16(half %x) #0 {568; CHECK-LABEL: log10_f16:569; CHECK:       // %bb.0:570; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill571; CHECK-NEXT:    .cfi_def_cfa_offset 16572; CHECK-NEXT:    .cfi_offset w30, -16573; CHECK-NEXT:    fcvt s0, h0574; CHECK-NEXT:    bl log10f575; CHECK-NEXT:    fcvt h0, s0576; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload577; CHECK-NEXT:    ret578  %val = call half @llvm.experimental.constrained.log10.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0579  ret half %val580}581 582define half @log2_f16(half %x) #0 {583; CHECK-LABEL: log2_f16:584; CHECK:       // %bb.0:585; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill586; CHECK-NEXT:    .cfi_def_cfa_offset 16587; CHECK-NEXT:    .cfi_offset w30, -16588; CHECK-NEXT:    fcvt s0, h0589; CHECK-NEXT:    bl log2f590; CHECK-NEXT:    fcvt h0, s0591; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload592; CHECK-NEXT:    ret593  %val = call half @llvm.experimental.constrained.log2.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0594  ret half %val595}596 597define half @exp_f16(half %x) #0 {598; CHECK-LABEL: exp_f16:599; CHECK:       // %bb.0:600; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill601; CHECK-NEXT:    .cfi_def_cfa_offset 16602; CHECK-NEXT:    .cfi_offset w30, -16603; CHECK-NEXT:    fcvt s0, h0604; CHECK-NEXT:    bl expf605; CHECK-NEXT:    fcvt h0, s0606; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload607; CHECK-NEXT:    ret608  %val = call half @llvm.experimental.constrained.exp.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0609  ret half %val610}611 612define half @exp2_f16(half %x) #0 {613; CHECK-LABEL: exp2_f16:614; CHECK:       // %bb.0:615; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill616; CHECK-NEXT:    .cfi_def_cfa_offset 16617; CHECK-NEXT:    .cfi_offset w30, -16618; CHECK-NEXT:    fcvt s0, h0619; CHECK-NEXT:    bl exp2f620; CHECK-NEXT:    fcvt h0, s0621; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload622; CHECK-NEXT:    ret623  %val = call half @llvm.experimental.constrained.exp2.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0624  ret half %val625}626 627define half @rint_f16(half %x) #0 {628; CHECK-NOFP16-LABEL: rint_f16:629; CHECK-NOFP16:       // %bb.0:630; CHECK-NOFP16-NEXT:    fcvt s0, h0631; CHECK-NOFP16-NEXT:    frintx s0, s0632; CHECK-NOFP16-NEXT:    fcvt h0, s0633; CHECK-NOFP16-NEXT:    ret634;635; CHECK-FP16-LABEL: rint_f16:636; CHECK-FP16:       // %bb.0:637; CHECK-FP16-NEXT:    frintx h0, h0638; CHECK-FP16-NEXT:    ret639  %val = call half @llvm.experimental.constrained.rint.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0640  ret half %val641}642 643define half @nearbyint_f16(half %x) #0 {644; CHECK-NOFP16-LABEL: nearbyint_f16:645; CHECK-NOFP16:       // %bb.0:646; CHECK-NOFP16-NEXT:    fcvt s0, h0647; CHECK-NOFP16-NEXT:    frinti s0, s0648; CHECK-NOFP16-NEXT:    fcvt h0, s0649; CHECK-NOFP16-NEXT:    ret650;651; CHECK-FP16-LABEL: nearbyint_f16:652; CHECK-FP16:       // %bb.0:653; CHECK-FP16-NEXT:    frinti h0, h0654; CHECK-FP16-NEXT:    ret655  %val = call half @llvm.experimental.constrained.nearbyint.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0656  ret half %val657}658 659define i32 @lrint_f16(half %x) #0 {660; CHECK-NOFP16-LABEL: lrint_f16:661; CHECK-NOFP16:       // %bb.0:662; CHECK-NOFP16-NEXT:    fcvt s0, h0663; CHECK-NOFP16-NEXT:    frintx s0, s0664; CHECK-NOFP16-NEXT:    fcvtzs w0, s0665; CHECK-NOFP16-NEXT:    ret666;667; CHECK-FP16-LABEL: lrint_f16:668; CHECK-FP16:       // %bb.0:669; CHECK-FP16-NEXT:    frintx h0, h0670; CHECK-FP16-NEXT:    fcvtzs w0, h0671; CHECK-FP16-NEXT:    ret672  %val = call i32 @llvm.experimental.constrained.lrint.i32.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0673  ret i32 %val674}675 676define i64 @llrint_f16(half %x) #0 {677; CHECK-NOFP16-LABEL: llrint_f16:678; CHECK-NOFP16:       // %bb.0:679; CHECK-NOFP16-NEXT:    fcvt s0, h0680; CHECK-NOFP16-NEXT:    frintx s0, s0681; CHECK-NOFP16-NEXT:    fcvtzs x0, s0682; CHECK-NOFP16-NEXT:    ret683;684; CHECK-FP16-LABEL: llrint_f16:685; CHECK-FP16:       // %bb.0:686; CHECK-FP16-NEXT:    frintx h0, h0687; CHECK-FP16-NEXT:    fcvtzs x0, h0688; CHECK-FP16-NEXT:    ret689  %val = call i64 @llvm.experimental.constrained.llrint.i64.f16(half %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0690  ret i64 %val691}692 693define half @maxnum_f16(half %x, half %y) #0 {694; CHECK-NOFP16-LABEL: maxnum_f16:695; CHECK-NOFP16:       // %bb.0:696; CHECK-NOFP16-NEXT:    fcvt s1, h1697; CHECK-NOFP16-NEXT:    fcvt s0, h0698; CHECK-NOFP16-NEXT:    fmaxnm s0, s0, s1699; CHECK-NOFP16-NEXT:    fcvt h0, s0700; CHECK-NOFP16-NEXT:    ret701;702; CHECK-FP16-LABEL: maxnum_f16:703; CHECK-FP16:       // %bb.0:704; CHECK-FP16-NEXT:    fmaxnm h0, h0, h1705; CHECK-FP16-NEXT:    ret706  %val = call half @llvm.experimental.constrained.maxnum.f16(half %x, half %y, metadata !"fpexcept.strict") #0707  ret half %val708}709 710define half @minnum_f16(half %x, half %y) #0 {711; CHECK-NOFP16-LABEL: minnum_f16:712; CHECK-NOFP16:       // %bb.0:713; CHECK-NOFP16-NEXT:    fcvt s1, h1714; CHECK-NOFP16-NEXT:    fcvt s0, h0715; CHECK-NOFP16-NEXT:    fminnm s0, s0, s1716; CHECK-NOFP16-NEXT:    fcvt h0, s0717; CHECK-NOFP16-NEXT:    ret718;719; CHECK-FP16-LABEL: minnum_f16:720; CHECK-FP16:       // %bb.0:721; CHECK-FP16-NEXT:    fminnm h0, h0, h1722; CHECK-FP16-NEXT:    ret723  %val = call half @llvm.experimental.constrained.minnum.f16(half %x, half %y, metadata !"fpexcept.strict") #0724  ret half %val725}726 727define half @ceil_f16(half %x) #0 {728; CHECK-NOFP16-LABEL: ceil_f16:729; CHECK-NOFP16:       // %bb.0:730; CHECK-NOFP16-NEXT:    fcvt s0, h0731; CHECK-NOFP16-NEXT:    frintp s0, s0732; CHECK-NOFP16-NEXT:    fcvt h0, s0733; CHECK-NOFP16-NEXT:    ret734;735; CHECK-FP16-LABEL: ceil_f16:736; CHECK-FP16:       // %bb.0:737; CHECK-FP16-NEXT:    frintp h0, h0738; CHECK-FP16-NEXT:    ret739  %val = call half @llvm.experimental.constrained.ceil.f16(half %x, metadata !"fpexcept.strict") #0740  ret half %val741}742 743define half @floor_f16(half %x) #0 {744; CHECK-NOFP16-LABEL: floor_f16:745; CHECK-NOFP16:       // %bb.0:746; CHECK-NOFP16-NEXT:    fcvt s0, h0747; CHECK-NOFP16-NEXT:    frintm s0, s0748; CHECK-NOFP16-NEXT:    fcvt h0, s0749; CHECK-NOFP16-NEXT:    ret750;751; CHECK-FP16-LABEL: floor_f16:752; CHECK-FP16:       // %bb.0:753; CHECK-FP16-NEXT:    frintm h0, h0754; CHECK-FP16-NEXT:    ret755  %val = call half @llvm.experimental.constrained.floor.f16(half %x, metadata !"fpexcept.strict") #0756  ret half %val757}758 759define i32 @lround_f16(half %x) #0 {760; CHECK-NOFP16-LABEL: lround_f16:761; CHECK-NOFP16:       // %bb.0:762; CHECK-NOFP16-NEXT:    fcvt s0, h0763; CHECK-NOFP16-NEXT:    fcvtas w0, s0764; CHECK-NOFP16-NEXT:    ret765;766; CHECK-FP16-LABEL: lround_f16:767; CHECK-FP16:       // %bb.0:768; CHECK-FP16-NEXT:    fcvtas w0, h0769; CHECK-FP16-NEXT:    ret770  %val = call i32 @llvm.experimental.constrained.lround.i32.f16(half %x, metadata !"fpexcept.strict") #0771  ret i32 %val772}773 774define i64 @llround_f16(half %x) #0 {775; CHECK-NOFP16-LABEL: llround_f16:776; CHECK-NOFP16:       // %bb.0:777; CHECK-NOFP16-NEXT:    fcvt s0, h0778; CHECK-NOFP16-NEXT:    fcvtas x0, s0779; CHECK-NOFP16-NEXT:    ret780;781; CHECK-FP16-LABEL: llround_f16:782; CHECK-FP16:       // %bb.0:783; CHECK-FP16-NEXT:    fcvtas x0, h0784; CHECK-FP16-NEXT:    ret785  %val = call i64 @llvm.experimental.constrained.llround.i64.f16(half %x, metadata !"fpexcept.strict") #0786  ret i64 %val787}788 789define half @round_f16(half %x) #0 {790; CHECK-NOFP16-LABEL: round_f16:791; CHECK-NOFP16:       // %bb.0:792; CHECK-NOFP16-NEXT:    fcvt s0, h0793; CHECK-NOFP16-NEXT:    frinta s0, s0794; CHECK-NOFP16-NEXT:    fcvt h0, s0795; CHECK-NOFP16-NEXT:    ret796;797; CHECK-FP16-LABEL: round_f16:798; CHECK-FP16:       // %bb.0:799; CHECK-FP16-NEXT:    frinta h0, h0800; CHECK-FP16-NEXT:    ret801  %val = call half @llvm.experimental.constrained.round.f16(half %x, metadata !"fpexcept.strict") #0802  ret half %val803}804 805define half @roundeven_f16(half %x) #0 {806; CHECK-NOFP16-LABEL: roundeven_f16:807; CHECK-NOFP16:       // %bb.0:808; CHECK-NOFP16-NEXT:    fcvt s0, h0809; CHECK-NOFP16-NEXT:    frintn s0, s0810; CHECK-NOFP16-NEXT:    fcvt h0, s0811; CHECK-NOFP16-NEXT:    ret812;813; CHECK-FP16-LABEL: roundeven_f16:814; CHECK-FP16:       // %bb.0:815; CHECK-FP16-NEXT:    frintn h0, h0816; CHECK-FP16-NEXT:    ret817  %val = call half @llvm.experimental.constrained.roundeven.f16(half %x, metadata !"fpexcept.strict") #0818  ret half %val819}820 821define half @trunc_f16(half %x) #0 {822; CHECK-NOFP16-LABEL: trunc_f16:823; CHECK-NOFP16:       // %bb.0:824; CHECK-NOFP16-NEXT:    fcvt s0, h0825; CHECK-NOFP16-NEXT:    frintz s0, s0826; CHECK-NOFP16-NEXT:    fcvt h0, s0827; CHECK-NOFP16-NEXT:    ret828;829; CHECK-FP16-LABEL: trunc_f16:830; CHECK-FP16:       // %bb.0:831; CHECK-FP16-NEXT:    frintz h0, h0832; CHECK-FP16-NEXT:    ret833  %val = call half @llvm.experimental.constrained.trunc.f16(half %x, metadata !"fpexcept.strict") #0834  ret half %val835}836 837define half @ldexp_f16(half %x, i32 %y) #0 {838; CHECK-LABEL: ldexp_f16:839; CHECK:       // %bb.0:840; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill841; CHECK-NEXT:    .cfi_def_cfa_offset 16842; CHECK-NEXT:    .cfi_offset w30, -16843; CHECK-NEXT:    fcvt s0, h0844; CHECK-NEXT:    bl ldexpf845; CHECK-NEXT:    fcvt h0, s0846; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload847; CHECK-NEXT:    ret848  %val = call half @llvm.experimental.constrained.ldexp.f16.i32(half %x, i32 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0849  ret half %val850}851 852define i32 @fcmp_olt_f16(half %a, half %b) #0 {853; CHECK-NOFP16-LABEL: fcmp_olt_f16:854; CHECK-NOFP16:       // %bb.0:855; CHECK-NOFP16-NEXT:    fcvt s0, h0856; CHECK-NOFP16-NEXT:    fcvt s1, h1857; CHECK-NOFP16-NEXT:    fcmp s0, s1858; CHECK-NOFP16-NEXT:    cset w0, mi859; CHECK-NOFP16-NEXT:    ret860;861; CHECK-FP16-LABEL: fcmp_olt_f16:862; CHECK-FP16:       // %bb.0:863; CHECK-FP16-NEXT:    fcmp h0, h1864; CHECK-FP16-NEXT:    cset w0, mi865; CHECK-FP16-NEXT:    ret866  %cmp = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"olt", metadata !"fpexcept.strict") #0867  %conv = zext i1 %cmp to i32868  ret i32 %conv869}870 871define i32 @fcmp_ole_f16(half %a, half %b) #0 {872; CHECK-NOFP16-LABEL: fcmp_ole_f16:873; CHECK-NOFP16:       // %bb.0:874; CHECK-NOFP16-NEXT:    fcvt s0, h0875; CHECK-NOFP16-NEXT:    fcvt s1, h1876; CHECK-NOFP16-NEXT:    fcmp s0, s1877; CHECK-NOFP16-NEXT:    cset w0, ls878; CHECK-NOFP16-NEXT:    ret879;880; CHECK-FP16-LABEL: fcmp_ole_f16:881; CHECK-FP16:       // %bb.0:882; CHECK-FP16-NEXT:    fcmp h0, h1883; CHECK-FP16-NEXT:    cset w0, ls884; CHECK-FP16-NEXT:    ret885  %cmp = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ole", metadata !"fpexcept.strict") #0886  %conv = zext i1 %cmp to i32887  ret i32 %conv888}889 890define i32 @fcmp_ogt_f16(half %a, half %b) #0 {891; CHECK-NOFP16-LABEL: fcmp_ogt_f16:892; CHECK-NOFP16:       // %bb.0:893; CHECK-NOFP16-NEXT:    fcvt s0, h0894; CHECK-NOFP16-NEXT:    fcvt s1, h1895; CHECK-NOFP16-NEXT:    fcmp s0, s1896; CHECK-NOFP16-NEXT:    cset w0, gt897; CHECK-NOFP16-NEXT:    ret898;899; CHECK-FP16-LABEL: fcmp_ogt_f16:900; CHECK-FP16:       // %bb.0:901; CHECK-FP16-NEXT:    fcmp h0, h1902; CHECK-FP16-NEXT:    cset w0, gt903; CHECK-FP16-NEXT:    ret904  %cmp = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ogt", metadata !"fpexcept.strict") #0905  %conv = zext i1 %cmp to i32906  ret i32 %conv907}908 909define i32 @fcmp_oge_f16(half %a, half %b) #0 {910; CHECK-NOFP16-LABEL: fcmp_oge_f16:911; CHECK-NOFP16:       // %bb.0:912; CHECK-NOFP16-NEXT:    fcvt s0, h0913; CHECK-NOFP16-NEXT:    fcvt s1, h1914; CHECK-NOFP16-NEXT:    fcmp s0, s1915; CHECK-NOFP16-NEXT:    cset w0, ge916; CHECK-NOFP16-NEXT:    ret917;918; CHECK-FP16-LABEL: fcmp_oge_f16:919; CHECK-FP16:       // %bb.0:920; CHECK-FP16-NEXT:    fcmp h0, h1921; CHECK-FP16-NEXT:    cset w0, ge922; CHECK-FP16-NEXT:    ret923  %cmp = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"oge", metadata !"fpexcept.strict") #0924  %conv = zext i1 %cmp to i32925  ret i32 %conv926}927 928define i32 @fcmp_oeq_f16(half %a, half %b) #0 {929; CHECK-NOFP16-LABEL: fcmp_oeq_f16:930; CHECK-NOFP16:       // %bb.0:931; CHECK-NOFP16-NEXT:    fcvt s0, h0932; CHECK-NOFP16-NEXT:    fcvt s1, h1933; CHECK-NOFP16-NEXT:    fcmp s0, s1934; CHECK-NOFP16-NEXT:    cset w0, eq935; CHECK-NOFP16-NEXT:    ret936;937; CHECK-FP16-LABEL: fcmp_oeq_f16:938; CHECK-FP16:       // %bb.0:939; CHECK-FP16-NEXT:    fcmp h0, h1940; CHECK-FP16-NEXT:    cset w0, eq941; CHECK-FP16-NEXT:    ret942  %cmp = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"oeq", metadata !"fpexcept.strict") #0943  %conv = zext i1 %cmp to i32944  ret i32 %conv945}946 947define i32 @fcmp_one_f16(half %a, half %b) #0 {948; CHECK-NOFP16-LABEL: fcmp_one_f16:949; CHECK-NOFP16:       // %bb.0:950; CHECK-NOFP16-NEXT:    fcvt s0, h0951; CHECK-NOFP16-NEXT:    fcvt s1, h1952; CHECK-NOFP16-NEXT:    fcmp s0, s1953; CHECK-NOFP16-NEXT:    cset w8, mi954; CHECK-NOFP16-NEXT:    csinc w0, w8, wzr, le955; CHECK-NOFP16-NEXT:    ret956;957; CHECK-FP16-LABEL: fcmp_one_f16:958; CHECK-FP16:       // %bb.0:959; CHECK-FP16-NEXT:    fcmp h0, h1960; CHECK-FP16-NEXT:    cset w8, mi961; CHECK-FP16-NEXT:    csinc w0, w8, wzr, le962; CHECK-FP16-NEXT:    ret963  %cmp = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"one", metadata !"fpexcept.strict") #0964  %conv = zext i1 %cmp to i32965  ret i32 %conv966}967 968define i32 @fcmp_ult_f16(half %a, half %b) #0 {969; CHECK-NOFP16-LABEL: fcmp_ult_f16:970; CHECK-NOFP16:       // %bb.0:971; CHECK-NOFP16-NEXT:    fcvt s0, h0972; CHECK-NOFP16-NEXT:    fcvt s1, h1973; CHECK-NOFP16-NEXT:    fcmp s0, s1974; CHECK-NOFP16-NEXT:    cset w0, lt975; CHECK-NOFP16-NEXT:    ret976;977; CHECK-FP16-LABEL: fcmp_ult_f16:978; CHECK-FP16:       // %bb.0:979; CHECK-FP16-NEXT:    fcmp h0, h1980; CHECK-FP16-NEXT:    cset w0, lt981; CHECK-FP16-NEXT:    ret982  %cmp = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ult", metadata !"fpexcept.strict") #0983  %conv = zext i1 %cmp to i32984  ret i32 %conv985}986 987define i32 @fcmp_ule_f16(half %a, half %b) #0 {988; CHECK-NOFP16-LABEL: fcmp_ule_f16:989; CHECK-NOFP16:       // %bb.0:990; CHECK-NOFP16-NEXT:    fcvt s0, h0991; CHECK-NOFP16-NEXT:    fcvt s1, h1992; CHECK-NOFP16-NEXT:    fcmp s0, s1993; CHECK-NOFP16-NEXT:    cset w0, le994; CHECK-NOFP16-NEXT:    ret995;996; CHECK-FP16-LABEL: fcmp_ule_f16:997; CHECK-FP16:       // %bb.0:998; CHECK-FP16-NEXT:    fcmp h0, h1999; CHECK-FP16-NEXT:    cset w0, le1000; CHECK-FP16-NEXT:    ret1001  %cmp = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ule", metadata !"fpexcept.strict") #01002  %conv = zext i1 %cmp to i321003  ret i32 %conv1004}1005 1006define i32 @fcmp_ugt_f16(half %a, half %b) #0 {1007; CHECK-NOFP16-LABEL: fcmp_ugt_f16:1008; CHECK-NOFP16:       // %bb.0:1009; CHECK-NOFP16-NEXT:    fcvt s0, h01010; CHECK-NOFP16-NEXT:    fcvt s1, h11011; CHECK-NOFP16-NEXT:    fcmp s0, s11012; CHECK-NOFP16-NEXT:    cset w0, hi1013; CHECK-NOFP16-NEXT:    ret1014;1015; CHECK-FP16-LABEL: fcmp_ugt_f16:1016; CHECK-FP16:       // %bb.0:1017; CHECK-FP16-NEXT:    fcmp h0, h11018; CHECK-FP16-NEXT:    cset w0, hi1019; CHECK-FP16-NEXT:    ret1020  %cmp = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ugt", metadata !"fpexcept.strict") #01021  %conv = zext i1 %cmp to i321022  ret i32 %conv1023}1024 1025define i32 @fcmp_uge_f16(half %a, half %b) #0 {1026; CHECK-NOFP16-LABEL: fcmp_uge_f16:1027; CHECK-NOFP16:       // %bb.0:1028; CHECK-NOFP16-NEXT:    fcvt s0, h01029; CHECK-NOFP16-NEXT:    fcvt s1, h11030; CHECK-NOFP16-NEXT:    fcmp s0, s11031; CHECK-NOFP16-NEXT:    cset w0, pl1032; CHECK-NOFP16-NEXT:    ret1033;1034; CHECK-FP16-LABEL: fcmp_uge_f16:1035; CHECK-FP16:       // %bb.0:1036; CHECK-FP16-NEXT:    fcmp h0, h11037; CHECK-FP16-NEXT:    cset w0, pl1038; CHECK-FP16-NEXT:    ret1039  %cmp = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"uge", metadata !"fpexcept.strict") #01040  %conv = zext i1 %cmp to i321041  ret i32 %conv1042}1043 1044define i32 @fcmp_ueq_f16(half %a, half %b) #0 {1045; CHECK-NOFP16-LABEL: fcmp_ueq_f16:1046; CHECK-NOFP16:       // %bb.0:1047; CHECK-NOFP16-NEXT:    fcvt s0, h01048; CHECK-NOFP16-NEXT:    fcvt s1, h11049; CHECK-NOFP16-NEXT:    fcmp s0, s11050; CHECK-NOFP16-NEXT:    cset w8, eq1051; CHECK-NOFP16-NEXT:    csinc w0, w8, wzr, vc1052; CHECK-NOFP16-NEXT:    ret1053;1054; CHECK-FP16-LABEL: fcmp_ueq_f16:1055; CHECK-FP16:       // %bb.0:1056; CHECK-FP16-NEXT:    fcmp h0, h11057; CHECK-FP16-NEXT:    cset w8, eq1058; CHECK-FP16-NEXT:    csinc w0, w8, wzr, vc1059; CHECK-FP16-NEXT:    ret1060  %cmp = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ueq", metadata !"fpexcept.strict") #01061  %conv = zext i1 %cmp to i321062  ret i32 %conv1063}1064 1065define i32 @fcmp_une_f16(half %a, half %b) #0 {1066; CHECK-NOFP16-LABEL: fcmp_une_f16:1067; CHECK-NOFP16:       // %bb.0:1068; CHECK-NOFP16-NEXT:    fcvt s0, h01069; CHECK-NOFP16-NEXT:    fcvt s1, h11070; CHECK-NOFP16-NEXT:    fcmp s0, s11071; CHECK-NOFP16-NEXT:    cset w0, ne1072; CHECK-NOFP16-NEXT:    ret1073;1074; CHECK-FP16-LABEL: fcmp_une_f16:1075; CHECK-FP16:       // %bb.0:1076; CHECK-FP16-NEXT:    fcmp h0, h11077; CHECK-FP16-NEXT:    cset w0, ne1078; CHECK-FP16-NEXT:    ret1079  %cmp = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"une", metadata !"fpexcept.strict") #01080  %conv = zext i1 %cmp to i321081  ret i32 %conv1082}1083 1084define i32 @fcmps_olt_f16(half %a, half %b) #0 {1085; CHECK-NOFP16-LABEL: fcmps_olt_f16:1086; CHECK-NOFP16:       // %bb.0:1087; CHECK-NOFP16-NEXT:    fcvt s0, h01088; CHECK-NOFP16-NEXT:    fcvt s1, h11089; CHECK-NOFP16-NEXT:    fcmpe s0, s11090; CHECK-NOFP16-NEXT:    cset w0, mi1091; CHECK-NOFP16-NEXT:    ret1092;1093; CHECK-FP16-LABEL: fcmps_olt_f16:1094; CHECK-FP16:       // %bb.0:1095; CHECK-FP16-NEXT:    fcmpe h0, h11096; CHECK-FP16-NEXT:    cset w0, mi1097; CHECK-FP16-NEXT:    ret1098  %cmp = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"olt", metadata !"fpexcept.strict") #01099  %conv = zext i1 %cmp to i321100  ret i32 %conv1101}1102 1103define i32 @fcmps_ole_f16(half %a, half %b) #0 {1104; CHECK-NOFP16-LABEL: fcmps_ole_f16:1105; CHECK-NOFP16:       // %bb.0:1106; CHECK-NOFP16-NEXT:    fcvt s0, h01107; CHECK-NOFP16-NEXT:    fcvt s1, h11108; CHECK-NOFP16-NEXT:    fcmpe s0, s11109; CHECK-NOFP16-NEXT:    cset w0, ls1110; CHECK-NOFP16-NEXT:    ret1111;1112; CHECK-FP16-LABEL: fcmps_ole_f16:1113; CHECK-FP16:       // %bb.0:1114; CHECK-FP16-NEXT:    fcmpe h0, h11115; CHECK-FP16-NEXT:    cset w0, ls1116; CHECK-FP16-NEXT:    ret1117  %cmp = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"ole", metadata !"fpexcept.strict") #01118  %conv = zext i1 %cmp to i321119  ret i32 %conv1120}1121 1122define i32 @fcmps_ogt_f16(half %a, half %b) #0 {1123; CHECK-NOFP16-LABEL: fcmps_ogt_f16:1124; CHECK-NOFP16:       // %bb.0:1125; CHECK-NOFP16-NEXT:    fcvt s0, h01126; CHECK-NOFP16-NEXT:    fcvt s1, h11127; CHECK-NOFP16-NEXT:    fcmpe s0, s11128; CHECK-NOFP16-NEXT:    cset w0, gt1129; CHECK-NOFP16-NEXT:    ret1130;1131; CHECK-FP16-LABEL: fcmps_ogt_f16:1132; CHECK-FP16:       // %bb.0:1133; CHECK-FP16-NEXT:    fcmpe h0, h11134; CHECK-FP16-NEXT:    cset w0, gt1135; CHECK-FP16-NEXT:    ret1136  %cmp = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"ogt", metadata !"fpexcept.strict") #01137  %conv = zext i1 %cmp to i321138  ret i32 %conv1139}1140 1141define i32 @fcmps_oge_f16(half %a, half %b) #0 {1142; CHECK-NOFP16-LABEL: fcmps_oge_f16:1143; CHECK-NOFP16:       // %bb.0:1144; CHECK-NOFP16-NEXT:    fcvt s0, h01145; CHECK-NOFP16-NEXT:    fcvt s1, h11146; CHECK-NOFP16-NEXT:    fcmpe s0, s11147; CHECK-NOFP16-NEXT:    cset w0, ge1148; CHECK-NOFP16-NEXT:    ret1149;1150; CHECK-FP16-LABEL: fcmps_oge_f16:1151; CHECK-FP16:       // %bb.0:1152; CHECK-FP16-NEXT:    fcmpe h0, h11153; CHECK-FP16-NEXT:    cset w0, ge1154; CHECK-FP16-NEXT:    ret1155  %cmp = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"oge", metadata !"fpexcept.strict") #01156  %conv = zext i1 %cmp to i321157  ret i32 %conv1158}1159 1160define i32 @fcmps_oeq_f16(half %a, half %b) #0 {1161; CHECK-NOFP16-LABEL: fcmps_oeq_f16:1162; CHECK-NOFP16:       // %bb.0:1163; CHECK-NOFP16-NEXT:    fcvt s0, h01164; CHECK-NOFP16-NEXT:    fcvt s1, h11165; CHECK-NOFP16-NEXT:    fcmpe s0, s11166; CHECK-NOFP16-NEXT:    cset w0, eq1167; CHECK-NOFP16-NEXT:    ret1168;1169; CHECK-FP16-LABEL: fcmps_oeq_f16:1170; CHECK-FP16:       // %bb.0:1171; CHECK-FP16-NEXT:    fcmpe h0, h11172; CHECK-FP16-NEXT:    cset w0, eq1173; CHECK-FP16-NEXT:    ret1174  %cmp = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"oeq", metadata !"fpexcept.strict") #01175  %conv = zext i1 %cmp to i321176  ret i32 %conv1177}1178 1179define i32 @fcmps_one_f16(half %a, half %b) #0 {1180; CHECK-NOFP16-LABEL: fcmps_one_f16:1181; CHECK-NOFP16:       // %bb.0:1182; CHECK-NOFP16-NEXT:    fcvt s0, h01183; CHECK-NOFP16-NEXT:    fcvt s1, h11184; CHECK-NOFP16-NEXT:    fcmpe s0, s11185; CHECK-NOFP16-NEXT:    cset w8, mi1186; CHECK-NOFP16-NEXT:    csinc w0, w8, wzr, le1187; CHECK-NOFP16-NEXT:    ret1188;1189; CHECK-FP16-LABEL: fcmps_one_f16:1190; CHECK-FP16:       // %bb.0:1191; CHECK-FP16-NEXT:    fcmpe h0, h11192; CHECK-FP16-NEXT:    cset w8, mi1193; CHECK-FP16-NEXT:    csinc w0, w8, wzr, le1194; CHECK-FP16-NEXT:    ret1195  %cmp = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"one", metadata !"fpexcept.strict") #01196  %conv = zext i1 %cmp to i321197  ret i32 %conv1198}1199 1200define i32 @fcmps_ult_f16(half %a, half %b) #0 {1201; CHECK-NOFP16-LABEL: fcmps_ult_f16:1202; CHECK-NOFP16:       // %bb.0:1203; CHECK-NOFP16-NEXT:    fcvt s0, h01204; CHECK-NOFP16-NEXT:    fcvt s1, h11205; CHECK-NOFP16-NEXT:    fcmpe s0, s11206; CHECK-NOFP16-NEXT:    cset w0, lt1207; CHECK-NOFP16-NEXT:    ret1208;1209; CHECK-FP16-LABEL: fcmps_ult_f16:1210; CHECK-FP16:       // %bb.0:1211; CHECK-FP16-NEXT:    fcmpe h0, h11212; CHECK-FP16-NEXT:    cset w0, lt1213; CHECK-FP16-NEXT:    ret1214  %cmp = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"ult", metadata !"fpexcept.strict") #01215  %conv = zext i1 %cmp to i321216  ret i32 %conv1217}1218 1219define i32 @fcmps_ule_f16(half %a, half %b) #0 {1220; CHECK-NOFP16-LABEL: fcmps_ule_f16:1221; CHECK-NOFP16:       // %bb.0:1222; CHECK-NOFP16-NEXT:    fcvt s0, h01223; CHECK-NOFP16-NEXT:    fcvt s1, h11224; CHECK-NOFP16-NEXT:    fcmpe s0, s11225; CHECK-NOFP16-NEXT:    cset w0, le1226; CHECK-NOFP16-NEXT:    ret1227;1228; CHECK-FP16-LABEL: fcmps_ule_f16:1229; CHECK-FP16:       // %bb.0:1230; CHECK-FP16-NEXT:    fcmpe h0, h11231; CHECK-FP16-NEXT:    cset w0, le1232; CHECK-FP16-NEXT:    ret1233  %cmp = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"ule", metadata !"fpexcept.strict") #01234  %conv = zext i1 %cmp to i321235  ret i32 %conv1236}1237 1238define i32 @fcmps_ugt_f16(half %a, half %b) #0 {1239; CHECK-NOFP16-LABEL: fcmps_ugt_f16:1240; CHECK-NOFP16:       // %bb.0:1241; CHECK-NOFP16-NEXT:    fcvt s0, h01242; CHECK-NOFP16-NEXT:    fcvt s1, h11243; CHECK-NOFP16-NEXT:    fcmpe s0, s11244; CHECK-NOFP16-NEXT:    cset w0, hi1245; CHECK-NOFP16-NEXT:    ret1246;1247; CHECK-FP16-LABEL: fcmps_ugt_f16:1248; CHECK-FP16:       // %bb.0:1249; CHECK-FP16-NEXT:    fcmpe h0, h11250; CHECK-FP16-NEXT:    cset w0, hi1251; CHECK-FP16-NEXT:    ret1252  %cmp = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"ugt", metadata !"fpexcept.strict") #01253  %conv = zext i1 %cmp to i321254  ret i32 %conv1255}1256 1257define i32 @fcmps_uge_f16(half %a, half %b) #0 {1258; CHECK-NOFP16-LABEL: fcmps_uge_f16:1259; CHECK-NOFP16:       // %bb.0:1260; CHECK-NOFP16-NEXT:    fcvt s0, h01261; CHECK-NOFP16-NEXT:    fcvt s1, h11262; CHECK-NOFP16-NEXT:    fcmpe s0, s11263; CHECK-NOFP16-NEXT:    cset w0, pl1264; CHECK-NOFP16-NEXT:    ret1265;1266; CHECK-FP16-LABEL: fcmps_uge_f16:1267; CHECK-FP16:       // %bb.0:1268; CHECK-FP16-NEXT:    fcmpe h0, h11269; CHECK-FP16-NEXT:    cset w0, pl1270; CHECK-FP16-NEXT:    ret1271  %cmp = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"uge", metadata !"fpexcept.strict") #01272  %conv = zext i1 %cmp to i321273  ret i32 %conv1274}1275 1276define i32 @fcmps_ueq_f16(half %a, half %b) #0 {1277; CHECK-NOFP16-LABEL: fcmps_ueq_f16:1278; CHECK-NOFP16:       // %bb.0:1279; CHECK-NOFP16-NEXT:    fcvt s0, h01280; CHECK-NOFP16-NEXT:    fcvt s1, h11281; CHECK-NOFP16-NEXT:    fcmpe s0, s11282; CHECK-NOFP16-NEXT:    cset w8, eq1283; CHECK-NOFP16-NEXT:    csinc w0, w8, wzr, vc1284; CHECK-NOFP16-NEXT:    ret1285;1286; CHECK-FP16-LABEL: fcmps_ueq_f16:1287; CHECK-FP16:       // %bb.0:1288; CHECK-FP16-NEXT:    fcmpe h0, h11289; CHECK-FP16-NEXT:    cset w8, eq1290; CHECK-FP16-NEXT:    csinc w0, w8, wzr, vc1291; CHECK-FP16-NEXT:    ret1292  %cmp = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"ueq", metadata !"fpexcept.strict") #01293  %conv = zext i1 %cmp to i321294  ret i32 %conv1295}1296 1297define i32 @fcmps_une_f16(half %a, half %b) #0 {1298; CHECK-NOFP16-LABEL: fcmps_une_f16:1299; CHECK-NOFP16:       // %bb.0:1300; CHECK-NOFP16-NEXT:    fcvt s0, h01301; CHECK-NOFP16-NEXT:    fcvt s1, h11302; CHECK-NOFP16-NEXT:    fcmpe s0, s11303; CHECK-NOFP16-NEXT:    cset w0, ne1304; CHECK-NOFP16-NEXT:    ret1305;1306; CHECK-FP16-LABEL: fcmps_une_f16:1307; CHECK-FP16:       // %bb.0:1308; CHECK-FP16-NEXT:    fcmpe h0, h11309; CHECK-FP16-NEXT:    cset w0, ne1310; CHECK-FP16-NEXT:    ret1311  %cmp = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"une", metadata !"fpexcept.strict") #01312  %conv = zext i1 %cmp to i321313  ret i32 %conv1314}1315 1316 1317; Intrinsics to convert between floating-point types1318 1319define half @fptrunc_f16_f32(float %x) #0 {1320; CHECK-LABEL: fptrunc_f16_f32:1321; CHECK:       // %bb.0:1322; CHECK-NEXT:    fcvt h0, s01323; CHECK-NEXT:    ret1324  %val = call half @llvm.experimental.constrained.fptrunc.f16.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01325  ret half %val1326}1327 1328define float @fpext_f32_f16(half %x) #0 {1329; CHECK-LABEL: fpext_f32_f16:1330; CHECK:       // %bb.0:1331; CHECK-NEXT:    fcvt s0, h01332; CHECK-NEXT:    ret1333  %val = call float @llvm.experimental.constrained.fpext.f32.f16(half %x, metadata !"fpexcept.strict") #01334  ret float %val1335}1336 1337 1338attributes #0 = { strictfp }1339 1340declare half @llvm.experimental.constrained.fadd.f16(half, half, metadata, metadata)1341declare half @llvm.experimental.constrained.fsub.f16(half, half, metadata, metadata)1342declare half @llvm.experimental.constrained.fmul.f16(half, half, metadata, metadata)1343declare half @llvm.experimental.constrained.fdiv.f16(half, half, metadata, metadata)1344declare half @llvm.experimental.constrained.frem.f16(half, half, metadata, metadata)1345declare half @llvm.experimental.constrained.fma.f16(half, half, half, metadata, metadata)1346declare i32 @llvm.experimental.constrained.fptosi.i32.f16(half, metadata)1347declare i32 @llvm.experimental.constrained.fptoui.i32.f16(half, metadata)1348declare i64 @llvm.experimental.constrained.fptosi.i64.f16(half, metadata)1349declare i64 @llvm.experimental.constrained.fptoui.i64.f16(half, metadata)1350declare half @llvm.experimental.constrained.sitofp.f16.i32(i32, metadata, metadata)1351declare half @llvm.experimental.constrained.uitofp.f16.i32(i32, metadata, metadata)1352declare half @llvm.experimental.constrained.sitofp.f16.i64(i64, metadata, metadata)1353declare half @llvm.experimental.constrained.uitofp.f16.i64(i64, metadata, metadata)1354declare half @llvm.experimental.constrained.sitofp.f16.i128(i128, metadata, metadata)1355declare half @llvm.experimental.constrained.uitofp.f16.i128(i128, metadata, metadata)1356declare half @llvm.experimental.constrained.sqrt.f16(half, metadata, metadata)1357declare half @llvm.experimental.constrained.powi.f16(half, i32, metadata, metadata)1358declare half @llvm.experimental.constrained.sin.f16(half, metadata, metadata)1359declare half @llvm.experimental.constrained.cos.f16(half, metadata, metadata)1360declare half @llvm.experimental.constrained.tan.f16(half, metadata, metadata)1361declare half @llvm.experimental.constrained.pow.f16(half, half, metadata, metadata)1362declare half @llvm.experimental.constrained.log.f16(half, metadata, metadata)1363declare half @llvm.experimental.constrained.log10.f16(half, metadata, metadata)1364declare half @llvm.experimental.constrained.log2.f16(half, metadata, metadata)1365declare half @llvm.experimental.constrained.exp.f16(half, metadata, metadata)1366declare half @llvm.experimental.constrained.exp2.f16(half, metadata, metadata)1367declare half @llvm.experimental.constrained.rint.f16(half, metadata, metadata)1368declare half @llvm.experimental.constrained.nearbyint.f16(half, metadata, metadata)1369declare i32 @llvm.experimental.constrained.lrint.i32.f16(half, metadata, metadata)1370declare i64 @llvm.experimental.constrained.llrint.i64.f16(half, metadata, metadata)1371declare half @llvm.experimental.constrained.maxnum.f16(half, half, metadata)1372declare half @llvm.experimental.constrained.minnum.f16(half, half, metadata)1373declare half @llvm.experimental.constrained.ceil.f16(half, metadata)1374declare half @llvm.experimental.constrained.floor.f16(half, metadata)1375declare i32 @llvm.experimental.constrained.lround.i32.f16(half, metadata)1376declare i64 @llvm.experimental.constrained.llround.i64.f16(half, metadata)1377declare half @llvm.experimental.constrained.round.f16(half, metadata)1378declare half @llvm.experimental.constrained.roundeven.f16(half, metadata)1379declare half @llvm.experimental.constrained.trunc.f16(half, metadata)1380declare i1 @llvm.experimental.constrained.fcmps.f16(half, half, metadata, metadata)1381declare i1 @llvm.experimental.constrained.fcmp.f16(half, half, metadata, metadata)1382 1383declare half @llvm.experimental.constrained.fptrunc.f16.f32(float, metadata, metadata)1384declare float @llvm.experimental.constrained.fpext.f32.f16(half, metadata)1385