274 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 5;; Test double-precision floating-point values selection after comparison6 7define double @fcmp_false(double %a, double %b, double %x, double %y) {8; LA32-LABEL: fcmp_false:9; LA32: # %bb.0:10; LA32-NEXT: fmov.d $fa0, $fa311; LA32-NEXT: ret12;13; LA64-LABEL: fcmp_false:14; LA64: # %bb.0:15; LA64-NEXT: fmov.d $fa0, $fa316; LA64-NEXT: ret17 %cmp = fcmp false double %a, %b18 %res = select i1 %cmp, double %x, double %y19 ret double %res20}21 22define double @fcmp_oeq(double %a, double %b, double %x, double %y) {23; LA32-LABEL: fcmp_oeq:24; LA32: # %bb.0:25; LA32-NEXT: fcmp.ceq.d $fcc0, $fa0, $fa126; LA32-NEXT: fsel $fa0, $fa3, $fa2, $fcc027; LA32-NEXT: ret28;29; LA64-LABEL: fcmp_oeq:30; LA64: # %bb.0:31; LA64-NEXT: fcmp.ceq.d $fcc0, $fa0, $fa132; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc033; LA64-NEXT: ret34 %cmp = fcmp oeq double %a, %b35 %res = select i1 %cmp, double %x, double %y36 ret double %res37}38 39define double @fcmp_ogt(double %a, double %b, double %x, double %y) {40; LA32-LABEL: fcmp_ogt:41; LA32: # %bb.0:42; LA32-NEXT: fcmp.clt.d $fcc0, $fa1, $fa043; LA32-NEXT: fsel $fa0, $fa3, $fa2, $fcc044; LA32-NEXT: ret45;46; LA64-LABEL: fcmp_ogt:47; LA64: # %bb.0:48; LA64-NEXT: fcmp.clt.d $fcc0, $fa1, $fa049; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc050; LA64-NEXT: ret51 %cmp = fcmp ogt double %a, %b52 %res = select i1 %cmp, double %x, double %y53 ret double %res54}55 56define double @fcmp_oge(double %a, double %b, double %x, double %y) {57; LA32-LABEL: fcmp_oge:58; LA32: # %bb.0:59; LA32-NEXT: fcmp.cle.d $fcc0, $fa1, $fa060; LA32-NEXT: fsel $fa0, $fa3, $fa2, $fcc061; LA32-NEXT: ret62;63; LA64-LABEL: fcmp_oge:64; LA64: # %bb.0:65; LA64-NEXT: fcmp.cle.d $fcc0, $fa1, $fa066; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc067; LA64-NEXT: ret68 %cmp = fcmp oge double %a, %b69 %res = select i1 %cmp, double %x, double %y70 ret double %res71}72 73define double @fcmp_olt(double %a, double %b, double %x, double %y) {74; LA32-LABEL: fcmp_olt:75; LA32: # %bb.0:76; LA32-NEXT: fcmp.clt.d $fcc0, $fa0, $fa177; LA32-NEXT: fsel $fa0, $fa3, $fa2, $fcc078; LA32-NEXT: ret79;80; LA64-LABEL: fcmp_olt:81; LA64: # %bb.0:82; LA64-NEXT: fcmp.clt.d $fcc0, $fa0, $fa183; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc084; LA64-NEXT: ret85 %cmp = fcmp olt double %a, %b86 %res = select i1 %cmp, double %x, double %y87 ret double %res88}89 90define double @fcmp_ole(double %a, double %b, double %x, double %y) {91; LA32-LABEL: fcmp_ole:92; LA32: # %bb.0:93; LA32-NEXT: fcmp.cle.d $fcc0, $fa0, $fa194; LA32-NEXT: fsel $fa0, $fa3, $fa2, $fcc095; LA32-NEXT: ret96;97; LA64-LABEL: fcmp_ole:98; LA64: # %bb.0:99; LA64-NEXT: fcmp.cle.d $fcc0, $fa0, $fa1100; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0101; LA64-NEXT: ret102 %cmp = fcmp ole double %a, %b103 %res = select i1 %cmp, double %x, double %y104 ret double %res105}106 107define double @fcmp_one(double %a, double %b, double %x, double %y) {108; LA32-LABEL: fcmp_one:109; LA32: # %bb.0:110; LA32-NEXT: fcmp.cne.d $fcc0, $fa0, $fa1111; LA32-NEXT: fsel $fa0, $fa3, $fa2, $fcc0112; LA32-NEXT: ret113;114; LA64-LABEL: fcmp_one:115; LA64: # %bb.0:116; LA64-NEXT: fcmp.cne.d $fcc0, $fa0, $fa1117; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0118; LA64-NEXT: ret119 %cmp = fcmp one double %a, %b120 %res = select i1 %cmp, double %x, double %y121 ret double %res122}123 124define double @fcmp_ord(double %a, double %b, double %x, double %y) {125; LA32-LABEL: fcmp_ord:126; LA32: # %bb.0:127; LA32-NEXT: fcmp.cor.d $fcc0, $fa0, $fa1128; LA32-NEXT: fsel $fa0, $fa3, $fa2, $fcc0129; LA32-NEXT: ret130;131; LA64-LABEL: fcmp_ord:132; LA64: # %bb.0:133; LA64-NEXT: fcmp.cor.d $fcc0, $fa0, $fa1134; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0135; LA64-NEXT: ret136 %cmp = fcmp ord double %a, %b137 %res = select i1 %cmp, double %x, double %y138 ret double %res139}140 141define double @fcmp_ueq(double %a, double %b, double %x, double %y) {142; LA32-LABEL: fcmp_ueq:143; LA32: # %bb.0:144; LA32-NEXT: fcmp.cueq.d $fcc0, $fa0, $fa1145; LA32-NEXT: fsel $fa0, $fa3, $fa2, $fcc0146; LA32-NEXT: ret147;148; LA64-LABEL: fcmp_ueq:149; LA64: # %bb.0:150; LA64-NEXT: fcmp.cueq.d $fcc0, $fa0, $fa1151; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0152; LA64-NEXT: ret153 %cmp = fcmp ueq double %a, %b154 %res = select i1 %cmp, double %x, double %y155 ret double %res156}157 158define double @fcmp_ugt(double %a, double %b, double %x, double %y) {159; LA32-LABEL: fcmp_ugt:160; LA32: # %bb.0:161; LA32-NEXT: fcmp.cult.d $fcc0, $fa1, $fa0162; LA32-NEXT: fsel $fa0, $fa3, $fa2, $fcc0163; LA32-NEXT: ret164;165; LA64-LABEL: fcmp_ugt:166; LA64: # %bb.0:167; LA64-NEXT: fcmp.cult.d $fcc0, $fa1, $fa0168; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0169; LA64-NEXT: ret170 %cmp = fcmp ugt double %a, %b171 %res = select i1 %cmp, double %x, double %y172 ret double %res173}174 175define double @fcmp_uge(double %a, double %b, double %x, double %y) {176; LA32-LABEL: fcmp_uge:177; LA32: # %bb.0:178; LA32-NEXT: fcmp.cule.d $fcc0, $fa1, $fa0179; LA32-NEXT: fsel $fa0, $fa3, $fa2, $fcc0180; LA32-NEXT: ret181;182; LA64-LABEL: fcmp_uge:183; LA64: # %bb.0:184; LA64-NEXT: fcmp.cule.d $fcc0, $fa1, $fa0185; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0186; LA64-NEXT: ret187 %cmp = fcmp uge double %a, %b188 %res = select i1 %cmp, double %x, double %y189 ret double %res190}191 192define double @fcmp_ult(double %a, double %b, double %x, double %y) {193; LA32-LABEL: fcmp_ult:194; LA32: # %bb.0:195; LA32-NEXT: fcmp.cult.d $fcc0, $fa0, $fa1196; LA32-NEXT: fsel $fa0, $fa3, $fa2, $fcc0197; LA32-NEXT: ret198;199; LA64-LABEL: fcmp_ult:200; LA64: # %bb.0:201; LA64-NEXT: fcmp.cult.d $fcc0, $fa0, $fa1202; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0203; LA64-NEXT: ret204 %cmp = fcmp ult double %a, %b205 %res = select i1 %cmp, double %x, double %y206 ret double %res207}208 209define double @fcmp_ule(double %a, double %b, double %x, double %y) {210; LA32-LABEL: fcmp_ule:211; LA32: # %bb.0:212; LA32-NEXT: fcmp.cule.d $fcc0, $fa0, $fa1213; LA32-NEXT: fsel $fa0, $fa3, $fa2, $fcc0214; LA32-NEXT: ret215;216; LA64-LABEL: fcmp_ule:217; LA64: # %bb.0:218; LA64-NEXT: fcmp.cule.d $fcc0, $fa0, $fa1219; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0220; LA64-NEXT: ret221 %cmp = fcmp ule double %a, %b222 %res = select i1 %cmp, double %x, double %y223 ret double %res224}225 226define double @fcmp_une(double %a, double %b, double %x, double %y) {227; LA32-LABEL: fcmp_une:228; LA32: # %bb.0:229; LA32-NEXT: fcmp.cune.d $fcc0, $fa0, $fa1230; LA32-NEXT: fsel $fa0, $fa3, $fa2, $fcc0231; LA32-NEXT: ret232;233; LA64-LABEL: fcmp_une:234; LA64: # %bb.0:235; LA64-NEXT: fcmp.cune.d $fcc0, $fa0, $fa1236; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0237; LA64-NEXT: ret238 %cmp = fcmp une double %a, %b239 %res = select i1 %cmp, double %x, double %y240 ret double %res241}242 243define double @fcmp_uno(double %a, double %b, double %x, double %y) {244; LA32-LABEL: fcmp_uno:245; LA32: # %bb.0:246; LA32-NEXT: fcmp.cun.d $fcc0, $fa0, $fa1247; LA32-NEXT: fsel $fa0, $fa3, $fa2, $fcc0248; LA32-NEXT: ret249;250; LA64-LABEL: fcmp_uno:251; LA64: # %bb.0:252; LA64-NEXT: fcmp.cun.d $fcc0, $fa0, $fa1253; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0254; LA64-NEXT: ret255 %cmp = fcmp uno double %a, %b256 %res = select i1 %cmp, double %x, double %y257 ret double %res258}259 260define double @fcmp_true(double %a, double %b, double %x, double %y) {261; LA32-LABEL: fcmp_true:262; LA32: # %bb.0:263; LA32-NEXT: fmov.d $fa0, $fa2264; LA32-NEXT: ret265;266; LA64-LABEL: fcmp_true:267; LA64: # %bb.0:268; LA64-NEXT: fmov.d $fa0, $fa2269; LA64-NEXT: ret270 %cmp = fcmp true double %a, %b271 %res = select i1 %cmp, double %x, double %y272 ret double %res273}274