208 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 integers comparison6 7define double @select_eq(i32 signext %a, i32 signext %b, double %x, double %y) {8; LA32-LABEL: select_eq:9; LA32: # %bb.0:10; LA32-NEXT: xor $a0, $a0, $a111; LA32-NEXT: sltui $a0, $a0, 112; LA32-NEXT: movgr2cf $fcc0, $a013; LA32-NEXT: fsel $fa0, $fa1, $fa0, $fcc014; LA32-NEXT: ret15;16; LA64-LABEL: select_eq:17; LA64: # %bb.0:18; LA64-NEXT: xor $a0, $a0, $a119; LA64-NEXT: sltui $a0, $a0, 120; LA64-NEXT: movgr2cf $fcc0, $a021; LA64-NEXT: fsel $fa0, $fa1, $fa0, $fcc022; LA64-NEXT: ret23 %cond = icmp eq i32 %a, %b24 %res = select i1 %cond, double %x, double %y25 ret double %res26}27 28define double @select_ne(i32 signext %a, i32 signext %b, double %x, double %y) {29; LA32-LABEL: select_ne:30; LA32: # %bb.0:31; LA32-NEXT: xor $a0, $a0, $a132; LA32-NEXT: sltu $a0, $zero, $a033; LA32-NEXT: movgr2cf $fcc0, $a034; LA32-NEXT: fsel $fa0, $fa1, $fa0, $fcc035; LA32-NEXT: ret36;37; LA64-LABEL: select_ne:38; LA64: # %bb.0:39; LA64-NEXT: xor $a0, $a0, $a140; LA64-NEXT: sltu $a0, $zero, $a041; LA64-NEXT: movgr2cf $fcc0, $a042; LA64-NEXT: fsel $fa0, $fa1, $fa0, $fcc043; LA64-NEXT: ret44 %cond = icmp ne i32 %a, %b45 %res = select i1 %cond, double %x, double %y46 ret double %res47}48 49define double @select_ugt(i32 signext %a, i32 signext %b, double %x, double %y) {50; LA32-LABEL: select_ugt:51; LA32: # %bb.0:52; LA32-NEXT: sltu $a0, $a1, $a053; LA32-NEXT: movgr2cf $fcc0, $a054; LA32-NEXT: fsel $fa0, $fa1, $fa0, $fcc055; LA32-NEXT: ret56;57; LA64-LABEL: select_ugt:58; LA64: # %bb.0:59; LA64-NEXT: sltu $a0, $a1, $a060; LA64-NEXT: movgr2cf $fcc0, $a061; LA64-NEXT: fsel $fa0, $fa1, $fa0, $fcc062; LA64-NEXT: ret63 %cond = icmp ugt i32 %a, %b64 %res = select i1 %cond, double %x, double %y65 ret double %res66}67 68define double @select_uge(i32 signext %a, i32 signext %b, double %x, double %y) {69; LA32-LABEL: select_uge:70; LA32: # %bb.0:71; LA32-NEXT: sltu $a0, $a0, $a172; LA32-NEXT: xori $a0, $a0, 173; LA32-NEXT: movgr2cf $fcc0, $a074; LA32-NEXT: fsel $fa0, $fa1, $fa0, $fcc075; LA32-NEXT: ret76;77; LA64-LABEL: select_uge:78; LA64: # %bb.0:79; LA64-NEXT: sltu $a0, $a0, $a180; LA64-NEXT: xori $a0, $a0, 181; LA64-NEXT: movgr2cf $fcc0, $a082; LA64-NEXT: fsel $fa0, $fa1, $fa0, $fcc083; LA64-NEXT: ret84 %cond = icmp uge i32 %a, %b85 %res = select i1 %cond, double %x, double %y86 ret double %res87}88 89define double @select_ult(i32 signext %a, i32 signext %b, double %x, double %y) {90; LA32-LABEL: select_ult:91; LA32: # %bb.0:92; LA32-NEXT: sltu $a0, $a0, $a193; LA32-NEXT: movgr2cf $fcc0, $a094; LA32-NEXT: fsel $fa0, $fa1, $fa0, $fcc095; LA32-NEXT: ret96;97; LA64-LABEL: select_ult:98; LA64: # %bb.0:99; LA64-NEXT: sltu $a0, $a0, $a1100; LA64-NEXT: movgr2cf $fcc0, $a0101; LA64-NEXT: fsel $fa0, $fa1, $fa0, $fcc0102; LA64-NEXT: ret103 %cond = icmp ult i32 %a, %b104 %res = select i1 %cond, double %x, double %y105 ret double %res106}107 108define double @select_ule(i32 signext %a, i32 signext %b, double %x, double %y) {109; LA32-LABEL: select_ule:110; LA32: # %bb.0:111; LA32-NEXT: sltu $a0, $a1, $a0112; LA32-NEXT: xori $a0, $a0, 1113; LA32-NEXT: movgr2cf $fcc0, $a0114; LA32-NEXT: fsel $fa0, $fa1, $fa0, $fcc0115; LA32-NEXT: ret116;117; LA64-LABEL: select_ule:118; LA64: # %bb.0:119; LA64-NEXT: sltu $a0, $a1, $a0120; LA64-NEXT: xori $a0, $a0, 1121; LA64-NEXT: movgr2cf $fcc0, $a0122; LA64-NEXT: fsel $fa0, $fa1, $fa0, $fcc0123; LA64-NEXT: ret124 %cond = icmp ule i32 %a, %b125 %res = select i1 %cond, double %x, double %y126 ret double %res127}128 129define double @select_sgt(i32 signext %a, i32 signext %b, double %x, double %y) {130; LA32-LABEL: select_sgt:131; LA32: # %bb.0:132; LA32-NEXT: slt $a0, $a1, $a0133; LA32-NEXT: movgr2cf $fcc0, $a0134; LA32-NEXT: fsel $fa0, $fa1, $fa0, $fcc0135; LA32-NEXT: ret136;137; LA64-LABEL: select_sgt:138; LA64: # %bb.0:139; LA64-NEXT: slt $a0, $a1, $a0140; LA64-NEXT: movgr2cf $fcc0, $a0141; LA64-NEXT: fsel $fa0, $fa1, $fa0, $fcc0142; LA64-NEXT: ret143 %cond = icmp sgt i32 %a, %b144 %res = select i1 %cond, double %x, double %y145 ret double %res146}147 148define double @select_sge(i32 signext %a, i32 signext %b, double %x, double %y) {149; LA32-LABEL: select_sge:150; LA32: # %bb.0:151; LA32-NEXT: slt $a0, $a0, $a1152; LA32-NEXT: xori $a0, $a0, 1153; LA32-NEXT: movgr2cf $fcc0, $a0154; LA32-NEXT: fsel $fa0, $fa1, $fa0, $fcc0155; LA32-NEXT: ret156;157; LA64-LABEL: select_sge:158; LA64: # %bb.0:159; LA64-NEXT: slt $a0, $a0, $a1160; LA64-NEXT: xori $a0, $a0, 1161; LA64-NEXT: movgr2cf $fcc0, $a0162; LA64-NEXT: fsel $fa0, $fa1, $fa0, $fcc0163; LA64-NEXT: ret164 %cond = icmp sge i32 %a, %b165 %res = select i1 %cond, double %x, double %y166 ret double %res167}168 169define double @select_slt(i32 signext %a, i32 signext %b, double %x, double %y) {170; LA32-LABEL: select_slt:171; LA32: # %bb.0:172; LA32-NEXT: slt $a0, $a0, $a1173; LA32-NEXT: movgr2cf $fcc0, $a0174; LA32-NEXT: fsel $fa0, $fa1, $fa0, $fcc0175; LA32-NEXT: ret176;177; LA64-LABEL: select_slt:178; LA64: # %bb.0:179; LA64-NEXT: slt $a0, $a0, $a1180; LA64-NEXT: movgr2cf $fcc0, $a0181; LA64-NEXT: fsel $fa0, $fa1, $fa0, $fcc0182; LA64-NEXT: ret183 %cond = icmp slt i32 %a, %b184 %res = select i1 %cond, double %x, double %y185 ret double %res186}187 188define double @select_sle(i32 signext %a, i32 signext %b, double %x, double %y) {189; LA32-LABEL: select_sle:190; LA32: # %bb.0:191; LA32-NEXT: slt $a0, $a1, $a0192; LA32-NEXT: xori $a0, $a0, 1193; LA32-NEXT: movgr2cf $fcc0, $a0194; LA32-NEXT: fsel $fa0, $fa1, $fa0, $fcc0195; LA32-NEXT: ret196;197; LA64-LABEL: select_sle:198; LA64: # %bb.0:199; LA64-NEXT: slt $a0, $a1, $a0200; LA64-NEXT: xori $a0, $a0, 1201; LA64-NEXT: movgr2cf $fcc0, $a0202; LA64-NEXT: fsel $fa0, $fa1, $fa0, $fcc0203; LA64-NEXT: ret204 %cond = icmp sle i32 %a, %b205 %res = select i1 %cond, double %x, double %y206 ret double %res207}208