696 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips2 -verify-machineinstrs | FileCheck %s \3; RUN: -check-prefix=M24; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32 -verify-machineinstrs | FileCheck %s \5; RUN: -check-prefix=CMOV32R16; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r2 -verify-machineinstrs | FileCheck %s \7; RUN: -check-prefix=CMOV32R28; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r3 -verify-machineinstrs | FileCheck %s \9; RUN: -check-prefix=CMOV32R210; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r5 -verify-machineinstrs | FileCheck %s \11; RUN: -check-prefix=CMOV32R212; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 -verify-machineinstrs | FileCheck %s \13; RUN: -check-prefix=32R614; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips3 -verify-machineinstrs | FileCheck %s \15; RUN: -check-prefix=M316; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips4 -verify-machineinstrs | FileCheck %s \17; RUN: -check-prefix=CMOV6418; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64 -verify-machineinstrs | FileCheck %s \19; RUN: -check-prefix=CMOV6420; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r2 -verify-machineinstrs | FileCheck %s \21; RUN: -check-prefix=CMOV6422; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r3 -verify-machineinstrs | FileCheck %s \23; RUN: -check-prefix=CMOV6424; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r5 -verify-machineinstrs | FileCheck %s \25; RUN: -check-prefix=CMOV6426; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r6 -verify-machineinstrs | FileCheck %s \27; RUN: -check-prefix=64R628; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r3 \29; RUN: -asm-show-inst -mattr=+micromips -verify-machineinstrs | FileCheck %s \30; RUN: -check-prefix=MM32R331; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 -mattr=+micromips -verify-machineinstrs | FileCheck %s \32; RUN: -check-prefix=MM32R633 34define double @tst_select_i1_double(i1 signext %s, double %x, double %y) {35; M2-LABEL: tst_select_i1_double:36; M2: # %bb.0: # %entry37; M2-NEXT: andi $1, $4, 138; M2-NEXT: bnez $1, $BB0_239; M2-NEXT: nop40; M2-NEXT: # %bb.1: # %entry41; M2-NEXT: ldc1 $f0, 16($sp)42; M2-NEXT: jr $ra43; M2-NEXT: nop44; M2-NEXT: $BB0_2:45; M2-NEXT: mtc1 $7, $f046; M2-NEXT: jr $ra47; M2-NEXT: mtc1 $6, $f148;49; CMOV32R1-LABEL: tst_select_i1_double:50; CMOV32R1: # %bb.0: # %entry51; CMOV32R1-NEXT: mtc1 $7, $f252; CMOV32R1-NEXT: mtc1 $6, $f353; CMOV32R1-NEXT: andi $1, $4, 154; CMOV32R1-NEXT: ldc1 $f0, 16($sp)55; CMOV32R1-NEXT: jr $ra56; CMOV32R1-NEXT: movn.d $f0, $f2, $157;58; CMOV32R2-LABEL: tst_select_i1_double:59; CMOV32R2: # %bb.0: # %entry60; CMOV32R2-NEXT: mtc1 $7, $f261; CMOV32R2-NEXT: mthc1 $6, $f262; CMOV32R2-NEXT: andi $1, $4, 163; CMOV32R2-NEXT: ldc1 $f0, 16($sp)64; CMOV32R2-NEXT: jr $ra65; CMOV32R2-NEXT: movn.d $f0, $f2, $166;67; 32R6-LABEL: tst_select_i1_double:68; 32R6: # %bb.0: # %entry69; 32R6-NEXT: mtc1 $7, $f170; 32R6-NEXT: mthc1 $6, $f171; 32R6-NEXT: mtc1 $4, $f072; 32R6-NEXT: ldc1 $f2, 16($sp)73; 32R6-NEXT: jr $ra74; 32R6-NEXT: sel.d $f0, $f2, $f175;76; M3-LABEL: tst_select_i1_double:77; M3: # %bb.0: # %entry78; M3-NEXT: andi $1, $4, 179; M3-NEXT: bnez $1, .LBB0_280; M3-NEXT: mov.d $f0, $f1381; M3-NEXT: # %bb.1: # %entry82; M3-NEXT: mov.d $f0, $f1483; M3-NEXT: .LBB0_2: # %entry84; M3-NEXT: jr $ra85; M3-NEXT: nop86;87; CMOV64-LABEL: tst_select_i1_double:88; CMOV64: # %bb.0: # %entry89; CMOV64-NEXT: mov.d $f0, $f1490; CMOV64-NEXT: andi $1, $4, 191; CMOV64-NEXT: jr $ra92; CMOV64-NEXT: movn.d $f0, $f13, $193;94; 64R6-LABEL: tst_select_i1_double:95; 64R6: # %bb.0: # %entry96; 64R6-NEXT: mtc1 $4, $f097; 64R6-NEXT: jr $ra98; 64R6-NEXT: sel.d $f0, $f14, $f1399;100; MM32R3-LABEL: tst_select_i1_double:101; MM32R3: # %bb.0: # %entry102; MM32R3: mtc1 $7, $f2 # <MCInst #{{.*}} MTC1103; MM32R3: mthc1 $6, $f2 # <MCInst #{{.*}} MTHC1_D32_MM104; MM32R3: andi16 $2, $4, 1 # <MCInst #{{.*}} ANDI16_MM105; MM32R3: ldc1 $f0, 16($sp) # <MCInst #{{.*}} LDC1_MM106; MM32R3: jr $ra # <MCInst #{{.*}} JR_MM107; MM32R3: movn.d $f0, $f2, $2 # <MCInst #{{.*}} MOVN_I_D32_MM108;109; MM32R6-LABEL: tst_select_i1_double:110; MM32R6: # %bb.0: # %entry111; MM32R6-NEXT: mtc1 $7, $f1112; MM32R6-NEXT: mthc1 $6, $f1113; MM32R6-NEXT: mtc1 $4, $f0114; MM32R6-NEXT: ldc1 $f2, 16($sp)115; MM32R6-NEXT: sel.d $f0, $f2, $f1116; MM32R6-NEXT: jrc $ra117entry:118 %r = select i1 %s, double %x, double %y119 ret double %r120}121 122define double @tst_select_i1_double_reordered(double %x, double %y,123; M2-LABEL: tst_select_i1_double_reordered:124; M2: # %bb.0: # %entry125; M2-NEXT: lw $1, 16($sp)126; M2-NEXT: andi $1, $1, 1127; M2-NEXT: bnez $1, $BB1_2128; M2-NEXT: mov.d $f0, $f12129; M2-NEXT: # %bb.1: # %entry130; M2-NEXT: mov.d $f0, $f14131; M2-NEXT: $BB1_2: # %entry132; M2-NEXT: jr $ra133; M2-NEXT: nop134;135; CMOV32R1-LABEL: tst_select_i1_double_reordered:136; CMOV32R1: # %bb.0: # %entry137; CMOV32R1-NEXT: mov.d $f0, $f14138; CMOV32R1-NEXT: lw $1, 16($sp)139; CMOV32R1-NEXT: andi $1, $1, 1140; CMOV32R1-NEXT: jr $ra141; CMOV32R1-NEXT: movn.d $f0, $f12, $1142;143; CMOV32R2-LABEL: tst_select_i1_double_reordered:144; CMOV32R2: # %bb.0: # %entry145; CMOV32R2-NEXT: mov.d $f0, $f14146; CMOV32R2-NEXT: lw $1, 16($sp)147; CMOV32R2-NEXT: andi $1, $1, 1148; CMOV32R2-NEXT: jr $ra149; CMOV32R2-NEXT: movn.d $f0, $f12, $1150;151; 32R6-LABEL: tst_select_i1_double_reordered:152; 32R6: # %bb.0: # %entry153; 32R6-NEXT: lw $1, 16($sp)154; 32R6-NEXT: mtc1 $1, $f0155; 32R6-NEXT: jr $ra156; 32R6-NEXT: sel.d $f0, $f14, $f12157;158; M3-LABEL: tst_select_i1_double_reordered:159; M3: # %bb.0: # %entry160; M3-NEXT: andi $1, $6, 1161; M3-NEXT: bnez $1, .LBB1_2162; M3-NEXT: mov.d $f0, $f12163; M3-NEXT: # %bb.1: # %entry164; M3-NEXT: mov.d $f0, $f13165; M3-NEXT: .LBB1_2: # %entry166; M3-NEXT: jr $ra167; M3-NEXT: nop168;169; CMOV64-LABEL: tst_select_i1_double_reordered:170; CMOV64: # %bb.0: # %entry171; CMOV64-NEXT: mov.d $f0, $f13172; CMOV64-NEXT: andi $1, $6, 1173; CMOV64-NEXT: jr $ra174; CMOV64-NEXT: movn.d $f0, $f12, $1175;176; 64R6-LABEL: tst_select_i1_double_reordered:177; 64R6: # %bb.0: # %entry178; 64R6-NEXT: mtc1 $6, $f0179; 64R6-NEXT: jr $ra180; 64R6-NEXT: sel.d $f0, $f13, $f12181;182; MM32R3-LABEL: tst_select_i1_double_reordered:183; MM32R3: # %bb.0: # %entry184; MM32R3: mov.d $f0, $f14 # <MCInst #{{.*}} FMOV_D32185; MM32R3: lw $2, 16($sp) # <MCInst #{{.*}} LWSP_MM186; MM32R3: andi16 $2, $2, 1 # <MCInst #{{.*}} ANDI16_MM187; MM32R3: jr $ra # <MCInst #{{.*}} JR_MM188; MM32R3: movn.d $f0, $f12, $2 # <MCInst #{{.*}} MOVN_I_D32_MM189;190; MM32R6-LABEL: tst_select_i1_double_reordered:191; MM32R6: # %bb.0: # %entry192; MM32R6-NEXT: lw $1, 16($sp)193; MM32R6-NEXT: mtc1 $1, $f0194; MM32R6-NEXT: sel.d $f0, $f14, $f12195; MM32R6-NEXT: jrc $ra196 i1 signext %s) {197entry:198 %r = select i1 %s, double %x, double %y199 ret double %r200}201 202define double @tst_select_fcmp_olt_double(double %x, double %y) {203; M2-LABEL: tst_select_fcmp_olt_double:204; M2: # %bb.0: # %entry205; M2-NEXT: c.olt.d $f12, $f14206; M2-NEXT: nop207; M2-NEXT: bc1t $BB2_2208; M2-NEXT: mov.d $f0, $f12209; M2-NEXT: # %bb.1: # %entry210; M2-NEXT: mov.d $f0, $f14211; M2-NEXT: $BB2_2: # %entry212; M2-NEXT: jr $ra213; M2-NEXT: nop214;215; CMOV32R1-LABEL: tst_select_fcmp_olt_double:216; CMOV32R1: # %bb.0: # %entry217; CMOV32R1-NEXT: mov.d $f0, $f14218; CMOV32R1-NEXT: c.olt.d $f12, $f14219; CMOV32R1-NEXT: jr $ra220; CMOV32R1-NEXT: movt.d $f0, $f12, $fcc0221;222; CMOV32R2-LABEL: tst_select_fcmp_olt_double:223; CMOV32R2: # %bb.0: # %entry224; CMOV32R2-NEXT: mov.d $f0, $f14225; CMOV32R2-NEXT: c.olt.d $f12, $f14226; CMOV32R2-NEXT: jr $ra227; CMOV32R2-NEXT: movt.d $f0, $f12, $fcc0228;229; 32R6-LABEL: tst_select_fcmp_olt_double:230; 32R6: # %bb.0: # %entry231; 32R6-NEXT: cmp.lt.d $f0, $f12, $f14232; 32R6-NEXT: mfc1 $1, $f0233; 32R6-NEXT: mtc1 $1, $f0234; 32R6-NEXT: jr $ra235; 32R6-NEXT: sel.d $f0, $f14, $f12236;237; M3-LABEL: tst_select_fcmp_olt_double:238; M3: # %bb.0: # %entry239; M3-NEXT: c.olt.d $f12, $f13240; M3-NEXT: nop241; M3-NEXT: bc1t .LBB2_2242; M3-NEXT: mov.d $f0, $f12243; M3-NEXT: # %bb.1: # %entry244; M3-NEXT: mov.d $f0, $f13245; M3-NEXT: .LBB2_2: # %entry246; M3-NEXT: jr $ra247; M3-NEXT: nop248;249; CMOV64-LABEL: tst_select_fcmp_olt_double:250; CMOV64: # %bb.0: # %entry251; CMOV64-NEXT: mov.d $f0, $f13252; CMOV64-NEXT: c.olt.d $f12, $f13253; CMOV64-NEXT: jr $ra254; CMOV64-NEXT: movt.d $f0, $f12, $fcc0255;256; 64R6-LABEL: tst_select_fcmp_olt_double:257; 64R6: # %bb.0: # %entry258; 64R6-NEXT: cmp.lt.d $f0, $f12, $f13259; 64R6-NEXT: mfc1 $1, $f0260; 64R6-NEXT: mtc1 $1, $f0261; 64R6-NEXT: jr $ra262; 64R6-NEXT: sel.d $f0, $f13, $f12263;264; MM32R3-LABEL: tst_select_fcmp_olt_double:265; MM32R3: # %bb.0: # %entry266; MM32R3: mov.d $f0, $f14 # <MCInst #{{.*}} FMOV_D32267; MM32R3: c.olt.d $f12, $f14 # <MCInst #{{.*}} FCMP_D32_MM268; MM32R3: jr $ra # <MCInst #{{.*}} JR_MM269; MM32R3: movt.d $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVT_D32_MM270;271; MM32R6-LABEL: tst_select_fcmp_olt_double:272; MM32R6: # %bb.0: # %entry273; MM32R6-NEXT: cmp.lt.d $f0, $f12, $f14274; MM32R6-NEXT: mfc1 $1, $f0275; MM32R6-NEXT: mtc1 $1, $f0276; MM32R6-NEXT: sel.d $f0, $f14, $f12277; MM32R6-NEXT: jrc $ra278entry:279 %s = fcmp olt double %x, %y280 %r = select i1 %s, double %x, double %y281 ret double %r282}283 284define double @tst_select_fcmp_ole_double(double %x, double %y) {285; M2-LABEL: tst_select_fcmp_ole_double:286; M2: # %bb.0: # %entry287; M2-NEXT: c.ole.d $f12, $f14288; M2-NEXT: nop289; M2-NEXT: bc1t $BB3_2290; M2-NEXT: mov.d $f0, $f12291; M2-NEXT: # %bb.1: # %entry292; M2-NEXT: mov.d $f0, $f14293; M2-NEXT: $BB3_2: # %entry294; M2-NEXT: jr $ra295; M2-NEXT: nop296;297; CMOV32R1-LABEL: tst_select_fcmp_ole_double:298; CMOV32R1: # %bb.0: # %entry299; CMOV32R1-NEXT: mov.d $f0, $f14300; CMOV32R1-NEXT: c.ole.d $f12, $f14301; CMOV32R1-NEXT: jr $ra302; CMOV32R1-NEXT: movt.d $f0, $f12, $fcc0303;304; CMOV32R2-LABEL: tst_select_fcmp_ole_double:305; CMOV32R2: # %bb.0: # %entry306; CMOV32R2-NEXT: mov.d $f0, $f14307; CMOV32R2-NEXT: c.ole.d $f12, $f14308; CMOV32R2-NEXT: jr $ra309; CMOV32R2-NEXT: movt.d $f0, $f12, $fcc0310;311; 32R6-LABEL: tst_select_fcmp_ole_double:312; 32R6: # %bb.0: # %entry313; 32R6-NEXT: cmp.le.d $f0, $f12, $f14314; 32R6-NEXT: mfc1 $1, $f0315; 32R6-NEXT: mtc1 $1, $f0316; 32R6-NEXT: jr $ra317; 32R6-NEXT: sel.d $f0, $f14, $f12318;319; M3-LABEL: tst_select_fcmp_ole_double:320; M3: # %bb.0: # %entry321; M3-NEXT: c.ole.d $f12, $f13322; M3-NEXT: nop323; M3-NEXT: bc1t .LBB3_2324; M3-NEXT: mov.d $f0, $f12325; M3-NEXT: # %bb.1: # %entry326; M3-NEXT: mov.d $f0, $f13327; M3-NEXT: .LBB3_2: # %entry328; M3-NEXT: jr $ra329; M3-NEXT: nop330;331; CMOV64-LABEL: tst_select_fcmp_ole_double:332; CMOV64: # %bb.0: # %entry333; CMOV64-NEXT: mov.d $f0, $f13334; CMOV64-NEXT: c.ole.d $f12, $f13335; CMOV64-NEXT: jr $ra336; CMOV64-NEXT: movt.d $f0, $f12, $fcc0337;338; 64R6-LABEL: tst_select_fcmp_ole_double:339; 64R6: # %bb.0: # %entry340; 64R6-NEXT: cmp.le.d $f0, $f12, $f13341; 64R6-NEXT: mfc1 $1, $f0342; 64R6-NEXT: mtc1 $1, $f0343; 64R6-NEXT: jr $ra344; 64R6-NEXT: sel.d $f0, $f13, $f12345;346; MM32R3-LABEL: tst_select_fcmp_ole_double:347; MM32R3: # %bb.0: # %entry348; MM32R3: mov.d $f0, $f14 # <MCInst #{{.*}} FMOV_D32349; MM32R3: c.ole.d $f12, $f14 # <MCInst #{{.*}} FCMP_D32_MM350; MM32R3: jr $ra # <MCInst #{{.*}} JR_MM351; MM32R3: movt.d $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVT_D32_MM352;353; MM32R6-LABEL: tst_select_fcmp_ole_double:354; MM32R6: # %bb.0: # %entry355; MM32R6-NEXT: cmp.le.d $f0, $f12, $f14356; MM32R6-NEXT: mfc1 $1, $f0357; MM32R6-NEXT: mtc1 $1, $f0358; MM32R6-NEXT: sel.d $f0, $f14, $f12359; MM32R6-NEXT: jrc $ra360entry:361 %s = fcmp ole double %x, %y362 %r = select i1 %s, double %x, double %y363 ret double %r364}365 366define double @tst_select_fcmp_ogt_double(double %x, double %y) {367; M2-LABEL: tst_select_fcmp_ogt_double:368; M2: # %bb.0: # %entry369; M2-NEXT: c.ule.d $f12, $f14370; M2-NEXT: nop371; M2-NEXT: bc1f $BB4_2372; M2-NEXT: mov.d $f0, $f12373; M2-NEXT: # %bb.1: # %entry374; M2-NEXT: mov.d $f0, $f14375; M2-NEXT: $BB4_2: # %entry376; M2-NEXT: jr $ra377; M2-NEXT: nop378;379; CMOV32R1-LABEL: tst_select_fcmp_ogt_double:380; CMOV32R1: # %bb.0: # %entry381; CMOV32R1-NEXT: mov.d $f0, $f14382; CMOV32R1-NEXT: c.ule.d $f12, $f14383; CMOV32R1-NEXT: jr $ra384; CMOV32R1-NEXT: movf.d $f0, $f12, $fcc0385;386; CMOV32R2-LABEL: tst_select_fcmp_ogt_double:387; CMOV32R2: # %bb.0: # %entry388; CMOV32R2-NEXT: mov.d $f0, $f14389; CMOV32R2-NEXT: c.ule.d $f12, $f14390; CMOV32R2-NEXT: jr $ra391; CMOV32R2-NEXT: movf.d $f0, $f12, $fcc0392;393; 32R6-LABEL: tst_select_fcmp_ogt_double:394; 32R6: # %bb.0: # %entry395; 32R6-NEXT: cmp.lt.d $f0, $f14, $f12396; 32R6-NEXT: mfc1 $1, $f0397; 32R6-NEXT: mtc1 $1, $f0398; 32R6-NEXT: jr $ra399; 32R6-NEXT: sel.d $f0, $f14, $f12400;401; M3-LABEL: tst_select_fcmp_ogt_double:402; M3: # %bb.0: # %entry403; M3-NEXT: c.ule.d $f12, $f13404; M3-NEXT: nop405; M3-NEXT: bc1f .LBB4_2406; M3-NEXT: mov.d $f0, $f12407; M3-NEXT: # %bb.1: # %entry408; M3-NEXT: mov.d $f0, $f13409; M3-NEXT: .LBB4_2: # %entry410; M3-NEXT: jr $ra411; M3-NEXT: nop412;413; CMOV64-LABEL: tst_select_fcmp_ogt_double:414; CMOV64: # %bb.0: # %entry415; CMOV64-NEXT: mov.d $f0, $f13416; CMOV64-NEXT: c.ule.d $f12, $f13417; CMOV64-NEXT: jr $ra418; CMOV64-NEXT: movf.d $f0, $f12, $fcc0419;420; 64R6-LABEL: tst_select_fcmp_ogt_double:421; 64R6: # %bb.0: # %entry422; 64R6-NEXT: cmp.lt.d $f0, $f13, $f12423; 64R6-NEXT: mfc1 $1, $f0424; 64R6-NEXT: mtc1 $1, $f0425; 64R6-NEXT: jr $ra426; 64R6-NEXT: sel.d $f0, $f13, $f12427;428; MM32R3-LABEL: tst_select_fcmp_ogt_double:429; MM32R3: # %bb.0: # %entry430; MM32R3: mov.d $f0, $f14 # <MCInst #{{.*}} FMOV_D32431; MM32R3: c.ule.d $f12, $f14 # <MCInst #{{.*}} FCMP_D32_MM432; MM32R3: jr $ra # <MCInst #{{.*}} JR_MM433; MM32R3: movf.d $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVF_D32_MM434;435; MM32R6-LABEL: tst_select_fcmp_ogt_double:436; MM32R6: # %bb.0: # %entry437; MM32R6-NEXT: cmp.lt.d $f0, $f14, $f12438; MM32R6-NEXT: mfc1 $1, $f0439; MM32R6-NEXT: mtc1 $1, $f0440; MM32R6-NEXT: sel.d $f0, $f14, $f12441; MM32R6-NEXT: jrc $ra442entry:443 %s = fcmp ogt double %x, %y444 %r = select i1 %s, double %x, double %y445 ret double %r446}447 448define double @tst_select_fcmp_oge_double(double %x, double %y) {449; M2-LABEL: tst_select_fcmp_oge_double:450; M2: # %bb.0: # %entry451; M2-NEXT: c.ult.d $f12, $f14452; M2-NEXT: nop453; M2-NEXT: bc1f $BB5_2454; M2-NEXT: mov.d $f0, $f12455; M2-NEXT: # %bb.1: # %entry456; M2-NEXT: mov.d $f0, $f14457; M2-NEXT: $BB5_2: # %entry458; M2-NEXT: jr $ra459; M2-NEXT: nop460;461; CMOV32R1-LABEL: tst_select_fcmp_oge_double:462; CMOV32R1: # %bb.0: # %entry463; CMOV32R1-NEXT: mov.d $f0, $f14464; CMOV32R1-NEXT: c.ult.d $f12, $f14465; CMOV32R1-NEXT: jr $ra466; CMOV32R1-NEXT: movf.d $f0, $f12, $fcc0467;468; CMOV32R2-LABEL: tst_select_fcmp_oge_double:469; CMOV32R2: # %bb.0: # %entry470; CMOV32R2-NEXT: mov.d $f0, $f14471; CMOV32R2-NEXT: c.ult.d $f12, $f14472; CMOV32R2-NEXT: jr $ra473; CMOV32R2-NEXT: movf.d $f0, $f12, $fcc0474;475; 32R6-LABEL: tst_select_fcmp_oge_double:476; 32R6: # %bb.0: # %entry477; 32R6-NEXT: cmp.le.d $f0, $f14, $f12478; 32R6-NEXT: mfc1 $1, $f0479; 32R6-NEXT: mtc1 $1, $f0480; 32R6-NEXT: jr $ra481; 32R6-NEXT: sel.d $f0, $f14, $f12482;483; M3-LABEL: tst_select_fcmp_oge_double:484; M3: # %bb.0: # %entry485; M3-NEXT: c.ult.d $f12, $f13486; M3-NEXT: nop487; M3-NEXT: bc1f .LBB5_2488; M3-NEXT: mov.d $f0, $f12489; M3-NEXT: # %bb.1: # %entry490; M3-NEXT: mov.d $f0, $f13491; M3-NEXT: .LBB5_2: # %entry492; M3-NEXT: jr $ra493; M3-NEXT: nop494;495; CMOV64-LABEL: tst_select_fcmp_oge_double:496; CMOV64: # %bb.0: # %entry497; CMOV64-NEXT: mov.d $f0, $f13498; CMOV64-NEXT: c.ult.d $f12, $f13499; CMOV64-NEXT: jr $ra500; CMOV64-NEXT: movf.d $f0, $f12, $fcc0501;502; 64R6-LABEL: tst_select_fcmp_oge_double:503; 64R6: # %bb.0: # %entry504; 64R6-NEXT: cmp.le.d $f0, $f13, $f12505; 64R6-NEXT: mfc1 $1, $f0506; 64R6-NEXT: mtc1 $1, $f0507; 64R6-NEXT: jr $ra508; 64R6-NEXT: sel.d $f0, $f13, $f12509;510; MM32R3-LABEL: tst_select_fcmp_oge_double:511; MM32R3: # %bb.0: # %entry512; MM32R3: mov.d $f0, $f14 # <MCInst #{{.*}} FMOV_D32513; MM32R3: c.ult.d $f12, $f14 # <MCInst #{{.*}} FCMP_D32_MM514; MM32R3: jr $ra # <MCInst #{{.*}} JR_MM515; MM32R3: movf.d $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVF_D32_MM516;517; MM32R6-LABEL: tst_select_fcmp_oge_double:518; MM32R6: # %bb.0: # %entry519; MM32R6-NEXT: cmp.le.d $f0, $f14, $f12520; MM32R6-NEXT: mfc1 $1, $f0521; MM32R6-NEXT: mtc1 $1, $f0522; MM32R6-NEXT: sel.d $f0, $f14, $f12523; MM32R6-NEXT: jrc $ra524entry:525 %s = fcmp oge double %x, %y526 %r = select i1 %s, double %x, double %y527 ret double %r528}529 530define double @tst_select_fcmp_oeq_double(double %x, double %y) {531; M2-LABEL: tst_select_fcmp_oeq_double:532; M2: # %bb.0: # %entry533; M2-NEXT: c.eq.d $f12, $f14534; M2-NEXT: nop535; M2-NEXT: bc1t $BB6_2536; M2-NEXT: mov.d $f0, $f12537; M2-NEXT: # %bb.1: # %entry538; M2-NEXT: mov.d $f0, $f14539; M2-NEXT: $BB6_2: # %entry540; M2-NEXT: jr $ra541; M2-NEXT: nop542;543; CMOV32R1-LABEL: tst_select_fcmp_oeq_double:544; CMOV32R1: # %bb.0: # %entry545; CMOV32R1-NEXT: mov.d $f0, $f14546; CMOV32R1-NEXT: c.eq.d $f12, $f14547; CMOV32R1-NEXT: jr $ra548; CMOV32R1-NEXT: movt.d $f0, $f12, $fcc0549;550; CMOV32R2-LABEL: tst_select_fcmp_oeq_double:551; CMOV32R2: # %bb.0: # %entry552; CMOV32R2-NEXT: mov.d $f0, $f14553; CMOV32R2-NEXT: c.eq.d $f12, $f14554; CMOV32R2-NEXT: jr $ra555; CMOV32R2-NEXT: movt.d $f0, $f12, $fcc0556;557; 32R6-LABEL: tst_select_fcmp_oeq_double:558; 32R6: # %bb.0: # %entry559; 32R6-NEXT: cmp.eq.d $f0, $f12, $f14560; 32R6-NEXT: mfc1 $1, $f0561; 32R6-NEXT: mtc1 $1, $f0562; 32R6-NEXT: jr $ra563; 32R6-NEXT: sel.d $f0, $f14, $f12564;565; M3-LABEL: tst_select_fcmp_oeq_double:566; M3: # %bb.0: # %entry567; M3-NEXT: c.eq.d $f12, $f13568; M3-NEXT: nop569; M3-NEXT: bc1t .LBB6_2570; M3-NEXT: mov.d $f0, $f12571; M3-NEXT: # %bb.1: # %entry572; M3-NEXT: mov.d $f0, $f13573; M3-NEXT: .LBB6_2: # %entry574; M3-NEXT: jr $ra575; M3-NEXT: nop576;577; CMOV64-LABEL: tst_select_fcmp_oeq_double:578; CMOV64: # %bb.0: # %entry579; CMOV64-NEXT: mov.d $f0, $f13580; CMOV64-NEXT: c.eq.d $f12, $f13581; CMOV64-NEXT: jr $ra582; CMOV64-NEXT: movt.d $f0, $f12, $fcc0583;584; 64R6-LABEL: tst_select_fcmp_oeq_double:585; 64R6: # %bb.0: # %entry586; 64R6-NEXT: cmp.eq.d $f0, $f12, $f13587; 64R6-NEXT: mfc1 $1, $f0588; 64R6-NEXT: mtc1 $1, $f0589; 64R6-NEXT: jr $ra590; 64R6-NEXT: sel.d $f0, $f13, $f12591;592; MM32R3-LABEL: tst_select_fcmp_oeq_double:593; MM32R3: # %bb.0: # %entry594; MM32R3: mov.d $f0, $f14 # <MCInst #{{.*}} FMOV_D32595; MM32R3: c.eq.d $f12, $f14 # <MCInst #{{.*}} FCMP_D32_MM596; MM32R3: jr $ra # <MCInst #{{.*}} JR_MM597; MM32R3: movt.d $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVT_D32_MM598;599; MM32R6-LABEL: tst_select_fcmp_oeq_double:600; MM32R6: # %bb.0: # %entry601; MM32R6-NEXT: cmp.eq.d $f0, $f12, $f14602; MM32R6-NEXT: mfc1 $1, $f0603; MM32R6-NEXT: mtc1 $1, $f0604; MM32R6-NEXT: sel.d $f0, $f14, $f12605; MM32R6-NEXT: jrc $ra606entry:607 %s = fcmp oeq double %x, %y608 %r = select i1 %s, double %x, double %y609 ret double %r610}611 612define double @tst_select_fcmp_one_double(double %x, double %y) {613; M2-LABEL: tst_select_fcmp_one_double:614; M2: # %bb.0: # %entry615; M2-NEXT: c.ueq.d $f12, $f14616; M2-NEXT: nop617; M2-NEXT: bc1f $BB7_2618; M2-NEXT: mov.d $f0, $f12619; M2-NEXT: # %bb.1: # %entry620; M2-NEXT: mov.d $f0, $f14621; M2-NEXT: $BB7_2: # %entry622; M2-NEXT: jr $ra623; M2-NEXT: nop624;625; CMOV32R1-LABEL: tst_select_fcmp_one_double:626; CMOV32R1: # %bb.0: # %entry627; CMOV32R1-NEXT: mov.d $f0, $f14628; CMOV32R1-NEXT: c.ueq.d $f12, $f14629; CMOV32R1-NEXT: jr $ra630; CMOV32R1-NEXT: movf.d $f0, $f12, $fcc0631;632; CMOV32R2-LABEL: tst_select_fcmp_one_double:633; CMOV32R2: # %bb.0: # %entry634; CMOV32R2-NEXT: mov.d $f0, $f14635; CMOV32R2-NEXT: c.ueq.d $f12, $f14636; CMOV32R2-NEXT: jr $ra637; CMOV32R2-NEXT: movf.d $f0, $f12, $fcc0638;639; 32R6-LABEL: tst_select_fcmp_one_double:640; 32R6: # %bb.0: # %entry641; 32R6-NEXT: cmp.ueq.d $f0, $f12, $f14642; 32R6-NEXT: mfc1 $1, $f0643; 32R6-NEXT: not $1, $1644; 32R6-NEXT: mtc1 $1, $f0645; 32R6-NEXT: jr $ra646; 32R6-NEXT: sel.d $f0, $f14, $f12647;648; M3-LABEL: tst_select_fcmp_one_double:649; M3: # %bb.0: # %entry650; M3-NEXT: c.ueq.d $f12, $f13651; M3-NEXT: nop652; M3-NEXT: bc1f .LBB7_2653; M3-NEXT: mov.d $f0, $f12654; M3-NEXT: # %bb.1: # %entry655; M3-NEXT: mov.d $f0, $f13656; M3-NEXT: .LBB7_2: # %entry657; M3-NEXT: jr $ra658; M3-NEXT: nop659;660; CMOV64-LABEL: tst_select_fcmp_one_double:661; CMOV64: # %bb.0: # %entry662; CMOV64-NEXT: mov.d $f0, $f13663; CMOV64-NEXT: c.ueq.d $f12, $f13664; CMOV64-NEXT: jr $ra665; CMOV64-NEXT: movf.d $f0, $f12, $fcc0666;667; 64R6-LABEL: tst_select_fcmp_one_double:668; 64R6: # %bb.0: # %entry669; 64R6-NEXT: cmp.ueq.d $f0, $f12, $f13670; 64R6-NEXT: mfc1 $1, $f0671; 64R6-NEXT: not $1, $1672; 64R6-NEXT: mtc1 $1, $f0673; 64R6-NEXT: jr $ra674; 64R6-NEXT: sel.d $f0, $f13, $f12675;676; MM32R3-LABEL: tst_select_fcmp_one_double:677; MM32R3: # %bb.0: # %entry678; MM32R3: mov.d $f0, $f14 # <MCInst #{{.*}} FMOV_D32679; MM32R3: c.ueq.d $f12, $f14 # <MCInst #{{.*}} FCMP_D32_MM680; MM32R3: jr $ra # <MCInst #{{.*}} JR_MM681; MM32R3: movf.d $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVF_D32_MM682;683; MM32R6-LABEL: tst_select_fcmp_one_double:684; MM32R6: # %bb.0: # %entry685; MM32R6-NEXT: cmp.ueq.d $f0, $f12, $f14686; MM32R6-NEXT: mfc1 $1, $f0687; MM32R6-NEXT: not $1, $1688; MM32R6-NEXT: mtc1 $1, $f0689; MM32R6-NEXT: sel.d $f0, $f14, $f12690; MM32R6-NEXT: jrc $ra691entry:692 %s = fcmp one double %x, %y693 %r = select i1 %s, double %x, double %y694 ret double %r695}696