312 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=mips-unknown-linux-gnu -mcpu=mips32 < %s | FileCheck %s -check-prefixes=MIPS323; RUN: llc -mtriple=mips-unknown-linux-gnu -mcpu=mips32r2 < %s | FileCheck %s -check-prefixes=MIPS32R24; RUN: llc -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 < %s | FileCheck %s -check-prefixes=MIPS32r65; RUN: llc -mtriple=mips64-unknown-linux-gnu -mcpu=mips4 < %s | FileCheck %s -check-prefixes=MIPS46; RUN: llc -mtriple=mips64-unknown-linux-gnu -mcpu=mips64 < %s | FileCheck %s -check-prefixes=MIPS647; RUN: llc -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r2 < %s | FileCheck %s -check-prefixes=MIPS64R28; RUN: llc -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r6 < %s | FileCheck %s -check-prefixes=MIPS64R69 10define double @foo(double %a, double %b) nounwind readnone {11; MIPS32-LABEL: foo:12; MIPS32: # %bb.0: # %entry13; MIPS32-NEXT: mtc1 $zero, $f214; MIPS32-NEXT: mtc1 $zero, $f315; MIPS32-NEXT: c.ule.d $f12, $f216; MIPS32-NEXT: bc1f $BB0_217; MIPS32-NEXT: mov.d $f0, $f1218; MIPS32-NEXT: # %bb.1: # %if.else19; MIPS32-NEXT: mtc1 $zero, $f020; MIPS32-NEXT: mtc1 $zero, $f121; MIPS32-NEXT: c.ule.d $f14, $f022; MIPS32-NEXT: bc1t $BB0_323; MIPS32-NEXT: nop24; MIPS32-NEXT: $BB0_2: # %if.end625; MIPS32-NEXT: sub.d $f0, $f14, $f026; MIPS32-NEXT: add.d $f0, $f0, $f027; MIPS32-NEXT: $BB0_3: # %return28; MIPS32-NEXT: jr $ra29; MIPS32-NEXT: nop30;31; MIPS32R2-LABEL: foo:32; MIPS32R2: # %bb.0: # %entry33; MIPS32R2-NEXT: mov.d $f0, $f1234; MIPS32R2-NEXT: mtc1 $zero, $f235; MIPS32R2-NEXT: mthc1 $zero, $f236; MIPS32R2-NEXT: c.ule.d $f12, $f237; MIPS32R2-NEXT: bc1f $BB0_238; MIPS32R2-NEXT: nop39; MIPS32R2-NEXT: # %bb.1: # %if.else40; MIPS32R2-NEXT: mtc1 $zero, $f041; MIPS32R2-NEXT: mthc1 $zero, $f042; MIPS32R2-NEXT: c.ule.d $f14, $f043; MIPS32R2-NEXT: bc1t $BB0_344; MIPS32R2-NEXT: nop45; MIPS32R2-NEXT: $BB0_2: # %if.end646; MIPS32R2-NEXT: sub.d $f0, $f14, $f047; MIPS32R2-NEXT: add.d $f0, $f0, $f048; MIPS32R2-NEXT: $BB0_3: # %return49; MIPS32R2-NEXT: jr $ra50; MIPS32R2-NEXT: nop51;52; MIPS32r6-LABEL: foo:53; MIPS32r6: # %bb.0: # %entry54; MIPS32r6-NEXT: mov.d $f0, $f1255; MIPS32r6-NEXT: mtc1 $zero, $f156; MIPS32r6-NEXT: mthc1 $zero, $f157; MIPS32r6-NEXT: cmp.lt.d $f1, $f1, $f1258; MIPS32r6-NEXT: mfc1 $1, $f159; MIPS32r6-NEXT: andi $1, $1, 160; MIPS32r6-NEXT: bnezc $1, $BB0_261; MIPS32r6-NEXT: # %bb.1: # %if.else62; MIPS32r6-NEXT: mtc1 $zero, $f063; MIPS32r6-NEXT: mthc1 $zero, $f064; MIPS32r6-NEXT: cmp.ule.d $f1, $f14, $f065; MIPS32r6-NEXT: mfc1 $1, $f166; MIPS32r6-NEXT: andi $1, $1, 167; MIPS32r6-NEXT: bnezc $1, $BB0_368; MIPS32r6-NEXT: $BB0_2: # %if.end669; MIPS32r6-NEXT: sub.d $f0, $f14, $f070; MIPS32r6-NEXT: add.d $f0, $f0, $f071; MIPS32r6-NEXT: $BB0_3: # %return72; MIPS32r6-NEXT: jrc $ra73;74; MIPS4-LABEL: foo:75; MIPS4: # %bb.0: # %entry76; MIPS4-NEXT: dmtc1 $zero, $f177; MIPS4-NEXT: c.ule.d $f12, $f178; MIPS4-NEXT: bc1f .LBB0_279; MIPS4-NEXT: mov.d $f0, $f1280; MIPS4-NEXT: # %bb.1: # %if.else81; MIPS4-NEXT: dmtc1 $zero, $f082; MIPS4-NEXT: c.ule.d $f13, $f083; MIPS4-NEXT: bc1t .LBB0_384; MIPS4-NEXT: nop85; MIPS4-NEXT: .LBB0_2: # %if.end686; MIPS4-NEXT: sub.d $f0, $f13, $f087; MIPS4-NEXT: add.d $f0, $f0, $f088; MIPS4-NEXT: .LBB0_3: # %return89; MIPS4-NEXT: jr $ra90; MIPS4-NEXT: nop91;92; MIPS64-LABEL: foo:93; MIPS64: # %bb.0: # %entry94; MIPS64-NEXT: dmtc1 $zero, $f195; MIPS64-NEXT: c.ule.d $f12, $f196; MIPS64-NEXT: bc1f .LBB0_297; MIPS64-NEXT: mov.d $f0, $f1298; MIPS64-NEXT: # %bb.1: # %if.else99; MIPS64-NEXT: dmtc1 $zero, $f0100; MIPS64-NEXT: c.ule.d $f13, $f0101; MIPS64-NEXT: bc1t .LBB0_3102; MIPS64-NEXT: nop103; MIPS64-NEXT: .LBB0_2: # %if.end6104; MIPS64-NEXT: sub.d $f0, $f13, $f0105; MIPS64-NEXT: add.d $f0, $f0, $f0106; MIPS64-NEXT: .LBB0_3: # %return107; MIPS64-NEXT: jr $ra108; MIPS64-NEXT: nop109;110; MIPS64R2-LABEL: foo:111; MIPS64R2: # %bb.0: # %entry112; MIPS64R2-NEXT: dmtc1 $zero, $f1113; MIPS64R2-NEXT: c.ule.d $f12, $f1114; MIPS64R2-NEXT: bc1f .LBB0_2115; MIPS64R2-NEXT: mov.d $f0, $f12116; MIPS64R2-NEXT: # %bb.1: # %if.else117; MIPS64R2-NEXT: dmtc1 $zero, $f0118; MIPS64R2-NEXT: c.ule.d $f13, $f0119; MIPS64R2-NEXT: bc1t .LBB0_3120; MIPS64R2-NEXT: nop121; MIPS64R2-NEXT: .LBB0_2: # %if.end6122; MIPS64R2-NEXT: sub.d $f0, $f13, $f0123; MIPS64R2-NEXT: add.d $f0, $f0, $f0124; MIPS64R2-NEXT: .LBB0_3: # %return125; MIPS64R2-NEXT: jr $ra126; MIPS64R2-NEXT: nop127;128; MIPS64R6-LABEL: foo:129; MIPS64R6: # %bb.0: # %entry130; MIPS64R6-NEXT: dmtc1 $zero, $f1131; MIPS64R6-NEXT: cmp.lt.d $f1, $f1, $f12132; MIPS64R6-NEXT: mfc1 $1, $f1133; MIPS64R6-NEXT: andi $1, $1, 1134; MIPS64R6-NEXT: bnez $1, .LBB0_2135; MIPS64R6-NEXT: mov.d $f0, $f12136; MIPS64R6-NEXT: # %bb.1: # %if.else137; MIPS64R6-NEXT: dmtc1 $zero, $f0138; MIPS64R6-NEXT: cmp.ule.d $f1, $f13, $f0139; MIPS64R6-NEXT: mfc1 $1, $f1140; MIPS64R6-NEXT: andi $1, $1, 1141; MIPS64R6-NEXT: bnezc $1, .LBB0_3142; MIPS64R6-NEXT: .LBB0_2: # %if.end6143; MIPS64R6-NEXT: sub.d $f0, $f13, $f0144; MIPS64R6-NEXT: add.d $f0, $f0, $f0145; MIPS64R6-NEXT: .LBB0_3: # %return146; MIPS64R6-NEXT: jrc $ra147entry:148 %cmp = fcmp ogt double %a, 0.000000e+00149 br i1 %cmp, label %if.end6, label %if.else150 151if.else: ; preds = %entry152 %cmp3 = fcmp ogt double %b, 0.000000e+00153 br i1 %cmp3, label %if.end6, label %return154 155if.end6: ; preds = %if.else, %entry156 %c.0 = phi double [ %a, %entry ], [ 0.000000e+00, %if.else ]157 %sub = fsub double %b, %c.0158 %mul = fmul double %sub, 2.000000e+00159 br label %return160 161return: ; preds = %if.else, %if.end6162 %retval.0 = phi double [ %mul, %if.end6 ], [ 0.000000e+00, %if.else ]163 ret double %retval.0164}165 166define void @f1(float %f) nounwind {167; MIPS32-LABEL: f1:168; MIPS32: # %bb.0: # %entry169; MIPS32-NEXT: addiu $sp, $sp, -24170; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill171; MIPS32-NEXT: mtc1 $zero, $f0172; MIPS32-NEXT: c.eq.s $f12, $f0173; MIPS32-NEXT: bc1f $BB1_2174; MIPS32-NEXT: nop175; MIPS32-NEXT: # %bb.1: # %if.end176; MIPS32-NEXT: jal f2177; MIPS32-NEXT: nop178; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload179; MIPS32-NEXT: jr $ra180; MIPS32-NEXT: addiu $sp, $sp, 24181; MIPS32-NEXT: $BB1_2: # %if.then182; MIPS32-NEXT: jal abort183; MIPS32-NEXT: nop184;185; MIPS32R2-LABEL: f1:186; MIPS32R2: # %bb.0: # %entry187; MIPS32R2-NEXT: addiu $sp, $sp, -24188; MIPS32R2-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill189; MIPS32R2-NEXT: mtc1 $zero, $f0190; MIPS32R2-NEXT: c.eq.s $f12, $f0191; MIPS32R2-NEXT: bc1f $BB1_2192; MIPS32R2-NEXT: nop193; MIPS32R2-NEXT: # %bb.1: # %if.end194; MIPS32R2-NEXT: jal f2195; MIPS32R2-NEXT: nop196; MIPS32R2-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload197; MIPS32R2-NEXT: jr $ra198; MIPS32R2-NEXT: addiu $sp, $sp, 24199; MIPS32R2-NEXT: $BB1_2: # %if.then200; MIPS32R2-NEXT: jal abort201; MIPS32R2-NEXT: nop202;203; MIPS32r6-LABEL: f1:204; MIPS32r6: # %bb.0: # %entry205; MIPS32r6-NEXT: addiu $sp, $sp, -24206; MIPS32r6-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill207; MIPS32r6-NEXT: mtc1 $zero, $f0208; MIPS32r6-NEXT: cmp.eq.s $f0, $f12, $f0209; MIPS32r6-NEXT: mfc1 $1, $f0210; MIPS32r6-NEXT: andi $1, $1, 1211; MIPS32r6-NEXT: beqzc $1, $BB1_2212; MIPS32r6-NEXT: nop213; MIPS32r6-NEXT: # %bb.1: # %if.end214; MIPS32r6-NEXT: jal f2215; MIPS32r6-NEXT: nop216; MIPS32r6-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload217; MIPS32r6-NEXT: jr $ra218; MIPS32r6-NEXT: addiu $sp, $sp, 24219; MIPS32r6-NEXT: $BB1_2: # %if.then220; MIPS32r6-NEXT: jal abort221; MIPS32r6-NEXT: nop222;223; MIPS4-LABEL: f1:224; MIPS4: # %bb.0: # %entry225; MIPS4-NEXT: daddiu $sp, $sp, -16226; MIPS4-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill227; MIPS4-NEXT: mtc1 $zero, $f0228; MIPS4-NEXT: c.eq.s $f12, $f0229; MIPS4-NEXT: bc1f .LBB1_2230; MIPS4-NEXT: nop231; MIPS4-NEXT: # %bb.1: # %if.end232; MIPS4-NEXT: jal f2233; MIPS4-NEXT: nop234; MIPS4-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload235; MIPS4-NEXT: jr $ra236; MIPS4-NEXT: daddiu $sp, $sp, 16237; MIPS4-NEXT: .LBB1_2: # %if.then238; MIPS4-NEXT: jal abort239; MIPS4-NEXT: nop240;241; MIPS64-LABEL: f1:242; MIPS64: # %bb.0: # %entry243; MIPS64-NEXT: daddiu $sp, $sp, -16244; MIPS64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill245; MIPS64-NEXT: mtc1 $zero, $f0246; MIPS64-NEXT: c.eq.s $f12, $f0247; MIPS64-NEXT: bc1f .LBB1_2248; MIPS64-NEXT: nop249; MIPS64-NEXT: # %bb.1: # %if.end250; MIPS64-NEXT: jal f2251; MIPS64-NEXT: nop252; MIPS64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload253; MIPS64-NEXT: jr $ra254; MIPS64-NEXT: daddiu $sp, $sp, 16255; MIPS64-NEXT: .LBB1_2: # %if.then256; MIPS64-NEXT: jal abort257; MIPS64-NEXT: nop258;259; MIPS64R2-LABEL: f1:260; MIPS64R2: # %bb.0: # %entry261; MIPS64R2-NEXT: daddiu $sp, $sp, -16262; MIPS64R2-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill263; MIPS64R2-NEXT: mtc1 $zero, $f0264; MIPS64R2-NEXT: c.eq.s $f12, $f0265; MIPS64R2-NEXT: bc1f .LBB1_2266; MIPS64R2-NEXT: nop267; MIPS64R2-NEXT: # %bb.1: # %if.end268; MIPS64R2-NEXT: jal f2269; MIPS64R2-NEXT: nop270; MIPS64R2-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload271; MIPS64R2-NEXT: jr $ra272; MIPS64R2-NEXT: daddiu $sp, $sp, 16273; MIPS64R2-NEXT: .LBB1_2: # %if.then274; MIPS64R2-NEXT: jal abort275; MIPS64R2-NEXT: nop276;277; MIPS64R6-LABEL: f1:278; MIPS64R6: # %bb.0: # %entry279; MIPS64R6-NEXT: daddiu $sp, $sp, -16280; MIPS64R6-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill281; MIPS64R6-NEXT: mtc1 $zero, $f0282; MIPS64R6-NEXT: cmp.eq.s $f0, $f12, $f0283; MIPS64R6-NEXT: mfc1 $1, $f0284; MIPS64R6-NEXT: andi $1, $1, 1285; MIPS64R6-NEXT: beqzc $1, .LBB1_2286; MIPS64R6-NEXT: nop287; MIPS64R6-NEXT: # %bb.1: # %if.end288; MIPS64R6-NEXT: jal f2289; MIPS64R6-NEXT: nop290; MIPS64R6-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload291; MIPS64R6-NEXT: jr $ra292; MIPS64R6-NEXT: daddiu $sp, $sp, 16293; MIPS64R6-NEXT: .LBB1_2: # %if.then294; MIPS64R6-NEXT: jal abort295; MIPS64R6-NEXT: nop296entry:297 %cmp = fcmp une float %f, 0.000000e+00298 br i1 %cmp, label %if.then, label %if.end299 300if.then: ; preds = %entry301 tail call void @abort() noreturn302 unreachable303 304if.end: ; preds = %entry305 tail call void (...) @f2() nounwind306 ret void307}308 309declare void @abort() noreturn nounwind310 311declare void @f2(...)312