244 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --mattr=+d < %s | FileCheck %s --check-prefix=LA323; RUN: llc --mtriple=loongarch64 --mattr=+d < %s | FileCheck %s --check-prefix=LA644 5declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)6 7define i32 @fcmp_oeq(double %a, double %b) nounwind strictfp {8; LA32-LABEL: fcmp_oeq:9; LA32: # %bb.0:10; LA32-NEXT: fcmp.ceq.d $fcc0, $fa0, $fa111; LA32-NEXT: movcf2gr $a0, $fcc012; LA32-NEXT: ret13;14; LA64-LABEL: fcmp_oeq:15; LA64: # %bb.0:16; LA64-NEXT: fcmp.ceq.d $fcc0, $fa0, $fa117; LA64-NEXT: movcf2gr $a0, $fcc018; LA64-NEXT: ret19 %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.strict") strictfp20 %2 = zext i1 %1 to i3221 ret i32 %222}23 24define i32 @fcmp_ogt(double %a, double %b) nounwind strictfp {25; LA32-LABEL: fcmp_ogt:26; LA32: # %bb.0:27; LA32-NEXT: fcmp.clt.d $fcc0, $fa1, $fa028; LA32-NEXT: movcf2gr $a0, $fcc029; LA32-NEXT: ret30;31; LA64-LABEL: fcmp_ogt:32; LA64: # %bb.0:33; LA64-NEXT: fcmp.clt.d $fcc0, $fa1, $fa034; LA64-NEXT: movcf2gr $a0, $fcc035; LA64-NEXT: ret36 %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ogt", metadata !"fpexcept.strict") strictfp37 %2 = zext i1 %1 to i3238 ret i32 %239}40 41define i32 @fcmp_oge(double %a, double %b) nounwind strictfp {42; LA32-LABEL: fcmp_oge:43; LA32: # %bb.0:44; LA32-NEXT: fcmp.cle.d $fcc0, $fa1, $fa045; LA32-NEXT: movcf2gr $a0, $fcc046; LA32-NEXT: ret47;48; LA64-LABEL: fcmp_oge:49; LA64: # %bb.0:50; LA64-NEXT: fcmp.cle.d $fcc0, $fa1, $fa051; LA64-NEXT: movcf2gr $a0, $fcc052; LA64-NEXT: ret53 %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"oge", metadata !"fpexcept.strict") strictfp54 %2 = zext i1 %1 to i3255 ret i32 %256}57 58define i32 @fcmp_olt(double %a, double %b) nounwind strictfp {59; LA32-LABEL: fcmp_olt:60; LA32: # %bb.0:61; LA32-NEXT: fcmp.clt.d $fcc0, $fa0, $fa162; LA32-NEXT: movcf2gr $a0, $fcc063; LA32-NEXT: ret64;65; LA64-LABEL: fcmp_olt:66; LA64: # %bb.0:67; LA64-NEXT: fcmp.clt.d $fcc0, $fa0, $fa168; LA64-NEXT: movcf2gr $a0, $fcc069; LA64-NEXT: ret70 %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"olt", metadata !"fpexcept.strict") strictfp71 %2 = zext i1 %1 to i3272 ret i32 %273}74 75define i32 @fcmp_ole(double %a, double %b) nounwind strictfp {76; LA32-LABEL: fcmp_ole:77; LA32: # %bb.0:78; LA32-NEXT: fcmp.cle.d $fcc0, $fa0, $fa179; LA32-NEXT: movcf2gr $a0, $fcc080; LA32-NEXT: ret81;82; LA64-LABEL: fcmp_ole:83; LA64: # %bb.0:84; LA64-NEXT: fcmp.cle.d $fcc0, $fa0, $fa185; LA64-NEXT: movcf2gr $a0, $fcc086; LA64-NEXT: ret87 %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ole", metadata !"fpexcept.strict") strictfp88 %2 = zext i1 %1 to i3289 ret i32 %290}91 92define i32 @fcmp_one(double %a, double %b) nounwind strictfp {93; LA32-LABEL: fcmp_one:94; LA32: # %bb.0:95; LA32-NEXT: fcmp.cne.d $fcc0, $fa0, $fa196; LA32-NEXT: movcf2gr $a0, $fcc097; LA32-NEXT: ret98;99; LA64-LABEL: fcmp_one:100; LA64: # %bb.0:101; LA64-NEXT: fcmp.cne.d $fcc0, $fa0, $fa1102; LA64-NEXT: movcf2gr $a0, $fcc0103; LA64-NEXT: ret104 %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"one", metadata !"fpexcept.strict") strictfp105 %2 = zext i1 %1 to i32106 ret i32 %2107}108 109define i32 @fcmp_ord(double %a, double %b) nounwind strictfp {110; LA32-LABEL: fcmp_ord:111; LA32: # %bb.0:112; LA32-NEXT: fcmp.cor.d $fcc0, $fa0, $fa1113; LA32-NEXT: movcf2gr $a0, $fcc0114; LA32-NEXT: ret115;116; LA64-LABEL: fcmp_ord:117; LA64: # %bb.0:118; LA64-NEXT: fcmp.cor.d $fcc0, $fa0, $fa1119; LA64-NEXT: movcf2gr $a0, $fcc0120; LA64-NEXT: ret121 %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ord", metadata !"fpexcept.strict") strictfp122 %2 = zext i1 %1 to i32123 ret i32 %2124}125 126define i32 @fcmp_ueq(double %a, double %b) nounwind strictfp {127; LA32-LABEL: fcmp_ueq:128; LA32: # %bb.0:129; LA32-NEXT: fcmp.cueq.d $fcc0, $fa0, $fa1130; LA32-NEXT: movcf2gr $a0, $fcc0131; LA32-NEXT: ret132;133; LA64-LABEL: fcmp_ueq:134; LA64: # %bb.0:135; LA64-NEXT: fcmp.cueq.d $fcc0, $fa0, $fa1136; LA64-NEXT: movcf2gr $a0, $fcc0137; LA64-NEXT: ret138 %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ueq", metadata !"fpexcept.strict") strictfp139 %2 = zext i1 %1 to i32140 ret i32 %2141}142 143define i32 @fcmp_ugt(double %a, double %b) nounwind strictfp {144; LA32-LABEL: fcmp_ugt:145; LA32: # %bb.0:146; LA32-NEXT: fcmp.cult.d $fcc0, $fa1, $fa0147; LA32-NEXT: movcf2gr $a0, $fcc0148; LA32-NEXT: ret149;150; LA64-LABEL: fcmp_ugt:151; LA64: # %bb.0:152; LA64-NEXT: fcmp.cult.d $fcc0, $fa1, $fa0153; LA64-NEXT: movcf2gr $a0, $fcc0154; LA64-NEXT: ret155 %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ugt", metadata !"fpexcept.strict") strictfp156 %2 = zext i1 %1 to i32157 ret i32 %2158}159 160define i32 @fcmp_uge(double %a, double %b) nounwind strictfp {161; LA32-LABEL: fcmp_uge:162; LA32: # %bb.0:163; LA32-NEXT: fcmp.cule.d $fcc0, $fa1, $fa0164; LA32-NEXT: movcf2gr $a0, $fcc0165; LA32-NEXT: ret166;167; LA64-LABEL: fcmp_uge:168; LA64: # %bb.0:169; LA64-NEXT: fcmp.cule.d $fcc0, $fa1, $fa0170; LA64-NEXT: movcf2gr $a0, $fcc0171; LA64-NEXT: ret172 %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"uge", metadata !"fpexcept.strict") strictfp173 %2 = zext i1 %1 to i32174 ret i32 %2175}176 177define i32 @fcmp_ult(double %a, double %b) nounwind strictfp {178; LA32-LABEL: fcmp_ult:179; LA32: # %bb.0:180; LA32-NEXT: fcmp.cult.d $fcc0, $fa0, $fa1181; LA32-NEXT: movcf2gr $a0, $fcc0182; LA32-NEXT: ret183;184; LA64-LABEL: fcmp_ult:185; LA64: # %bb.0:186; LA64-NEXT: fcmp.cult.d $fcc0, $fa0, $fa1187; LA64-NEXT: movcf2gr $a0, $fcc0188; LA64-NEXT: ret189 %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ult", metadata !"fpexcept.strict") strictfp190 %2 = zext i1 %1 to i32191 ret i32 %2192}193 194define i32 @fcmp_ule(double %a, double %b) nounwind strictfp {195; LA32-LABEL: fcmp_ule:196; LA32: # %bb.0:197; LA32-NEXT: fcmp.cule.d $fcc0, $fa0, $fa1198; LA32-NEXT: movcf2gr $a0, $fcc0199; LA32-NEXT: ret200;201; LA64-LABEL: fcmp_ule:202; LA64: # %bb.0:203; LA64-NEXT: fcmp.cule.d $fcc0, $fa0, $fa1204; LA64-NEXT: movcf2gr $a0, $fcc0205; LA64-NEXT: ret206 %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ule", metadata !"fpexcept.strict") strictfp207 %2 = zext i1 %1 to i32208 ret i32 %2209}210 211define i32 @fcmp_une(double %a, double %b) nounwind strictfp {212; LA32-LABEL: fcmp_une:213; LA32: # %bb.0:214; LA32-NEXT: fcmp.cune.d $fcc0, $fa0, $fa1215; LA32-NEXT: movcf2gr $a0, $fcc0216; LA32-NEXT: ret217;218; LA64-LABEL: fcmp_une:219; LA64: # %bb.0:220; LA64-NEXT: fcmp.cune.d $fcc0, $fa0, $fa1221; LA64-NEXT: movcf2gr $a0, $fcc0222; LA64-NEXT: ret223 %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"une", metadata !"fpexcept.strict") strictfp224 %2 = zext i1 %1 to i32225 ret i32 %2226}227 228define i32 @fcmp_uno(double %a, double %b) nounwind strictfp {229; LA32-LABEL: fcmp_uno:230; LA32: # %bb.0:231; LA32-NEXT: fcmp.cun.d $fcc0, $fa0, $fa1232; LA32-NEXT: movcf2gr $a0, $fcc0233; LA32-NEXT: ret234;235; LA64-LABEL: fcmp_uno:236; LA64: # %bb.0:237; LA64-NEXT: fcmp.cun.d $fcc0, $fa0, $fa1238; LA64-NEXT: movcf2gr $a0, $fcc0239; LA64-NEXT: ret240 %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"uno", metadata !"fpexcept.strict") strictfp241 %2 = zext i1 %1 to i32242 ret i32 %2243}244