brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.9 KiB · 4a97f69 Raw
359 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --mattr=+32s,+f,-d < %s | FileCheck %s --check-prefix=LA323; RUN: llc --mtriple=loongarch64 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA644 5;; Test the 'fcmp' LLVM IR: https://llvm.org/docs/LangRef.html#fcmp-instruction6;; over float values.7 8define i1 @fcmp_false(float %a, float %b) {9; LA32-LABEL: fcmp_false:10; LA32:       # %bb.0:11; LA32-NEXT:    move $a0, $zero12; LA32-NEXT:    ret13;14; LA64-LABEL: fcmp_false:15; LA64:       # %bb.0:16; LA64-NEXT:    move $a0, $zero17; LA64-NEXT:    ret18  %cmp = fcmp false float %a, %b19  ret i1 %cmp20}21 22define i1 @fcmp_oeq(float %a, float %b) {23; LA32-LABEL: fcmp_oeq:24; LA32:       # %bb.0:25; LA32-NEXT:    fcmp.ceq.s $fcc0, $fa0, $fa126; LA32-NEXT:    movcf2gr $a0, $fcc027; LA32-NEXT:    ret28;29; LA64-LABEL: fcmp_oeq:30; LA64:       # %bb.0:31; LA64-NEXT:    fcmp.ceq.s $fcc0, $fa0, $fa132; LA64-NEXT:    movcf2gr $a0, $fcc033; LA64-NEXT:    ret34  %cmp = fcmp oeq float %a, %b35  ret i1 %cmp36}37 38define i1 @fcmp_ogt(float %a, float %b) {39; LA32-LABEL: fcmp_ogt:40; LA32:       # %bb.0:41; LA32-NEXT:    fcmp.clt.s $fcc0, $fa1, $fa042; LA32-NEXT:    movcf2gr $a0, $fcc043; LA32-NEXT:    ret44;45; LA64-LABEL: fcmp_ogt:46; LA64:       # %bb.0:47; LA64-NEXT:    fcmp.clt.s $fcc0, $fa1, $fa048; LA64-NEXT:    movcf2gr $a0, $fcc049; LA64-NEXT:    ret50  %cmp = fcmp ogt float %a, %b51  ret i1 %cmp52}53 54define i1 @fcmp_oge(float %a, float %b) {55; LA32-LABEL: fcmp_oge:56; LA32:       # %bb.0:57; LA32-NEXT:    fcmp.cle.s $fcc0, $fa1, $fa058; LA32-NEXT:    movcf2gr $a0, $fcc059; LA32-NEXT:    ret60;61; LA64-LABEL: fcmp_oge:62; LA64:       # %bb.0:63; LA64-NEXT:    fcmp.cle.s $fcc0, $fa1, $fa064; LA64-NEXT:    movcf2gr $a0, $fcc065; LA64-NEXT:    ret66  %cmp = fcmp oge float %a, %b67  ret i1 %cmp68}69 70define i1 @fcmp_olt(float %a, float %b) {71; LA32-LABEL: fcmp_olt:72; LA32:       # %bb.0:73; LA32-NEXT:    fcmp.clt.s $fcc0, $fa0, $fa174; LA32-NEXT:    movcf2gr $a0, $fcc075; LA32-NEXT:    ret76;77; LA64-LABEL: fcmp_olt:78; LA64:       # %bb.0:79; LA64-NEXT:    fcmp.clt.s $fcc0, $fa0, $fa180; LA64-NEXT:    movcf2gr $a0, $fcc081; LA64-NEXT:    ret82  %cmp = fcmp olt float %a, %b83  ret i1 %cmp84}85 86define i1 @fcmp_ole(float %a, float %b) {87; LA32-LABEL: fcmp_ole:88; LA32:       # %bb.0:89; LA32-NEXT:    fcmp.cle.s $fcc0, $fa0, $fa190; LA32-NEXT:    movcf2gr $a0, $fcc091; LA32-NEXT:    ret92;93; LA64-LABEL: fcmp_ole:94; LA64:       # %bb.0:95; LA64-NEXT:    fcmp.cle.s $fcc0, $fa0, $fa196; LA64-NEXT:    movcf2gr $a0, $fcc097; LA64-NEXT:    ret98  %cmp = fcmp ole float %a, %b99  ret i1 %cmp100}101 102define i1 @fcmp_one(float %a, float %b) {103; LA32-LABEL: fcmp_one:104; LA32:       # %bb.0:105; LA32-NEXT:    fcmp.cne.s $fcc0, $fa0, $fa1106; LA32-NEXT:    movcf2gr $a0, $fcc0107; LA32-NEXT:    ret108;109; LA64-LABEL: fcmp_one:110; LA64:       # %bb.0:111; LA64-NEXT:    fcmp.cne.s $fcc0, $fa0, $fa1112; LA64-NEXT:    movcf2gr $a0, $fcc0113; LA64-NEXT:    ret114  %cmp = fcmp one float %a, %b115  ret i1 %cmp116}117 118define i1 @fcmp_ord(float %a, float %b) {119; LA32-LABEL: fcmp_ord:120; LA32:       # %bb.0:121; LA32-NEXT:    fcmp.cor.s $fcc0, $fa0, $fa1122; LA32-NEXT:    movcf2gr $a0, $fcc0123; LA32-NEXT:    ret124;125; LA64-LABEL: fcmp_ord:126; LA64:       # %bb.0:127; LA64-NEXT:    fcmp.cor.s $fcc0, $fa0, $fa1128; LA64-NEXT:    movcf2gr $a0, $fcc0129; LA64-NEXT:    ret130  %cmp = fcmp ord float %a, %b131  ret i1 %cmp132}133 134define i1 @fcmp_ueq(float %a, float %b) {135; LA32-LABEL: fcmp_ueq:136; LA32:       # %bb.0:137; LA32-NEXT:    fcmp.cueq.s $fcc0, $fa0, $fa1138; LA32-NEXT:    movcf2gr $a0, $fcc0139; LA32-NEXT:    ret140;141; LA64-LABEL: fcmp_ueq:142; LA64:       # %bb.0:143; LA64-NEXT:    fcmp.cueq.s $fcc0, $fa0, $fa1144; LA64-NEXT:    movcf2gr $a0, $fcc0145; LA64-NEXT:    ret146  %cmp = fcmp ueq float %a, %b147  ret i1 %cmp148}149 150define i1 @fcmp_ugt(float %a, float %b) {151; LA32-LABEL: fcmp_ugt:152; LA32:       # %bb.0:153; LA32-NEXT:    fcmp.cult.s $fcc0, $fa1, $fa0154; LA32-NEXT:    movcf2gr $a0, $fcc0155; LA32-NEXT:    ret156;157; LA64-LABEL: fcmp_ugt:158; LA64:       # %bb.0:159; LA64-NEXT:    fcmp.cult.s $fcc0, $fa1, $fa0160; LA64-NEXT:    movcf2gr $a0, $fcc0161; LA64-NEXT:    ret162  %cmp = fcmp ugt float %a, %b163  ret i1 %cmp164}165 166define i1 @fcmp_uge(float %a, float %b) {167; LA32-LABEL: fcmp_uge:168; LA32:       # %bb.0:169; LA32-NEXT:    fcmp.cule.s $fcc0, $fa1, $fa0170; LA32-NEXT:    movcf2gr $a0, $fcc0171; LA32-NEXT:    ret172;173; LA64-LABEL: fcmp_uge:174; LA64:       # %bb.0:175; LA64-NEXT:    fcmp.cule.s $fcc0, $fa1, $fa0176; LA64-NEXT:    movcf2gr $a0, $fcc0177; LA64-NEXT:    ret178  %cmp = fcmp uge float %a, %b179  ret i1 %cmp180}181 182define i1 @fcmp_ult(float %a, float %b) {183; LA32-LABEL: fcmp_ult:184; LA32:       # %bb.0:185; LA32-NEXT:    fcmp.cult.s $fcc0, $fa0, $fa1186; LA32-NEXT:    movcf2gr $a0, $fcc0187; LA32-NEXT:    ret188;189; LA64-LABEL: fcmp_ult:190; LA64:       # %bb.0:191; LA64-NEXT:    fcmp.cult.s $fcc0, $fa0, $fa1192; LA64-NEXT:    movcf2gr $a0, $fcc0193; LA64-NEXT:    ret194  %cmp = fcmp ult float %a, %b195  ret i1 %cmp196}197 198define i1 @fcmp_ule(float %a, float %b) {199; LA32-LABEL: fcmp_ule:200; LA32:       # %bb.0:201; LA32-NEXT:    fcmp.cule.s $fcc0, $fa0, $fa1202; LA32-NEXT:    movcf2gr $a0, $fcc0203; LA32-NEXT:    ret204;205; LA64-LABEL: fcmp_ule:206; LA64:       # %bb.0:207; LA64-NEXT:    fcmp.cule.s $fcc0, $fa0, $fa1208; LA64-NEXT:    movcf2gr $a0, $fcc0209; LA64-NEXT:    ret210  %cmp = fcmp ule float %a, %b211  ret i1 %cmp212}213 214define i1 @fcmp_une(float %a, float %b) {215; LA32-LABEL: fcmp_une:216; LA32:       # %bb.0:217; LA32-NEXT:    fcmp.cune.s $fcc0, $fa0, $fa1218; LA32-NEXT:    movcf2gr $a0, $fcc0219; LA32-NEXT:    ret220;221; LA64-LABEL: fcmp_une:222; LA64:       # %bb.0:223; LA64-NEXT:    fcmp.cune.s $fcc0, $fa0, $fa1224; LA64-NEXT:    movcf2gr $a0, $fcc0225; LA64-NEXT:    ret226  %cmp = fcmp une float %a, %b227  ret i1 %cmp228}229 230define i1 @fcmp_uno(float %a, float %b) {231; LA32-LABEL: fcmp_uno:232; LA32:       # %bb.0:233; LA32-NEXT:    fcmp.cun.s $fcc0, $fa0, $fa1234; LA32-NEXT:    movcf2gr $a0, $fcc0235; LA32-NEXT:    ret236;237; LA64-LABEL: fcmp_uno:238; LA64:       # %bb.0:239; LA64-NEXT:    fcmp.cun.s $fcc0, $fa0, $fa1240; LA64-NEXT:    movcf2gr $a0, $fcc0241; LA64-NEXT:    ret242  %cmp = fcmp uno float %a, %b243  ret i1 %cmp244}245 246define i1 @fcmp_true(float %a, float %b) {247; LA32-LABEL: fcmp_true:248; LA32:       # %bb.0:249; LA32-NEXT:    ori $a0, $zero, 1250; LA32-NEXT:    ret251;252; LA64-LABEL: fcmp_true:253; LA64:       # %bb.0:254; LA64-NEXT:    ori $a0, $zero, 1255; LA64-NEXT:    ret256  %cmp = fcmp true float %a, %b257  ret i1 %cmp258}259 260define i1 @fcmp_fast_olt(float %a, float %b, i1 %c) nounwind {261; LA32-LABEL: fcmp_fast_olt:262; LA32:       # %bb.0:263; LA32-NEXT:    movgr2fr.w $fa1, $zero264; LA32-NEXT:    fcmp.cle.s $fcc0, $fa1, $fa0265; LA32-NEXT:    bcnez $fcc0, .LBB16_2266; LA32-NEXT:  # %bb.1: # %if.then267; LA32-NEXT:    ret268; LA32-NEXT:  .LBB16_2: # %if.else269; LA32-NEXT:    fcmp.clt.s $fcc0, $fa0, $fa1270; LA32-NEXT:    movcf2gr $a0, $fcc0271; LA32-NEXT:    ret272;273; LA64-LABEL: fcmp_fast_olt:274; LA64:       # %bb.0:275; LA64-NEXT:    movgr2fr.w $fa1, $zero276; LA64-NEXT:    fcmp.cle.s $fcc0, $fa1, $fa0277; LA64-NEXT:    bcnez $fcc0, .LBB16_2278; LA64-NEXT:  # %bb.1: # %if.then279; LA64-NEXT:    ret280; LA64-NEXT:  .LBB16_2: # %if.else281; LA64-NEXT:    fcmp.clt.s $fcc0, $fa0, $fa1282; LA64-NEXT:    movcf2gr $a0, $fcc0283; LA64-NEXT:    ret284  %cmp = fcmp fast olt float %a, 0.000000e+00285  br i1 %cmp, label %if.then, label %if.else286 287if.then:288  ret i1 %c289 290if.else:291  ret i1 %cmp292}293 294define i1 @fcmp_fast_oeq(float %a, float %b, i1 %c) nounwind {295; LA32-LABEL: fcmp_fast_oeq:296; LA32:       # %bb.0:297; LA32-NEXT:    movgr2fr.w $fa1, $zero298; LA32-NEXT:    fcmp.ceq.s $fcc0, $fa0, $fa1299; LA32-NEXT:    bceqz $fcc0, .LBB17_2300; LA32-NEXT:  # %bb.1: # %if.then301; LA32-NEXT:    ret302; LA32-NEXT:  .LBB17_2: # %if.else303; LA32-NEXT:    movcf2gr $a0, $fcc0304; LA32-NEXT:    ret305;306; LA64-LABEL: fcmp_fast_oeq:307; LA64:       # %bb.0:308; LA64-NEXT:    movgr2fr.w $fa1, $zero309; LA64-NEXT:    fcmp.ceq.s $fcc0, $fa0, $fa1310; LA64-NEXT:    bceqz $fcc0, .LBB17_2311; LA64-NEXT:  # %bb.1: # %if.then312; LA64-NEXT:    ret313; LA64-NEXT:  .LBB17_2: # %if.else314; LA64-NEXT:    movcf2gr $a0, $fcc0315; LA64-NEXT:    ret316  %cmp = fcmp fast oeq float %a, 0.000000e+00317  br i1 %cmp, label %if.then, label %if.else318 319if.then:320  ret i1 %c321 322if.else:323  ret i1 %cmp324}325 326define i1 @fcmp_fast_ole(float %a, float %b, i1 %c) nounwind {327; LA32-LABEL: fcmp_fast_ole:328; LA32:       # %bb.0:329; LA32-NEXT:    movgr2fr.w $fa1, $zero330; LA32-NEXT:    fcmp.clt.s $fcc0, $fa1, $fa0331; LA32-NEXT:    bcnez $fcc0, .LBB18_2332; LA32-NEXT:  # %bb.1: # %if.then333; LA32-NEXT:    ret334; LA32-NEXT:  .LBB18_2: # %if.else335; LA32-NEXT:    fcmp.cle.s $fcc0, $fa0, $fa1336; LA32-NEXT:    movcf2gr $a0, $fcc0337; LA32-NEXT:    ret338;339; LA64-LABEL: fcmp_fast_ole:340; LA64:       # %bb.0:341; LA64-NEXT:    movgr2fr.w $fa1, $zero342; LA64-NEXT:    fcmp.clt.s $fcc0, $fa1, $fa0343; LA64-NEXT:    bcnez $fcc0, .LBB18_2344; LA64-NEXT:  # %bb.1: # %if.then345; LA64-NEXT:    ret346; LA64-NEXT:  .LBB18_2: # %if.else347; LA64-NEXT:    fcmp.cle.s $fcc0, $fa0, $fa1348; LA64-NEXT:    movcf2gr $a0, $fcc0349; LA64-NEXT:    ret350  %cmp = fcmp fast ole float %a, 0.000000e+00351  br i1 %cmp, label %if.then, label %if.else352 353if.then:354  ret i1 %c355 356if.else:357  ret i1 %cmp358}359