447 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-linux-gnu < %s | FileCheck %s3 4declare float @fminf(float, float)5declare double @fmin(double, double)6declare ppc_fp128 @fminl(ppc_fp128, ppc_fp128)7declare float @llvm.minnum.f32(float, float)8declare double @llvm.minnum.f64(double, double)9declare ppc_fp128 @llvm.minnum.ppcf128(ppc_fp128, ppc_fp128)10 11declare <2 x float> @llvm.minnum.v2f32(<2 x float>, <2 x float>)12declare <4 x float> @llvm.minnum.v4f32(<4 x float>, <4 x float>)13declare <8 x float> @llvm.minnum.v8f32(<8 x float>, <8 x float>)14 15define float @test_fminf(float %x, float %y) {16; CHECK-LABEL: test_fminf:17; CHECK: # %bb.0:18; CHECK-NEXT: mflr 019; CHECK-NEXT: stwu 1, -16(1)20; CHECK-NEXT: stw 0, 20(1)21; CHECK-NEXT: .cfi_def_cfa_offset 1622; CHECK-NEXT: .cfi_offset lr, 423; CHECK-NEXT: bl fminf24; CHECK-NEXT: lwz 0, 20(1)25; CHECK-NEXT: addi 1, 1, 1626; CHECK-NEXT: mtlr 027; CHECK-NEXT: blr28 %z = call float @fminf(float %x, float %y) readnone29 ret float %z30}31 32define double @test_fmin(double %x, double %y) {33; CHECK-LABEL: test_fmin:34; CHECK: # %bb.0:35; CHECK-NEXT: mflr 036; CHECK-NEXT: stwu 1, -16(1)37; CHECK-NEXT: stw 0, 20(1)38; CHECK-NEXT: .cfi_def_cfa_offset 1639; CHECK-NEXT: .cfi_offset lr, 440; CHECK-NEXT: bl fmin41; CHECK-NEXT: lwz 0, 20(1)42; CHECK-NEXT: addi 1, 1, 1643; CHECK-NEXT: mtlr 044; CHECK-NEXT: blr45 %z = call double @fmin(double %x, double %y) readnone46 ret double %z47}48 49define ppc_fp128 @test_fminl(ppc_fp128 %x, ppc_fp128 %y) {50; CHECK-LABEL: test_fminl:51; CHECK: # %bb.0:52; CHECK-NEXT: mflr 053; CHECK-NEXT: stwu 1, -112(1)54; CHECK-NEXT: stw 0, 116(1)55; CHECK-NEXT: .cfi_def_cfa_offset 11256; CHECK-NEXT: .cfi_offset lr, 457; CHECK-NEXT: stfd 1, 40(1)58; CHECK-NEXT: lwz 3, 44(1)59; CHECK-NEXT: stfd 2, 32(1)60; CHECK-NEXT: stw 3, 60(1)61; CHECK-NEXT: lwz 3, 40(1)62; CHECK-NEXT: stfd 3, 72(1)63; CHECK-NEXT: stw 3, 56(1)64; CHECK-NEXT: lwz 3, 36(1)65; CHECK-NEXT: stfd 4, 64(1)66; CHECK-NEXT: stw 3, 52(1)67; CHECK-NEXT: lwz 3, 32(1)68; CHECK-NEXT: lfd 1, 56(1)69; CHECK-NEXT: stw 3, 48(1)70; CHECK-NEXT: lwz 3, 76(1)71; CHECK-NEXT: lfd 2, 48(1)72; CHECK-NEXT: stw 3, 92(1)73; CHECK-NEXT: lwz 3, 72(1)74; CHECK-NEXT: stw 3, 88(1)75; CHECK-NEXT: lwz 3, 68(1)76; CHECK-NEXT: lfd 3, 88(1)77; CHECK-NEXT: stw 3, 84(1)78; CHECK-NEXT: lwz 3, 64(1)79; CHECK-NEXT: stw 3, 80(1)80; CHECK-NEXT: lfd 4, 80(1)81; CHECK-NEXT: bl fminl82; CHECK-NEXT: stfd 1, 16(1)83; CHECK-NEXT: lwz 3, 20(1)84; CHECK-NEXT: stfd 2, 24(1)85; CHECK-NEXT: stw 3, 108(1)86; CHECK-NEXT: lwz 3, 16(1)87; CHECK-NEXT: stw 3, 104(1)88; CHECK-NEXT: lwz 3, 28(1)89; CHECK-NEXT: lfd 1, 104(1)90; CHECK-NEXT: stw 3, 100(1)91; CHECK-NEXT: lwz 3, 24(1)92; CHECK-NEXT: stw 3, 96(1)93; CHECK-NEXT: lfd 2, 96(1)94; CHECK-NEXT: lwz 0, 116(1)95; CHECK-NEXT: addi 1, 1, 11296; CHECK-NEXT: mtlr 097; CHECK-NEXT: blr98 %z = call ppc_fp128 @fminl(ppc_fp128 %x, ppc_fp128 %y) readnone99 ret ppc_fp128 %z100}101 102define float @test_intrinsic_fmin_f32(float %x, float %y) {103; CHECK-LABEL: test_intrinsic_fmin_f32:104; CHECK: # %bb.0:105; CHECK-NEXT: mflr 0106; CHECK-NEXT: stwu 1, -16(1)107; CHECK-NEXT: stw 0, 20(1)108; CHECK-NEXT: .cfi_def_cfa_offset 16109; CHECK-NEXT: .cfi_offset lr, 4110; CHECK-NEXT: bl fminf111; CHECK-NEXT: lwz 0, 20(1)112; CHECK-NEXT: addi 1, 1, 16113; CHECK-NEXT: mtlr 0114; CHECK-NEXT: blr115 %z = call float @llvm.minnum.f32(float %x, float %y) readnone116 ret float %z117}118 119define double @test_intrinsic_fmin_f64(double %x, double %y) {120; CHECK-LABEL: test_intrinsic_fmin_f64:121; CHECK: # %bb.0:122; CHECK-NEXT: mflr 0123; CHECK-NEXT: stwu 1, -16(1)124; CHECK-NEXT: stw 0, 20(1)125; CHECK-NEXT: .cfi_def_cfa_offset 16126; CHECK-NEXT: .cfi_offset lr, 4127; CHECK-NEXT: bl fmin128; CHECK-NEXT: lwz 0, 20(1)129; CHECK-NEXT: addi 1, 1, 16130; CHECK-NEXT: mtlr 0131; CHECK-NEXT: blr132 %z = call double @llvm.minnum.f64(double %x, double %y) readnone133 ret double %z134}135 136define ppc_fp128 @test_intrinsic_fmin_f128(ppc_fp128 %x, ppc_fp128 %y) {137; CHECK-LABEL: test_intrinsic_fmin_f128:138; CHECK: # %bb.0:139; CHECK-NEXT: mflr 0140; CHECK-NEXT: stwu 1, -112(1)141; CHECK-NEXT: stw 0, 116(1)142; CHECK-NEXT: .cfi_def_cfa_offset 112143; CHECK-NEXT: .cfi_offset lr, 4144; CHECK-NEXT: stfd 1, 40(1)145; CHECK-NEXT: lwz 3, 44(1)146; CHECK-NEXT: stfd 2, 32(1)147; CHECK-NEXT: stw 3, 60(1)148; CHECK-NEXT: lwz 3, 40(1)149; CHECK-NEXT: stfd 3, 72(1)150; CHECK-NEXT: stw 3, 56(1)151; CHECK-NEXT: lwz 3, 36(1)152; CHECK-NEXT: stfd 4, 64(1)153; CHECK-NEXT: stw 3, 52(1)154; CHECK-NEXT: lwz 3, 32(1)155; CHECK-NEXT: lfd 1, 56(1)156; CHECK-NEXT: stw 3, 48(1)157; CHECK-NEXT: lwz 3, 76(1)158; CHECK-NEXT: lfd 2, 48(1)159; CHECK-NEXT: stw 3, 92(1)160; CHECK-NEXT: lwz 3, 72(1)161; CHECK-NEXT: stw 3, 88(1)162; CHECK-NEXT: lwz 3, 68(1)163; CHECK-NEXT: lfd 3, 88(1)164; CHECK-NEXT: stw 3, 84(1)165; CHECK-NEXT: lwz 3, 64(1)166; CHECK-NEXT: stw 3, 80(1)167; CHECK-NEXT: lfd 4, 80(1)168; CHECK-NEXT: bl fminl169; CHECK-NEXT: stfd 1, 16(1)170; CHECK-NEXT: lwz 3, 20(1)171; CHECK-NEXT: stfd 2, 24(1)172; CHECK-NEXT: stw 3, 108(1)173; CHECK-NEXT: lwz 3, 16(1)174; CHECK-NEXT: stw 3, 104(1)175; CHECK-NEXT: lwz 3, 28(1)176; CHECK-NEXT: lfd 1, 104(1)177; CHECK-NEXT: stw 3, 100(1)178; CHECK-NEXT: lwz 3, 24(1)179; CHECK-NEXT: stw 3, 96(1)180; CHECK-NEXT: lfd 2, 96(1)181; CHECK-NEXT: lwz 0, 116(1)182; CHECK-NEXT: addi 1, 1, 112183; CHECK-NEXT: mtlr 0184; CHECK-NEXT: blr185 %z = call ppc_fp128 @llvm.minnum.ppcf128(ppc_fp128 %x, ppc_fp128 %y) readnone186 ret ppc_fp128 %z187}188 189define <2 x float> @test_intrinsic_fminf_v2f32(<2 x float> %x, <2 x float> %y) {190; CHECK-LABEL: test_intrinsic_fminf_v2f32:191; CHECK: # %bb.0:192; CHECK-NEXT: mflr 0193; CHECK-NEXT: stwu 1, -32(1)194; CHECK-NEXT: stw 0, 36(1)195; CHECK-NEXT: .cfi_def_cfa_offset 32196; CHECK-NEXT: .cfi_offset lr, 4197; CHECK-NEXT: .cfi_offset f29, -24198; CHECK-NEXT: .cfi_offset f30, -16199; CHECK-NEXT: .cfi_offset f31, -8200; CHECK-NEXT: stfd 30, 16(1) # 8-byte Folded Spill201; CHECK-NEXT: fmr 30, 2202; CHECK-NEXT: fmr 2, 3203; CHECK-NEXT: stfd 29, 8(1) # 8-byte Folded Spill204; CHECK-NEXT: stfd 31, 24(1) # 8-byte Folded Spill205; CHECK-NEXT: fmr 31, 4206; CHECK-NEXT: bl fminf207; CHECK-NEXT: fmr 29, 1208; CHECK-NEXT: fmr 1, 30209; CHECK-NEXT: fmr 2, 31210; CHECK-NEXT: bl fminf211; CHECK-NEXT: fmr 2, 1212; CHECK-NEXT: fmr 1, 29213; CHECK-NEXT: lfd 31, 24(1) # 8-byte Folded Reload214; CHECK-NEXT: lfd 30, 16(1) # 8-byte Folded Reload215; CHECK-NEXT: lfd 29, 8(1) # 8-byte Folded Reload216; CHECK-NEXT: lwz 0, 36(1)217; CHECK-NEXT: addi 1, 1, 32218; CHECK-NEXT: mtlr 0219; CHECK-NEXT: blr220 %z = call <2 x float> @llvm.minnum.v2f32(<2 x float> %x, <2 x float> %y) readnone221 ret <2 x float> %z222}223 224define <4 x float> @test_intrinsic_fmin_v4f32(<4 x float> %x, <4 x float> %y) {225; CHECK-LABEL: test_intrinsic_fmin_v4f32:226; CHECK: # %bb.0:227; CHECK-NEXT: mflr 0228; CHECK-NEXT: stwu 1, -64(1)229; CHECK-NEXT: stw 0, 68(1)230; CHECK-NEXT: .cfi_def_cfa_offset 64231; CHECK-NEXT: .cfi_offset lr, 4232; CHECK-NEXT: .cfi_offset f25, -56233; CHECK-NEXT: .cfi_offset f26, -48234; CHECK-NEXT: .cfi_offset f27, -40235; CHECK-NEXT: .cfi_offset f28, -32236; CHECK-NEXT: .cfi_offset f29, -24237; CHECK-NEXT: .cfi_offset f30, -16238; CHECK-NEXT: .cfi_offset f31, -8239; CHECK-NEXT: stfd 26, 16(1) # 8-byte Folded Spill240; CHECK-NEXT: fmr 26, 2241; CHECK-NEXT: fmr 2, 5242; CHECK-NEXT: stfd 25, 8(1) # 8-byte Folded Spill243; CHECK-NEXT: stfd 27, 24(1) # 8-byte Folded Spill244; CHECK-NEXT: fmr 27, 3245; CHECK-NEXT: stfd 28, 32(1) # 8-byte Folded Spill246; CHECK-NEXT: fmr 28, 4247; CHECK-NEXT: stfd 29, 40(1) # 8-byte Folded Spill248; CHECK-NEXT: fmr 29, 6249; CHECK-NEXT: stfd 30, 48(1) # 8-byte Folded Spill250; CHECK-NEXT: fmr 30, 7251; CHECK-NEXT: stfd 31, 56(1) # 8-byte Folded Spill252; CHECK-NEXT: fmr 31, 8253; CHECK-NEXT: bl fminf254; CHECK-NEXT: fmr 25, 1255; CHECK-NEXT: fmr 1, 26256; CHECK-NEXT: fmr 2, 29257; CHECK-NEXT: bl fminf258; CHECK-NEXT: fmr 29, 1259; CHECK-NEXT: fmr 1, 27260; CHECK-NEXT: fmr 2, 30261; CHECK-NEXT: bl fminf262; CHECK-NEXT: fmr 30, 1263; CHECK-NEXT: fmr 1, 28264; CHECK-NEXT: fmr 2, 31265; CHECK-NEXT: bl fminf266; CHECK-NEXT: fmr 4, 1267; CHECK-NEXT: fmr 1, 25268; CHECK-NEXT: fmr 2, 29269; CHECK-NEXT: fmr 3, 30270; CHECK-NEXT: lfd 31, 56(1) # 8-byte Folded Reload271; CHECK-NEXT: lfd 30, 48(1) # 8-byte Folded Reload272; CHECK-NEXT: lfd 29, 40(1) # 8-byte Folded Reload273; CHECK-NEXT: lfd 28, 32(1) # 8-byte Folded Reload274; CHECK-NEXT: lfd 27, 24(1) # 8-byte Folded Reload275; CHECK-NEXT: lfd 26, 16(1) # 8-byte Folded Reload276; CHECK-NEXT: lfd 25, 8(1) # 8-byte Folded Reload277; CHECK-NEXT: lwz 0, 68(1)278; CHECK-NEXT: addi 1, 1, 64279; CHECK-NEXT: mtlr 0280; CHECK-NEXT: blr281 %z = call <4 x float> @llvm.minnum.v4f32(<4 x float> %x, <4 x float> %y) readnone282 ret <4 x float> %z283}284 285define <8 x float> @test_intrinsic_fmin_v8f32(<8 x float> %x, <8 x float> %y) {286; CHECK-LABEL: test_intrinsic_fmin_v8f32:287; CHECK: # %bb.0:288; CHECK-NEXT: mflr 0289; CHECK-NEXT: stwu 1, -128(1)290; CHECK-NEXT: stw 0, 132(1)291; CHECK-NEXT: .cfi_def_cfa_offset 128292; CHECK-NEXT: .cfi_offset lr, 4293; CHECK-NEXT: .cfi_offset f17, -120294; CHECK-NEXT: .cfi_offset f18, -112295; CHECK-NEXT: .cfi_offset f19, -104296; CHECK-NEXT: .cfi_offset f20, -96297; CHECK-NEXT: .cfi_offset f21, -88298; CHECK-NEXT: .cfi_offset f22, -80299; CHECK-NEXT: .cfi_offset f23, -72300; CHECK-NEXT: .cfi_offset f24, -64301; CHECK-NEXT: .cfi_offset f25, -56302; CHECK-NEXT: .cfi_offset f26, -48303; CHECK-NEXT: .cfi_offset f27, -40304; CHECK-NEXT: .cfi_offset f28, -32305; CHECK-NEXT: .cfi_offset f29, -24306; CHECK-NEXT: .cfi_offset f30, -16307; CHECK-NEXT: .cfi_offset f31, -8308; CHECK-NEXT: stfd 25, 72(1) # 8-byte Folded Spill309; CHECK-NEXT: fmr 25, 2310; CHECK-NEXT: lfs 2, 136(1)311; CHECK-NEXT: stfd 17, 8(1) # 8-byte Folded Spill312; CHECK-NEXT: stfd 18, 16(1) # 8-byte Folded Spill313; CHECK-NEXT: stfd 19, 24(1) # 8-byte Folded Spill314; CHECK-NEXT: stfd 20, 32(1) # 8-byte Folded Spill315; CHECK-NEXT: stfd 21, 40(1) # 8-byte Folded Spill316; CHECK-NEXT: stfd 22, 48(1) # 8-byte Folded Spill317; CHECK-NEXT: stfd 23, 56(1) # 8-byte Folded Spill318; CHECK-NEXT: stfd 24, 64(1) # 8-byte Folded Spill319; CHECK-NEXT: stfd 26, 80(1) # 8-byte Folded Spill320; CHECK-NEXT: fmr 26, 3321; CHECK-NEXT: stfd 27, 88(1) # 8-byte Folded Spill322; CHECK-NEXT: fmr 27, 4323; CHECK-NEXT: stfd 28, 96(1) # 8-byte Folded Spill324; CHECK-NEXT: fmr 28, 5325; CHECK-NEXT: stfd 29, 104(1) # 8-byte Folded Spill326; CHECK-NEXT: fmr 29, 6327; CHECK-NEXT: stfd 30, 112(1) # 8-byte Folded Spill328; CHECK-NEXT: fmr 30, 7329; CHECK-NEXT: stfd 31, 120(1) # 8-byte Folded Spill330; CHECK-NEXT: fmr 31, 8331; CHECK-NEXT: lfs 24, 164(1)332; CHECK-NEXT: lfs 23, 160(1)333; CHECK-NEXT: lfs 22, 156(1)334; CHECK-NEXT: lfs 21, 152(1)335; CHECK-NEXT: lfs 20, 148(1)336; CHECK-NEXT: lfs 19, 144(1)337; CHECK-NEXT: lfs 18, 140(1)338; CHECK-NEXT: bl fminf339; CHECK-NEXT: fmr 17, 1340; CHECK-NEXT: fmr 1, 25341; CHECK-NEXT: fmr 2, 18342; CHECK-NEXT: bl fminf343; CHECK-NEXT: fmr 25, 1344; CHECK-NEXT: fmr 1, 26345; CHECK-NEXT: fmr 2, 19346; CHECK-NEXT: bl fminf347; CHECK-NEXT: fmr 26, 1348; CHECK-NEXT: fmr 1, 27349; CHECK-NEXT: fmr 2, 20350; CHECK-NEXT: bl fminf351; CHECK-NEXT: fmr 27, 1352; CHECK-NEXT: fmr 1, 28353; CHECK-NEXT: fmr 2, 21354; CHECK-NEXT: bl fminf355; CHECK-NEXT: fmr 28, 1356; CHECK-NEXT: fmr 1, 29357; CHECK-NEXT: fmr 2, 22358; CHECK-NEXT: bl fminf359; CHECK-NEXT: fmr 29, 1360; CHECK-NEXT: fmr 1, 30361; CHECK-NEXT: fmr 2, 23362; CHECK-NEXT: bl fminf363; CHECK-NEXT: fmr 30, 1364; CHECK-NEXT: fmr 1, 31365; CHECK-NEXT: fmr 2, 24366; CHECK-NEXT: bl fminf367; CHECK-NEXT: fmr 8, 1368; CHECK-NEXT: fmr 1, 17369; CHECK-NEXT: fmr 2, 25370; CHECK-NEXT: fmr 3, 26371; CHECK-NEXT: fmr 4, 27372; CHECK-NEXT: fmr 5, 28373; CHECK-NEXT: fmr 6, 29374; CHECK-NEXT: fmr 7, 30375; CHECK-NEXT: lfd 31, 120(1) # 8-byte Folded Reload376; CHECK-NEXT: lfd 30, 112(1) # 8-byte Folded Reload377; CHECK-NEXT: lfd 29, 104(1) # 8-byte Folded Reload378; CHECK-NEXT: lfd 28, 96(1) # 8-byte Folded Reload379; CHECK-NEXT: lfd 27, 88(1) # 8-byte Folded Reload380; CHECK-NEXT: lfd 26, 80(1) # 8-byte Folded Reload381; CHECK-NEXT: lfd 25, 72(1) # 8-byte Folded Reload382; CHECK-NEXT: lfd 24, 64(1) # 8-byte Folded Reload383; CHECK-NEXT: lfd 23, 56(1) # 8-byte Folded Reload384; CHECK-NEXT: lfd 22, 48(1) # 8-byte Folded Reload385; CHECK-NEXT: lfd 21, 40(1) # 8-byte Folded Reload386; CHECK-NEXT: lfd 20, 32(1) # 8-byte Folded Reload387; CHECK-NEXT: lfd 19, 24(1) # 8-byte Folded Reload388; CHECK-NEXT: lfd 18, 16(1) # 8-byte Folded Reload389; CHECK-NEXT: lfd 17, 8(1) # 8-byte Folded Reload390; CHECK-NEXT: lwz 0, 132(1)391; CHECK-NEXT: addi 1, 1, 128392; CHECK-NEXT: mtlr 0393; CHECK-NEXT: blr394 %z = call <8 x float> @llvm.minnum.v8f32(<8 x float> %x, <8 x float> %y) readnone395 ret <8 x float> %z396}397 398define ppc_fp128 @fminnum_const(ppc_fp128 %0) {399; CHECK-LABEL: fminnum_const:400; CHECK: # %bb.0:401; CHECK-NEXT: mflr 0402; CHECK-NEXT: stwu 1, -96(1)403; CHECK-NEXT: stw 0, 100(1)404; CHECK-NEXT: .cfi_def_cfa_offset 96405; CHECK-NEXT: .cfi_offset lr, 4406; CHECK-NEXT: stfd 1, 40(1)407; CHECK-NEXT: li 3, 0408; CHECK-NEXT: stw 3, 76(1)409; CHECK-NEXT: lis 4, 16368410; CHECK-NEXT: stw 3, 68(1)411; CHECK-NEXT: stw 3, 64(1)412; CHECK-NEXT: lwz 3, 44(1)413; CHECK-NEXT: stfd 2, 32(1)414; CHECK-NEXT: stw 3, 60(1)415; CHECK-NEXT: lwz 3, 40(1)416; CHECK-NEXT: stw 4, 72(1)417; CHECK-NEXT: stw 3, 56(1)418; CHECK-NEXT: lwz 3, 36(1)419; CHECK-NEXT: lfd 3, 72(1)420; CHECK-NEXT: stw 3, 52(1)421; CHECK-NEXT: lwz 3, 32(1)422; CHECK-NEXT: lfd 4, 64(1)423; CHECK-NEXT: stw 3, 48(1)424; CHECK-NEXT: lfd 1, 56(1)425; CHECK-NEXT: lfd 2, 48(1)426; CHECK-NEXT: bl fminl427; CHECK-NEXT: stfd 1, 16(1)428; CHECK-NEXT: lwz 3, 20(1)429; CHECK-NEXT: stfd 2, 24(1)430; CHECK-NEXT: stw 3, 92(1)431; CHECK-NEXT: lwz 3, 16(1)432; CHECK-NEXT: stw 3, 88(1)433; CHECK-NEXT: lwz 3, 28(1)434; CHECK-NEXT: lfd 1, 88(1)435; CHECK-NEXT: stw 3, 84(1)436; CHECK-NEXT: lwz 3, 24(1)437; CHECK-NEXT: stw 3, 80(1)438; CHECK-NEXT: lfd 2, 80(1)439; CHECK-NEXT: lwz 0, 100(1)440; CHECK-NEXT: addi 1, 1, 96441; CHECK-NEXT: mtlr 0442; CHECK-NEXT: blr443 %2 = tail call fast ppc_fp128 @llvm.minnum.ppcf128(ppc_fp128 %0, ppc_fp128 0xM3FF00000000000000000000000000000)444 ret ppc_fp128 %2445}446 447