734 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 integers selection after `fcmp`6 7define i32 @f32_fcmp_false(float %a, float %b, i32 %x, i32 %y) {8; LA32-LABEL: f32_fcmp_false:9; LA32: # %bb.0:10; LA32-NEXT: move $a0, $a111; LA32-NEXT: ret12;13; LA64-LABEL: f32_fcmp_false:14; LA64: # %bb.0:15; LA64-NEXT: move $a0, $a116; LA64-NEXT: ret17 %cmp = fcmp false float %a, %b18 %res = select i1 %cmp, i32 %x, i32 %y19 ret i32 %res20}21 22define i32 @f32_fcmp_oeq(float %a, float %b, i32 %x, i32 %y) {23; LA32-LABEL: f32_fcmp_oeq:24; LA32: # %bb.0:25; LA32-NEXT: fcmp.ceq.s $fcc0, $fa0, $fa126; LA32-NEXT: movcf2gr $a2, $fcc027; LA32-NEXT: bne $a2, $zero, .LBB1_228; LA32-NEXT: # %bb.1:29; LA32-NEXT: move $a0, $a130; LA32-NEXT: .LBB1_2:31; LA32-NEXT: ret32;33; LA64-LABEL: f32_fcmp_oeq:34; LA64: # %bb.0:35; LA64-NEXT: fcmp.ceq.s $fcc0, $fa0, $fa136; LA64-NEXT: movcf2gr $a2, $fcc037; LA64-NEXT: masknez $a1, $a1, $a238; LA64-NEXT: maskeqz $a0, $a0, $a239; LA64-NEXT: or $a0, $a0, $a140; LA64-NEXT: ret41 %cmp = fcmp oeq float %a, %b42 %res = select i1 %cmp, i32 %x, i32 %y43 ret i32 %res44}45 46define i32 @f32_fcmp_ogt(float %a, float %b, i32 %x, i32 %y) {47; LA32-LABEL: f32_fcmp_ogt:48; LA32: # %bb.0:49; LA32-NEXT: fcmp.clt.s $fcc0, $fa1, $fa050; LA32-NEXT: movcf2gr $a2, $fcc051; LA32-NEXT: bne $a2, $zero, .LBB2_252; LA32-NEXT: # %bb.1:53; LA32-NEXT: move $a0, $a154; LA32-NEXT: .LBB2_2:55; LA32-NEXT: ret56;57; LA64-LABEL: f32_fcmp_ogt:58; LA64: # %bb.0:59; LA64-NEXT: fcmp.clt.s $fcc0, $fa1, $fa060; LA64-NEXT: movcf2gr $a2, $fcc061; LA64-NEXT: masknez $a1, $a1, $a262; LA64-NEXT: maskeqz $a0, $a0, $a263; LA64-NEXT: or $a0, $a0, $a164; LA64-NEXT: ret65 %cmp = fcmp ogt float %a, %b66 %res = select i1 %cmp, i32 %x, i32 %y67 ret i32 %res68}69 70define i32 @f32_fcmp_oge(float %a, float %b, i32 %x, i32 %y) {71; LA32-LABEL: f32_fcmp_oge:72; LA32: # %bb.0:73; LA32-NEXT: fcmp.cle.s $fcc0, $fa1, $fa074; LA32-NEXT: movcf2gr $a2, $fcc075; LA32-NEXT: bne $a2, $zero, .LBB3_276; LA32-NEXT: # %bb.1:77; LA32-NEXT: move $a0, $a178; LA32-NEXT: .LBB3_2:79; LA32-NEXT: ret80;81; LA64-LABEL: f32_fcmp_oge:82; LA64: # %bb.0:83; LA64-NEXT: fcmp.cle.s $fcc0, $fa1, $fa084; LA64-NEXT: movcf2gr $a2, $fcc085; LA64-NEXT: masknez $a1, $a1, $a286; LA64-NEXT: maskeqz $a0, $a0, $a287; LA64-NEXT: or $a0, $a0, $a188; LA64-NEXT: ret89 %cmp = fcmp oge float %a, %b90 %res = select i1 %cmp, i32 %x, i32 %y91 ret i32 %res92}93 94define i32 @f32_fcmp_olt(float %a, float %b, i32 %x, i32 %y) {95; LA32-LABEL: f32_fcmp_olt:96; LA32: # %bb.0:97; LA32-NEXT: fcmp.clt.s $fcc0, $fa0, $fa198; LA32-NEXT: movcf2gr $a2, $fcc099; LA32-NEXT: bne $a2, $zero, .LBB4_2100; LA32-NEXT: # %bb.1:101; LA32-NEXT: move $a0, $a1102; LA32-NEXT: .LBB4_2:103; LA32-NEXT: ret104;105; LA64-LABEL: f32_fcmp_olt:106; LA64: # %bb.0:107; LA64-NEXT: fcmp.clt.s $fcc0, $fa0, $fa1108; LA64-NEXT: movcf2gr $a2, $fcc0109; LA64-NEXT: masknez $a1, $a1, $a2110; LA64-NEXT: maskeqz $a0, $a0, $a2111; LA64-NEXT: or $a0, $a0, $a1112; LA64-NEXT: ret113 %cmp = fcmp olt float %a, %b114 %res = select i1 %cmp, i32 %x, i32 %y115 ret i32 %res116}117 118define i32 @f32_fcmp_ole(float %a, float %b, i32 %x, i32 %y) {119; LA32-LABEL: f32_fcmp_ole:120; LA32: # %bb.0:121; LA32-NEXT: fcmp.cle.s $fcc0, $fa0, $fa1122; LA32-NEXT: movcf2gr $a2, $fcc0123; LA32-NEXT: bne $a2, $zero, .LBB5_2124; LA32-NEXT: # %bb.1:125; LA32-NEXT: move $a0, $a1126; LA32-NEXT: .LBB5_2:127; LA32-NEXT: ret128;129; LA64-LABEL: f32_fcmp_ole:130; LA64: # %bb.0:131; LA64-NEXT: fcmp.cle.s $fcc0, $fa0, $fa1132; LA64-NEXT: movcf2gr $a2, $fcc0133; LA64-NEXT: masknez $a1, $a1, $a2134; LA64-NEXT: maskeqz $a0, $a0, $a2135; LA64-NEXT: or $a0, $a0, $a1136; LA64-NEXT: ret137 %cmp = fcmp ole float %a, %b138 %res = select i1 %cmp, i32 %x, i32 %y139 ret i32 %res140}141 142define i32 @f32_fcmp_one(float %a, float %b, i32 %x, i32 %y) {143; LA32-LABEL: f32_fcmp_one:144; LA32: # %bb.0:145; LA32-NEXT: fcmp.cne.s $fcc0, $fa0, $fa1146; LA32-NEXT: movcf2gr $a2, $fcc0147; LA32-NEXT: bne $a2, $zero, .LBB6_2148; LA32-NEXT: # %bb.1:149; LA32-NEXT: move $a0, $a1150; LA32-NEXT: .LBB6_2:151; LA32-NEXT: ret152;153; LA64-LABEL: f32_fcmp_one:154; LA64: # %bb.0:155; LA64-NEXT: fcmp.cne.s $fcc0, $fa0, $fa1156; LA64-NEXT: movcf2gr $a2, $fcc0157; LA64-NEXT: masknez $a1, $a1, $a2158; LA64-NEXT: maskeqz $a0, $a0, $a2159; LA64-NEXT: or $a0, $a0, $a1160; LA64-NEXT: ret161 %cmp = fcmp one float %a, %b162 %res = select i1 %cmp, i32 %x, i32 %y163 ret i32 %res164}165 166define i32 @f32_fcmp_ord(float %a, float %b, i32 %x, i32 %y) {167; LA32-LABEL: f32_fcmp_ord:168; LA32: # %bb.0:169; LA32-NEXT: fcmp.cor.s $fcc0, $fa0, $fa1170; LA32-NEXT: movcf2gr $a2, $fcc0171; LA32-NEXT: bne $a2, $zero, .LBB7_2172; LA32-NEXT: # %bb.1:173; LA32-NEXT: move $a0, $a1174; LA32-NEXT: .LBB7_2:175; LA32-NEXT: ret176;177; LA64-LABEL: f32_fcmp_ord:178; LA64: # %bb.0:179; LA64-NEXT: fcmp.cor.s $fcc0, $fa0, $fa1180; LA64-NEXT: movcf2gr $a2, $fcc0181; LA64-NEXT: masknez $a1, $a1, $a2182; LA64-NEXT: maskeqz $a0, $a0, $a2183; LA64-NEXT: or $a0, $a0, $a1184; LA64-NEXT: ret185 %cmp = fcmp ord float %a, %b186 %res = select i1 %cmp, i32 %x, i32 %y187 ret i32 %res188}189 190define i32 @f32_fcmp_ueq(float %a, float %b, i32 %x, i32 %y) {191; LA32-LABEL: f32_fcmp_ueq:192; LA32: # %bb.0:193; LA32-NEXT: fcmp.cueq.s $fcc0, $fa0, $fa1194; LA32-NEXT: movcf2gr $a2, $fcc0195; LA32-NEXT: bne $a2, $zero, .LBB8_2196; LA32-NEXT: # %bb.1:197; LA32-NEXT: move $a0, $a1198; LA32-NEXT: .LBB8_2:199; LA32-NEXT: ret200;201; LA64-LABEL: f32_fcmp_ueq:202; LA64: # %bb.0:203; LA64-NEXT: fcmp.cueq.s $fcc0, $fa0, $fa1204; LA64-NEXT: movcf2gr $a2, $fcc0205; LA64-NEXT: masknez $a1, $a1, $a2206; LA64-NEXT: maskeqz $a0, $a0, $a2207; LA64-NEXT: or $a0, $a0, $a1208; LA64-NEXT: ret209 %cmp = fcmp ueq float %a, %b210 %res = select i1 %cmp, i32 %x, i32 %y211 ret i32 %res212}213 214define i32 @f32_fcmp_ugt(float %a, float %b, i32 %x, i32 %y) {215; LA32-LABEL: f32_fcmp_ugt:216; LA32: # %bb.0:217; LA32-NEXT: fcmp.cult.s $fcc0, $fa1, $fa0218; LA32-NEXT: movcf2gr $a2, $fcc0219; LA32-NEXT: bne $a2, $zero, .LBB9_2220; LA32-NEXT: # %bb.1:221; LA32-NEXT: move $a0, $a1222; LA32-NEXT: .LBB9_2:223; LA32-NEXT: ret224;225; LA64-LABEL: f32_fcmp_ugt:226; LA64: # %bb.0:227; LA64-NEXT: fcmp.cult.s $fcc0, $fa1, $fa0228; LA64-NEXT: movcf2gr $a2, $fcc0229; LA64-NEXT: masknez $a1, $a1, $a2230; LA64-NEXT: maskeqz $a0, $a0, $a2231; LA64-NEXT: or $a0, $a0, $a1232; LA64-NEXT: ret233 %cmp = fcmp ugt float %a, %b234 %res = select i1 %cmp, i32 %x, i32 %y235 ret i32 %res236}237 238define i32 @f32_fcmp_uge(float %a, float %b, i32 %x, i32 %y) {239; LA32-LABEL: f32_fcmp_uge:240; LA32: # %bb.0:241; LA32-NEXT: fcmp.cule.s $fcc0, $fa1, $fa0242; LA32-NEXT: movcf2gr $a2, $fcc0243; LA32-NEXT: bne $a2, $zero, .LBB10_2244; LA32-NEXT: # %bb.1:245; LA32-NEXT: move $a0, $a1246; LA32-NEXT: .LBB10_2:247; LA32-NEXT: ret248;249; LA64-LABEL: f32_fcmp_uge:250; LA64: # %bb.0:251; LA64-NEXT: fcmp.cule.s $fcc0, $fa1, $fa0252; LA64-NEXT: movcf2gr $a2, $fcc0253; LA64-NEXT: masknez $a1, $a1, $a2254; LA64-NEXT: maskeqz $a0, $a0, $a2255; LA64-NEXT: or $a0, $a0, $a1256; LA64-NEXT: ret257 %cmp = fcmp uge float %a, %b258 %res = select i1 %cmp, i32 %x, i32 %y259 ret i32 %res260}261 262define i32 @f32_fcmp_ult(float %a, float %b, i32 %x, i32 %y) {263; LA32-LABEL: f32_fcmp_ult:264; LA32: # %bb.0:265; LA32-NEXT: fcmp.cult.s $fcc0, $fa0, $fa1266; LA32-NEXT: movcf2gr $a2, $fcc0267; LA32-NEXT: bne $a2, $zero, .LBB11_2268; LA32-NEXT: # %bb.1:269; LA32-NEXT: move $a0, $a1270; LA32-NEXT: .LBB11_2:271; LA32-NEXT: ret272;273; LA64-LABEL: f32_fcmp_ult:274; LA64: # %bb.0:275; LA64-NEXT: fcmp.cult.s $fcc0, $fa0, $fa1276; LA64-NEXT: movcf2gr $a2, $fcc0277; LA64-NEXT: masknez $a1, $a1, $a2278; LA64-NEXT: maskeqz $a0, $a0, $a2279; LA64-NEXT: or $a0, $a0, $a1280; LA64-NEXT: ret281 %cmp = fcmp ult float %a, %b282 %res = select i1 %cmp, i32 %x, i32 %y283 ret i32 %res284}285 286define i32 @f32_fcmp_ule(float %a, float %b, i32 %x, i32 %y) {287; LA32-LABEL: f32_fcmp_ule:288; LA32: # %bb.0:289; LA32-NEXT: fcmp.cule.s $fcc0, $fa0, $fa1290; LA32-NEXT: movcf2gr $a2, $fcc0291; LA32-NEXT: bne $a2, $zero, .LBB12_2292; LA32-NEXT: # %bb.1:293; LA32-NEXT: move $a0, $a1294; LA32-NEXT: .LBB12_2:295; LA32-NEXT: ret296;297; LA64-LABEL: f32_fcmp_ule:298; LA64: # %bb.0:299; LA64-NEXT: fcmp.cule.s $fcc0, $fa0, $fa1300; LA64-NEXT: movcf2gr $a2, $fcc0301; LA64-NEXT: masknez $a1, $a1, $a2302; LA64-NEXT: maskeqz $a0, $a0, $a2303; LA64-NEXT: or $a0, $a0, $a1304; LA64-NEXT: ret305 %cmp = fcmp ule float %a, %b306 %res = select i1 %cmp, i32 %x, i32 %y307 ret i32 %res308}309 310define i32 @f32_fcmp_une(float %a, float %b, i32 %x, i32 %y) {311; LA32-LABEL: f32_fcmp_une:312; LA32: # %bb.0:313; LA32-NEXT: fcmp.cune.s $fcc0, $fa0, $fa1314; LA32-NEXT: movcf2gr $a2, $fcc0315; LA32-NEXT: bne $a2, $zero, .LBB13_2316; LA32-NEXT: # %bb.1:317; LA32-NEXT: move $a0, $a1318; LA32-NEXT: .LBB13_2:319; LA32-NEXT: ret320;321; LA64-LABEL: f32_fcmp_une:322; LA64: # %bb.0:323; LA64-NEXT: fcmp.cune.s $fcc0, $fa0, $fa1324; LA64-NEXT: movcf2gr $a2, $fcc0325; LA64-NEXT: masknez $a1, $a1, $a2326; LA64-NEXT: maskeqz $a0, $a0, $a2327; LA64-NEXT: or $a0, $a0, $a1328; LA64-NEXT: ret329 %cmp = fcmp une float %a, %b330 %res = select i1 %cmp, i32 %x, i32 %y331 ret i32 %res332}333 334define i32 @f32_fcmp_uno(float %a, float %b, i32 %x, i32 %y) {335; LA32-LABEL: f32_fcmp_uno:336; LA32: # %bb.0:337; LA32-NEXT: fcmp.cun.s $fcc0, $fa0, $fa1338; LA32-NEXT: movcf2gr $a2, $fcc0339; LA32-NEXT: bne $a2, $zero, .LBB14_2340; LA32-NEXT: # %bb.1:341; LA32-NEXT: move $a0, $a1342; LA32-NEXT: .LBB14_2:343; LA32-NEXT: ret344;345; LA64-LABEL: f32_fcmp_uno:346; LA64: # %bb.0:347; LA64-NEXT: fcmp.cun.s $fcc0, $fa0, $fa1348; LA64-NEXT: movcf2gr $a2, $fcc0349; LA64-NEXT: masknez $a1, $a1, $a2350; LA64-NEXT: maskeqz $a0, $a0, $a2351; LA64-NEXT: or $a0, $a0, $a1352; LA64-NEXT: ret353 %cmp = fcmp uno float %a, %b354 %res = select i1 %cmp, i32 %x, i32 %y355 ret i32 %res356}357 358define i32 @f32_fcmp_true(float %a, float %b, i32 %x, i32 %y) {359; LA32-LABEL: f32_fcmp_true:360; LA32: # %bb.0:361; LA32-NEXT: ret362;363; LA64-LABEL: f32_fcmp_true:364; LA64: # %bb.0:365; LA64-NEXT: ret366 %cmp = fcmp true float %a, %b367 %res = select i1 %cmp, i32 %x, i32 %y368 ret i32 %res369}370 371define i32 @f64_fcmp_false(double %a, double %b, i32 %x, i32 %y) {372; LA32-LABEL: f64_fcmp_false:373; LA32: # %bb.0:374; LA32-NEXT: move $a0, $a1375; LA32-NEXT: ret376;377; LA64-LABEL: f64_fcmp_false:378; LA64: # %bb.0:379; LA64-NEXT: move $a0, $a1380; LA64-NEXT: ret381 %cmp = fcmp false double %a, %b382 %res = select i1 %cmp, i32 %x, i32 %y383 ret i32 %res384}385 386define i32 @f64_fcmp_oeq(double %a, double %b, i32 %x, i32 %y) {387; LA32-LABEL: f64_fcmp_oeq:388; LA32: # %bb.0:389; LA32-NEXT: fcmp.ceq.d $fcc0, $fa0, $fa1390; LA32-NEXT: movcf2gr $a2, $fcc0391; LA32-NEXT: bne $a2, $zero, .LBB17_2392; LA32-NEXT: # %bb.1:393; LA32-NEXT: move $a0, $a1394; LA32-NEXT: .LBB17_2:395; LA32-NEXT: ret396;397; LA64-LABEL: f64_fcmp_oeq:398; LA64: # %bb.0:399; LA64-NEXT: fcmp.ceq.d $fcc0, $fa0, $fa1400; LA64-NEXT: movcf2gr $a2, $fcc0401; LA64-NEXT: masknez $a1, $a1, $a2402; LA64-NEXT: maskeqz $a0, $a0, $a2403; LA64-NEXT: or $a0, $a0, $a1404; LA64-NEXT: ret405 %cmp = fcmp oeq double %a, %b406 %res = select i1 %cmp, i32 %x, i32 %y407 ret i32 %res408}409 410define i32 @f64_fcmp_ogt(double %a, double %b, i32 %x, i32 %y) {411; LA32-LABEL: f64_fcmp_ogt:412; LA32: # %bb.0:413; LA32-NEXT: fcmp.clt.d $fcc0, $fa1, $fa0414; LA32-NEXT: movcf2gr $a2, $fcc0415; LA32-NEXT: bne $a2, $zero, .LBB18_2416; LA32-NEXT: # %bb.1:417; LA32-NEXT: move $a0, $a1418; LA32-NEXT: .LBB18_2:419; LA32-NEXT: ret420;421; LA64-LABEL: f64_fcmp_ogt:422; LA64: # %bb.0:423; LA64-NEXT: fcmp.clt.d $fcc0, $fa1, $fa0424; LA64-NEXT: movcf2gr $a2, $fcc0425; LA64-NEXT: masknez $a1, $a1, $a2426; LA64-NEXT: maskeqz $a0, $a0, $a2427; LA64-NEXT: or $a0, $a0, $a1428; LA64-NEXT: ret429 %cmp = fcmp ogt double %a, %b430 %res = select i1 %cmp, i32 %x, i32 %y431 ret i32 %res432}433 434define i32 @f64_fcmp_oge(double %a, double %b, i32 %x, i32 %y) {435; LA32-LABEL: f64_fcmp_oge:436; LA32: # %bb.0:437; LA32-NEXT: fcmp.cle.d $fcc0, $fa1, $fa0438; LA32-NEXT: movcf2gr $a2, $fcc0439; LA32-NEXT: bne $a2, $zero, .LBB19_2440; LA32-NEXT: # %bb.1:441; LA32-NEXT: move $a0, $a1442; LA32-NEXT: .LBB19_2:443; LA32-NEXT: ret444;445; LA64-LABEL: f64_fcmp_oge:446; LA64: # %bb.0:447; LA64-NEXT: fcmp.cle.d $fcc0, $fa1, $fa0448; LA64-NEXT: movcf2gr $a2, $fcc0449; LA64-NEXT: masknez $a1, $a1, $a2450; LA64-NEXT: maskeqz $a0, $a0, $a2451; LA64-NEXT: or $a0, $a0, $a1452; LA64-NEXT: ret453 %cmp = fcmp oge double %a, %b454 %res = select i1 %cmp, i32 %x, i32 %y455 ret i32 %res456}457 458define i32 @f64_fcmp_olt(double %a, double %b, i32 %x, i32 %y) {459; LA32-LABEL: f64_fcmp_olt:460; LA32: # %bb.0:461; LA32-NEXT: fcmp.clt.d $fcc0, $fa0, $fa1462; LA32-NEXT: movcf2gr $a2, $fcc0463; LA32-NEXT: bne $a2, $zero, .LBB20_2464; LA32-NEXT: # %bb.1:465; LA32-NEXT: move $a0, $a1466; LA32-NEXT: .LBB20_2:467; LA32-NEXT: ret468;469; LA64-LABEL: f64_fcmp_olt:470; LA64: # %bb.0:471; LA64-NEXT: fcmp.clt.d $fcc0, $fa0, $fa1472; LA64-NEXT: movcf2gr $a2, $fcc0473; LA64-NEXT: masknez $a1, $a1, $a2474; LA64-NEXT: maskeqz $a0, $a0, $a2475; LA64-NEXT: or $a0, $a0, $a1476; LA64-NEXT: ret477 %cmp = fcmp olt double %a, %b478 %res = select i1 %cmp, i32 %x, i32 %y479 ret i32 %res480}481 482define i32 @f64_fcmp_ole(double %a, double %b, i32 %x, i32 %y) {483; LA32-LABEL: f64_fcmp_ole:484; LA32: # %bb.0:485; LA32-NEXT: fcmp.cle.d $fcc0, $fa0, $fa1486; LA32-NEXT: movcf2gr $a2, $fcc0487; LA32-NEXT: bne $a2, $zero, .LBB21_2488; LA32-NEXT: # %bb.1:489; LA32-NEXT: move $a0, $a1490; LA32-NEXT: .LBB21_2:491; LA32-NEXT: ret492;493; LA64-LABEL: f64_fcmp_ole:494; LA64: # %bb.0:495; LA64-NEXT: fcmp.cle.d $fcc0, $fa0, $fa1496; LA64-NEXT: movcf2gr $a2, $fcc0497; LA64-NEXT: masknez $a1, $a1, $a2498; LA64-NEXT: maskeqz $a0, $a0, $a2499; LA64-NEXT: or $a0, $a0, $a1500; LA64-NEXT: ret501 %cmp = fcmp ole double %a, %b502 %res = select i1 %cmp, i32 %x, i32 %y503 ret i32 %res504}505 506define i32 @f64_fcmp_one(double %a, double %b, i32 %x, i32 %y) {507; LA32-LABEL: f64_fcmp_one:508; LA32: # %bb.0:509; LA32-NEXT: fcmp.cne.d $fcc0, $fa0, $fa1510; LA32-NEXT: movcf2gr $a2, $fcc0511; LA32-NEXT: bne $a2, $zero, .LBB22_2512; LA32-NEXT: # %bb.1:513; LA32-NEXT: move $a0, $a1514; LA32-NEXT: .LBB22_2:515; LA32-NEXT: ret516;517; LA64-LABEL: f64_fcmp_one:518; LA64: # %bb.0:519; LA64-NEXT: fcmp.cne.d $fcc0, $fa0, $fa1520; LA64-NEXT: movcf2gr $a2, $fcc0521; LA64-NEXT: masknez $a1, $a1, $a2522; LA64-NEXT: maskeqz $a0, $a0, $a2523; LA64-NEXT: or $a0, $a0, $a1524; LA64-NEXT: ret525 %cmp = fcmp one double %a, %b526 %res = select i1 %cmp, i32 %x, i32 %y527 ret i32 %res528}529 530define i32 @f64_fcmp_ord(double %a, double %b, i32 %x, i32 %y) {531; LA32-LABEL: f64_fcmp_ord:532; LA32: # %bb.0:533; LA32-NEXT: fcmp.cor.d $fcc0, $fa0, $fa1534; LA32-NEXT: movcf2gr $a2, $fcc0535; LA32-NEXT: bne $a2, $zero, .LBB23_2536; LA32-NEXT: # %bb.1:537; LA32-NEXT: move $a0, $a1538; LA32-NEXT: .LBB23_2:539; LA32-NEXT: ret540;541; LA64-LABEL: f64_fcmp_ord:542; LA64: # %bb.0:543; LA64-NEXT: fcmp.cor.d $fcc0, $fa0, $fa1544; LA64-NEXT: movcf2gr $a2, $fcc0545; LA64-NEXT: masknez $a1, $a1, $a2546; LA64-NEXT: maskeqz $a0, $a0, $a2547; LA64-NEXT: or $a0, $a0, $a1548; LA64-NEXT: ret549 %cmp = fcmp ord double %a, %b550 %res = select i1 %cmp, i32 %x, i32 %y551 ret i32 %res552}553 554define i32 @f64_fcmp_ueq(double %a, double %b, i32 %x, i32 %y) {555; LA32-LABEL: f64_fcmp_ueq:556; LA32: # %bb.0:557; LA32-NEXT: fcmp.cueq.d $fcc0, $fa0, $fa1558; LA32-NEXT: movcf2gr $a2, $fcc0559; LA32-NEXT: bne $a2, $zero, .LBB24_2560; LA32-NEXT: # %bb.1:561; LA32-NEXT: move $a0, $a1562; LA32-NEXT: .LBB24_2:563; LA32-NEXT: ret564;565; LA64-LABEL: f64_fcmp_ueq:566; LA64: # %bb.0:567; LA64-NEXT: fcmp.cueq.d $fcc0, $fa0, $fa1568; LA64-NEXT: movcf2gr $a2, $fcc0569; LA64-NEXT: masknez $a1, $a1, $a2570; LA64-NEXT: maskeqz $a0, $a0, $a2571; LA64-NEXT: or $a0, $a0, $a1572; LA64-NEXT: ret573 %cmp = fcmp ueq double %a, %b574 %res = select i1 %cmp, i32 %x, i32 %y575 ret i32 %res576}577 578define i32 @f64_fcmp_ugt(double %a, double %b, i32 %x, i32 %y) {579; LA32-LABEL: f64_fcmp_ugt:580; LA32: # %bb.0:581; LA32-NEXT: fcmp.cult.d $fcc0, $fa1, $fa0582; LA32-NEXT: movcf2gr $a2, $fcc0583; LA32-NEXT: bne $a2, $zero, .LBB25_2584; LA32-NEXT: # %bb.1:585; LA32-NEXT: move $a0, $a1586; LA32-NEXT: .LBB25_2:587; LA32-NEXT: ret588;589; LA64-LABEL: f64_fcmp_ugt:590; LA64: # %bb.0:591; LA64-NEXT: fcmp.cult.d $fcc0, $fa1, $fa0592; LA64-NEXT: movcf2gr $a2, $fcc0593; LA64-NEXT: masknez $a1, $a1, $a2594; LA64-NEXT: maskeqz $a0, $a0, $a2595; LA64-NEXT: or $a0, $a0, $a1596; LA64-NEXT: ret597 %cmp = fcmp ugt double %a, %b598 %res = select i1 %cmp, i32 %x, i32 %y599 ret i32 %res600}601 602define i32 @f64_fcmp_uge(double %a, double %b, i32 %x, i32 %y) {603; LA32-LABEL: f64_fcmp_uge:604; LA32: # %bb.0:605; LA32-NEXT: fcmp.cule.d $fcc0, $fa1, $fa0606; LA32-NEXT: movcf2gr $a2, $fcc0607; LA32-NEXT: bne $a2, $zero, .LBB26_2608; LA32-NEXT: # %bb.1:609; LA32-NEXT: move $a0, $a1610; LA32-NEXT: .LBB26_2:611; LA32-NEXT: ret612;613; LA64-LABEL: f64_fcmp_uge:614; LA64: # %bb.0:615; LA64-NEXT: fcmp.cule.d $fcc0, $fa1, $fa0616; LA64-NEXT: movcf2gr $a2, $fcc0617; LA64-NEXT: masknez $a1, $a1, $a2618; LA64-NEXT: maskeqz $a0, $a0, $a2619; LA64-NEXT: or $a0, $a0, $a1620; LA64-NEXT: ret621 %cmp = fcmp uge double %a, %b622 %res = select i1 %cmp, i32 %x, i32 %y623 ret i32 %res624}625 626define i32 @f64_fcmp_ult(double %a, double %b, i32 %x, i32 %y) {627; LA32-LABEL: f64_fcmp_ult:628; LA32: # %bb.0:629; LA32-NEXT: fcmp.cult.d $fcc0, $fa0, $fa1630; LA32-NEXT: movcf2gr $a2, $fcc0631; LA32-NEXT: bne $a2, $zero, .LBB27_2632; LA32-NEXT: # %bb.1:633; LA32-NEXT: move $a0, $a1634; LA32-NEXT: .LBB27_2:635; LA32-NEXT: ret636;637; LA64-LABEL: f64_fcmp_ult:638; LA64: # %bb.0:639; LA64-NEXT: fcmp.cult.d $fcc0, $fa0, $fa1640; LA64-NEXT: movcf2gr $a2, $fcc0641; LA64-NEXT: masknez $a1, $a1, $a2642; LA64-NEXT: maskeqz $a0, $a0, $a2643; LA64-NEXT: or $a0, $a0, $a1644; LA64-NEXT: ret645 %cmp = fcmp ult double %a, %b646 %res = select i1 %cmp, i32 %x, i32 %y647 ret i32 %res648}649 650define i32 @f64_fcmp_ule(double %a, double %b, i32 %x, i32 %y) {651; LA32-LABEL: f64_fcmp_ule:652; LA32: # %bb.0:653; LA32-NEXT: fcmp.cule.d $fcc0, $fa0, $fa1654; LA32-NEXT: movcf2gr $a2, $fcc0655; LA32-NEXT: bne $a2, $zero, .LBB28_2656; LA32-NEXT: # %bb.1:657; LA32-NEXT: move $a0, $a1658; LA32-NEXT: .LBB28_2:659; LA32-NEXT: ret660;661; LA64-LABEL: f64_fcmp_ule:662; LA64: # %bb.0:663; LA64-NEXT: fcmp.cule.d $fcc0, $fa0, $fa1664; LA64-NEXT: movcf2gr $a2, $fcc0665; LA64-NEXT: masknez $a1, $a1, $a2666; LA64-NEXT: maskeqz $a0, $a0, $a2667; LA64-NEXT: or $a0, $a0, $a1668; LA64-NEXT: ret669 %cmp = fcmp ule double %a, %b670 %res = select i1 %cmp, i32 %x, i32 %y671 ret i32 %res672}673 674define i32 @f64_fcmp_une(double %a, double %b, i32 %x, i32 %y) {675; LA32-LABEL: f64_fcmp_une:676; LA32: # %bb.0:677; LA32-NEXT: fcmp.cune.d $fcc0, $fa0, $fa1678; LA32-NEXT: movcf2gr $a2, $fcc0679; LA32-NEXT: bne $a2, $zero, .LBB29_2680; LA32-NEXT: # %bb.1:681; LA32-NEXT: move $a0, $a1682; LA32-NEXT: .LBB29_2:683; LA32-NEXT: ret684;685; LA64-LABEL: f64_fcmp_une:686; LA64: # %bb.0:687; LA64-NEXT: fcmp.cune.d $fcc0, $fa0, $fa1688; LA64-NEXT: movcf2gr $a2, $fcc0689; LA64-NEXT: masknez $a1, $a1, $a2690; LA64-NEXT: maskeqz $a0, $a0, $a2691; LA64-NEXT: or $a0, $a0, $a1692; LA64-NEXT: ret693 %cmp = fcmp une double %a, %b694 %res = select i1 %cmp, i32 %x, i32 %y695 ret i32 %res696}697 698define i32 @f64_fcmp_uno(double %a, double %b, i32 %x, i32 %y) {699; LA32-LABEL: f64_fcmp_uno:700; LA32: # %bb.0:701; LA32-NEXT: fcmp.cun.d $fcc0, $fa0, $fa1702; LA32-NEXT: movcf2gr $a2, $fcc0703; LA32-NEXT: bne $a2, $zero, .LBB30_2704; LA32-NEXT: # %bb.1:705; LA32-NEXT: move $a0, $a1706; LA32-NEXT: .LBB30_2:707; LA32-NEXT: ret708;709; LA64-LABEL: f64_fcmp_uno:710; LA64: # %bb.0:711; LA64-NEXT: fcmp.cun.d $fcc0, $fa0, $fa1712; LA64-NEXT: movcf2gr $a2, $fcc0713; LA64-NEXT: masknez $a1, $a1, $a2714; LA64-NEXT: maskeqz $a0, $a0, $a2715; LA64-NEXT: or $a0, $a0, $a1716; LA64-NEXT: ret717 %cmp = fcmp uno double %a, %b718 %res = select i1 %cmp, i32 %x, i32 %y719 ret i32 %res720}721 722define i32 @f64_fcmp_true(double %a, double %b, i32 %x, i32 %y) {723; LA32-LABEL: f64_fcmp_true:724; LA32: # %bb.0:725; LA32-NEXT: ret726;727; LA64-LABEL: f64_fcmp_true:728; LA64: # %bb.0:729; LA64-NEXT: ret730 %cmp = fcmp true double %a, %b731 %res = select i1 %cmp, i32 %x, i32 %y732 ret i32 %res733}734