274 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA323; RUN: llc --mtriple=loongarch64 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA644 5;; Test single-precision floating-point values selection after comparison6 7define float @fcmp_false(float %a, float %b, float %x, float %y) {8; LA32-LABEL: fcmp_false:9; LA32: # %bb.0:10; LA32-NEXT: fmov.s $fa0, $fa311; LA32-NEXT: ret12;13; LA64-LABEL: fcmp_false:14; LA64: # %bb.0:15; LA64-NEXT: fmov.s $fa0, $fa316; LA64-NEXT: ret17 %cmp = fcmp false float %a, %b18 %res = select i1 %cmp, float %x, float %y19 ret float %res20}21 22define float @fcmp_oeq(float %a, float %b, float %x, float %y) {23; LA32-LABEL: fcmp_oeq:24; LA32: # %bb.0:25; LA32-NEXT: fcmp.ceq.s $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.s $fcc0, $fa0, $fa132; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc033; LA64-NEXT: ret34 %cmp = fcmp oeq float %a, %b35 %res = select i1 %cmp, float %x, float %y36 ret float %res37}38 39define float @fcmp_ogt(float %a, float %b, float %x, float %y) {40; LA32-LABEL: fcmp_ogt:41; LA32: # %bb.0:42; LA32-NEXT: fcmp.clt.s $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.s $fcc0, $fa1, $fa049; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc050; LA64-NEXT: ret51 %cmp = fcmp ogt float %a, %b52 %res = select i1 %cmp, float %x, float %y53 ret float %res54}55 56define float @fcmp_oge(float %a, float %b, float %x, float %y) {57; LA32-LABEL: fcmp_oge:58; LA32: # %bb.0:59; LA32-NEXT: fcmp.cle.s $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.s $fcc0, $fa1, $fa066; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc067; LA64-NEXT: ret68 %cmp = fcmp oge float %a, %b69 %res = select i1 %cmp, float %x, float %y70 ret float %res71}72 73define float @fcmp_olt(float %a, float %b, float %x, float %y) {74; LA32-LABEL: fcmp_olt:75; LA32: # %bb.0:76; LA32-NEXT: fcmp.clt.s $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.s $fcc0, $fa0, $fa183; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc084; LA64-NEXT: ret85 %cmp = fcmp olt float %a, %b86 %res = select i1 %cmp, float %x, float %y87 ret float %res88}89 90define float @fcmp_ole(float %a, float %b, float %x, float %y) {91; LA32-LABEL: fcmp_ole:92; LA32: # %bb.0:93; LA32-NEXT: fcmp.cle.s $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.s $fcc0, $fa0, $fa1100; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0101; LA64-NEXT: ret102 %cmp = fcmp ole float %a, %b103 %res = select i1 %cmp, float %x, float %y104 ret float %res105}106 107define float @fcmp_one(float %a, float %b, float %x, float %y) {108; LA32-LABEL: fcmp_one:109; LA32: # %bb.0:110; LA32-NEXT: fcmp.cne.s $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.s $fcc0, $fa0, $fa1117; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0118; LA64-NEXT: ret119 %cmp = fcmp one float %a, %b120 %res = select i1 %cmp, float %x, float %y121 ret float %res122}123 124define float @fcmp_ord(float %a, float %b, float %x, float %y) {125; LA32-LABEL: fcmp_ord:126; LA32: # %bb.0:127; LA32-NEXT: fcmp.cor.s $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.s $fcc0, $fa0, $fa1134; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0135; LA64-NEXT: ret136 %cmp = fcmp ord float %a, %b137 %res = select i1 %cmp, float %x, float %y138 ret float %res139}140 141define float @fcmp_ueq(float %a, float %b, float %x, float %y) {142; LA32-LABEL: fcmp_ueq:143; LA32: # %bb.0:144; LA32-NEXT: fcmp.cueq.s $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.s $fcc0, $fa0, $fa1151; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0152; LA64-NEXT: ret153 %cmp = fcmp ueq float %a, %b154 %res = select i1 %cmp, float %x, float %y155 ret float %res156}157 158define float @fcmp_ugt(float %a, float %b, float %x, float %y) {159; LA32-LABEL: fcmp_ugt:160; LA32: # %bb.0:161; LA32-NEXT: fcmp.cult.s $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.s $fcc0, $fa1, $fa0168; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0169; LA64-NEXT: ret170 %cmp = fcmp ugt float %a, %b171 %res = select i1 %cmp, float %x, float %y172 ret float %res173}174 175define float @fcmp_uge(float %a, float %b, float %x, float %y) {176; LA32-LABEL: fcmp_uge:177; LA32: # %bb.0:178; LA32-NEXT: fcmp.cule.s $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.s $fcc0, $fa1, $fa0185; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0186; LA64-NEXT: ret187 %cmp = fcmp uge float %a, %b188 %res = select i1 %cmp, float %x, float %y189 ret float %res190}191 192define float @fcmp_ult(float %a, float %b, float %x, float %y) {193; LA32-LABEL: fcmp_ult:194; LA32: # %bb.0:195; LA32-NEXT: fcmp.cult.s $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.s $fcc0, $fa0, $fa1202; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0203; LA64-NEXT: ret204 %cmp = fcmp ult float %a, %b205 %res = select i1 %cmp, float %x, float %y206 ret float %res207}208 209define float @fcmp_ule(float %a, float %b, float %x, float %y) {210; LA32-LABEL: fcmp_ule:211; LA32: # %bb.0:212; LA32-NEXT: fcmp.cule.s $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.s $fcc0, $fa0, $fa1219; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0220; LA64-NEXT: ret221 %cmp = fcmp ule float %a, %b222 %res = select i1 %cmp, float %x, float %y223 ret float %res224}225 226define float @fcmp_une(float %a, float %b, float %x, float %y) {227; LA32-LABEL: fcmp_une:228; LA32: # %bb.0:229; LA32-NEXT: fcmp.cune.s $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.s $fcc0, $fa0, $fa1236; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0237; LA64-NEXT: ret238 %cmp = fcmp une float %a, %b239 %res = select i1 %cmp, float %x, float %y240 ret float %res241}242 243define float @fcmp_uno(float %a, float %b, float %x, float %y) {244; LA32-LABEL: fcmp_uno:245; LA32: # %bb.0:246; LA32-NEXT: fcmp.cun.s $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.s $fcc0, $fa0, $fa1253; LA64-NEXT: fsel $fa0, $fa3, $fa2, $fcc0254; LA64-NEXT: ret255 %cmp = fcmp uno float %a, %b256 %res = select i1 %cmp, float %x, float %y257 ret float %res258}259 260define float @fcmp_true(float %a, float %b, float %x, float %y) {261; LA32-LABEL: fcmp_true:262; LA32: # %bb.0:263; LA32-NEXT: fmov.s $fa0, $fa2264; LA32-NEXT: ret265;266; LA64-LABEL: fcmp_true:267; LA64: # %bb.0:268; LA64-NEXT: fmov.s $fa0, $fa2269; LA64-NEXT: ret270 %cmp = fcmp true float %a, %b271 %res = select i1 %cmp, float %x, float %y272 ret float %res273}274