3296 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=aarch64 %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD3; RUN: llc -mtriple=aarch64 -global-isel=true -global-isel-abort=2 %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI4 5; CHECK-GI: warning: Instruction selection used fallback path for add_f326; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sub_f327; CHECK-GI-NEXT: warning: Instruction selection used fallback path for mul_f328; CHECK-GI-NEXT: warning: Instruction selection used fallback path for div_f329; CHECK-GI-NEXT: warning: Instruction selection used fallback path for frem_f3210; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fma_f3211; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fptosi_i32_f3212; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fptoui_i32_f3213; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fptosi_i64_f3214; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fptoui_i64_f3215; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sitofp_f32_i3216; CHECK-GI-NEXT: warning: Instruction selection used fallback path for uitofp_f32_i3217; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sitofp_f32_i6418; CHECK-GI-NEXT: warning: Instruction selection used fallback path for uitofp_f32_i6419; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sitofp_f32_i12820; CHECK-GI-NEXT: warning: Instruction selection used fallback path for uitofp_f32_i12821; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sqrt_f3222; CHECK-GI-NEXT: warning: Instruction selection used fallback path for powi_f3223; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sin_f3224; CHECK-GI-NEXT: warning: Instruction selection used fallback path for cos_f3225; CHECK-GI-NEXT: warning: Instruction selection used fallback path for tan_f3226; CHECK-GI-NEXT: warning: Instruction selection used fallback path for asin_f3227; CHECK-GI-NEXT: warning: Instruction selection used fallback path for acos_f3228; CHECK-GI-NEXT: warning: Instruction selection used fallback path for atan_f3229; CHECK-GI-NEXT: warning: Instruction selection used fallback path for atan2_f3230; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sinh_f3231; CHECK-GI-NEXT: warning: Instruction selection used fallback path for cosh_f3232; CHECK-GI-NEXT: warning: Instruction selection used fallback path for tanh_f3233; CHECK-GI-NEXT: warning: Instruction selection used fallback path for pow_f3234; CHECK-GI-NEXT: warning: Instruction selection used fallback path for log_f3235; CHECK-GI-NEXT: warning: Instruction selection used fallback path for log10_f3236; CHECK-GI-NEXT: warning: Instruction selection used fallback path for log2_f3237; CHECK-GI-NEXT: warning: Instruction selection used fallback path for exp_f3238; CHECK-GI-NEXT: warning: Instruction selection used fallback path for exp2_f3239; CHECK-GI-NEXT: warning: Instruction selection used fallback path for rint_f3240; CHECK-GI-NEXT: warning: Instruction selection used fallback path for nearbyint_f3241; CHECK-GI-NEXT: warning: Instruction selection used fallback path for lrint_f3242; CHECK-GI-NEXT: warning: Instruction selection used fallback path for llrint_f3243; CHECK-GI-NEXT: warning: Instruction selection used fallback path for maxnum_f3244; CHECK-GI-NEXT: warning: Instruction selection used fallback path for minnum_f3245; CHECK-GI-NEXT: warning: Instruction selection used fallback path for maximum_f3246; CHECK-GI-NEXT: warning: Instruction selection used fallback path for minimum_f3247; CHECK-GI-NEXT: warning: Instruction selection used fallback path for ceil_f3248; CHECK-GI-NEXT: warning: Instruction selection used fallback path for floor_f3249; CHECK-GI-NEXT: warning: Instruction selection used fallback path for lround_f3250; CHECK-GI-NEXT: warning: Instruction selection used fallback path for llround_f3251; CHECK-GI-NEXT: warning: Instruction selection used fallback path for round_f3252; CHECK-GI-NEXT: warning: Instruction selection used fallback path for roundeven_f3253; CHECK-GI-NEXT: warning: Instruction selection used fallback path for trunc_f3254; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_olt_f3255; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ole_f3256; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ogt_f3257; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_oge_f3258; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_oeq_f3259; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_one_f3260; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ult_f3261; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ule_f3262; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ugt_f3263; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_uge_f3264; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ueq_f3265; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_une_f3266; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_olt_f3267; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ole_f3268; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ogt_f3269; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_oge_f3270; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_oeq_f3271; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_one_f3272; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ult_f3273; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ule_f3274; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ugt_f3275; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_uge_f3276; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ueq_f3277; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_une_f3278; CHECK-GI-NEXT: warning: Instruction selection used fallback path for add_f6479; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sub_f6480; CHECK-GI-NEXT: warning: Instruction selection used fallback path for mul_f6481; CHECK-GI-NEXT: warning: Instruction selection used fallback path for div_f6482; CHECK-GI-NEXT: warning: Instruction selection used fallback path for frem_f6483; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fma_f6484; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fptosi_i32_f6485; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fptoui_i32_f6486; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fptosi_i64_f6487; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fptoui_i64_f6488; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sitofp_f64_i3289; CHECK-GI-NEXT: warning: Instruction selection used fallback path for uitofp_f64_i3290; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sitofp_f64_i6491; CHECK-GI-NEXT: warning: Instruction selection used fallback path for uitofp_f64_i6492; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sitofp_f64_i12893; CHECK-GI-NEXT: warning: Instruction selection used fallback path for uitofp_f64_i12894; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sqrt_f6495; CHECK-GI-NEXT: warning: Instruction selection used fallback path for powi_f6496; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sin_f6497; CHECK-GI-NEXT: warning: Instruction selection used fallback path for cos_f6498; CHECK-GI-NEXT: warning: Instruction selection used fallback path for tan_f6499; CHECK-GI-NEXT: warning: Instruction selection used fallback path for asin_f64100; CHECK-GI-NEXT: warning: Instruction selection used fallback path for acos_f64101; CHECK-GI-NEXT: warning: Instruction selection used fallback path for atan_f64102; CHECK-GI-NEXT: warning: Instruction selection used fallback path for atan2_f64103; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sinh_f64104; CHECK-GI-NEXT: warning: Instruction selection used fallback path for cosh_f64105; CHECK-GI-NEXT: warning: Instruction selection used fallback path for tanh_f64106; CHECK-GI-NEXT: warning: Instruction selection used fallback path for pow_f64107; CHECK-GI-NEXT: warning: Instruction selection used fallback path for log_f64108; CHECK-GI-NEXT: warning: Instruction selection used fallback path for log10_f64109; CHECK-GI-NEXT: warning: Instruction selection used fallback path for log2_f64110; CHECK-GI-NEXT: warning: Instruction selection used fallback path for exp_f64111; CHECK-GI-NEXT: warning: Instruction selection used fallback path for exp2_f64112; CHECK-GI-NEXT: warning: Instruction selection used fallback path for rint_f64113; CHECK-GI-NEXT: warning: Instruction selection used fallback path for nearbyint_f64114; CHECK-GI-NEXT: warning: Instruction selection used fallback path for lrint_f64115; CHECK-GI-NEXT: warning: Instruction selection used fallback path for llrint_f64116; CHECK-GI-NEXT: warning: Instruction selection used fallback path for maxnum_f64117; CHECK-GI-NEXT: warning: Instruction selection used fallback path for minnum_f64118; CHECK-GI-NEXT: warning: Instruction selection used fallback path for maximum_f64119; CHECK-GI-NEXT: warning: Instruction selection used fallback path for minimum_f64120; CHECK-GI-NEXT: warning: Instruction selection used fallback path for ceil_f64121; CHECK-GI-NEXT: warning: Instruction selection used fallback path for floor_f64122; CHECK-GI-NEXT: warning: Instruction selection used fallback path for lround_f64123; CHECK-GI-NEXT: warning: Instruction selection used fallback path for llround_f64124; CHECK-GI-NEXT: warning: Instruction selection used fallback path for round_f64125; CHECK-GI-NEXT: warning: Instruction selection used fallback path for roundeven_f64126; CHECK-GI-NEXT: warning: Instruction selection used fallback path for trunc_f64127; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_olt_f64128; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ole_f64129; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ogt_f64130; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_oge_f64131; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_oeq_f64132; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_one_f64133; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ult_f64134; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ule_f64135; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ugt_f64136; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_uge_f64137; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ueq_f64138; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_une_f64139; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_olt_f64140; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ole_f64141; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ogt_f64142; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_oge_f64143; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_oeq_f64144; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_one_f64145; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ult_f64146; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ule_f64147; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ugt_f64148; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_uge_f64149; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ueq_f64150; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_une_f64151; CHECK-GI-NEXT: warning: Instruction selection used fallback path for add_f128152; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sub_f128153; CHECK-GI-NEXT: warning: Instruction selection used fallback path for mul_f128154; CHECK-GI-NEXT: warning: Instruction selection used fallback path for div_f128155; CHECK-GI-NEXT: warning: Instruction selection used fallback path for frem_f128156; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fma_f128157; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fptosi_i32_f128158; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fptoui_i32_f128159; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fptosi_i64_f128160; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fptoui_i64_f128161; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sitofp_f128_i32162; CHECK-GI-NEXT: warning: Instruction selection used fallback path for uitofp_f128_i32163; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sitofp_f128_i64164; CHECK-GI-NEXT: warning: Instruction selection used fallback path for uitofp_f128_i64165; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sitofp_f128_i128166; CHECK-GI-NEXT: warning: Instruction selection used fallback path for uitofp_f128_i128167; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sqrt_f128168; CHECK-GI-NEXT: warning: Instruction selection used fallback path for powi_f128169; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sin_f128170; CHECK-GI-NEXT: warning: Instruction selection used fallback path for cos_f128171; CHECK-GI-NEXT: warning: Instruction selection used fallback path for tan_f128172; CHECK-GI-NEXT: warning: Instruction selection used fallback path for asin_f128173; CHECK-GI-NEXT: warning: Instruction selection used fallback path for acos_f128174; CHECK-GI-NEXT: warning: Instruction selection used fallback path for atan_f128175; CHECK-GI-NEXT: warning: Instruction selection used fallback path for atan2_f128176; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sinh_f128177; CHECK-GI-NEXT: warning: Instruction selection used fallback path for cosh_f128178; CHECK-GI-NEXT: warning: Instruction selection used fallback path for tanh_f128179; CHECK-GI-NEXT: warning: Instruction selection used fallback path for pow_f128180; CHECK-GI-NEXT: warning: Instruction selection used fallback path for log_f128181; CHECK-GI-NEXT: warning: Instruction selection used fallback path for log10_f128182; CHECK-GI-NEXT: warning: Instruction selection used fallback path for log2_f128183; CHECK-GI-NEXT: warning: Instruction selection used fallback path for exp_f128184; CHECK-GI-NEXT: warning: Instruction selection used fallback path for exp2_f128185; CHECK-GI-NEXT: warning: Instruction selection used fallback path for rint_f128186; CHECK-GI-NEXT: warning: Instruction selection used fallback path for nearbyint_f128187; CHECK-GI-NEXT: warning: Instruction selection used fallback path for lrint_f128188; CHECK-GI-NEXT: warning: Instruction selection used fallback path for llrint_f128189; CHECK-GI-NEXT: warning: Instruction selection used fallback path for maxnum_f128190; CHECK-GI-NEXT: warning: Instruction selection used fallback path for minnum_f128191; CHECK-GI-NEXT: warning: Instruction selection used fallback path for ceil_f128192; CHECK-GI-NEXT: warning: Instruction selection used fallback path for floor_f128193; CHECK-GI-NEXT: warning: Instruction selection used fallback path for lround_f128194; CHECK-GI-NEXT: warning: Instruction selection used fallback path for llround_f128195; CHECK-GI-NEXT: warning: Instruction selection used fallback path for round_f128196; CHECK-GI-NEXT: warning: Instruction selection used fallback path for trunc_f128197; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_olt_f128198; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ole_f128199; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ogt_f128200; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_oge_f128201; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_oeq_f128202; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_one_f128203; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ult_f128204; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ule_f128205; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ugt_f128206; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_uge_f128207; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_ueq_f128208; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmp_une_f128209; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_olt_f128210; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ole_f128211; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ogt_f128212; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_oge_f128213; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_oeq_f128214; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_one_f128215; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ult_f128216; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ule_f128217; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ugt_f128218; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_uge_f128219; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_ueq_f128220; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fcmps_une_f128221; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fptrunc_f32_f64222; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fptrunc_f32_f128223; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fptrunc_f64_f128224; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fpext_f64_f32225; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fpext_f128_f32226; CHECK-GI-NEXT: warning: Instruction selection used fallback path for fpext_f128_f64227; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sin_v1f64228; CHECK-GI-NEXT: warning: Instruction selection used fallback path for cos_v1f64229; CHECK-GI-NEXT: warning: Instruction selection used fallback path for tan_v1f64230; CHECK-GI-NEXT: warning: Instruction selection used fallback path for asin_v1f64231; CHECK-GI-NEXT: warning: Instruction selection used fallback path for acos_v1f64232; CHECK-GI-NEXT: warning: Instruction selection used fallback path for atan_v1f64233; CHECK-GI-NEXT: warning: Instruction selection used fallback path for atan2_v1f64234; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sinh_v1f64235; CHECK-GI-NEXT: warning: Instruction selection used fallback path for cosh_v1f64236; CHECK-GI-NEXT: warning: Instruction selection used fallback path for tanh_v1f64237; CHECK-GI-NEXT: warning: Instruction selection used fallback path for pow_v1f64238; CHECK-GI-NEXT: warning: Instruction selection used fallback path for log_v1f64239; CHECK-GI-NEXT: warning: Instruction selection used fallback path for log2_v1f64240; CHECK-GI-NEXT: warning: Instruction selection used fallback path for log10_v1f64241; CHECK-GI-NEXT: warning: Instruction selection used fallback path for exp_v1f64242; CHECK-GI-NEXT: warning: Instruction selection used fallback path for exp2_v1f64243 244; Check that constrained fp intrinsics are correctly lowered.245 246; Single-precision intrinsics247 248define float @add_f32(float %x, float %y) #0 {249; CHECK-LABEL: add_f32:250; CHECK: // %bb.0:251; CHECK-NEXT: fadd s0, s0, s1252; CHECK-NEXT: ret253 %val = call float @llvm.experimental.constrained.fadd.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0254 ret float %val255}256 257define float @sub_f32(float %x, float %y) #0 {258; CHECK-LABEL: sub_f32:259; CHECK: // %bb.0:260; CHECK-NEXT: fsub s0, s0, s1261; CHECK-NEXT: ret262 %val = call float @llvm.experimental.constrained.fsub.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0263 ret float %val264}265 266define float @mul_f32(float %x, float %y) #0 {267; CHECK-LABEL: mul_f32:268; CHECK: // %bb.0:269; CHECK-NEXT: fmul s0, s0, s1270; CHECK-NEXT: ret271 %val = call float @llvm.experimental.constrained.fmul.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0272 ret float %val273}274 275define float @div_f32(float %x, float %y) #0 {276; CHECK-LABEL: div_f32:277; CHECK: // %bb.0:278; CHECK-NEXT: fdiv s0, s0, s1279; CHECK-NEXT: ret280 %val = call float @llvm.experimental.constrained.fdiv.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0281 ret float %val282}283 284define float @frem_f32(float %x, float %y) #0 {285; CHECK-LABEL: frem_f32:286; CHECK: // %bb.0:287; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill288; CHECK-NEXT: .cfi_def_cfa_offset 16289; CHECK-NEXT: .cfi_offset w30, -16290; CHECK-NEXT: bl fmodf291; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload292; CHECK-NEXT: ret293 %val = call float @llvm.experimental.constrained.frem.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0294 ret float %val295}296 297define float @fma_f32(float %x, float %y, float %z) #0 {298; CHECK-LABEL: fma_f32:299; CHECK: // %bb.0:300; CHECK-NEXT: fmadd s0, s0, s1, s2301; CHECK-NEXT: ret302 %val = call float @llvm.experimental.constrained.fma.f32(float %x, float %y, float %z, metadata !"round.tonearest", metadata !"fpexcept.strict") #0303 ret float %val304}305 306define i32 @fptosi_i32_f32(float %x) #0 {307; CHECK-LABEL: fptosi_i32_f32:308; CHECK: // %bb.0:309; CHECK-NEXT: fcvtzs w0, s0310; CHECK-NEXT: ret311 %val = call i32 @llvm.experimental.constrained.fptosi.i32.f32(float %x, metadata !"fpexcept.strict") #0312 ret i32 %val313}314 315define i32 @fptoui_i32_f32(float %x) #0 {316; CHECK-LABEL: fptoui_i32_f32:317; CHECK: // %bb.0:318; CHECK-NEXT: fcvtzu w0, s0319; CHECK-NEXT: ret320 %val = call i32 @llvm.experimental.constrained.fptoui.i32.f32(float %x, metadata !"fpexcept.strict") #0321 ret i32 %val322}323 324define i64 @fptosi_i64_f32(float %x) #0 {325; CHECK-LABEL: fptosi_i64_f32:326; CHECK: // %bb.0:327; CHECK-NEXT: fcvtzs x0, s0328; CHECK-NEXT: ret329 %val = call i64 @llvm.experimental.constrained.fptosi.i64.f32(float %x, metadata !"fpexcept.strict") #0330 ret i64 %val331}332 333define i64 @fptoui_i64_f32(float %x) #0 {334; CHECK-LABEL: fptoui_i64_f32:335; CHECK: // %bb.0:336; CHECK-NEXT: fcvtzu x0, s0337; CHECK-NEXT: ret338 %val = call i64 @llvm.experimental.constrained.fptoui.i64.f32(float %x, metadata !"fpexcept.strict") #0339 ret i64 %val340}341 342define float @sitofp_f32_i32(i32 %x) #0 {343; CHECK-LABEL: sitofp_f32_i32:344; CHECK: // %bb.0:345; CHECK-NEXT: scvtf s0, w0346; CHECK-NEXT: ret347 %val = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0348 ret float %val349}350 351define float @uitofp_f32_i32(i32 %x) #0 {352; CHECK-LABEL: uitofp_f32_i32:353; CHECK: // %bb.0:354; CHECK-NEXT: ucvtf s0, w0355; CHECK-NEXT: ret356 %val = call float @llvm.experimental.constrained.uitofp.f32.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0357 ret float %val358}359 360define float @sitofp_f32_i64(i64 %x) #0 {361; CHECK-LABEL: sitofp_f32_i64:362; CHECK: // %bb.0:363; CHECK-NEXT: scvtf s0, x0364; CHECK-NEXT: ret365 %val = call float @llvm.experimental.constrained.sitofp.f32.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0366 ret float %val367}368 369define float @uitofp_f32_i64(i64 %x) #0 {370; CHECK-LABEL: uitofp_f32_i64:371; CHECK: // %bb.0:372; CHECK-NEXT: ucvtf s0, x0373; CHECK-NEXT: ret374 %val = call float @llvm.experimental.constrained.uitofp.f32.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0375 ret float %val376}377 378define float @sitofp_f32_i128(i128 %x) #0 {379; CHECK-LABEL: sitofp_f32_i128:380; CHECK: // %bb.0:381; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill382; CHECK-NEXT: .cfi_def_cfa_offset 16383; CHECK-NEXT: .cfi_offset w30, -16384; CHECK-NEXT: bl __floattisf385; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload386; CHECK-NEXT: ret387 %val = call float @llvm.experimental.constrained.sitofp.f32.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0388 ret float %val389}390 391define float @uitofp_f32_i128(i128 %x) #0 {392; CHECK-LABEL: uitofp_f32_i128:393; CHECK: // %bb.0:394; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill395; CHECK-NEXT: .cfi_def_cfa_offset 16396; CHECK-NEXT: .cfi_offset w30, -16397; CHECK-NEXT: bl __floatuntisf398; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload399; CHECK-NEXT: ret400 %val = call float @llvm.experimental.constrained.uitofp.f32.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0401 ret float %val402}403 404define float @sqrt_f32(float %x) #0 {405; CHECK-LABEL: sqrt_f32:406; CHECK: // %bb.0:407; CHECK-NEXT: fsqrt s0, s0408; CHECK-NEXT: ret409 %val = call float @llvm.experimental.constrained.sqrt.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0410 ret float %val411}412 413define float @powi_f32(float %x, i32 %y) #0 {414; CHECK-LABEL: powi_f32:415; CHECK: // %bb.0:416; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill417; CHECK-NEXT: .cfi_def_cfa_offset 16418; CHECK-NEXT: .cfi_offset w30, -16419; CHECK-NEXT: bl __powisf2420; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload421; CHECK-NEXT: ret422 %val = call float @llvm.experimental.constrained.powi.f32(float %x, i32 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0423 ret float %val424}425 426define float @sin_f32(float %x) #0 {427; CHECK-LABEL: sin_f32:428; CHECK: // %bb.0:429; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill430; CHECK-NEXT: .cfi_def_cfa_offset 16431; CHECK-NEXT: .cfi_offset w30, -16432; CHECK-NEXT: bl sinf433; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload434; CHECK-NEXT: ret435 %val = call float @llvm.experimental.constrained.sin.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0436 ret float %val437}438 439define float @cos_f32(float %x) #0 {440; CHECK-LABEL: cos_f32:441; CHECK: // %bb.0:442; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill443; CHECK-NEXT: .cfi_def_cfa_offset 16444; CHECK-NEXT: .cfi_offset w30, -16445; CHECK-NEXT: bl cosf446; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload447; CHECK-NEXT: ret448 %val = call float @llvm.experimental.constrained.cos.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0449 ret float %val450}451 452define float @tan_f32(float %x) #0 {453; CHECK-LABEL: tan_f32:454; CHECK: // %bb.0:455; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill456; CHECK-NEXT: .cfi_def_cfa_offset 16457; CHECK-NEXT: .cfi_offset w30, -16458; CHECK-NEXT: bl tanf459; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload460; CHECK-NEXT: ret461 %val = call float @llvm.experimental.constrained.tan.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0462 ret float %val463}464 465define float @asin_f32(float %x) #0 {466; CHECK-LABEL: asin_f32:467; CHECK: // %bb.0:468; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill469; CHECK-NEXT: .cfi_def_cfa_offset 16470; CHECK-NEXT: .cfi_offset w30, -16471; CHECK-NEXT: bl asinf472; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload473; CHECK-NEXT: ret474 %val = call float @llvm.experimental.constrained.asin.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0475 ret float %val476}477 478define float @acos_f32(float %x) #0 {479; CHECK-LABEL: acos_f32:480; CHECK: // %bb.0:481; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill482; CHECK-NEXT: .cfi_def_cfa_offset 16483; CHECK-NEXT: .cfi_offset w30, -16484; CHECK-NEXT: bl acosf485; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload486; CHECK-NEXT: ret487 %val = call float @llvm.experimental.constrained.acos.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0488 ret float %val489}490 491define float @atan_f32(float %x) #0 {492; CHECK-LABEL: atan_f32: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: bl atanf498; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload499; CHECK-NEXT: ret500 %val = call float @llvm.experimental.constrained.atan.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0501 ret float %val502}503 504define float @atan2_f32(float %x, float %y) #0 {505; CHECK-LABEL: atan2_f32:506; CHECK: // %bb.0:507; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill508; CHECK-NEXT: .cfi_def_cfa_offset 16509; CHECK-NEXT: .cfi_offset w30, -16510; CHECK-NEXT: bl atan2f511; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload512; CHECK-NEXT: ret513 %val = call float @llvm.experimental.constrained.atan2.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0514 ret float %val515}516 517define float @sinh_f32(float %x) #0 {518; CHECK-LABEL: sinh_f32:519; CHECK: // %bb.0:520; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill521; CHECK-NEXT: .cfi_def_cfa_offset 16522; CHECK-NEXT: .cfi_offset w30, -16523; CHECK-NEXT: bl sinhf524; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload525; CHECK-NEXT: ret526 %val = call float @llvm.experimental.constrained.sinh.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0527 ret float %val528}529 530define float @cosh_f32(float %x) #0 {531; CHECK-LABEL: cosh_f32:532; CHECK: // %bb.0:533; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill534; CHECK-NEXT: .cfi_def_cfa_offset 16535; CHECK-NEXT: .cfi_offset w30, -16536; CHECK-NEXT: bl coshf537; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload538; CHECK-NEXT: ret539 %val = call float @llvm.experimental.constrained.cosh.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0540 ret float %val541}542 543define float @tanh_f32(float %x) #0 {544; CHECK-LABEL: tanh_f32:545; CHECK: // %bb.0:546; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill547; CHECK-NEXT: .cfi_def_cfa_offset 16548; CHECK-NEXT: .cfi_offset w30, -16549; CHECK-NEXT: bl tanhf550; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload551; CHECK-NEXT: ret552 %val = call float @llvm.experimental.constrained.tanh.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0553 ret float %val554}555 556define float @pow_f32(float %x, float %y) #0 {557; CHECK-LABEL: pow_f32:558; CHECK: // %bb.0:559; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill560; CHECK-NEXT: .cfi_def_cfa_offset 16561; CHECK-NEXT: .cfi_offset w30, -16562; CHECK-NEXT: bl powf563; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload564; CHECK-NEXT: ret565 %val = call float @llvm.experimental.constrained.pow.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0566 ret float %val567}568 569define float @log_f32(float %x) #0 {570; CHECK-LABEL: log_f32:571; CHECK: // %bb.0:572; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill573; CHECK-NEXT: .cfi_def_cfa_offset 16574; CHECK-NEXT: .cfi_offset w30, -16575; CHECK-NEXT: bl logf576; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload577; CHECK-NEXT: ret578 %val = call float @llvm.experimental.constrained.log.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0579 ret float %val580}581 582define float @log10_f32(float %x) #0 {583; CHECK-LABEL: log10_f32: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: bl log10f589; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload590; CHECK-NEXT: ret591 %val = call float @llvm.experimental.constrained.log10.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0592 ret float %val593}594 595define float @log2_f32(float %x) #0 {596; CHECK-LABEL: log2_f32:597; CHECK: // %bb.0:598; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill599; CHECK-NEXT: .cfi_def_cfa_offset 16600; CHECK-NEXT: .cfi_offset w30, -16601; CHECK-NEXT: bl log2f602; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload603; CHECK-NEXT: ret604 %val = call float @llvm.experimental.constrained.log2.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0605 ret float %val606}607 608define float @exp_f32(float %x) #0 {609; CHECK-LABEL: exp_f32:610; CHECK: // %bb.0:611; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill612; CHECK-NEXT: .cfi_def_cfa_offset 16613; CHECK-NEXT: .cfi_offset w30, -16614; CHECK-NEXT: bl expf615; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload616; CHECK-NEXT: ret617 %val = call float @llvm.experimental.constrained.exp.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0618 ret float %val619}620 621define float @exp2_f32(float %x) #0 {622; CHECK-LABEL: exp2_f32:623; CHECK: // %bb.0:624; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill625; CHECK-NEXT: .cfi_def_cfa_offset 16626; CHECK-NEXT: .cfi_offset w30, -16627; CHECK-NEXT: bl exp2f628; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload629; CHECK-NEXT: ret630 %val = call float @llvm.experimental.constrained.exp2.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0631 ret float %val632}633 634define float @rint_f32(float %x) #0 {635; CHECK-LABEL: rint_f32:636; CHECK: // %bb.0:637; CHECK-NEXT: frintx s0, s0638; CHECK-NEXT: ret639 %val = call float @llvm.experimental.constrained.rint.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0640 ret float %val641}642 643define float @nearbyint_f32(float %x) #0 {644; CHECK-LABEL: nearbyint_f32:645; CHECK: // %bb.0:646; CHECK-NEXT: frinti s0, s0647; CHECK-NEXT: ret648 %val = call float @llvm.experimental.constrained.nearbyint.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0649 ret float %val650}651 652define i32 @lrint_f32(float %x) #0 {653; CHECK-LABEL: lrint_f32:654; CHECK: // %bb.0:655; CHECK-NEXT: frintx s0, s0656; CHECK-NEXT: fcvtzs w0, s0657; CHECK-NEXT: ret658 %val = call i32 @llvm.experimental.constrained.lrint.i32.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0659 ret i32 %val660}661 662define i64 @llrint_f32(float %x) #0 {663; CHECK-LABEL: llrint_f32:664; CHECK: // %bb.0:665; CHECK-NEXT: frintx s0, s0666; CHECK-NEXT: fcvtzs x0, s0667; CHECK-NEXT: ret668 %val = call i64 @llvm.experimental.constrained.llrint.i64.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0669 ret i64 %val670}671 672define float @maxnum_f32(float %x, float %y) #0 {673; CHECK-LABEL: maxnum_f32:674; CHECK: // %bb.0:675; CHECK-NEXT: fmaxnm s0, s0, s1676; CHECK-NEXT: ret677 %val = call float @llvm.experimental.constrained.maxnum.f32(float %x, float %y, metadata !"fpexcept.strict") #0678 ret float %val679}680 681define float @minnum_f32(float %x, float %y) #0 {682; CHECK-LABEL: minnum_f32:683; CHECK: // %bb.0:684; CHECK-NEXT: fminnm s0, s0, s1685; CHECK-NEXT: ret686 %val = call float @llvm.experimental.constrained.minnum.f32(float %x, float %y, metadata !"fpexcept.strict") #0687 ret float %val688}689 690define float @maximum_f32(float %x, float %y) #0 {691; CHECK-LABEL: maximum_f32:692; CHECK: // %bb.0:693; CHECK-NEXT: fmax s0, s0, s1694; CHECK-NEXT: ret695 %val = call float @llvm.experimental.constrained.maximum.f32(float %x, float %y, metadata !"fpexcept.strict") #0696 ret float %val697}698 699define float @minimum_f32(float %x, float %y) #0 {700; CHECK-LABEL: minimum_f32:701; CHECK: // %bb.0:702; CHECK-NEXT: fmin s0, s0, s1703; CHECK-NEXT: ret704 %val = call float @llvm.experimental.constrained.minimum.f32(float %x, float %y, metadata !"fpexcept.strict") #0705 ret float %val706}707 708define float @ceil_f32(float %x) #0 {709; CHECK-LABEL: ceil_f32:710; CHECK: // %bb.0:711; CHECK-NEXT: frintp s0, s0712; CHECK-NEXT: ret713 %val = call float @llvm.experimental.constrained.ceil.f32(float %x, metadata !"fpexcept.strict") #0714 ret float %val715}716 717define float @floor_f32(float %x) #0 {718; CHECK-LABEL: floor_f32:719; CHECK: // %bb.0:720; CHECK-NEXT: frintm s0, s0721; CHECK-NEXT: ret722 %val = call float @llvm.experimental.constrained.floor.f32(float %x, metadata !"fpexcept.strict") #0723 ret float %val724}725 726define i32 @lround_f32(float %x) #0 {727; CHECK-LABEL: lround_f32:728; CHECK: // %bb.0:729; CHECK-NEXT: fcvtas w0, s0730; CHECK-NEXT: ret731 %val = call i32 @llvm.experimental.constrained.lround.i32.f32(float %x, metadata !"fpexcept.strict") #0732 ret i32 %val733}734 735define i64 @llround_f32(float %x) #0 {736; CHECK-LABEL: llround_f32:737; CHECK: // %bb.0:738; CHECK-NEXT: fcvtas x0, s0739; CHECK-NEXT: ret740 %val = call i64 @llvm.experimental.constrained.llround.i64.f32(float %x, metadata !"fpexcept.strict") #0741 ret i64 %val742}743 744define float @round_f32(float %x) #0 {745; CHECK-LABEL: round_f32:746; CHECK: // %bb.0:747; CHECK-NEXT: frinta s0, s0748; CHECK-NEXT: ret749 %val = call float @llvm.experimental.constrained.round.f32(float %x, metadata !"fpexcept.strict") #0750 ret float %val751}752 753define float @roundeven_f32(float %x) #0 {754; CHECK-LABEL: roundeven_f32:755; CHECK: // %bb.0:756; CHECK-NEXT: frintn s0, s0757; CHECK-NEXT: ret758 %val = call float @llvm.experimental.constrained.roundeven.f32(float %x, metadata !"fpexcept.strict") #0759 ret float %val760}761 762define float @trunc_f32(float %x) #0 {763; CHECK-LABEL: trunc_f32:764; CHECK: // %bb.0:765; CHECK-NEXT: frintz s0, s0766; CHECK-NEXT: ret767 %val = call float @llvm.experimental.constrained.trunc.f32(float %x, metadata !"fpexcept.strict") #0768 ret float %val769}770 771define i32 @fcmp_olt_f32(float %a, float %b) #0 {772; CHECK-LABEL: fcmp_olt_f32:773; CHECK: // %bb.0:774; CHECK-NEXT: fcmp s0, s1775; CHECK-NEXT: cset w0, mi776; CHECK-NEXT: ret777 %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"olt", metadata !"fpexcept.strict") #0778 %conv = zext i1 %cmp to i32779 ret i32 %conv780}781 782define i32 @fcmp_ole_f32(float %a, float %b) #0 {783; CHECK-LABEL: fcmp_ole_f32:784; CHECK: // %bb.0:785; CHECK-NEXT: fcmp s0, s1786; CHECK-NEXT: cset w0, ls787; CHECK-NEXT: ret788 %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ole", metadata !"fpexcept.strict") #0789 %conv = zext i1 %cmp to i32790 ret i32 %conv791}792 793define i32 @fcmp_ogt_f32(float %a, float %b) #0 {794; CHECK-LABEL: fcmp_ogt_f32:795; CHECK: // %bb.0:796; CHECK-NEXT: fcmp s0, s1797; CHECK-NEXT: cset w0, gt798; CHECK-NEXT: ret799 %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ogt", metadata !"fpexcept.strict") #0800 %conv = zext i1 %cmp to i32801 ret i32 %conv802}803 804define i32 @fcmp_oge_f32(float %a, float %b) #0 {805; CHECK-LABEL: fcmp_oge_f32:806; CHECK: // %bb.0:807; CHECK-NEXT: fcmp s0, s1808; CHECK-NEXT: cset w0, ge809; CHECK-NEXT: ret810 %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"oge", metadata !"fpexcept.strict") #0811 %conv = zext i1 %cmp to i32812 ret i32 %conv813}814 815define i32 @fcmp_oeq_f32(float %a, float %b) #0 {816; CHECK-LABEL: fcmp_oeq_f32:817; CHECK: // %bb.0:818; CHECK-NEXT: fcmp s0, s1819; CHECK-NEXT: cset w0, eq820; CHECK-NEXT: ret821 %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"oeq", metadata !"fpexcept.strict") #0822 %conv = zext i1 %cmp to i32823 ret i32 %conv824}825 826define i32 @fcmp_one_f32(float %a, float %b) #0 {827; CHECK-LABEL: fcmp_one_f32:828; CHECK: // %bb.0:829; CHECK-NEXT: fcmp s0, s1830; CHECK-NEXT: cset w8, mi831; CHECK-NEXT: csinc w0, w8, wzr, le832; CHECK-NEXT: ret833 %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"one", metadata !"fpexcept.strict") #0834 %conv = zext i1 %cmp to i32835 ret i32 %conv836}837 838define i32 @fcmp_ult_f32(float %a, float %b) #0 {839; CHECK-LABEL: fcmp_ult_f32:840; CHECK: // %bb.0:841; CHECK-NEXT: fcmp s0, s1842; CHECK-NEXT: cset w0, lt843; CHECK-NEXT: ret844 %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ult", metadata !"fpexcept.strict") #0845 %conv = zext i1 %cmp to i32846 ret i32 %conv847}848 849define i32 @fcmp_ule_f32(float %a, float %b) #0 {850; CHECK-LABEL: fcmp_ule_f32:851; CHECK: // %bb.0:852; CHECK-NEXT: fcmp s0, s1853; CHECK-NEXT: cset w0, le854; CHECK-NEXT: ret855 %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ule", metadata !"fpexcept.strict") #0856 %conv = zext i1 %cmp to i32857 ret i32 %conv858}859 860define i32 @fcmp_ugt_f32(float %a, float %b) #0 {861; CHECK-LABEL: fcmp_ugt_f32:862; CHECK: // %bb.0:863; CHECK-NEXT: fcmp s0, s1864; CHECK-NEXT: cset w0, hi865; CHECK-NEXT: ret866 %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ugt", metadata !"fpexcept.strict") #0867 %conv = zext i1 %cmp to i32868 ret i32 %conv869}870 871define i32 @fcmp_uge_f32(float %a, float %b) #0 {872; CHECK-LABEL: fcmp_uge_f32:873; CHECK: // %bb.0:874; CHECK-NEXT: fcmp s0, s1875; CHECK-NEXT: cset w0, pl876; CHECK-NEXT: ret877 %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"uge", metadata !"fpexcept.strict") #0878 %conv = zext i1 %cmp to i32879 ret i32 %conv880}881 882define i32 @fcmp_ueq_f32(float %a, float %b) #0 {883; CHECK-LABEL: fcmp_ueq_f32:884; CHECK: // %bb.0:885; CHECK-NEXT: fcmp s0, s1886; CHECK-NEXT: cset w8, eq887; CHECK-NEXT: csinc w0, w8, wzr, vc888; CHECK-NEXT: ret889 %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ueq", metadata !"fpexcept.strict") #0890 %conv = zext i1 %cmp to i32891 ret i32 %conv892}893 894define i32 @fcmp_une_f32(float %a, float %b) #0 {895; CHECK-LABEL: fcmp_une_f32:896; CHECK: // %bb.0:897; CHECK-NEXT: fcmp s0, s1898; CHECK-NEXT: cset w0, ne899; CHECK-NEXT: ret900 %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"une", metadata !"fpexcept.strict") #0901 %conv = zext i1 %cmp to i32902 ret i32 %conv903}904 905define i32 @fcmps_olt_f32(float %a, float %b) #0 {906; CHECK-LABEL: fcmps_olt_f32:907; CHECK: // %bb.0:908; CHECK-NEXT: fcmpe s0, s1909; CHECK-NEXT: cset w0, mi910; CHECK-NEXT: ret911 %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"olt", metadata !"fpexcept.strict") #0912 %conv = zext i1 %cmp to i32913 ret i32 %conv914}915 916define i32 @fcmps_ole_f32(float %a, float %b) #0 {917; CHECK-LABEL: fcmps_ole_f32:918; CHECK: // %bb.0:919; CHECK-NEXT: fcmpe s0, s1920; CHECK-NEXT: cset w0, ls921; CHECK-NEXT: ret922 %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ole", metadata !"fpexcept.strict") #0923 %conv = zext i1 %cmp to i32924 ret i32 %conv925}926 927define i32 @fcmps_ogt_f32(float %a, float %b) #0 {928; CHECK-LABEL: fcmps_ogt_f32:929; CHECK: // %bb.0:930; CHECK-NEXT: fcmpe s0, s1931; CHECK-NEXT: cset w0, gt932; CHECK-NEXT: ret933 %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ogt", metadata !"fpexcept.strict") #0934 %conv = zext i1 %cmp to i32935 ret i32 %conv936}937 938define i32 @fcmps_oge_f32(float %a, float %b) #0 {939; CHECK-LABEL: fcmps_oge_f32:940; CHECK: // %bb.0:941; CHECK-NEXT: fcmpe s0, s1942; CHECK-NEXT: cset w0, ge943; CHECK-NEXT: ret944 %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"oge", metadata !"fpexcept.strict") #0945 %conv = zext i1 %cmp to i32946 ret i32 %conv947}948 949define i32 @fcmps_oeq_f32(float %a, float %b) #0 {950; CHECK-LABEL: fcmps_oeq_f32:951; CHECK: // %bb.0:952; CHECK-NEXT: fcmpe s0, s1953; CHECK-NEXT: cset w0, eq954; CHECK-NEXT: ret955 %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"oeq", metadata !"fpexcept.strict") #0956 %conv = zext i1 %cmp to i32957 ret i32 %conv958}959 960define i32 @fcmps_one_f32(float %a, float %b) #0 {961; CHECK-LABEL: fcmps_one_f32:962; CHECK: // %bb.0:963; CHECK-NEXT: fcmpe s0, s1964; CHECK-NEXT: cset w8, mi965; CHECK-NEXT: csinc w0, w8, wzr, le966; CHECK-NEXT: ret967 %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"one", metadata !"fpexcept.strict") #0968 %conv = zext i1 %cmp to i32969 ret i32 %conv970}971 972define i32 @fcmps_ult_f32(float %a, float %b) #0 {973; CHECK-LABEL: fcmps_ult_f32:974; CHECK: // %bb.0:975; CHECK-NEXT: fcmpe s0, s1976; CHECK-NEXT: cset w0, lt977; CHECK-NEXT: ret978 %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ult", metadata !"fpexcept.strict") #0979 %conv = zext i1 %cmp to i32980 ret i32 %conv981}982 983define i32 @fcmps_ule_f32(float %a, float %b) #0 {984; CHECK-LABEL: fcmps_ule_f32:985; CHECK: // %bb.0:986; CHECK-NEXT: fcmpe s0, s1987; CHECK-NEXT: cset w0, le988; CHECK-NEXT: ret989 %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ule", metadata !"fpexcept.strict") #0990 %conv = zext i1 %cmp to i32991 ret i32 %conv992}993 994define i32 @fcmps_ugt_f32(float %a, float %b) #0 {995; CHECK-LABEL: fcmps_ugt_f32:996; CHECK: // %bb.0:997; CHECK-NEXT: fcmpe s0, s1998; CHECK-NEXT: cset w0, hi999; CHECK-NEXT: ret1000 %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ugt", metadata !"fpexcept.strict") #01001 %conv = zext i1 %cmp to i321002 ret i32 %conv1003}1004 1005define i32 @fcmps_uge_f32(float %a, float %b) #0 {1006; CHECK-LABEL: fcmps_uge_f32:1007; CHECK: // %bb.0:1008; CHECK-NEXT: fcmpe s0, s11009; CHECK-NEXT: cset w0, pl1010; CHECK-NEXT: ret1011 %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"uge", metadata !"fpexcept.strict") #01012 %conv = zext i1 %cmp to i321013 ret i32 %conv1014}1015 1016define i32 @fcmps_ueq_f32(float %a, float %b) #0 {1017; CHECK-LABEL: fcmps_ueq_f32:1018; CHECK: // %bb.0:1019; CHECK-NEXT: fcmpe s0, s11020; CHECK-NEXT: cset w8, eq1021; CHECK-NEXT: csinc w0, w8, wzr, vc1022; CHECK-NEXT: ret1023 %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ueq", metadata !"fpexcept.strict") #01024 %conv = zext i1 %cmp to i321025 ret i32 %conv1026}1027 1028define i32 @fcmps_une_f32(float %a, float %b) #0 {1029; CHECK-LABEL: fcmps_une_f32:1030; CHECK: // %bb.0:1031; CHECK-NEXT: fcmpe s0, s11032; CHECK-NEXT: cset w0, ne1033; CHECK-NEXT: ret1034 %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"une", metadata !"fpexcept.strict") #01035 %conv = zext i1 %cmp to i321036 ret i32 %conv1037}1038 1039 1040; Double-precision intrinsics1041 1042define double @add_f64(double %x, double %y) #0 {1043; CHECK-LABEL: add_f64:1044; CHECK: // %bb.0:1045; CHECK-NEXT: fadd d0, d0, d11046; CHECK-NEXT: ret1047 %val = call double @llvm.experimental.constrained.fadd.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #01048 ret double %val1049}1050 1051define double @sub_f64(double %x, double %y) #0 {1052; CHECK-LABEL: sub_f64:1053; CHECK: // %bb.0:1054; CHECK-NEXT: fsub d0, d0, d11055; CHECK-NEXT: ret1056 %val = call double @llvm.experimental.constrained.fsub.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #01057 ret double %val1058}1059 1060define double @mul_f64(double %x, double %y) #0 {1061; CHECK-LABEL: mul_f64:1062; CHECK: // %bb.0:1063; CHECK-NEXT: fmul d0, d0, d11064; CHECK-NEXT: ret1065 %val = call double @llvm.experimental.constrained.fmul.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #01066 ret double %val1067}1068 1069define double @div_f64(double %x, double %y) #0 {1070; CHECK-LABEL: div_f64:1071; CHECK: // %bb.0:1072; CHECK-NEXT: fdiv d0, d0, d11073; CHECK-NEXT: ret1074 %val = call double @llvm.experimental.constrained.fdiv.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #01075 ret double %val1076}1077 1078define double @frem_f64(double %x, double %y) #0 {1079; CHECK-LABEL: frem_f64:1080; CHECK: // %bb.0:1081; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1082; CHECK-NEXT: .cfi_def_cfa_offset 161083; CHECK-NEXT: .cfi_offset w30, -161084; CHECK-NEXT: bl fmod1085; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1086; CHECK-NEXT: ret1087 %val = call double @llvm.experimental.constrained.frem.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #01088 ret double %val1089}1090 1091define double @fma_f64(double %x, double %y, double %z) #0 {1092; CHECK-LABEL: fma_f64:1093; CHECK: // %bb.0:1094; CHECK-NEXT: fmadd d0, d0, d1, d21095; CHECK-NEXT: ret1096 %val = call double @llvm.experimental.constrained.fma.f64(double %x, double %y, double %z, metadata !"round.tonearest", metadata !"fpexcept.strict") #01097 ret double %val1098}1099 1100define i32 @fptosi_i32_f64(double %x) #0 {1101; CHECK-LABEL: fptosi_i32_f64:1102; CHECK: // %bb.0:1103; CHECK-NEXT: fcvtzs w0, d01104; CHECK-NEXT: ret1105 %val = call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %x, metadata !"fpexcept.strict") #01106 ret i32 %val1107}1108 1109define i32 @fptoui_i32_f64(double %x) #0 {1110; CHECK-LABEL: fptoui_i32_f64:1111; CHECK: // %bb.0:1112; CHECK-NEXT: fcvtzu w0, d01113; CHECK-NEXT: ret1114 %val = call i32 @llvm.experimental.constrained.fptoui.i32.f64(double %x, metadata !"fpexcept.strict") #01115 ret i32 %val1116}1117 1118define i64 @fptosi_i64_f64(double %x) #0 {1119; CHECK-LABEL: fptosi_i64_f64:1120; CHECK: // %bb.0:1121; CHECK-NEXT: fcvtzs x0, d01122; CHECK-NEXT: ret1123 %val = call i64 @llvm.experimental.constrained.fptosi.i64.f64(double %x, metadata !"fpexcept.strict") #01124 ret i64 %val1125}1126 1127define i64 @fptoui_i64_f64(double %x) #0 {1128; CHECK-LABEL: fptoui_i64_f64:1129; CHECK: // %bb.0:1130; CHECK-NEXT: fcvtzu x0, d01131; CHECK-NEXT: ret1132 %val = call i64 @llvm.experimental.constrained.fptoui.i64.f64(double %x, metadata !"fpexcept.strict") #01133 ret i64 %val1134}1135 1136define double @sitofp_f64_i32(i32 %x) #0 {1137; CHECK-LABEL: sitofp_f64_i32:1138; CHECK: // %bb.0:1139; CHECK-NEXT: scvtf d0, w01140; CHECK-NEXT: ret1141 %val = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01142 ret double %val1143}1144 1145define double @uitofp_f64_i32(i32 %x) #0 {1146; CHECK-LABEL: uitofp_f64_i32:1147; CHECK: // %bb.0:1148; CHECK-NEXT: ucvtf d0, w01149; CHECK-NEXT: ret1150 %val = call double @llvm.experimental.constrained.uitofp.f64.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01151 ret double %val1152}1153 1154define double @sitofp_f64_i64(i64 %x) #0 {1155; CHECK-LABEL: sitofp_f64_i64:1156; CHECK: // %bb.0:1157; CHECK-NEXT: scvtf d0, x01158; CHECK-NEXT: ret1159 %val = call double @llvm.experimental.constrained.sitofp.f64.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01160 ret double %val1161}1162 1163define double @uitofp_f64_i64(i64 %x) #0 {1164; CHECK-LABEL: uitofp_f64_i64:1165; CHECK: // %bb.0:1166; CHECK-NEXT: ucvtf d0, x01167; CHECK-NEXT: ret1168 %val = call double @llvm.experimental.constrained.uitofp.f64.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01169 ret double %val1170}1171 1172define double @sitofp_f64_i128(i128 %x) #0 {1173; CHECK-LABEL: sitofp_f64_i128:1174; CHECK: // %bb.0:1175; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1176; CHECK-NEXT: .cfi_def_cfa_offset 161177; CHECK-NEXT: .cfi_offset w30, -161178; CHECK-NEXT: bl __floattidf1179; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1180; CHECK-NEXT: ret1181 %val = call double @llvm.experimental.constrained.sitofp.f64.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01182 ret double %val1183}1184 1185define double @uitofp_f64_i128(i128 %x) #0 {1186; CHECK-LABEL: uitofp_f64_i128:1187; CHECK: // %bb.0:1188; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1189; CHECK-NEXT: .cfi_def_cfa_offset 161190; CHECK-NEXT: .cfi_offset w30, -161191; CHECK-NEXT: bl __floatuntidf1192; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1193; CHECK-NEXT: ret1194 %val = call double @llvm.experimental.constrained.uitofp.f64.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01195 ret double %val1196}1197 1198define double @sqrt_f64(double %x) #0 {1199; CHECK-LABEL: sqrt_f64:1200; CHECK: // %bb.0:1201; CHECK-NEXT: fsqrt d0, d01202; CHECK-NEXT: ret1203 %val = call double @llvm.experimental.constrained.sqrt.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01204 ret double %val1205}1206 1207define double @powi_f64(double %x, i32 %y) #0 {1208; CHECK-LABEL: powi_f64:1209; CHECK: // %bb.0:1210; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1211; CHECK-NEXT: .cfi_def_cfa_offset 161212; CHECK-NEXT: .cfi_offset w30, -161213; CHECK-NEXT: bl __powidf21214; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1215; CHECK-NEXT: ret1216 %val = call double @llvm.experimental.constrained.powi.f64(double %x, i32 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #01217 ret double %val1218}1219 1220define double @sin_f64(double %x) #0 {1221; CHECK-LABEL: sin_f64:1222; CHECK: // %bb.0:1223; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1224; CHECK-NEXT: .cfi_def_cfa_offset 161225; CHECK-NEXT: .cfi_offset w30, -161226; CHECK-NEXT: bl sin1227; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1228; CHECK-NEXT: ret1229 %val = call double @llvm.experimental.constrained.sin.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01230 ret double %val1231}1232 1233define double @cos_f64(double %x) #0 {1234; CHECK-LABEL: cos_f64:1235; CHECK: // %bb.0:1236; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1237; CHECK-NEXT: .cfi_def_cfa_offset 161238; CHECK-NEXT: .cfi_offset w30, -161239; CHECK-NEXT: bl cos1240; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1241; CHECK-NEXT: ret1242 %val = call double @llvm.experimental.constrained.cos.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01243 ret double %val1244}1245 1246define double @tan_f64(double %x) #0 {1247; CHECK-LABEL: tan_f64:1248; CHECK: // %bb.0:1249; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1250; CHECK-NEXT: .cfi_def_cfa_offset 161251; CHECK-NEXT: .cfi_offset w30, -161252; CHECK-NEXT: bl tan1253; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1254; CHECK-NEXT: ret1255 %val = call double @llvm.experimental.constrained.tan.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01256 ret double %val1257}1258 1259define double @asin_f64(double %x) #0 {1260; CHECK-LABEL: asin_f64:1261; CHECK: // %bb.0:1262; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1263; CHECK-NEXT: .cfi_def_cfa_offset 161264; CHECK-NEXT: .cfi_offset w30, -161265; CHECK-NEXT: bl asin1266; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1267; CHECK-NEXT: ret1268 %val = call double @llvm.experimental.constrained.asin.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01269 ret double %val1270}1271 1272define double @acos_f64(double %x) #0 {1273; CHECK-LABEL: acos_f64:1274; CHECK: // %bb.0:1275; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1276; CHECK-NEXT: .cfi_def_cfa_offset 161277; CHECK-NEXT: .cfi_offset w30, -161278; CHECK-NEXT: bl acos1279; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1280; CHECK-NEXT: ret1281 %val = call double @llvm.experimental.constrained.acos.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01282 ret double %val1283}1284 1285define double @atan_f64(double %x) #0 {1286; CHECK-LABEL: atan_f64:1287; CHECK: // %bb.0:1288; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1289; CHECK-NEXT: .cfi_def_cfa_offset 161290; CHECK-NEXT: .cfi_offset w30, -161291; CHECK-NEXT: bl atan1292; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1293; CHECK-NEXT: ret1294 %val = call double @llvm.experimental.constrained.atan.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01295 ret double %val1296}1297 1298define double @atan2_f64(double %x, double %y) #0 {1299; CHECK-LABEL: atan2_f64:1300; CHECK: // %bb.0:1301; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1302; CHECK-NEXT: .cfi_def_cfa_offset 161303; CHECK-NEXT: .cfi_offset w30, -161304; CHECK-NEXT: bl atan21305; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1306; CHECK-NEXT: ret1307 %val = call double @llvm.experimental.constrained.atan2.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #01308 ret double %val1309}1310 1311define double @sinh_f64(double %x) #0 {1312; CHECK-LABEL: sinh_f64:1313; CHECK: // %bb.0:1314; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1315; CHECK-NEXT: .cfi_def_cfa_offset 161316; CHECK-NEXT: .cfi_offset w30, -161317; CHECK-NEXT: bl sinh1318; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1319; CHECK-NEXT: ret1320 %val = call double @llvm.experimental.constrained.sinh.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01321 ret double %val1322}1323 1324define double @cosh_f64(double %x) #0 {1325; CHECK-LABEL: cosh_f64:1326; CHECK: // %bb.0:1327; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1328; CHECK-NEXT: .cfi_def_cfa_offset 161329; CHECK-NEXT: .cfi_offset w30, -161330; CHECK-NEXT: bl cosh1331; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1332; CHECK-NEXT: ret1333 %val = call double @llvm.experimental.constrained.cosh.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01334 ret double %val1335}1336 1337define double @tanh_f64(double %x) #0 {1338; CHECK-LABEL: tanh_f64:1339; CHECK: // %bb.0:1340; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1341; CHECK-NEXT: .cfi_def_cfa_offset 161342; CHECK-NEXT: .cfi_offset w30, -161343; CHECK-NEXT: bl tanh1344; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1345; CHECK-NEXT: ret1346 %val = call double @llvm.experimental.constrained.tanh.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01347 ret double %val1348}1349 1350define double @pow_f64(double %x, double %y) #0 {1351; CHECK-LABEL: pow_f64:1352; CHECK: // %bb.0:1353; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1354; CHECK-NEXT: .cfi_def_cfa_offset 161355; CHECK-NEXT: .cfi_offset w30, -161356; CHECK-NEXT: bl pow1357; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1358; CHECK-NEXT: ret1359 %val = call double @llvm.experimental.constrained.pow.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #01360 ret double %val1361}1362 1363define double @log_f64(double %x) #0 {1364; CHECK-LABEL: log_f64:1365; CHECK: // %bb.0:1366; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1367; CHECK-NEXT: .cfi_def_cfa_offset 161368; CHECK-NEXT: .cfi_offset w30, -161369; CHECK-NEXT: bl log1370; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1371; CHECK-NEXT: ret1372 %val = call double @llvm.experimental.constrained.log.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01373 ret double %val1374}1375 1376define double @log10_f64(double %x) #0 {1377; CHECK-LABEL: log10_f64:1378; CHECK: // %bb.0:1379; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1380; CHECK-NEXT: .cfi_def_cfa_offset 161381; CHECK-NEXT: .cfi_offset w30, -161382; CHECK-NEXT: bl log101383; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1384; CHECK-NEXT: ret1385 %val = call double @llvm.experimental.constrained.log10.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01386 ret double %val1387}1388 1389define double @log2_f64(double %x) #0 {1390; CHECK-LABEL: log2_f64:1391; CHECK: // %bb.0:1392; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1393; CHECK-NEXT: .cfi_def_cfa_offset 161394; CHECK-NEXT: .cfi_offset w30, -161395; CHECK-NEXT: bl log21396; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1397; CHECK-NEXT: ret1398 %val = call double @llvm.experimental.constrained.log2.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01399 ret double %val1400}1401 1402define double @exp_f64(double %x) #0 {1403; CHECK-LABEL: exp_f64:1404; CHECK: // %bb.0:1405; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1406; CHECK-NEXT: .cfi_def_cfa_offset 161407; CHECK-NEXT: .cfi_offset w30, -161408; CHECK-NEXT: bl exp1409; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1410; CHECK-NEXT: ret1411 %val = call double @llvm.experimental.constrained.exp.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01412 ret double %val1413}1414 1415define double @exp2_f64(double %x) #0 {1416; CHECK-LABEL: exp2_f64:1417; CHECK: // %bb.0:1418; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1419; CHECK-NEXT: .cfi_def_cfa_offset 161420; CHECK-NEXT: .cfi_offset w30, -161421; CHECK-NEXT: bl exp21422; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1423; CHECK-NEXT: ret1424 %val = call double @llvm.experimental.constrained.exp2.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01425 ret double %val1426}1427 1428define double @rint_f64(double %x) #0 {1429; CHECK-LABEL: rint_f64:1430; CHECK: // %bb.0:1431; CHECK-NEXT: frintx d0, d01432; CHECK-NEXT: ret1433 %val = call double @llvm.experimental.constrained.rint.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01434 ret double %val1435}1436 1437define double @nearbyint_f64(double %x) #0 {1438; CHECK-LABEL: nearbyint_f64:1439; CHECK: // %bb.0:1440; CHECK-NEXT: frinti d0, d01441; CHECK-NEXT: ret1442 %val = call double @llvm.experimental.constrained.nearbyint.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01443 ret double %val1444}1445 1446define i32 @lrint_f64(double %x) #0 {1447; CHECK-LABEL: lrint_f64:1448; CHECK: // %bb.0:1449; CHECK-NEXT: frintx d0, d01450; CHECK-NEXT: fcvtzs w0, d01451; CHECK-NEXT: ret1452 %val = call i32 @llvm.experimental.constrained.lrint.i32.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01453 ret i32 %val1454}1455 1456define i64 @llrint_f64(double %x) #0 {1457; CHECK-LABEL: llrint_f64:1458; CHECK: // %bb.0:1459; CHECK-NEXT: frintx d0, d01460; CHECK-NEXT: fcvtzs x0, d01461; CHECK-NEXT: ret1462 %val = call i64 @llvm.experimental.constrained.llrint.i64.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01463 ret i64 %val1464}1465 1466define double @maxnum_f64(double %x, double %y) #0 {1467; CHECK-LABEL: maxnum_f64:1468; CHECK: // %bb.0:1469; CHECK-NEXT: fmaxnm d0, d0, d11470; CHECK-NEXT: ret1471 %val = call double @llvm.experimental.constrained.maxnum.f64(double %x, double %y, metadata !"fpexcept.strict") #01472 ret double %val1473}1474 1475define double @minnum_f64(double %x, double %y) #0 {1476; CHECK-LABEL: minnum_f64:1477; CHECK: // %bb.0:1478; CHECK-NEXT: fminnm d0, d0, d11479; CHECK-NEXT: ret1480 %val = call double @llvm.experimental.constrained.minnum.f64(double %x, double %y, metadata !"fpexcept.strict") #01481 ret double %val1482}1483 1484define double @maximum_f64(double %x, double %y) #0 {1485; CHECK-LABEL: maximum_f64:1486; CHECK: // %bb.0:1487; CHECK-NEXT: fmax d0, d0, d11488; CHECK-NEXT: ret1489 %val = call double @llvm.experimental.constrained.maximum.f64(double %x, double %y, metadata !"fpexcept.strict") #01490 ret double %val1491}1492 1493define double @minimum_f64(double %x, double %y) #0 {1494; CHECK-LABEL: minimum_f64:1495; CHECK: // %bb.0:1496; CHECK-NEXT: fmin d0, d0, d11497; CHECK-NEXT: ret1498 %val = call double @llvm.experimental.constrained.minimum.f64(double %x, double %y, metadata !"fpexcept.strict") #01499 ret double %val1500}1501 1502define double @ceil_f64(double %x) #0 {1503; CHECK-LABEL: ceil_f64:1504; CHECK: // %bb.0:1505; CHECK-NEXT: frintp d0, d01506; CHECK-NEXT: ret1507 %val = call double @llvm.experimental.constrained.ceil.f64(double %x, metadata !"fpexcept.strict") #01508 ret double %val1509}1510 1511define double @floor_f64(double %x) #0 {1512; CHECK-LABEL: floor_f64:1513; CHECK: // %bb.0:1514; CHECK-NEXT: frintm d0, d01515; CHECK-NEXT: ret1516 %val = call double @llvm.experimental.constrained.floor.f64(double %x, metadata !"fpexcept.strict") #01517 ret double %val1518}1519 1520define i32 @lround_f64(double %x) #0 {1521; CHECK-LABEL: lround_f64:1522; CHECK: // %bb.0:1523; CHECK-NEXT: fcvtas w0, d01524; CHECK-NEXT: ret1525 %val = call i32 @llvm.experimental.constrained.lround.i32.f64(double %x, metadata !"fpexcept.strict") #01526 ret i32 %val1527}1528 1529define i64 @llround_f64(double %x) #0 {1530; CHECK-LABEL: llround_f64:1531; CHECK: // %bb.0:1532; CHECK-NEXT: fcvtas x0, d01533; CHECK-NEXT: ret1534 %val = call i64 @llvm.experimental.constrained.llround.i64.f64(double %x, metadata !"fpexcept.strict") #01535 ret i64 %val1536}1537 1538define double @round_f64(double %x) #0 {1539; CHECK-LABEL: round_f64:1540; CHECK: // %bb.0:1541; CHECK-NEXT: frinta d0, d01542; CHECK-NEXT: ret1543 %val = call double @llvm.experimental.constrained.round.f64(double %x, metadata !"fpexcept.strict") #01544 ret double %val1545}1546 1547define double @roundeven_f64(double %x) #0 {1548; CHECK-LABEL: roundeven_f64:1549; CHECK: // %bb.0:1550; CHECK-NEXT: frintn d0, d01551; CHECK-NEXT: ret1552 %val = call double @llvm.experimental.constrained.roundeven.f64(double %x, metadata !"fpexcept.strict") #01553 ret double %val1554}1555 1556define double @trunc_f64(double %x) #0 {1557; CHECK-LABEL: trunc_f64:1558; CHECK: // %bb.0:1559; CHECK-NEXT: frintz d0, d01560; CHECK-NEXT: ret1561 %val = call double @llvm.experimental.constrained.trunc.f64(double %x, metadata !"fpexcept.strict") #01562 ret double %val1563}1564 1565define i32 @fcmp_olt_f64(double %a, double %b) #0 {1566; CHECK-LABEL: fcmp_olt_f64:1567; CHECK: // %bb.0:1568; CHECK-NEXT: fcmp d0, d11569; CHECK-NEXT: cset w0, mi1570; CHECK-NEXT: ret1571 %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"olt", metadata !"fpexcept.strict") #01572 %conv = zext i1 %cmp to i321573 ret i32 %conv1574}1575 1576define i32 @fcmp_ole_f64(double %a, double %b) #0 {1577; CHECK-LABEL: fcmp_ole_f64:1578; CHECK: // %bb.0:1579; CHECK-NEXT: fcmp d0, d11580; CHECK-NEXT: cset w0, ls1581; CHECK-NEXT: ret1582 %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ole", metadata !"fpexcept.strict") #01583 %conv = zext i1 %cmp to i321584 ret i32 %conv1585}1586 1587define i32 @fcmp_ogt_f64(double %a, double %b) #0 {1588; CHECK-LABEL: fcmp_ogt_f64:1589; CHECK: // %bb.0:1590; CHECK-NEXT: fcmp d0, d11591; CHECK-NEXT: cset w0, gt1592; CHECK-NEXT: ret1593 %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ogt", metadata !"fpexcept.strict") #01594 %conv = zext i1 %cmp to i321595 ret i32 %conv1596}1597 1598define i32 @fcmp_oge_f64(double %a, double %b) #0 {1599; CHECK-LABEL: fcmp_oge_f64:1600; CHECK: // %bb.0:1601; CHECK-NEXT: fcmp d0, d11602; CHECK-NEXT: cset w0, ge1603; CHECK-NEXT: ret1604 %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"oge", metadata !"fpexcept.strict") #01605 %conv = zext i1 %cmp to i321606 ret i32 %conv1607}1608 1609define i32 @fcmp_oeq_f64(double %a, double %b) #0 {1610; CHECK-LABEL: fcmp_oeq_f64:1611; CHECK: // %bb.0:1612; CHECK-NEXT: fcmp d0, d11613; CHECK-NEXT: cset w0, eq1614; CHECK-NEXT: ret1615 %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.strict") #01616 %conv = zext i1 %cmp to i321617 ret i32 %conv1618}1619 1620define i32 @fcmp_one_f64(double %a, double %b) #0 {1621; CHECK-LABEL: fcmp_one_f64:1622; CHECK: // %bb.0:1623; CHECK-NEXT: fcmp d0, d11624; CHECK-NEXT: cset w8, mi1625; CHECK-NEXT: csinc w0, w8, wzr, le1626; CHECK-NEXT: ret1627 %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"one", metadata !"fpexcept.strict") #01628 %conv = zext i1 %cmp to i321629 ret i32 %conv1630}1631 1632define i32 @fcmp_ult_f64(double %a, double %b) #0 {1633; CHECK-LABEL: fcmp_ult_f64:1634; CHECK: // %bb.0:1635; CHECK-NEXT: fcmp d0, d11636; CHECK-NEXT: cset w0, lt1637; CHECK-NEXT: ret1638 %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ult", metadata !"fpexcept.strict") #01639 %conv = zext i1 %cmp to i321640 ret i32 %conv1641}1642 1643define i32 @fcmp_ule_f64(double %a, double %b) #0 {1644; CHECK-LABEL: fcmp_ule_f64:1645; CHECK: // %bb.0:1646; CHECK-NEXT: fcmp d0, d11647; CHECK-NEXT: cset w0, le1648; CHECK-NEXT: ret1649 %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ule", metadata !"fpexcept.strict") #01650 %conv = zext i1 %cmp to i321651 ret i32 %conv1652}1653 1654define i32 @fcmp_ugt_f64(double %a, double %b) #0 {1655; CHECK-LABEL: fcmp_ugt_f64:1656; CHECK: // %bb.0:1657; CHECK-NEXT: fcmp d0, d11658; CHECK-NEXT: cset w0, hi1659; CHECK-NEXT: ret1660 %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ugt", metadata !"fpexcept.strict") #01661 %conv = zext i1 %cmp to i321662 ret i32 %conv1663}1664 1665define i32 @fcmp_uge_f64(double %a, double %b) #0 {1666; CHECK-LABEL: fcmp_uge_f64:1667; CHECK: // %bb.0:1668; CHECK-NEXT: fcmp d0, d11669; CHECK-NEXT: cset w0, pl1670; CHECK-NEXT: ret1671 %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"uge", metadata !"fpexcept.strict") #01672 %conv = zext i1 %cmp to i321673 ret i32 %conv1674}1675 1676define i32 @fcmp_ueq_f64(double %a, double %b) #0 {1677; CHECK-LABEL: fcmp_ueq_f64:1678; CHECK: // %bb.0:1679; CHECK-NEXT: fcmp d0, d11680; CHECK-NEXT: cset w8, eq1681; CHECK-NEXT: csinc w0, w8, wzr, vc1682; CHECK-NEXT: ret1683 %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ueq", metadata !"fpexcept.strict") #01684 %conv = zext i1 %cmp to i321685 ret i32 %conv1686}1687 1688define i32 @fcmp_une_f64(double %a, double %b) #0 {1689; CHECK-LABEL: fcmp_une_f64:1690; CHECK: // %bb.0:1691; CHECK-NEXT: fcmp d0, d11692; CHECK-NEXT: cset w0, ne1693; CHECK-NEXT: ret1694 %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"une", metadata !"fpexcept.strict") #01695 %conv = zext i1 %cmp to i321696 ret i32 %conv1697}1698 1699define i32 @fcmps_olt_f64(double %a, double %b) #0 {1700; CHECK-LABEL: fcmps_olt_f64:1701; CHECK: // %bb.0:1702; CHECK-NEXT: fcmpe d0, d11703; CHECK-NEXT: cset w0, mi1704; CHECK-NEXT: ret1705 %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"olt", metadata !"fpexcept.strict") #01706 %conv = zext i1 %cmp to i321707 ret i32 %conv1708}1709 1710define i32 @fcmps_ole_f64(double %a, double %b) #0 {1711; CHECK-LABEL: fcmps_ole_f64:1712; CHECK: // %bb.0:1713; CHECK-NEXT: fcmpe d0, d11714; CHECK-NEXT: cset w0, ls1715; CHECK-NEXT: ret1716 %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ole", metadata !"fpexcept.strict") #01717 %conv = zext i1 %cmp to i321718 ret i32 %conv1719}1720 1721define i32 @fcmps_ogt_f64(double %a, double %b) #0 {1722; CHECK-LABEL: fcmps_ogt_f64:1723; CHECK: // %bb.0:1724; CHECK-NEXT: fcmpe d0, d11725; CHECK-NEXT: cset w0, gt1726; CHECK-NEXT: ret1727 %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ogt", metadata !"fpexcept.strict") #01728 %conv = zext i1 %cmp to i321729 ret i32 %conv1730}1731 1732define i32 @fcmps_oge_f64(double %a, double %b) #0 {1733; CHECK-LABEL: fcmps_oge_f64:1734; CHECK: // %bb.0:1735; CHECK-NEXT: fcmpe d0, d11736; CHECK-NEXT: cset w0, ge1737; CHECK-NEXT: ret1738 %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"oge", metadata !"fpexcept.strict") #01739 %conv = zext i1 %cmp to i321740 ret i32 %conv1741}1742 1743define i32 @fcmps_oeq_f64(double %a, double %b) #0 {1744; CHECK-LABEL: fcmps_oeq_f64:1745; CHECK: // %bb.0:1746; CHECK-NEXT: fcmpe d0, d11747; CHECK-NEXT: cset w0, eq1748; CHECK-NEXT: ret1749 %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.strict") #01750 %conv = zext i1 %cmp to i321751 ret i32 %conv1752}1753 1754define i32 @fcmps_one_f64(double %a, double %b) #0 {1755; CHECK-LABEL: fcmps_one_f64:1756; CHECK: // %bb.0:1757; CHECK-NEXT: fcmpe d0, d11758; CHECK-NEXT: cset w8, mi1759; CHECK-NEXT: csinc w0, w8, wzr, le1760; CHECK-NEXT: ret1761 %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"one", metadata !"fpexcept.strict") #01762 %conv = zext i1 %cmp to i321763 ret i32 %conv1764}1765 1766define i32 @fcmps_ult_f64(double %a, double %b) #0 {1767; CHECK-LABEL: fcmps_ult_f64:1768; CHECK: // %bb.0:1769; CHECK-NEXT: fcmpe d0, d11770; CHECK-NEXT: cset w0, lt1771; CHECK-NEXT: ret1772 %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ult", metadata !"fpexcept.strict") #01773 %conv = zext i1 %cmp to i321774 ret i32 %conv1775}1776 1777define i32 @fcmps_ule_f64(double %a, double %b) #0 {1778; CHECK-LABEL: fcmps_ule_f64:1779; CHECK: // %bb.0:1780; CHECK-NEXT: fcmpe d0, d11781; CHECK-NEXT: cset w0, le1782; CHECK-NEXT: ret1783 %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ule", metadata !"fpexcept.strict") #01784 %conv = zext i1 %cmp to i321785 ret i32 %conv1786}1787 1788define i32 @fcmps_ugt_f64(double %a, double %b) #0 {1789; CHECK-LABEL: fcmps_ugt_f64:1790; CHECK: // %bb.0:1791; CHECK-NEXT: fcmpe d0, d11792; CHECK-NEXT: cset w0, hi1793; CHECK-NEXT: ret1794 %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ugt", metadata !"fpexcept.strict") #01795 %conv = zext i1 %cmp to i321796 ret i32 %conv1797}1798 1799define i32 @fcmps_uge_f64(double %a, double %b) #0 {1800; CHECK-LABEL: fcmps_uge_f64:1801; CHECK: // %bb.0:1802; CHECK-NEXT: fcmpe d0, d11803; CHECK-NEXT: cset w0, pl1804; CHECK-NEXT: ret1805 %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"uge", metadata !"fpexcept.strict") #01806 %conv = zext i1 %cmp to i321807 ret i32 %conv1808}1809 1810define i32 @fcmps_ueq_f64(double %a, double %b) #0 {1811; CHECK-LABEL: fcmps_ueq_f64:1812; CHECK: // %bb.0:1813; CHECK-NEXT: fcmpe d0, d11814; CHECK-NEXT: cset w8, eq1815; CHECK-NEXT: csinc w0, w8, wzr, vc1816; CHECK-NEXT: ret1817 %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ueq", metadata !"fpexcept.strict") #01818 %conv = zext i1 %cmp to i321819 ret i32 %conv1820}1821 1822define i32 @fcmps_une_f64(double %a, double %b) #0 {1823; CHECK-LABEL: fcmps_une_f64:1824; CHECK: // %bb.0:1825; CHECK-NEXT: fcmpe d0, d11826; CHECK-NEXT: cset w0, ne1827; CHECK-NEXT: ret1828 %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"une", metadata !"fpexcept.strict") #01829 %conv = zext i1 %cmp to i321830 ret i32 %conv1831}1832 1833 1834; Long-double-precision intrinsics1835 1836define fp128 @add_f128(fp128 %x, fp128 %y) #0 {1837; CHECK-LABEL: add_f128:1838; CHECK: // %bb.0:1839; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1840; CHECK-NEXT: .cfi_def_cfa_offset 161841; CHECK-NEXT: .cfi_offset w30, -161842; CHECK-NEXT: bl __addtf31843; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1844; CHECK-NEXT: ret1845 %val = call fp128 @llvm.experimental.constrained.fadd.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #01846 ret fp128 %val1847}1848 1849define fp128 @sub_f128(fp128 %x, fp128 %y) #0 {1850; CHECK-LABEL: sub_f128:1851; CHECK: // %bb.0:1852; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1853; CHECK-NEXT: .cfi_def_cfa_offset 161854; CHECK-NEXT: .cfi_offset w30, -161855; CHECK-NEXT: bl __subtf31856; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1857; CHECK-NEXT: ret1858 %val = call fp128 @llvm.experimental.constrained.fsub.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #01859 ret fp128 %val1860}1861 1862define fp128 @mul_f128(fp128 %x, fp128 %y) #0 {1863; CHECK-LABEL: mul_f128:1864; CHECK: // %bb.0:1865; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1866; CHECK-NEXT: .cfi_def_cfa_offset 161867; CHECK-NEXT: .cfi_offset w30, -161868; CHECK-NEXT: bl __multf31869; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1870; CHECK-NEXT: ret1871 %val = call fp128 @llvm.experimental.constrained.fmul.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #01872 ret fp128 %val1873}1874 1875define fp128 @div_f128(fp128 %x, fp128 %y) #0 {1876; CHECK-LABEL: div_f128:1877; CHECK: // %bb.0:1878; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1879; CHECK-NEXT: .cfi_def_cfa_offset 161880; CHECK-NEXT: .cfi_offset w30, -161881; CHECK-NEXT: bl __divtf31882; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1883; CHECK-NEXT: ret1884 %val = call fp128 @llvm.experimental.constrained.fdiv.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #01885 ret fp128 %val1886}1887 1888define fp128 @frem_f128(fp128 %x, fp128 %y) #0 {1889; CHECK-LABEL: frem_f128:1890; CHECK: // %bb.0:1891; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1892; CHECK-NEXT: .cfi_def_cfa_offset 161893; CHECK-NEXT: .cfi_offset w30, -161894; CHECK-NEXT: bl fmodl1895; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1896; CHECK-NEXT: ret1897 %val = call fp128 @llvm.experimental.constrained.frem.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #01898 ret fp128 %val1899}1900 1901define fp128 @fma_f128(fp128 %x, fp128 %y, fp128 %z) #0 {1902; CHECK-LABEL: fma_f128:1903; CHECK: // %bb.0:1904; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1905; CHECK-NEXT: .cfi_def_cfa_offset 161906; CHECK-NEXT: .cfi_offset w30, -161907; CHECK-NEXT: bl fmal1908; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1909; CHECK-NEXT: ret1910 %val = call fp128 @llvm.experimental.constrained.fma.f128(fp128 %x, fp128 %y, fp128 %z, metadata !"round.tonearest", metadata !"fpexcept.strict") #01911 ret fp128 %val1912}1913 1914define i32 @fptosi_i32_f128(fp128 %x) #0 {1915; CHECK-LABEL: fptosi_i32_f128:1916; CHECK: // %bb.0:1917; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1918; CHECK-NEXT: .cfi_def_cfa_offset 161919; CHECK-NEXT: .cfi_offset w30, -161920; CHECK-NEXT: bl __fixtfsi1921; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1922; CHECK-NEXT: ret1923 %val = call i32 @llvm.experimental.constrained.fptosi.i32.f128(fp128 %x, metadata !"fpexcept.strict") #01924 ret i32 %val1925}1926 1927define i32 @fptoui_i32_f128(fp128 %x) #0 {1928; CHECK-LABEL: fptoui_i32_f128:1929; CHECK: // %bb.0:1930; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1931; CHECK-NEXT: .cfi_def_cfa_offset 161932; CHECK-NEXT: .cfi_offset w30, -161933; CHECK-NEXT: bl __fixunstfsi1934; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1935; CHECK-NEXT: ret1936 %val = call i32 @llvm.experimental.constrained.fptoui.i32.f128(fp128 %x, metadata !"fpexcept.strict") #01937 ret i32 %val1938}1939 1940define i64 @fptosi_i64_f128(fp128 %x) #0 {1941; CHECK-LABEL: fptosi_i64_f128:1942; CHECK: // %bb.0:1943; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1944; CHECK-NEXT: .cfi_def_cfa_offset 161945; CHECK-NEXT: .cfi_offset w30, -161946; CHECK-NEXT: bl __fixtfdi1947; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1948; CHECK-NEXT: ret1949 %val = call i64 @llvm.experimental.constrained.fptosi.i64.f128(fp128 %x, metadata !"fpexcept.strict") #01950 ret i64 %val1951}1952 1953define i64 @fptoui_i64_f128(fp128 %x) #0 {1954; CHECK-LABEL: fptoui_i64_f128:1955; CHECK: // %bb.0:1956; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1957; CHECK-NEXT: .cfi_def_cfa_offset 161958; CHECK-NEXT: .cfi_offset w30, -161959; CHECK-NEXT: bl __fixunstfdi1960; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1961; CHECK-NEXT: ret1962 %val = call i64 @llvm.experimental.constrained.fptoui.i64.f128(fp128 %x, metadata !"fpexcept.strict") #01963 ret i64 %val1964}1965 1966define fp128 @sitofp_f128_i32(i32 %x) #0 {1967; CHECK-LABEL: sitofp_f128_i32:1968; CHECK: // %bb.0:1969; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1970; CHECK-NEXT: .cfi_def_cfa_offset 161971; CHECK-NEXT: .cfi_offset w30, -161972; CHECK-NEXT: bl __floatsitf1973; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1974; CHECK-NEXT: ret1975 %val = call fp128 @llvm.experimental.constrained.sitofp.f128.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01976 ret fp128 %val1977}1978 1979define fp128 @uitofp_f128_i32(i32 %x) #0 {1980; CHECK-LABEL: uitofp_f128_i32:1981; CHECK: // %bb.0:1982; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1983; CHECK-NEXT: .cfi_def_cfa_offset 161984; CHECK-NEXT: .cfi_offset w30, -161985; CHECK-NEXT: bl __floatunsitf1986; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1987; CHECK-NEXT: ret1988 %val = call fp128 @llvm.experimental.constrained.uitofp.f128.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #01989 ret fp128 %val1990}1991 1992define fp128 @sitofp_f128_i64(i64 %x) #0 {1993; CHECK-LABEL: sitofp_f128_i64:1994; CHECK: // %bb.0:1995; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1996; CHECK-NEXT: .cfi_def_cfa_offset 161997; CHECK-NEXT: .cfi_offset w30, -161998; CHECK-NEXT: bl __floatditf1999; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2000; CHECK-NEXT: ret2001 %val = call fp128 @llvm.experimental.constrained.sitofp.f128.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02002 ret fp128 %val2003}2004 2005define fp128 @uitofp_f128_i64(i64 %x) #0 {2006; CHECK-LABEL: uitofp_f128_i64:2007; CHECK: // %bb.0:2008; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2009; CHECK-NEXT: .cfi_def_cfa_offset 162010; CHECK-NEXT: .cfi_offset w30, -162011; CHECK-NEXT: bl __floatunditf2012; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2013; CHECK-NEXT: ret2014 %val = call fp128 @llvm.experimental.constrained.uitofp.f128.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02015 ret fp128 %val2016}2017 2018define fp128 @sitofp_f128_i128(i128 %x) #0 {2019; CHECK-LABEL: sitofp_f128_i128:2020; CHECK: // %bb.0:2021; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2022; CHECK-NEXT: .cfi_def_cfa_offset 162023; CHECK-NEXT: .cfi_offset w30, -162024; CHECK-NEXT: bl __floattitf2025; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2026; CHECK-NEXT: ret2027 %val = call fp128 @llvm.experimental.constrained.sitofp.f128.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02028 ret fp128 %val2029}2030 2031define fp128 @uitofp_f128_i128(i128 %x) #0 {2032; CHECK-LABEL: uitofp_f128_i128:2033; CHECK: // %bb.0:2034; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2035; CHECK-NEXT: .cfi_def_cfa_offset 162036; CHECK-NEXT: .cfi_offset w30, -162037; CHECK-NEXT: bl __floatuntitf2038; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2039; CHECK-NEXT: ret2040 %val = call fp128 @llvm.experimental.constrained.uitofp.f128.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02041 ret fp128 %val2042}2043 2044define fp128 @sqrt_f128(fp128 %x) #0 {2045; CHECK-LABEL: sqrt_f128:2046; CHECK: // %bb.0:2047; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2048; CHECK-NEXT: .cfi_def_cfa_offset 162049; CHECK-NEXT: .cfi_offset w30, -162050; CHECK-NEXT: bl sqrtl2051; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2052; CHECK-NEXT: ret2053 %val = call fp128 @llvm.experimental.constrained.sqrt.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02054 ret fp128 %val2055}2056 2057define fp128 @powi_f128(fp128 %x, i32 %y) #0 {2058; CHECK-LABEL: powi_f128:2059; CHECK: // %bb.0:2060; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2061; CHECK-NEXT: .cfi_def_cfa_offset 162062; CHECK-NEXT: .cfi_offset w30, -162063; CHECK-NEXT: bl __powitf22064; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2065; CHECK-NEXT: ret2066 %val = call fp128 @llvm.experimental.constrained.powi.f128(fp128 %x, i32 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #02067 ret fp128 %val2068}2069 2070define fp128 @sin_f128(fp128 %x) #0 {2071; CHECK-LABEL: sin_f128:2072; CHECK: // %bb.0:2073; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2074; CHECK-NEXT: .cfi_def_cfa_offset 162075; CHECK-NEXT: .cfi_offset w30, -162076; CHECK-NEXT: bl sinl2077; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2078; CHECK-NEXT: ret2079 %val = call fp128 @llvm.experimental.constrained.sin.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02080 ret fp128 %val2081}2082 2083define fp128 @cos_f128(fp128 %x) #0 {2084; CHECK-LABEL: cos_f128:2085; CHECK: // %bb.0:2086; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2087; CHECK-NEXT: .cfi_def_cfa_offset 162088; CHECK-NEXT: .cfi_offset w30, -162089; CHECK-NEXT: bl cosl2090; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2091; CHECK-NEXT: ret2092 %val = call fp128 @llvm.experimental.constrained.cos.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02093 ret fp128 %val2094}2095 2096define fp128 @tan_f128(fp128 %x) #0 {2097; CHECK-LABEL: tan_f128:2098; CHECK: // %bb.0:2099; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2100; CHECK-NEXT: .cfi_def_cfa_offset 162101; CHECK-NEXT: .cfi_offset w30, -162102; CHECK-NEXT: bl tanl2103; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2104; CHECK-NEXT: ret2105 %val = call fp128 @llvm.experimental.constrained.tan.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02106 ret fp128 %val2107}2108 2109define fp128 @asin_f128(fp128 %x) #0 {2110; CHECK-LABEL: asin_f128:2111; CHECK: // %bb.0:2112; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2113; CHECK-NEXT: .cfi_def_cfa_offset 162114; CHECK-NEXT: .cfi_offset w30, -162115; CHECK-NEXT: bl asinl2116; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2117; CHECK-NEXT: ret2118 %val = call fp128 @llvm.experimental.constrained.asin.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02119 ret fp128 %val2120}2121 2122define fp128 @acos_f128(fp128 %x) #0 {2123; CHECK-LABEL: acos_f128:2124; CHECK: // %bb.0:2125; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2126; CHECK-NEXT: .cfi_def_cfa_offset 162127; CHECK-NEXT: .cfi_offset w30, -162128; CHECK-NEXT: bl acosl2129; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2130; CHECK-NEXT: ret2131 %val = call fp128 @llvm.experimental.constrained.acos.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02132 ret fp128 %val2133}2134 2135define fp128 @atan_f128(fp128 %x) #0 {2136; CHECK-LABEL: atan_f128:2137; CHECK: // %bb.0:2138; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2139; CHECK-NEXT: .cfi_def_cfa_offset 162140; CHECK-NEXT: .cfi_offset w30, -162141; CHECK-NEXT: bl atanl2142; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2143; CHECK-NEXT: ret2144 %val = call fp128 @llvm.experimental.constrained.atan.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02145 ret fp128 %val2146}2147 2148define fp128 @atan2_f128(fp128 %x, fp128 %y) #0 {2149; CHECK-LABEL: atan2_f128:2150; CHECK: // %bb.0:2151; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2152; CHECK-NEXT: .cfi_def_cfa_offset 162153; CHECK-NEXT: .cfi_offset w30, -162154; CHECK-NEXT: bl atan2l2155; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2156; CHECK-NEXT: ret2157 %val = call fp128 @llvm.experimental.constrained.atan2.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #02158 ret fp128 %val2159}2160 2161define fp128 @sinh_f128(fp128 %x) #0 {2162; CHECK-LABEL: sinh_f128:2163; CHECK: // %bb.0:2164; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2165; CHECK-NEXT: .cfi_def_cfa_offset 162166; CHECK-NEXT: .cfi_offset w30, -162167; CHECK-NEXT: bl sinhl2168; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2169; CHECK-NEXT: ret2170 %val = call fp128 @llvm.experimental.constrained.sinh.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02171 ret fp128 %val2172}2173 2174define fp128 @cosh_f128(fp128 %x) #0 {2175; CHECK-LABEL: cosh_f128:2176; CHECK: // %bb.0:2177; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2178; CHECK-NEXT: .cfi_def_cfa_offset 162179; CHECK-NEXT: .cfi_offset w30, -162180; CHECK-NEXT: bl coshl2181; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2182; CHECK-NEXT: ret2183 %val = call fp128 @llvm.experimental.constrained.cosh.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02184 ret fp128 %val2185}2186 2187define fp128 @tanh_f128(fp128 %x) #0 {2188; CHECK-LABEL: tanh_f128:2189; CHECK: // %bb.0:2190; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2191; CHECK-NEXT: .cfi_def_cfa_offset 162192; CHECK-NEXT: .cfi_offset w30, -162193; CHECK-NEXT: bl tanhl2194; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2195; CHECK-NEXT: ret2196 %val = call fp128 @llvm.experimental.constrained.tanh.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02197 ret fp128 %val2198}2199 2200define fp128 @pow_f128(fp128 %x, fp128 %y) #0 {2201; CHECK-LABEL: pow_f128:2202; CHECK: // %bb.0:2203; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2204; CHECK-NEXT: .cfi_def_cfa_offset 162205; CHECK-NEXT: .cfi_offset w30, -162206; CHECK-NEXT: bl powl2207; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2208; CHECK-NEXT: ret2209 %val = call fp128 @llvm.experimental.constrained.pow.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #02210 ret fp128 %val2211}2212 2213define fp128 @log_f128(fp128 %x) #0 {2214; CHECK-LABEL: log_f128:2215; CHECK: // %bb.0:2216; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2217; CHECK-NEXT: .cfi_def_cfa_offset 162218; CHECK-NEXT: .cfi_offset w30, -162219; CHECK-NEXT: bl logl2220; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2221; CHECK-NEXT: ret2222 %val = call fp128 @llvm.experimental.constrained.log.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02223 ret fp128 %val2224}2225 2226define fp128 @log10_f128(fp128 %x) #0 {2227; CHECK-LABEL: log10_f128:2228; CHECK: // %bb.0:2229; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2230; CHECK-NEXT: .cfi_def_cfa_offset 162231; CHECK-NEXT: .cfi_offset w30, -162232; CHECK-NEXT: bl log10l2233; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2234; CHECK-NEXT: ret2235 %val = call fp128 @llvm.experimental.constrained.log10.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02236 ret fp128 %val2237}2238 2239define fp128 @log2_f128(fp128 %x) #0 {2240; CHECK-LABEL: log2_f128:2241; CHECK: // %bb.0:2242; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2243; CHECK-NEXT: .cfi_def_cfa_offset 162244; CHECK-NEXT: .cfi_offset w30, -162245; CHECK-NEXT: bl log2l2246; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2247; CHECK-NEXT: ret2248 %val = call fp128 @llvm.experimental.constrained.log2.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02249 ret fp128 %val2250}2251 2252define fp128 @exp_f128(fp128 %x) #0 {2253; CHECK-LABEL: exp_f128:2254; CHECK: // %bb.0:2255; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2256; CHECK-NEXT: .cfi_def_cfa_offset 162257; CHECK-NEXT: .cfi_offset w30, -162258; CHECK-NEXT: bl expl2259; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2260; CHECK-NEXT: ret2261 %val = call fp128 @llvm.experimental.constrained.exp.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02262 ret fp128 %val2263}2264 2265define fp128 @exp2_f128(fp128 %x) #0 {2266; CHECK-LABEL: exp2_f128:2267; CHECK: // %bb.0:2268; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2269; CHECK-NEXT: .cfi_def_cfa_offset 162270; CHECK-NEXT: .cfi_offset w30, -162271; CHECK-NEXT: bl exp2l2272; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2273; CHECK-NEXT: ret2274 %val = call fp128 @llvm.experimental.constrained.exp2.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02275 ret fp128 %val2276}2277 2278define fp128 @rint_f128(fp128 %x) #0 {2279; CHECK-LABEL: rint_f128:2280; CHECK: // %bb.0:2281; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2282; CHECK-NEXT: .cfi_def_cfa_offset 162283; CHECK-NEXT: .cfi_offset w30, -162284; CHECK-NEXT: bl rintl2285; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2286; CHECK-NEXT: ret2287 %val = call fp128 @llvm.experimental.constrained.rint.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02288 ret fp128 %val2289}2290 2291define fp128 @nearbyint_f128(fp128 %x) #0 {2292; CHECK-LABEL: nearbyint_f128:2293; CHECK: // %bb.0:2294; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2295; CHECK-NEXT: .cfi_def_cfa_offset 162296; CHECK-NEXT: .cfi_offset w30, -162297; CHECK-NEXT: bl nearbyintl2298; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2299; CHECK-NEXT: ret2300 %val = call fp128 @llvm.experimental.constrained.nearbyint.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02301 ret fp128 %val2302}2303 2304define i32 @lrint_f128(fp128 %x) #0 {2305; CHECK-LABEL: lrint_f128:2306; CHECK: // %bb.0:2307; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2308; CHECK-NEXT: .cfi_def_cfa_offset 162309; CHECK-NEXT: .cfi_offset w30, -162310; CHECK-NEXT: bl lrintl2311; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2312; CHECK-NEXT: ret2313 %val = call i32 @llvm.experimental.constrained.lrint.i32.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02314 ret i32 %val2315}2316 2317define i64 @llrint_f128(fp128 %x) #0 {2318; CHECK-LABEL: llrint_f128:2319; CHECK: // %bb.0:2320; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2321; CHECK-NEXT: .cfi_def_cfa_offset 162322; CHECK-NEXT: .cfi_offset w30, -162323; CHECK-NEXT: bl llrintl2324; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2325; CHECK-NEXT: ret2326 %val = call i64 @llvm.experimental.constrained.llrint.i64.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02327 ret i64 %val2328}2329 2330define fp128 @maxnum_f128(fp128 %x, fp128 %y) #0 {2331; CHECK-LABEL: maxnum_f128:2332; CHECK: // %bb.0:2333; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2334; CHECK-NEXT: .cfi_def_cfa_offset 162335; CHECK-NEXT: .cfi_offset w30, -162336; CHECK-NEXT: bl fmaxl2337; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2338; CHECK-NEXT: ret2339 %val = call fp128 @llvm.experimental.constrained.maxnum.f128(fp128 %x, fp128 %y, metadata !"fpexcept.strict") #02340 ret fp128 %val2341}2342 2343define fp128 @minnum_f128(fp128 %x, fp128 %y) #0 {2344; CHECK-LABEL: minnum_f128:2345; CHECK: // %bb.0:2346; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2347; CHECK-NEXT: .cfi_def_cfa_offset 162348; CHECK-NEXT: .cfi_offset w30, -162349; CHECK-NEXT: bl fminl2350; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2351; CHECK-NEXT: ret2352 %val = call fp128 @llvm.experimental.constrained.minnum.f128(fp128 %x, fp128 %y, metadata !"fpexcept.strict") #02353 ret fp128 %val2354}2355 2356define fp128 @ceil_f128(fp128 %x) #0 {2357; CHECK-LABEL: ceil_f128:2358; CHECK: // %bb.0:2359; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2360; CHECK-NEXT: .cfi_def_cfa_offset 162361; CHECK-NEXT: .cfi_offset w30, -162362; CHECK-NEXT: bl ceill2363; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2364; CHECK-NEXT: ret2365 %val = call fp128 @llvm.experimental.constrained.ceil.f128(fp128 %x, metadata !"fpexcept.strict") #02366 ret fp128 %val2367}2368 2369define fp128 @floor_f128(fp128 %x) #0 {2370; CHECK-LABEL: floor_f128:2371; CHECK: // %bb.0:2372; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2373; CHECK-NEXT: .cfi_def_cfa_offset 162374; CHECK-NEXT: .cfi_offset w30, -162375; CHECK-NEXT: bl floorl2376; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2377; CHECK-NEXT: ret2378 %val = call fp128 @llvm.experimental.constrained.floor.f128(fp128 %x, metadata !"fpexcept.strict") #02379 ret fp128 %val2380}2381 2382define i32 @lround_f128(fp128 %x) #0 {2383; CHECK-LABEL: lround_f128:2384; CHECK: // %bb.0:2385; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2386; CHECK-NEXT: .cfi_def_cfa_offset 162387; CHECK-NEXT: .cfi_offset w30, -162388; CHECK-NEXT: bl lroundl2389; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2390; CHECK-NEXT: ret2391 %val = call i32 @llvm.experimental.constrained.lround.i32.f128(fp128 %x, metadata !"fpexcept.strict") #02392 ret i32 %val2393}2394 2395define i64 @llround_f128(fp128 %x) #0 {2396; CHECK-LABEL: llround_f128:2397; CHECK: // %bb.0:2398; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2399; CHECK-NEXT: .cfi_def_cfa_offset 162400; CHECK-NEXT: .cfi_offset w30, -162401; CHECK-NEXT: bl llroundl2402; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2403; CHECK-NEXT: ret2404 %val = call i64 @llvm.experimental.constrained.llround.i64.f128(fp128 %x, metadata !"fpexcept.strict") #02405 ret i64 %val2406}2407 2408define fp128 @round_f128(fp128 %x) #0 {2409; CHECK-LABEL: round_f128:2410; CHECK: // %bb.0:2411; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2412; CHECK-NEXT: .cfi_def_cfa_offset 162413; CHECK-NEXT: .cfi_offset w30, -162414; CHECK-NEXT: bl roundl2415; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2416; CHECK-NEXT: ret2417 %val = call fp128 @llvm.experimental.constrained.round.f128(fp128 %x, metadata !"fpexcept.strict") #02418 ret fp128 %val2419}2420 2421define fp128 @trunc_f128(fp128 %x) #0 {2422; CHECK-LABEL: trunc_f128:2423; CHECK: // %bb.0:2424; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2425; CHECK-NEXT: .cfi_def_cfa_offset 162426; CHECK-NEXT: .cfi_offset w30, -162427; CHECK-NEXT: bl truncl2428; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2429; CHECK-NEXT: ret2430 %val = call fp128 @llvm.experimental.constrained.trunc.f128(fp128 %x, metadata !"fpexcept.strict") #02431 ret fp128 %val2432}2433 2434define i32 @fcmp_olt_f128(fp128 %a, fp128 %b) #0 {2435; CHECK-LABEL: fcmp_olt_f128:2436; CHECK: // %bb.0:2437; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2438; CHECK-NEXT: .cfi_def_cfa_offset 162439; CHECK-NEXT: .cfi_offset w30, -162440; CHECK-NEXT: bl __lttf22441; CHECK-NEXT: cmp w0, #02442; CHECK-NEXT: cset w0, mi2443; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2444; CHECK-NEXT: ret2445 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #02446 %conv = zext i1 %cmp to i322447 ret i32 %conv2448}2449 2450define i32 @fcmp_ole_f128(fp128 %a, fp128 %b) #0 {2451; CHECK-LABEL: fcmp_ole_f128:2452; CHECK: // %bb.0:2453; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2454; CHECK-NEXT: .cfi_def_cfa_offset 162455; CHECK-NEXT: .cfi_offset w30, -162456; CHECK-NEXT: bl __letf22457; CHECK-NEXT: cmp w0, #02458; CHECK-NEXT: cset w0, le2459; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2460; CHECK-NEXT: ret2461 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #02462 %conv = zext i1 %cmp to i322463 ret i32 %conv2464}2465 2466define i32 @fcmp_ogt_f128(fp128 %a, fp128 %b) #0 {2467; CHECK-LABEL: fcmp_ogt_f128:2468; CHECK: // %bb.0:2469; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2470; CHECK-NEXT: .cfi_def_cfa_offset 162471; CHECK-NEXT: .cfi_offset w30, -162472; CHECK-NEXT: bl __gttf22473; CHECK-NEXT: cmp w0, #02474; CHECK-NEXT: cset w0, gt2475; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2476; CHECK-NEXT: ret2477 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #02478 %conv = zext i1 %cmp to i322479 ret i32 %conv2480}2481 2482define i32 @fcmp_oge_f128(fp128 %a, fp128 %b) #0 {2483; CHECK-LABEL: fcmp_oge_f128:2484; CHECK: // %bb.0:2485; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2486; CHECK-NEXT: .cfi_def_cfa_offset 162487; CHECK-NEXT: .cfi_offset w30, -162488; CHECK-NEXT: bl __getf22489; CHECK-NEXT: cmp w0, #02490; CHECK-NEXT: cset w0, pl2491; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2492; CHECK-NEXT: ret2493 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #02494 %conv = zext i1 %cmp to i322495 ret i32 %conv2496}2497 2498define i32 @fcmp_oeq_f128(fp128 %a, fp128 %b) #0 {2499; CHECK-LABEL: fcmp_oeq_f128:2500; CHECK: // %bb.0:2501; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2502; CHECK-NEXT: .cfi_def_cfa_offset 162503; CHECK-NEXT: .cfi_offset w30, -162504; CHECK-NEXT: bl __eqtf22505; CHECK-NEXT: cmp w0, #02506; CHECK-NEXT: cset w0, eq2507; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2508; CHECK-NEXT: ret2509 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #02510 %conv = zext i1 %cmp to i322511 ret i32 %conv2512}2513 2514define i32 @fcmp_one_f128(fp128 %a, fp128 %b) #0 {2515; CHECK-LABEL: fcmp_one_f128:2516; CHECK: // %bb.0:2517; CHECK-NEXT: sub sp, sp, #482518; CHECK-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill2519; CHECK-NEXT: .cfi_def_cfa_offset 482520; CHECK-NEXT: .cfi_offset w19, -82521; CHECK-NEXT: .cfi_offset w30, -162522; CHECK-NEXT: stp q0, q1, [sp] // 32-byte Folded Spill2523; CHECK-NEXT: bl __eqtf22524; CHECK-NEXT: ldp q0, q1, [sp] // 32-byte Folded Reload2525; CHECK-NEXT: mov w19, w02526; CHECK-NEXT: bl __unordtf22527; CHECK-NEXT: cmp w0, #02528; CHECK-NEXT: ccmp w19, #0, #4, eq2529; CHECK-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload2530; CHECK-NEXT: cset w0, ne2531; CHECK-NEXT: add sp, sp, #482532; CHECK-NEXT: ret2533 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") #02534 %conv = zext i1 %cmp to i322535 ret i32 %conv2536}2537 2538define i32 @fcmp_ult_f128(fp128 %a, fp128 %b) #0 {2539; CHECK-LABEL: fcmp_ult_f128:2540; CHECK: // %bb.0:2541; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2542; CHECK-NEXT: .cfi_def_cfa_offset 162543; CHECK-NEXT: .cfi_offset w30, -162544; CHECK-NEXT: bl __getf22545; CHECK-NEXT: cmp w0, #02546; CHECK-NEXT: cset w0, mi2547; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2548; CHECK-NEXT: ret2549 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #02550 %conv = zext i1 %cmp to i322551 ret i32 %conv2552}2553 2554define i32 @fcmp_ule_f128(fp128 %a, fp128 %b) #0 {2555; CHECK-LABEL: fcmp_ule_f128:2556; CHECK: // %bb.0:2557; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2558; CHECK-NEXT: .cfi_def_cfa_offset 162559; CHECK-NEXT: .cfi_offset w30, -162560; CHECK-NEXT: bl __gttf22561; CHECK-NEXT: cmp w0, #02562; CHECK-NEXT: cset w0, le2563; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2564; CHECK-NEXT: ret2565 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #02566 %conv = zext i1 %cmp to i322567 ret i32 %conv2568}2569 2570define i32 @fcmp_ugt_f128(fp128 %a, fp128 %b) #0 {2571; CHECK-LABEL: fcmp_ugt_f128:2572; CHECK: // %bb.0:2573; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2574; CHECK-NEXT: .cfi_def_cfa_offset 162575; CHECK-NEXT: .cfi_offset w30, -162576; CHECK-NEXT: bl __letf22577; CHECK-NEXT: cmp w0, #02578; CHECK-NEXT: cset w0, gt2579; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2580; CHECK-NEXT: ret2581 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #02582 %conv = zext i1 %cmp to i322583 ret i32 %conv2584}2585 2586define i32 @fcmp_uge_f128(fp128 %a, fp128 %b) #0 {2587; CHECK-LABEL: fcmp_uge_f128:2588; CHECK: // %bb.0:2589; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2590; CHECK-NEXT: .cfi_def_cfa_offset 162591; CHECK-NEXT: .cfi_offset w30, -162592; CHECK-NEXT: bl __lttf22593; CHECK-NEXT: cmp w0, #02594; CHECK-NEXT: cset w0, pl2595; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2596; CHECK-NEXT: ret2597 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #02598 %conv = zext i1 %cmp to i322599 ret i32 %conv2600}2601 2602define i32 @fcmp_ueq_f128(fp128 %a, fp128 %b) #0 {2603; CHECK-LABEL: fcmp_ueq_f128:2604; CHECK: // %bb.0:2605; CHECK-NEXT: sub sp, sp, #482606; CHECK-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill2607; CHECK-NEXT: .cfi_def_cfa_offset 482608; CHECK-NEXT: .cfi_offset w19, -82609; CHECK-NEXT: .cfi_offset w30, -162610; CHECK-NEXT: stp q0, q1, [sp] // 32-byte Folded Spill2611; CHECK-NEXT: bl __eqtf22612; CHECK-NEXT: ldp q0, q1, [sp] // 32-byte Folded Reload2613; CHECK-NEXT: mov w19, w02614; CHECK-NEXT: bl __unordtf22615; CHECK-NEXT: cmp w0, #02616; CHECK-NEXT: ccmp w19, #0, #4, eq2617; CHECK-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload2618; CHECK-NEXT: cset w0, eq2619; CHECK-NEXT: add sp, sp, #482620; CHECK-NEXT: ret2621 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #02622 %conv = zext i1 %cmp to i322623 ret i32 %conv2624}2625 2626define i32 @fcmp_une_f128(fp128 %a, fp128 %b) #0 {2627; CHECK-LABEL: fcmp_une_f128:2628; CHECK: // %bb.0:2629; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2630; CHECK-NEXT: .cfi_def_cfa_offset 162631; CHECK-NEXT: .cfi_offset w30, -162632; CHECK-NEXT: bl __netf22633; CHECK-NEXT: cmp w0, #02634; CHECK-NEXT: cset w0, ne2635; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2636; CHECK-NEXT: ret2637 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") #02638 %conv = zext i1 %cmp to i322639 ret i32 %conv2640}2641 2642define i32 @fcmps_olt_f128(fp128 %a, fp128 %b) #0 {2643; CHECK-LABEL: fcmps_olt_f128:2644; CHECK: // %bb.0:2645; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2646; CHECK-NEXT: .cfi_def_cfa_offset 162647; CHECK-NEXT: .cfi_offset w30, -162648; CHECK-NEXT: bl __lttf22649; CHECK-NEXT: cmp w0, #02650; CHECK-NEXT: cset w0, mi2651; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2652; CHECK-NEXT: ret2653 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #02654 %conv = zext i1 %cmp to i322655 ret i32 %conv2656}2657 2658define i32 @fcmps_ole_f128(fp128 %a, fp128 %b) #0 {2659; CHECK-LABEL: fcmps_ole_f128:2660; CHECK: // %bb.0:2661; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2662; CHECK-NEXT: .cfi_def_cfa_offset 162663; CHECK-NEXT: .cfi_offset w30, -162664; CHECK-NEXT: bl __letf22665; CHECK-NEXT: cmp w0, #02666; CHECK-NEXT: cset w0, le2667; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2668; CHECK-NEXT: ret2669 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #02670 %conv = zext i1 %cmp to i322671 ret i32 %conv2672}2673 2674define i32 @fcmps_ogt_f128(fp128 %a, fp128 %b) #0 {2675; CHECK-LABEL: fcmps_ogt_f128:2676; CHECK: // %bb.0:2677; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2678; CHECK-NEXT: .cfi_def_cfa_offset 162679; CHECK-NEXT: .cfi_offset w30, -162680; CHECK-NEXT: bl __gttf22681; CHECK-NEXT: cmp w0, #02682; CHECK-NEXT: cset w0, gt2683; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2684; CHECK-NEXT: ret2685 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #02686 %conv = zext i1 %cmp to i322687 ret i32 %conv2688}2689 2690define i32 @fcmps_oge_f128(fp128 %a, fp128 %b) #0 {2691; CHECK-LABEL: fcmps_oge_f128:2692; CHECK: // %bb.0:2693; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2694; CHECK-NEXT: .cfi_def_cfa_offset 162695; CHECK-NEXT: .cfi_offset w30, -162696; CHECK-NEXT: bl __getf22697; CHECK-NEXT: cmp w0, #02698; CHECK-NEXT: cset w0, pl2699; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2700; CHECK-NEXT: ret2701 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #02702 %conv = zext i1 %cmp to i322703 ret i32 %conv2704}2705 2706define i32 @fcmps_oeq_f128(fp128 %a, fp128 %b) #0 {2707; CHECK-LABEL: fcmps_oeq_f128:2708; CHECK: // %bb.0:2709; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2710; CHECK-NEXT: .cfi_def_cfa_offset 162711; CHECK-NEXT: .cfi_offset w30, -162712; CHECK-NEXT: bl __eqtf22713; CHECK-NEXT: cmp w0, #02714; CHECK-NEXT: cset w0, eq2715; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2716; CHECK-NEXT: ret2717 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #02718 %conv = zext i1 %cmp to i322719 ret i32 %conv2720}2721 2722define i32 @fcmps_one_f128(fp128 %a, fp128 %b) #0 {2723; CHECK-LABEL: fcmps_one_f128:2724; CHECK: // %bb.0:2725; CHECK-NEXT: sub sp, sp, #482726; CHECK-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill2727; CHECK-NEXT: .cfi_def_cfa_offset 482728; CHECK-NEXT: .cfi_offset w19, -82729; CHECK-NEXT: .cfi_offset w30, -162730; CHECK-NEXT: stp q0, q1, [sp] // 32-byte Folded Spill2731; CHECK-NEXT: bl __eqtf22732; CHECK-NEXT: ldp q0, q1, [sp] // 32-byte Folded Reload2733; CHECK-NEXT: mov w19, w02734; CHECK-NEXT: bl __unordtf22735; CHECK-NEXT: cmp w0, #02736; CHECK-NEXT: ccmp w19, #0, #4, eq2737; CHECK-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload2738; CHECK-NEXT: cset w0, ne2739; CHECK-NEXT: add sp, sp, #482740; CHECK-NEXT: ret2741 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") #02742 %conv = zext i1 %cmp to i322743 ret i32 %conv2744}2745 2746define i32 @fcmps_ult_f128(fp128 %a, fp128 %b) #0 {2747; CHECK-LABEL: fcmps_ult_f128:2748; CHECK: // %bb.0:2749; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2750; CHECK-NEXT: .cfi_def_cfa_offset 162751; CHECK-NEXT: .cfi_offset w30, -162752; CHECK-NEXT: bl __getf22753; CHECK-NEXT: cmp w0, #02754; CHECK-NEXT: cset w0, mi2755; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2756; CHECK-NEXT: ret2757 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #02758 %conv = zext i1 %cmp to i322759 ret i32 %conv2760}2761 2762define i32 @fcmps_ule_f128(fp128 %a, fp128 %b) #0 {2763; CHECK-LABEL: fcmps_ule_f128:2764; CHECK: // %bb.0:2765; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2766; CHECK-NEXT: .cfi_def_cfa_offset 162767; CHECK-NEXT: .cfi_offset w30, -162768; CHECK-NEXT: bl __gttf22769; CHECK-NEXT: cmp w0, #02770; CHECK-NEXT: cset w0, le2771; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2772; CHECK-NEXT: ret2773 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #02774 %conv = zext i1 %cmp to i322775 ret i32 %conv2776}2777 2778define i32 @fcmps_ugt_f128(fp128 %a, fp128 %b) #0 {2779; CHECK-LABEL: fcmps_ugt_f128:2780; CHECK: // %bb.0:2781; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2782; CHECK-NEXT: .cfi_def_cfa_offset 162783; CHECK-NEXT: .cfi_offset w30, -162784; CHECK-NEXT: bl __letf22785; CHECK-NEXT: cmp w0, #02786; CHECK-NEXT: cset w0, gt2787; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2788; CHECK-NEXT: ret2789 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #02790 %conv = zext i1 %cmp to i322791 ret i32 %conv2792}2793 2794define i32 @fcmps_uge_f128(fp128 %a, fp128 %b) #0 {2795; CHECK-LABEL: fcmps_uge_f128:2796; CHECK: // %bb.0:2797; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2798; CHECK-NEXT: .cfi_def_cfa_offset 162799; CHECK-NEXT: .cfi_offset w30, -162800; CHECK-NEXT: bl __lttf22801; CHECK-NEXT: cmp w0, #02802; CHECK-NEXT: cset w0, pl2803; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2804; CHECK-NEXT: ret2805 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #02806 %conv = zext i1 %cmp to i322807 ret i32 %conv2808}2809 2810define i32 @fcmps_ueq_f128(fp128 %a, fp128 %b) #0 {2811; CHECK-LABEL: fcmps_ueq_f128:2812; CHECK: // %bb.0:2813; CHECK-NEXT: sub sp, sp, #482814; CHECK-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill2815; CHECK-NEXT: .cfi_def_cfa_offset 482816; CHECK-NEXT: .cfi_offset w19, -82817; CHECK-NEXT: .cfi_offset w30, -162818; CHECK-NEXT: stp q0, q1, [sp] // 32-byte Folded Spill2819; CHECK-NEXT: bl __eqtf22820; CHECK-NEXT: ldp q0, q1, [sp] // 32-byte Folded Reload2821; CHECK-NEXT: mov w19, w02822; CHECK-NEXT: bl __unordtf22823; CHECK-NEXT: cmp w0, #02824; CHECK-NEXT: ccmp w19, #0, #4, eq2825; CHECK-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload2826; CHECK-NEXT: cset w0, eq2827; CHECK-NEXT: add sp, sp, #482828; CHECK-NEXT: ret2829 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #02830 %conv = zext i1 %cmp to i322831 ret i32 %conv2832}2833 2834define i32 @fcmps_une_f128(fp128 %a, fp128 %b) #0 {2835; CHECK-LABEL: fcmps_une_f128:2836; CHECK: // %bb.0:2837; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2838; CHECK-NEXT: .cfi_def_cfa_offset 162839; CHECK-NEXT: .cfi_offset w30, -162840; CHECK-NEXT: bl __netf22841; CHECK-NEXT: cmp w0, #02842; CHECK-NEXT: cset w0, ne2843; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2844; CHECK-NEXT: ret2845 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") #02846 %conv = zext i1 %cmp to i322847 ret i32 %conv2848}2849 2850 2851; Intrinsics to convert between floating-point types2852 2853define float @fptrunc_f32_f64(double %x) #0 {2854; CHECK-LABEL: fptrunc_f32_f64:2855; CHECK: // %bb.0:2856; CHECK-NEXT: fcvt s0, d02857; CHECK-NEXT: ret2858 %val = call float @llvm.experimental.constrained.fptrunc.f32.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02859 ret float %val2860}2861 2862define float @fptrunc_f32_f128(fp128 %x) #0 {2863; CHECK-LABEL: fptrunc_f32_f128:2864; CHECK: // %bb.0:2865; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2866; CHECK-NEXT: .cfi_def_cfa_offset 162867; CHECK-NEXT: .cfi_offset w30, -162868; CHECK-NEXT: bl __trunctfsf22869; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2870; CHECK-NEXT: ret2871 %val = call float @llvm.experimental.constrained.fptrunc.f32.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02872 ret float %val2873}2874 2875define double @fptrunc_f64_f128(fp128 %x) #0 {2876; CHECK-LABEL: fptrunc_f64_f128:2877; CHECK: // %bb.0:2878; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2879; CHECK-NEXT: .cfi_def_cfa_offset 162880; CHECK-NEXT: .cfi_offset w30, -162881; CHECK-NEXT: bl __trunctfdf22882; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2883; CHECK-NEXT: ret2884 %val = call double @llvm.experimental.constrained.fptrunc.f64.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02885 ret double %val2886}2887 2888define double @fpext_f64_f32(float %x) #0 {2889; CHECK-LABEL: fpext_f64_f32:2890; CHECK: // %bb.0:2891; CHECK-NEXT: fcvt d0, s02892; CHECK-NEXT: ret2893 %val = call double @llvm.experimental.constrained.fpext.f64.f32(float %x, metadata !"fpexcept.strict") #02894 ret double %val2895}2896 2897define fp128 @fpext_f128_f32(float %x) #0 {2898; CHECK-LABEL: fpext_f128_f32:2899; CHECK: // %bb.0:2900; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2901; CHECK-NEXT: .cfi_def_cfa_offset 162902; CHECK-NEXT: .cfi_offset w30, -162903; CHECK-NEXT: bl __extendsftf22904; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2905; CHECK-NEXT: ret2906 %val = call fp128 @llvm.experimental.constrained.fpext.f128.f32(float %x, metadata !"fpexcept.strict") #02907 ret fp128 %val2908}2909 2910define fp128 @fpext_f128_f64(double %x) #0 {2911; CHECK-LABEL: fpext_f128_f64:2912; CHECK: // %bb.0:2913; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2914; CHECK-NEXT: .cfi_def_cfa_offset 162915; CHECK-NEXT: .cfi_offset w30, -162916; CHECK-NEXT: bl __extenddftf22917; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2918; CHECK-NEXT: ret2919 %val = call fp128 @llvm.experimental.constrained.fpext.f128.f64(double %x, metadata !"fpexcept.strict") #02920 ret fp128 %val2921}2922 2923define <1 x double> @sin_v1f64(<1 x double> %x, <1 x double> %y) #0 {2924; CHECK-LABEL: sin_v1f64:2925; CHECK: // %bb.0:2926; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2927; CHECK-NEXT: .cfi_def_cfa_offset 162928; CHECK-NEXT: .cfi_offset w30, -162929; CHECK-NEXT: bl sin2930; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2931; CHECK-NEXT: ret2932 %val = call <1 x double> @llvm.experimental.constrained.sin.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02933 ret <1 x double> %val2934}2935 2936define <1 x double> @cos_v1f64(<1 x double> %x, <1 x double> %y) #0 {2937; CHECK-LABEL: cos_v1f64:2938; CHECK: // %bb.0:2939; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2940; CHECK-NEXT: .cfi_def_cfa_offset 162941; CHECK-NEXT: .cfi_offset w30, -162942; CHECK-NEXT: bl cos2943; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2944; CHECK-NEXT: ret2945 %val = call <1 x double> @llvm.experimental.constrained.cos.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02946 ret <1 x double> %val2947}2948 2949define <1 x double> @tan_v1f64(<1 x double> %x, <1 x double> %y) #0 {2950; CHECK-LABEL: tan_v1f64:2951; CHECK: // %bb.0:2952; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2953; CHECK-NEXT: .cfi_def_cfa_offset 162954; CHECK-NEXT: .cfi_offset w30, -162955; CHECK-NEXT: bl tan2956; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2957; CHECK-NEXT: ret2958 %val = call <1 x double> @llvm.experimental.constrained.tan.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02959 ret <1 x double> %val2960}2961 2962define <1 x double> @asin_v1f64(<1 x double> %x, <1 x double> %y) #0 {2963; CHECK-LABEL: asin_v1f64:2964; CHECK: // %bb.0:2965; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2966; CHECK-NEXT: .cfi_def_cfa_offset 162967; CHECK-NEXT: .cfi_offset w30, -162968; CHECK-NEXT: bl asin2969; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2970; CHECK-NEXT: ret2971 %val = call <1 x double> @llvm.experimental.constrained.asin.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02972 ret <1 x double> %val2973}2974 2975define <1 x double> @acos_v1f64(<1 x double> %x, <1 x double> %y) #0 {2976; CHECK-LABEL: acos_v1f64:2977; CHECK: // %bb.0:2978; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2979; CHECK-NEXT: .cfi_def_cfa_offset 162980; CHECK-NEXT: .cfi_offset w30, -162981; CHECK-NEXT: bl acos2982; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2983; CHECK-NEXT: ret2984 %val = call <1 x double> @llvm.experimental.constrained.acos.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02985 ret <1 x double> %val2986}2987 2988define <1 x double> @atan_v1f64(<1 x double> %x, <1 x double> %y) #0 {2989; CHECK-LABEL: atan_v1f64:2990; CHECK: // %bb.0:2991; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill2992; CHECK-NEXT: .cfi_def_cfa_offset 162993; CHECK-NEXT: .cfi_offset w30, -162994; CHECK-NEXT: bl atan2995; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload2996; CHECK-NEXT: ret2997 %val = call <1 x double> @llvm.experimental.constrained.atan.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #02998 ret <1 x double> %val2999}3000 3001define <1 x double> @atan2_v1f64(<1 x double> %x, <1 x double> %y) #0 {3002; CHECK-LABEL: atan2_v1f64:3003; CHECK: // %bb.0:3004; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill3005; CHECK-NEXT: .cfi_def_cfa_offset 163006; CHECK-NEXT: .cfi_offset w30, -163007; CHECK-NEXT: bl atan23008; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload3009; CHECK-NEXT: ret3010 %val = call <1 x double> @llvm.experimental.constrained.atan2.v1f64(<1 x double> %x, <1 x double> %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #03011 ret <1 x double> %val3012}3013 3014define <1 x double> @sinh_v1f64(<1 x double> %x, <1 x double> %y) #0 {3015; CHECK-LABEL: sinh_v1f64:3016; CHECK: // %bb.0:3017; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill3018; CHECK-NEXT: .cfi_def_cfa_offset 163019; CHECK-NEXT: .cfi_offset w30, -163020; CHECK-NEXT: bl sinh3021; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload3022; CHECK-NEXT: ret3023 %val = call <1 x double> @llvm.experimental.constrained.sinh.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #03024 ret <1 x double> %val3025}3026 3027define <1 x double> @cosh_v1f64(<1 x double> %x, <1 x double> %y) #0 {3028; CHECK-LABEL: cosh_v1f64:3029; CHECK: // %bb.0:3030; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill3031; CHECK-NEXT: .cfi_def_cfa_offset 163032; CHECK-NEXT: .cfi_offset w30, -163033; CHECK-NEXT: bl cosh3034; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload3035; CHECK-NEXT: ret3036 %val = call <1 x double> @llvm.experimental.constrained.cosh.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #03037 ret <1 x double> %val3038}3039 3040define <1 x double> @tanh_v1f64(<1 x double> %x, <1 x double> %y) #0 {3041; CHECK-LABEL: tanh_v1f64:3042; CHECK: // %bb.0:3043; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill3044; CHECK-NEXT: .cfi_def_cfa_offset 163045; CHECK-NEXT: .cfi_offset w30, -163046; CHECK-NEXT: bl tanh3047; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload3048; CHECK-NEXT: ret3049 %val = call <1 x double> @llvm.experimental.constrained.tanh.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #03050 ret <1 x double> %val3051}3052 3053define <1 x double> @pow_v1f64(<1 x double> %x, <1 x double> %y) #0 {3054; CHECK-LABEL: pow_v1f64:3055; CHECK: // %bb.0:3056; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill3057; CHECK-NEXT: .cfi_def_cfa_offset 163058; CHECK-NEXT: .cfi_offset w30, -163059; CHECK-NEXT: bl pow3060; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload3061; CHECK-NEXT: ret3062 %val = call <1 x double> @llvm.experimental.constrained.pow.v1f64(<1 x double> %x, <1 x double> %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #03063 ret <1 x double> %val3064}3065 3066define <1 x double> @log_v1f64(<1 x double> %x, <1 x double> %y) #0 {3067; CHECK-LABEL: log_v1f64:3068; CHECK: // %bb.0:3069; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill3070; CHECK-NEXT: .cfi_def_cfa_offset 163071; CHECK-NEXT: .cfi_offset w30, -163072; CHECK-NEXT: bl log3073; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload3074; CHECK-NEXT: ret3075 %val = call <1 x double> @llvm.experimental.constrained.log.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #03076 ret <1 x double> %val3077}3078 3079define <1 x double> @log2_v1f64(<1 x double> %x, <1 x double> %y) #0 {3080; CHECK-LABEL: log2_v1f64:3081; CHECK: // %bb.0:3082; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill3083; CHECK-NEXT: .cfi_def_cfa_offset 163084; CHECK-NEXT: .cfi_offset w30, -163085; CHECK-NEXT: bl log23086; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload3087; CHECK-NEXT: ret3088 %val = call <1 x double> @llvm.experimental.constrained.log2.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #03089 ret <1 x double> %val3090}3091 3092define <1 x double> @log10_v1f64(<1 x double> %x, <1 x double> %y) #0 {3093; CHECK-LABEL: log10_v1f64:3094; CHECK: // %bb.0:3095; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill3096; CHECK-NEXT: .cfi_def_cfa_offset 163097; CHECK-NEXT: .cfi_offset w30, -163098; CHECK-NEXT: bl log103099; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload3100; CHECK-NEXT: ret3101 %val = call <1 x double> @llvm.experimental.constrained.log10.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #03102 ret <1 x double> %val3103}3104 3105define <1 x double> @exp_v1f64(<1 x double> %x, <1 x double> %y) #0 {3106; CHECK-LABEL: exp_v1f64:3107; CHECK: // %bb.0:3108; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill3109; CHECK-NEXT: .cfi_def_cfa_offset 163110; CHECK-NEXT: .cfi_offset w30, -163111; CHECK-NEXT: bl exp3112; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload3113; CHECK-NEXT: ret3114 %val = call <1 x double> @llvm.experimental.constrained.exp.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #03115 ret <1 x double> %val3116}3117 3118define <1 x double> @exp2_v1f64(<1 x double> %x, <1 x double> %y) #0 {3119; CHECK-LABEL: exp2_v1f64:3120; CHECK: // %bb.0:3121; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill3122; CHECK-NEXT: .cfi_def_cfa_offset 163123; CHECK-NEXT: .cfi_offset w30, -163124; CHECK-NEXT: bl exp23125; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload3126; CHECK-NEXT: ret3127 %val = call <1 x double> @llvm.experimental.constrained.exp2.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #03128 ret <1 x double> %val3129}3130 3131attributes #0 = { strictfp }3132 3133declare float @llvm.experimental.constrained.fadd.f32(float, float, metadata, metadata)3134declare float @llvm.experimental.constrained.fsub.f32(float, float, metadata, metadata)3135declare float @llvm.experimental.constrained.fmul.f32(float, float, metadata, metadata)3136declare float @llvm.experimental.constrained.fdiv.f32(float, float, metadata, metadata)3137declare float @llvm.experimental.constrained.frem.f32(float, float, metadata, metadata)3138declare float @llvm.experimental.constrained.fma.f32(float, float, float, metadata, metadata)3139declare i32 @llvm.experimental.constrained.fptosi.i32.f32(float, metadata)3140declare i32 @llvm.experimental.constrained.fptoui.i32.f32(float, metadata)3141declare i64 @llvm.experimental.constrained.fptosi.i64.f32(float, metadata)3142declare i64 @llvm.experimental.constrained.fptoui.i64.f32(float, metadata)3143declare float @llvm.experimental.constrained.sitofp.f32.i32(i32, metadata, metadata)3144declare float @llvm.experimental.constrained.uitofp.f32.i32(i32, metadata, metadata)3145declare float @llvm.experimental.constrained.sitofp.f32.i64(i64, metadata, metadata)3146declare float @llvm.experimental.constrained.uitofp.f32.i64(i64, metadata, metadata)3147declare float @llvm.experimental.constrained.sitofp.f32.i128(i128, metadata, metadata)3148declare float @llvm.experimental.constrained.uitofp.f32.i128(i128, metadata, metadata)3149declare float @llvm.experimental.constrained.sqrt.f32(float, metadata, metadata)3150declare float @llvm.experimental.constrained.powi.f32(float, i32, metadata, metadata)3151declare float @llvm.experimental.constrained.sin.f32(float, metadata, metadata)3152declare float @llvm.experimental.constrained.cos.f32(float, metadata, metadata)3153declare float @llvm.experimental.constrained.tan.f32(float, metadata, metadata)3154declare float @llvm.experimental.constrained.asin.f32(float, metadata, metadata)3155declare float @llvm.experimental.constrained.acos.f32(float, metadata, metadata)3156declare float @llvm.experimental.constrained.atan.f32(float, metadata, metadata)3157declare float @llvm.experimental.constrained.atan2.f32(float, float, metadata, metadata)3158declare float @llvm.experimental.constrained.sinh.f32(float, metadata, metadata)3159declare float @llvm.experimental.constrained.cosh.f32(float, metadata, metadata)3160declare float @llvm.experimental.constrained.tanh.f32(float, metadata, metadata)3161declare float @llvm.experimental.constrained.pow.f32(float, float, metadata, metadata)3162declare float @llvm.experimental.constrained.log.f32(float, metadata, metadata)3163declare float @llvm.experimental.constrained.log10.f32(float, metadata, metadata)3164declare float @llvm.experimental.constrained.log2.f32(float, metadata, metadata)3165declare float @llvm.experimental.constrained.exp.f32(float, metadata, metadata)3166declare float @llvm.experimental.constrained.exp2.f32(float, metadata, metadata)3167declare float @llvm.experimental.constrained.rint.f32(float, metadata, metadata)3168declare float @llvm.experimental.constrained.nearbyint.f32(float, metadata, metadata)3169declare i32 @llvm.experimental.constrained.lrint.i32.f32(float, metadata, metadata)3170declare i64 @llvm.experimental.constrained.llrint.i64.f32(float, metadata, metadata)3171declare float @llvm.experimental.constrained.maxnum.f32(float, float, metadata)3172declare float @llvm.experimental.constrained.minnum.f32(float, float, metadata)3173declare float @llvm.experimental.constrained.maximum.f32(float, float, metadata)3174declare float @llvm.experimental.constrained.minimum.f32(float, float, metadata)3175declare float @llvm.experimental.constrained.ceil.f32(float, metadata)3176declare float @llvm.experimental.constrained.floor.f32(float, metadata)3177declare i32 @llvm.experimental.constrained.lround.i32.f32(float, metadata)3178declare i64 @llvm.experimental.constrained.llround.i64.f32(float, metadata)3179declare float @llvm.experimental.constrained.round.f32(float, metadata)3180declare float @llvm.experimental.constrained.roundeven.f32(float, metadata)3181declare float @llvm.experimental.constrained.trunc.f32(float, metadata)3182declare i1 @llvm.experimental.constrained.fcmps.f32(float, float, metadata, metadata)3183declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata)3184 3185declare double @llvm.experimental.constrained.fadd.f64(double, double, metadata, metadata)3186declare double @llvm.experimental.constrained.fsub.f64(double, double, metadata, metadata)3187declare double @llvm.experimental.constrained.fmul.f64(double, double, metadata, metadata)3188declare double @llvm.experimental.constrained.fdiv.f64(double, double, metadata, metadata)3189declare double @llvm.experimental.constrained.frem.f64(double, double, metadata, metadata)3190declare double @llvm.experimental.constrained.fma.f64(double, double, double, metadata, metadata)3191declare i32 @llvm.experimental.constrained.fptosi.i32.f64(double, metadata)3192declare i32 @llvm.experimental.constrained.fptoui.i32.f64(double, metadata)3193declare i64 @llvm.experimental.constrained.fptosi.i64.f64(double, metadata)3194declare i64 @llvm.experimental.constrained.fptoui.i64.f64(double, metadata)3195declare double @llvm.experimental.constrained.sitofp.f64.i32(i32, metadata, metadata)3196declare double @llvm.experimental.constrained.uitofp.f64.i32(i32, metadata, metadata)3197declare double @llvm.experimental.constrained.sitofp.f64.i64(i64, metadata, metadata)3198declare double @llvm.experimental.constrained.uitofp.f64.i64(i64, metadata, metadata)3199declare double @llvm.experimental.constrained.sitofp.f64.i128(i128, metadata, metadata)3200declare double @llvm.experimental.constrained.uitofp.f64.i128(i128, metadata, metadata)3201declare double @llvm.experimental.constrained.sqrt.f64(double, metadata, metadata)3202declare double @llvm.experimental.constrained.powi.f64(double, i32, metadata, metadata)3203declare double @llvm.experimental.constrained.sin.f64(double, metadata, metadata)3204declare double @llvm.experimental.constrained.cos.f64(double, metadata, metadata)3205declare double @llvm.experimental.constrained.tan.f64(double, metadata, metadata)3206declare double @llvm.experimental.constrained.asin.f64(double, metadata, metadata)3207declare double @llvm.experimental.constrained.acos.f64(double, metadata, metadata)3208declare double @llvm.experimental.constrained.atan.f64(double, metadata, metadata)3209declare double @llvm.experimental.constrained.atan2.f64(double, double, metadata, metadata)3210declare double @llvm.experimental.constrained.sinh.f64(double, metadata, metadata)3211declare double @llvm.experimental.constrained.cosh.f64(double, metadata, metadata)3212declare double @llvm.experimental.constrained.tanh.f64(double, metadata, metadata)3213declare double @llvm.experimental.constrained.pow.f64(double, double, metadata, metadata)3214declare double @llvm.experimental.constrained.log.f64(double, metadata, metadata)3215declare double @llvm.experimental.constrained.log10.f64(double, metadata, metadata)3216declare double @llvm.experimental.constrained.log2.f64(double, metadata, metadata)3217declare double @llvm.experimental.constrained.exp.f64(double, metadata, metadata)3218declare double @llvm.experimental.constrained.exp2.f64(double, metadata, metadata)3219declare double @llvm.experimental.constrained.rint.f64(double, metadata, metadata)3220declare double @llvm.experimental.constrained.nearbyint.f64(double, metadata, metadata)3221declare i32 @llvm.experimental.constrained.lrint.i32.f64(double, metadata, metadata)3222declare i64 @llvm.experimental.constrained.llrint.i64.f64(double, metadata, metadata)3223declare double @llvm.experimental.constrained.maxnum.f64(double, double, metadata)3224declare double @llvm.experimental.constrained.minnum.f64(double, double, metadata)3225declare double @llvm.experimental.constrained.maximum.f64(double, double, metadata)3226declare double @llvm.experimental.constrained.minimum.f64(double, double, metadata)3227declare double @llvm.experimental.constrained.ceil.f64(double, metadata)3228declare double @llvm.experimental.constrained.floor.f64(double, metadata)3229declare i32 @llvm.experimental.constrained.lround.i32.f64(double, metadata)3230declare i64 @llvm.experimental.constrained.llround.i64.f64(double, metadata)3231declare double @llvm.experimental.constrained.round.f64(double, metadata)3232declare double @llvm.experimental.constrained.roundeven.f64(double, metadata)3233declare double @llvm.experimental.constrained.trunc.f64(double, metadata)3234declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)3235declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)3236 3237declare fp128 @llvm.experimental.constrained.fadd.f128(fp128, fp128, metadata, metadata)3238declare fp128 @llvm.experimental.constrained.fsub.f128(fp128, fp128, metadata, metadata)3239declare fp128 @llvm.experimental.constrained.fmul.f128(fp128, fp128, metadata, metadata)3240declare fp128 @llvm.experimental.constrained.fdiv.f128(fp128, fp128, metadata, metadata)3241declare fp128 @llvm.experimental.constrained.frem.f128(fp128, fp128, metadata, metadata)3242declare fp128 @llvm.experimental.constrained.fma.f128(fp128, fp128, fp128, metadata, metadata)3243declare i32 @llvm.experimental.constrained.fptosi.i32.f128(fp128, metadata)3244declare i32 @llvm.experimental.constrained.fptoui.i32.f128(fp128, metadata)3245declare i64 @llvm.experimental.constrained.fptosi.i64.f128(fp128, metadata)3246declare i64 @llvm.experimental.constrained.fptoui.i64.f128(fp128, metadata)3247declare fp128 @llvm.experimental.constrained.sitofp.f128.i32(i32, metadata, metadata)3248declare fp128 @llvm.experimental.constrained.uitofp.f128.i32(i32, metadata, metadata)3249declare fp128 @llvm.experimental.constrained.sitofp.f128.i64(i64, metadata, metadata)3250declare fp128 @llvm.experimental.constrained.uitofp.f128.i64(i64, metadata, metadata)3251declare fp128 @llvm.experimental.constrained.sitofp.f128.i128(i128, metadata, metadata)3252declare fp128 @llvm.experimental.constrained.uitofp.f128.i128(i128, metadata, metadata)3253declare fp128 @llvm.experimental.constrained.sqrt.f128(fp128, metadata, metadata)3254declare fp128 @llvm.experimental.constrained.powi.f128(fp128, i32, metadata, metadata)3255declare fp128 @llvm.experimental.constrained.sin.f128(fp128, metadata, metadata)3256declare fp128 @llvm.experimental.constrained.cos.f128(fp128, metadata, metadata)3257declare fp128 @llvm.experimental.constrained.tan.f128(fp128, metadata, metadata)3258declare fp128 @llvm.experimental.constrained.asin.f128(fp128, metadata, metadata)3259declare fp128 @llvm.experimental.constrained.acos.f128(fp128, metadata, metadata)3260declare fp128 @llvm.experimental.constrained.atan.f128(fp128, metadata, metadata)3261declare fp128 @llvm.experimental.constrained.atan2.f128(fp128, fp128, metadata, metadata)3262declare fp128 @llvm.experimental.constrained.sinh.f128(fp128, metadata, metadata)3263declare fp128 @llvm.experimental.constrained.cosh.f128(fp128, metadata, metadata)3264declare fp128 @llvm.experimental.constrained.tanh.f128(fp128, metadata, metadata)3265declare fp128 @llvm.experimental.constrained.pow.f128(fp128, fp128, metadata, metadata)3266declare fp128 @llvm.experimental.constrained.log.f128(fp128, metadata, metadata)3267declare fp128 @llvm.experimental.constrained.log10.f128(fp128, metadata, metadata)3268declare fp128 @llvm.experimental.constrained.log2.f128(fp128, metadata, metadata)3269declare fp128 @llvm.experimental.constrained.exp.f128(fp128, metadata, metadata)3270declare fp128 @llvm.experimental.constrained.exp2.f128(fp128, metadata, metadata)3271declare fp128 @llvm.experimental.constrained.rint.f128(fp128, metadata, metadata)3272declare fp128 @llvm.experimental.constrained.nearbyint.f128(fp128, metadata, metadata)3273declare i32 @llvm.experimental.constrained.lrint.i32.f128(fp128, metadata, metadata)3274declare i64 @llvm.experimental.constrained.llrint.i64.f128(fp128, metadata, metadata)3275declare fp128 @llvm.experimental.constrained.maxnum.f128(fp128, fp128, metadata)3276declare fp128 @llvm.experimental.constrained.minnum.f128(fp128, fp128, metadata)3277declare fp128 @llvm.experimental.constrained.ceil.f128(fp128, metadata)3278declare fp128 @llvm.experimental.constrained.floor.f128(fp128, metadata)3279declare i32 @llvm.experimental.constrained.lround.i32.f128(fp128, metadata)3280declare i64 @llvm.experimental.constrained.llround.i64.f128(fp128, metadata)3281declare fp128 @llvm.experimental.constrained.round.f128(fp128, metadata)3282declare fp128 @llvm.experimental.constrained.trunc.f128(fp128, metadata)3283declare i1 @llvm.experimental.constrained.fcmps.f128(fp128, fp128, metadata, metadata)3284declare i1 @llvm.experimental.constrained.fcmp.f128(fp128, fp128, metadata, metadata)3285 3286declare float @llvm.experimental.constrained.fptrunc.f32.f64(double, metadata, metadata)3287declare float @llvm.experimental.constrained.fptrunc.f32.f128(fp128, metadata, metadata)3288declare double @llvm.experimental.constrained.fptrunc.f64.f128(fp128, metadata, metadata)3289declare double @llvm.experimental.constrained.fpext.f64.f32(float, metadata)3290declare fp128 @llvm.experimental.constrained.fpext.f128.f32(float, metadata)3291declare fp128 @llvm.experimental.constrained.fpext.f128.f64(double, metadata)3292 3293;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:3294; CHECK-GI: {{.*}}3295; CHECK-SD: {{.*}}3296