brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.0 KiB · 8870e78 Raw
208 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 integers comparison6 7define float @select_eq(i32 signext %a, i32 signext %b, float %x, float %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, float %x, float %y25  ret float %res26}27 28define float @select_ne(i32 signext %a, i32 signext %b, float %x, float %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, float %x, float %y46  ret float %res47}48 49define float @select_ugt(i32 signext %a, i32 signext %b, float %x, float %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, float %x, float %y65  ret float %res66}67 68define float @select_uge(i32 signext %a, i32 signext %b, float %x, float %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, float %x, float %y86  ret float %res87}88 89define float @select_ult(i32 signext %a, i32 signext %b, float %x, float %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, float %x, float %y105  ret float %res106}107 108define float @select_ule(i32 signext %a, i32 signext %b, float %x, float %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, float %x, float %y126  ret float %res127}128 129define float @select_sgt(i32 signext %a, i32 signext %b, float %x, float %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, float %x, float %y145  ret float %res146}147 148define float @select_sge(i32 signext %a, i32 signext %b, float %x, float %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, float %x, float %y166  ret float %res167}168 169define float @select_slt(i32 signext %a, i32 signext %b, float %x, float %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, float %x, float %y185  ret float %res186}187 188define float @select_sle(i32 signext %a, i32 signext %b, float %x, float %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, float %x, float %y206  ret float %res207}208