113 lines · plain
1; RUN: llc < %s -mtriple=arm64-eabi -mattr=+fullfp16 -enable-no-nans-fp-math | FileCheck %s2 3declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata)4declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)5 6; CHECK-LABEL: @f32_constrained_fcmp_ueq7; CHECK: fcmp s0, s18; CHECK-NEXT: cset w0, eq9; CHECK-NEXT: ret10define i1 @f32_constrained_fcmp_ueq(float %a, float %b) nounwind ssp strictfp {11 %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ueq", metadata !"fpexcept.strict")12 ret i1 %cmp13}14 15; CHECK-LABEL: @f32_constrained_fcmp_une16; CHECK: fcmp s0, s117; CHECK-NEXT: cset w0, ne18; CHECK-NEXT: ret19define i1 @f32_constrained_fcmp_une(float %a, float %b) nounwind ssp strictfp {20 %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"une", metadata !"fpexcept.strict")21 ret i1 %cmp22}23 24; CHECK-LABEL: @f32_constrained_fcmp_ugt25; CHECK: fcmp s0, s126; CHECK-NEXT: cset w0, gt27; CHECK-NEXT: ret28define i1 @f32_constrained_fcmp_ugt(float %a, float %b) nounwind ssp strictfp {29 %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ugt", metadata !"fpexcept.strict")30 ret i1 %cmp31}32 33; CHECK-LABEL: @f32_constrained_fcmp_uge34; CHECK: fcmp s0, s135; CHECK-NEXT: cset w0, ge36; CHECK-NEXT: ret37define i1 @f32_constrained_fcmp_uge(float %a, float %b) nounwind ssp strictfp {38 %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"uge", metadata !"fpexcept.strict")39 ret i1 %cmp40}41 42; CHECK-LABEL: @f32_constrained_fcmp_ult43; CHECK: fcmp s0, s144; CHECK-NEXT: cset w0, lt45; CHECK-NEXT: ret46define i1 @f32_constrained_fcmp_ult(float %a, float %b) nounwind ssp strictfp {47 %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ult", metadata !"fpexcept.strict")48 ret i1 %cmp49}50 51; CHECK-LABEL: @f32_constrained_fcmp_ule52; CHECK: fcmp s0, s153; CHECK-NEXT: cset w0, le54; CHECK-NEXT: ret55define i1 @f32_constrained_fcmp_ule(float %a, float %b) nounwind ssp strictfp {56 %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ule", metadata !"fpexcept.strict")57 ret i1 %cmp58}59 60; CHECK-LABEL: @f64_constrained_fcmp_ueq61; CHECK: fcmp d0, d162; CHECK-NEXT: cset w0, eq63; CHECK-NEXT: ret64define i1 @f64_constrained_fcmp_ueq(double %a, double %b) nounwind ssp strictfp {65 %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ueq", metadata !"fpexcept.strict")66 ret i1 %cmp67}68 69; CHECK-LABEL: @f64_constrained_fcmp_une70; CHECK: fcmp d0, d171; CHECK-NEXT: cset w0, ne72; CHECK-NEXT: ret73define i1 @f64_constrained_fcmp_une(double %a, double %b) nounwind ssp strictfp {74 %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"une", metadata !"fpexcept.strict")75 ret i1 %cmp76}77 78; CHECK-LABEL: @f64_constrained_fcmp_ugt79; CHECK: fcmp d0, d180; CHECK-NEXT: cset w0, gt81; CHECK-NEXT: ret82define i1 @f64_constrained_fcmp_ugt(double %a, double %b) nounwind ssp strictfp {83 %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ugt", metadata !"fpexcept.strict")84 ret i1 %cmp85}86 87; CHECK-LABEL: @f64_constrained_fcmp_uge88; CHECK: fcmp d0, d189; CHECK-NEXT: cset w0, ge90; CHECK-NEXT: ret91define i1 @f64_constrained_fcmp_uge(double %a, double %b) nounwind ssp strictfp {92 %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"uge", metadata !"fpexcept.strict")93 ret i1 %cmp94}95 96; CHECK-LABEL: @f64_constrained_fcmp_ult97; CHECK: fcmp d0, d198; CHECK-NEXT: cset w0, lt99; CHECK-NEXT: ret100define i1 @f64_constrained_fcmp_ult(double %a, double %b) nounwind ssp strictfp {101 %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ult", metadata !"fpexcept.strict")102 ret i1 %cmp103}104 105; CHECK-LABEL: @f64_constrained_fcmp_ule106; CHECK: fcmp d0, d1107; CHECK-NEXT: cset w0, le108; CHECK-NEXT: ret109define i1 @f64_constrained_fcmp_ule(double %a, double %b) nounwind ssp strictfp {110 %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ule", metadata !"fpexcept.strict")111 ret i1 %cmp112}113