672 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 -mattr=-vsx < %s | FileCheck %s --check-prefix=NOVSX3; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s --check-prefix=VSX4; RUN: llc -mtriple=powerpc64-ibm-aix -mcpu=pwr8 < %s | FileCheck %s --check-prefix=AIX5 6define float @f32_minimum(float %a, float %b) {7; NOVSX-LABEL: f32_minimum:8; NOVSX: # %bb.0: # %entry9; NOVSX-NEXT: fcmpu 0, 1, 210; NOVSX-NEXT: fmr 0, 111; NOVSX-NEXT: stfs 2, -8(1)12; NOVSX-NEXT: stfs 1, -4(1)13; NOVSX-NEXT: bc 12, 0, .LBB0_214; NOVSX-NEXT: # %bb.1: # %entry15; NOVSX-NEXT: fmr 0, 216; NOVSX-NEXT: .LBB0_2: # %entry17; NOVSX-NEXT: lwz 3, -4(1)18; NOVSX-NEXT: bc 4, 3, .LBB0_419; NOVSX-NEXT: # %bb.3:20; NOVSX-NEXT: addis 4, 2, .LCPI0_0@toc@ha21; NOVSX-NEXT: lfs 0, .LCPI0_0@toc@l(4)22; NOVSX-NEXT: .LBB0_4: # %entry23; NOVSX-NEXT: xoris 3, 3, 3276824; NOVSX-NEXT: lwz 4, -8(1)25; NOVSX-NEXT: cmplwi 3, 026; NOVSX-NEXT: bc 12, 2, .LBB0_627; NOVSX-NEXT: # %bb.5: # %entry28; NOVSX-NEXT: fmr 1, 029; NOVSX-NEXT: .LBB0_6: # %entry30; NOVSX-NEXT: xoris 3, 4, 3276831; NOVSX-NEXT: cmplwi 3, 032; NOVSX-NEXT: bc 12, 2, .LBB0_833; NOVSX-NEXT: # %bb.7: # %entry34; NOVSX-NEXT: fmr 2, 135; NOVSX-NEXT: .LBB0_8: # %entry36; NOVSX-NEXT: addis 3, 2, .LCPI0_1@toc@ha37; NOVSX-NEXT: lfs 1, .LCPI0_1@toc@l(3)38; NOVSX-NEXT: fcmpu 0, 0, 139; NOVSX-NEXT: bc 12, 2, .LBB0_1040; NOVSX-NEXT: # %bb.9: # %entry41; NOVSX-NEXT: fmr 2, 042; NOVSX-NEXT: .LBB0_10: # %entry43; NOVSX-NEXT: fmr 1, 244; NOVSX-NEXT: blr45;46; VSX-LABEL: f32_minimum:47; VSX: # %bb.0: # %entry48; VSX-NEXT: fcmpu 0, 1, 249; VSX-NEXT: bc 12, 3, .LBB0_250; VSX-NEXT: # %bb.1: # %entry51; VSX-NEXT: xsmindp 1, 1, 252; VSX-NEXT: blr53; VSX-NEXT: .LBB0_2:54; VSX-NEXT: addis 3, 2, .LCPI0_0@toc@ha55; VSX-NEXT: lfs 1, .LCPI0_0@toc@l(3)56; VSX-NEXT: blr57;58; AIX-LABEL: f32_minimum:59; AIX: # %bb.0: # %entry60; AIX-NEXT: fcmpu 0, 1, 261; AIX-NEXT: bc 12, 3, L..BB0_262; AIX-NEXT: # %bb.1: # %entry63; AIX-NEXT: xsmindp 1, 1, 264; AIX-NEXT: blr65; AIX-NEXT: L..BB0_2:66; AIX-NEXT: ld 3, L..C0(2) # %const.067; AIX-NEXT: lfs 1, 0(3)68; AIX-NEXT: blr69entry:70 %m = call float @llvm.minimum.f32(float %a, float %b)71 ret float %m72}73 74define float @f32_maximum(float %a, float %b) {75; NOVSX-LABEL: f32_maximum:76; NOVSX: # %bb.0: # %entry77; NOVSX-NEXT: fcmpu 0, 1, 278; NOVSX-NEXT: fmr 0, 179; NOVSX-NEXT: stfs 2, -8(1)80; NOVSX-NEXT: stfs 1, -4(1)81; NOVSX-NEXT: bc 12, 1, .LBB1_282; NOVSX-NEXT: # %bb.1: # %entry83; NOVSX-NEXT: fmr 0, 284; NOVSX-NEXT: .LBB1_2: # %entry85; NOVSX-NEXT: lwz 3, -4(1)86; NOVSX-NEXT: bc 4, 3, .LBB1_487; NOVSX-NEXT: # %bb.3:88; NOVSX-NEXT: addis 4, 2, .LCPI1_0@toc@ha89; NOVSX-NEXT: lfs 0, .LCPI1_0@toc@l(4)90; NOVSX-NEXT: .LBB1_4: # %entry91; NOVSX-NEXT: cmpwi 3, 092; NOVSX-NEXT: lwz 4, -8(1)93; NOVSX-NEXT: bc 12, 2, .LBB1_694; NOVSX-NEXT: # %bb.5: # %entry95; NOVSX-NEXT: fmr 1, 096; NOVSX-NEXT: .LBB1_6: # %entry97; NOVSX-NEXT: cmpwi 4, 098; NOVSX-NEXT: bc 12, 2, .LBB1_899; NOVSX-NEXT: # %bb.7: # %entry100; NOVSX-NEXT: fmr 2, 1101; NOVSX-NEXT: .LBB1_8: # %entry102; NOVSX-NEXT: addis 3, 2, .LCPI1_1@toc@ha103; NOVSX-NEXT: lfs 1, .LCPI1_1@toc@l(3)104; NOVSX-NEXT: fcmpu 0, 0, 1105; NOVSX-NEXT: bc 12, 2, .LBB1_10106; NOVSX-NEXT: # %bb.9: # %entry107; NOVSX-NEXT: fmr 2, 0108; NOVSX-NEXT: .LBB1_10: # %entry109; NOVSX-NEXT: fmr 1, 2110; NOVSX-NEXT: blr111;112; VSX-LABEL: f32_maximum:113; VSX: # %bb.0: # %entry114; VSX-NEXT: fcmpu 0, 1, 2115; VSX-NEXT: bc 12, 3, .LBB1_2116; VSX-NEXT: # %bb.1: # %entry117; VSX-NEXT: xsmaxdp 1, 1, 2118; VSX-NEXT: blr119; VSX-NEXT: .LBB1_2:120; VSX-NEXT: addis 3, 2, .LCPI1_0@toc@ha121; VSX-NEXT: lfs 1, .LCPI1_0@toc@l(3)122; VSX-NEXT: blr123;124; AIX-LABEL: f32_maximum:125; AIX: # %bb.0: # %entry126; AIX-NEXT: fcmpu 0, 1, 2127; AIX-NEXT: bc 12, 3, L..BB1_2128; AIX-NEXT: # %bb.1: # %entry129; AIX-NEXT: xsmaxdp 1, 1, 2130; AIX-NEXT: blr131; AIX-NEXT: L..BB1_2:132; AIX-NEXT: ld 3, L..C1(2) # %const.0133; AIX-NEXT: lfs 1, 0(3)134; AIX-NEXT: blr135entry:136 %m = call float @llvm.maximum.f32(float %a, float %b)137 ret float %m138}139 140define double @f64_minimum(double %a, double %b) {141; NOVSX-LABEL: f64_minimum:142; NOVSX: # %bb.0: # %entry143; NOVSX-NEXT: fcmpu 0, 1, 2144; NOVSX-NEXT: fmr 0, 1145; NOVSX-NEXT: stfd 2, -16(1)146; NOVSX-NEXT: stfd 1, -8(1)147; NOVSX-NEXT: bc 12, 0, .LBB2_2148; NOVSX-NEXT: # %bb.1: # %entry149; NOVSX-NEXT: fmr 0, 2150; NOVSX-NEXT: .LBB2_2: # %entry151; NOVSX-NEXT: ld 3, -8(1)152; NOVSX-NEXT: bc 4, 3, .LBB2_4153; NOVSX-NEXT: # %bb.3:154; NOVSX-NEXT: addis 4, 2, .LCPI2_0@toc@ha155; NOVSX-NEXT: lfs 0, .LCPI2_0@toc@l(4)156; NOVSX-NEXT: .LBB2_4: # %entry157; NOVSX-NEXT: li 5, 1158; NOVSX-NEXT: ld 4, -16(1)159; NOVSX-NEXT: rldic 5, 5, 63, 0160; NOVSX-NEXT: cmpd 3, 5161; NOVSX-NEXT: bc 12, 2, .LBB2_6162; NOVSX-NEXT: # %bb.5: # %entry163; NOVSX-NEXT: fmr 1, 0164; NOVSX-NEXT: .LBB2_6: # %entry165; NOVSX-NEXT: cmpd 4, 5166; NOVSX-NEXT: bc 12, 2, .LBB2_8167; NOVSX-NEXT: # %bb.7: # %entry168; NOVSX-NEXT: fmr 2, 1169; NOVSX-NEXT: .LBB2_8: # %entry170; NOVSX-NEXT: addis 3, 2, .LCPI2_1@toc@ha171; NOVSX-NEXT: lfs 1, .LCPI2_1@toc@l(3)172; NOVSX-NEXT: fcmpu 0, 0, 1173; NOVSX-NEXT: bc 12, 2, .LBB2_10174; NOVSX-NEXT: # %bb.9: # %entry175; NOVSX-NEXT: fmr 2, 0176; NOVSX-NEXT: .LBB2_10: # %entry177; NOVSX-NEXT: fmr 1, 2178; NOVSX-NEXT: blr179;180; VSX-LABEL: f64_minimum:181; VSX: # %bb.0: # %entry182; VSX-NEXT: fcmpu 0, 1, 2183; VSX-NEXT: bc 12, 3, .LBB2_2184; VSX-NEXT: # %bb.1: # %entry185; VSX-NEXT: xsmindp 1, 1, 2186; VSX-NEXT: blr187; VSX-NEXT: .LBB2_2:188; VSX-NEXT: addis 3, 2, .LCPI2_0@toc@ha189; VSX-NEXT: lfs 1, .LCPI2_0@toc@l(3)190; VSX-NEXT: blr191;192; AIX-LABEL: f64_minimum:193; AIX: # %bb.0: # %entry194; AIX-NEXT: fcmpu 0, 1, 2195; AIX-NEXT: bc 12, 3, L..BB2_2196; AIX-NEXT: # %bb.1: # %entry197; AIX-NEXT: xsmindp 1, 1, 2198; AIX-NEXT: blr199; AIX-NEXT: L..BB2_2:200; AIX-NEXT: ld 3, L..C2(2) # %const.0201; AIX-NEXT: lfs 1, 0(3)202; AIX-NEXT: blr203entry:204 %m = call double @llvm.minimum.f64(double %a, double %b)205 ret double %m206}207 208define double @f64_maximum(double %a, double %b) {209; NOVSX-LABEL: f64_maximum:210; NOVSX: # %bb.0: # %entry211; NOVSX-NEXT: fcmpu 0, 1, 2212; NOVSX-NEXT: fmr 0, 1213; NOVSX-NEXT: stfd 2, -16(1)214; NOVSX-NEXT: stfd 1, -8(1)215; NOVSX-NEXT: bc 12, 1, .LBB3_2216; NOVSX-NEXT: # %bb.1: # %entry217; NOVSX-NEXT: fmr 0, 2218; NOVSX-NEXT: .LBB3_2: # %entry219; NOVSX-NEXT: ld 3, -8(1)220; NOVSX-NEXT: bc 4, 3, .LBB3_4221; NOVSX-NEXT: # %bb.3:222; NOVSX-NEXT: addis 4, 2, .LCPI3_0@toc@ha223; NOVSX-NEXT: lfs 0, .LCPI3_0@toc@l(4)224; NOVSX-NEXT: .LBB3_4: # %entry225; NOVSX-NEXT: cmpdi 3, 0226; NOVSX-NEXT: ld 4, -16(1)227; NOVSX-NEXT: bc 12, 2, .LBB3_6228; NOVSX-NEXT: # %bb.5: # %entry229; NOVSX-NEXT: fmr 1, 0230; NOVSX-NEXT: .LBB3_6: # %entry231; NOVSX-NEXT: cmpdi 4, 0232; NOVSX-NEXT: bc 12, 2, .LBB3_8233; NOVSX-NEXT: # %bb.7: # %entry234; NOVSX-NEXT: fmr 2, 1235; NOVSX-NEXT: .LBB3_8: # %entry236; NOVSX-NEXT: addis 3, 2, .LCPI3_1@toc@ha237; NOVSX-NEXT: lfs 1, .LCPI3_1@toc@l(3)238; NOVSX-NEXT: fcmpu 0, 0, 1239; NOVSX-NEXT: bc 12, 2, .LBB3_10240; NOVSX-NEXT: # %bb.9: # %entry241; NOVSX-NEXT: fmr 2, 0242; NOVSX-NEXT: .LBB3_10: # %entry243; NOVSX-NEXT: fmr 1, 2244; NOVSX-NEXT: blr245;246; VSX-LABEL: f64_maximum:247; VSX: # %bb.0: # %entry248; VSX-NEXT: fcmpu 0, 1, 2249; VSX-NEXT: bc 12, 3, .LBB3_2250; VSX-NEXT: # %bb.1: # %entry251; VSX-NEXT: xsmaxdp 1, 1, 2252; VSX-NEXT: blr253; VSX-NEXT: .LBB3_2:254; VSX-NEXT: addis 3, 2, .LCPI3_0@toc@ha255; VSX-NEXT: lfs 1, .LCPI3_0@toc@l(3)256; VSX-NEXT: blr257;258; AIX-LABEL: f64_maximum:259; AIX: # %bb.0: # %entry260; AIX-NEXT: fcmpu 0, 1, 2261; AIX-NEXT: bc 12, 3, L..BB3_2262; AIX-NEXT: # %bb.1: # %entry263; AIX-NEXT: xsmaxdp 1, 1, 2264; AIX-NEXT: blr265; AIX-NEXT: L..BB3_2:266; AIX-NEXT: ld 3, L..C3(2) # %const.0267; AIX-NEXT: lfs 1, 0(3)268; AIX-NEXT: blr269entry:270 %m = call double @llvm.maximum.f64(double %a, double %b)271 ret double %m272}273 274define <4 x float> @v4f32_minimum(<4 x float> %a, <4 x float> %b) {275; NOVSX-LABEL: v4f32_minimum:276; NOVSX: # %bb.0: # %entry277; NOVSX-NEXT: vcmpeqfp 0, 3, 3278; NOVSX-NEXT: vcmpeqfp 1, 2, 2279; NOVSX-NEXT: addis 3, 2, .LCPI4_0@toc@ha280; NOVSX-NEXT: addi 3, 3, .LCPI4_0@toc@l281; NOVSX-NEXT: vnot 0, 0282; NOVSX-NEXT: vnot 1, 1283; NOVSX-NEXT: vspltisb 4, -1284; NOVSX-NEXT: vcmpgtfp 5, 3, 2285; NOVSX-NEXT: vslw 4, 4, 4286; NOVSX-NEXT: vor 0, 1, 0287; NOVSX-NEXT: lvx 1, 0, 3288; NOVSX-NEXT: vsel 5, 3, 2, 5289; NOVSX-NEXT: vsel 5, 5, 1, 0290; NOVSX-NEXT: vcmpequw 0, 2, 4291; NOVSX-NEXT: vcmpequw 4, 3, 4292; NOVSX-NEXT: vsel 2, 5, 2, 0293; NOVSX-NEXT: vsel 2, 2, 3, 4294; NOVSX-NEXT: vxor 3, 3, 3295; NOVSX-NEXT: vcmpeqfp 3, 5, 3296; NOVSX-NEXT: vsel 2, 5, 2, 3297; NOVSX-NEXT: blr298;299; VSX-LABEL: v4f32_minimum:300; VSX: # %bb.0: # %entry301; VSX-NEXT: xvcmpeqsp 1, 35, 35302; VSX-NEXT: xvcmpeqsp 2, 34, 34303; VSX-NEXT: addis 3, 2, .LCPI4_0@toc@ha304; VSX-NEXT: xxleqv 36, 36, 36305; VSX-NEXT: xvminsp 0, 34, 35306; VSX-NEXT: vslw 4, 4, 4307; VSX-NEXT: addi 3, 3, .LCPI4_0@toc@l308; VSX-NEXT: xxlnor 1, 1, 1309; VSX-NEXT: xxlnor 2, 2, 2310; VSX-NEXT: vcmpequw 5, 2, 4311; VSX-NEXT: xxlor 1, 2, 1312; VSX-NEXT: lxvd2x 2, 0, 3313; VSX-NEXT: xxsel 0, 0, 2, 1314; VSX-NEXT: xxlxor 2, 2, 2315; VSX-NEXT: xvcmpeqsp 2, 0, 2316; VSX-NEXT: xxsel 1, 0, 34, 37317; VSX-NEXT: vcmpequw 2, 3, 4318; VSX-NEXT: xxsel 1, 1, 35, 34319; VSX-NEXT: xxsel 34, 0, 1, 2320; VSX-NEXT: blr321;322; AIX-LABEL: v4f32_minimum:323; AIX: # %bb.0: # %entry324; AIX-NEXT: xvcmpeqsp 1, 35, 35325; AIX-NEXT: xvcmpeqsp 2, 34, 34326; AIX-NEXT: ld 3, L..C4(2) # %const.0327; AIX-NEXT: xxleqv 36, 36, 36328; AIX-NEXT: xvminsp 0, 34, 35329; AIX-NEXT: vslw 4, 4, 4330; AIX-NEXT: xxlnor 1, 1, 1331; AIX-NEXT: xxlnor 2, 2, 2332; AIX-NEXT: vcmpequw 5, 2, 4333; AIX-NEXT: xxlor 1, 2, 1334; AIX-NEXT: lxvw4x 2, 0, 3335; AIX-NEXT: xxsel 0, 0, 2, 1336; AIX-NEXT: xxlxor 2, 2, 2337; AIX-NEXT: xvcmpeqsp 2, 0, 2338; AIX-NEXT: xxsel 1, 0, 34, 37339; AIX-NEXT: vcmpequw 2, 3, 4340; AIX-NEXT: xxsel 1, 1, 35, 34341; AIX-NEXT: xxsel 34, 0, 1, 2342; AIX-NEXT: blr343entry:344 %m = call <4 x float> @llvm.minimum.v4f32(<4 x float> %a, <4 x float> %b)345 ret <4 x float> %m346}347 348define <4 x float> @v4f32_maximum(<4 x float> %a, <4 x float> %b) {349; NOVSX-LABEL: v4f32_maximum:350; NOVSX: # %bb.0: # %entry351; NOVSX-NEXT: vcmpeqfp 5, 3, 3352; NOVSX-NEXT: vcmpeqfp 0, 2, 2353; NOVSX-NEXT: addis 3, 2, .LCPI5_0@toc@ha354; NOVSX-NEXT: addi 3, 3, .LCPI5_0@toc@l355; NOVSX-NEXT: vnot 5, 5356; NOVSX-NEXT: vnot 0, 0357; NOVSX-NEXT: vcmpgtfp 4, 2, 3358; NOVSX-NEXT: vor 5, 0, 5359; NOVSX-NEXT: lvx 0, 0, 3360; NOVSX-NEXT: vsel 4, 3, 2, 4361; NOVSX-NEXT: vsel 4, 4, 0, 5362; NOVSX-NEXT: vxor 5, 5, 5363; NOVSX-NEXT: vcmpequw 0, 2, 5364; NOVSX-NEXT: vsel 2, 4, 2, 0365; NOVSX-NEXT: vcmpequw 0, 3, 5366; NOVSX-NEXT: vsel 2, 2, 3, 0367; NOVSX-NEXT: vcmpeqfp 3, 4, 5368; NOVSX-NEXT: vsel 2, 4, 2, 3369; NOVSX-NEXT: blr370;371; VSX-LABEL: v4f32_maximum:372; VSX: # %bb.0: # %entry373; VSX-NEXT: xvcmpeqsp 1, 35, 35374; VSX-NEXT: xvcmpeqsp 2, 34, 34375; VSX-NEXT: addis 3, 2, .LCPI5_0@toc@ha376; VSX-NEXT: addi 3, 3, .LCPI5_0@toc@l377; VSX-NEXT: xxlnor 1, 1, 1378; VSX-NEXT: xxlnor 2, 2, 2379; VSX-NEXT: xvmaxsp 0, 34, 35380; VSX-NEXT: xxlxor 36, 36, 36381; VSX-NEXT: vcmpequw 5, 2, 4382; VSX-NEXT: xxlor 1, 2, 1383; VSX-NEXT: lxvd2x 2, 0, 3384; VSX-NEXT: xxsel 0, 0, 2, 1385; VSX-NEXT: xvcmpeqsp 2, 0, 36386; VSX-NEXT: xxsel 1, 0, 34, 37387; VSX-NEXT: vcmpequw 2, 3, 4388; VSX-NEXT: xxsel 1, 1, 35, 34389; VSX-NEXT: xxsel 34, 0, 1, 2390; VSX-NEXT: blr391;392; AIX-LABEL: v4f32_maximum:393; AIX: # %bb.0: # %entry394; AIX-NEXT: xvcmpeqsp 1, 35, 35395; AIX-NEXT: xvcmpeqsp 2, 34, 34396; AIX-NEXT: ld 3, L..C5(2) # %const.0397; AIX-NEXT: xvmaxsp 0, 34, 35398; AIX-NEXT: xxlxor 36, 36, 36399; AIX-NEXT: xxlnor 1, 1, 1400; AIX-NEXT: xxlnor 2, 2, 2401; AIX-NEXT: vcmpequw 5, 2, 4402; AIX-NEXT: xxlor 1, 2, 1403; AIX-NEXT: lxvw4x 2, 0, 3404; AIX-NEXT: xxsel 0, 0, 2, 1405; AIX-NEXT: xvcmpeqsp 2, 0, 36406; AIX-NEXT: xxsel 1, 0, 34, 37407; AIX-NEXT: vcmpequw 2, 3, 4408; AIX-NEXT: xxsel 1, 1, 35, 34409; AIX-NEXT: xxsel 34, 0, 1, 2410; AIX-NEXT: blr411entry:412 %m = call <4 x float> @llvm.maximum.v4f32(<4 x float> %a, <4 x float> %b)413 ret <4 x float> %m414}415 416define <2 x double> @v2f64_minimum(<2 x double> %a, <2 x double> %b) {417; NOVSX-LABEL: v2f64_minimum:418; NOVSX: # %bb.0: # %entry419; NOVSX-NEXT: fcmpu 0, 1, 3420; NOVSX-NEXT: fmr 6, 1421; NOVSX-NEXT: stfd 4, -16(1)422; NOVSX-NEXT: stfd 2, -8(1)423; NOVSX-NEXT: stfd 3, -32(1)424; NOVSX-NEXT: stfd 1, -24(1)425; NOVSX-NEXT: bc 12, 0, .LBB6_2426; NOVSX-NEXT: # %bb.1: # %entry427; NOVSX-NEXT: fmr 6, 3428; NOVSX-NEXT: .LBB6_2: # %entry429; NOVSX-NEXT: addis 3, 2, .LCPI6_0@toc@ha430; NOVSX-NEXT: ld 4, -24(1)431; NOVSX-NEXT: lfs 0, .LCPI6_0@toc@l(3)432; NOVSX-NEXT: fmr 5, 0433; NOVSX-NEXT: bc 12, 3, .LBB6_4434; NOVSX-NEXT: # %bb.3: # %entry435; NOVSX-NEXT: fmr 5, 6436; NOVSX-NEXT: .LBB6_4: # %entry437; NOVSX-NEXT: li 3, 1438; NOVSX-NEXT: ld 5, -32(1)439; NOVSX-NEXT: rldic 3, 3, 63, 0440; NOVSX-NEXT: cmpd 4, 3441; NOVSX-NEXT: bc 12, 2, .LBB6_6442; NOVSX-NEXT: # %bb.5: # %entry443; NOVSX-NEXT: fmr 1, 5444; NOVSX-NEXT: .LBB6_6: # %entry445; NOVSX-NEXT: cmpd 5, 3446; NOVSX-NEXT: bc 12, 2, .LBB6_8447; NOVSX-NEXT: # %bb.7: # %entry448; NOVSX-NEXT: fmr 3, 1449; NOVSX-NEXT: .LBB6_8: # %entry450; NOVSX-NEXT: addis 4, 2, .LCPI6_1@toc@ha451; NOVSX-NEXT: lfs 1, .LCPI6_1@toc@l(4)452; NOVSX-NEXT: fcmpu 0, 5, 1453; NOVSX-NEXT: bc 12, 2, .LBB6_10454; NOVSX-NEXT: # %bb.9: # %entry455; NOVSX-NEXT: fmr 3, 5456; NOVSX-NEXT: .LBB6_10: # %entry457; NOVSX-NEXT: fcmpu 0, 2, 4458; NOVSX-NEXT: fmr 5, 2459; NOVSX-NEXT: bc 12, 0, .LBB6_12460; NOVSX-NEXT: # %bb.11: # %entry461; NOVSX-NEXT: fmr 5, 4462; NOVSX-NEXT: .LBB6_12: # %entry463; NOVSX-NEXT: ld 5, -8(1)464; NOVSX-NEXT: bc 12, 3, .LBB6_14465; NOVSX-NEXT: # %bb.13: # %entry466; NOVSX-NEXT: fmr 0, 5467; NOVSX-NEXT: .LBB6_14: # %entry468; NOVSX-NEXT: cmpd 5, 3469; NOVSX-NEXT: ld 4, -16(1)470; NOVSX-NEXT: bc 4, 2, .LBB6_19471; NOVSX-NEXT: # %bb.15: # %entry472; NOVSX-NEXT: cmpd 4, 3473; NOVSX-NEXT: bc 4, 2, .LBB6_20474; NOVSX-NEXT: .LBB6_16: # %entry475; NOVSX-NEXT: fcmpu 0, 0, 1476; NOVSX-NEXT: bc 12, 2, .LBB6_18477; NOVSX-NEXT: .LBB6_17: # %entry478; NOVSX-NEXT: fmr 4, 0479; NOVSX-NEXT: .LBB6_18: # %entry480; NOVSX-NEXT: fmr 1, 3481; NOVSX-NEXT: fmr 2, 4482; NOVSX-NEXT: blr483; NOVSX-NEXT: .LBB6_19: # %entry484; NOVSX-NEXT: fmr 2, 0485; NOVSX-NEXT: cmpd 4, 3486; NOVSX-NEXT: bc 12, 2, .LBB6_16487; NOVSX-NEXT: .LBB6_20: # %entry488; NOVSX-NEXT: fmr 4, 2489; NOVSX-NEXT: fcmpu 0, 0, 1490; NOVSX-NEXT: bc 4, 2, .LBB6_17491; NOVSX-NEXT: b .LBB6_18492;493; VSX-LABEL: v2f64_minimum:494; VSX: # %bb.0: # %entry495; VSX-NEXT: addis 3, 2, .LCPI6_0@toc@ha496; VSX-NEXT: xvcmpeqdp 36, 35, 35497; VSX-NEXT: xvcmpeqdp 37, 34, 34498; VSX-NEXT: addi 3, 3, .LCPI6_0@toc@l499; VSX-NEXT: xxlnor 36, 36, 36500; VSX-NEXT: xxlnor 37, 37, 37501; VSX-NEXT: xvmindp 0, 34, 35502; VSX-NEXT: lxvd2x 2, 0, 3503; VSX-NEXT: addis 3, 2, .LCPI6_1@toc@ha504; VSX-NEXT: xxlor 1, 37, 36505; VSX-NEXT: addi 3, 3, .LCPI6_1@toc@l506; VSX-NEXT: lxvd2x 36, 0, 3507; VSX-NEXT: vcmpequd 5, 2, 4508; VSX-NEXT: xxsel 0, 0, 2, 1509; VSX-NEXT: xxlxor 2, 2, 2510; VSX-NEXT: xxsel 1, 0, 34, 37511; VSX-NEXT: vcmpequd 2, 3, 4512; VSX-NEXT: xxsel 1, 1, 35, 34513; VSX-NEXT: xvcmpeqdp 34, 0, 2514; VSX-NEXT: xxsel 34, 0, 1, 34515; VSX-NEXT: blr516;517; AIX-LABEL: v2f64_minimum:518; AIX: # %bb.0: # %entry519; AIX-NEXT: ld 3, L..C6(2) # %const.0520; AIX-NEXT: xvcmpeqdp 36, 35, 35521; AIX-NEXT: xvcmpeqdp 37, 34, 34522; AIX-NEXT: lxvd2x 2, 0, 3523; AIX-NEXT: ld 3, L..C7(2) # %const.1524; AIX-NEXT: xxlnor 36, 36, 36525; AIX-NEXT: xxlnor 37, 37, 37526; AIX-NEXT: xvmindp 0, 34, 35527; AIX-NEXT: xxlor 1, 37, 36528; AIX-NEXT: lxvd2x 36, 0, 3529; AIX-NEXT: vcmpequd 5, 2, 4530; AIX-NEXT: xxsel 0, 0, 2, 1531; AIX-NEXT: xxlxor 2, 2, 2532; AIX-NEXT: xxsel 1, 0, 34, 37533; AIX-NEXT: vcmpequd 2, 3, 4534; AIX-NEXT: xxsel 1, 1, 35, 34535; AIX-NEXT: xvcmpeqdp 34, 0, 2536; AIX-NEXT: xxsel 34, 0, 1, 34537; AIX-NEXT: blr538entry:539 %m = call <2 x double> @llvm.minimum.v2f64(<2 x double> %a, <2 x double> %b)540 ret <2 x double> %m541}542 543define <2 x double> @v2f64_maximum(<2 x double> %a, <2 x double> %b) {544; NOVSX-LABEL: v2f64_maximum:545; NOVSX: # %bb.0: # %entry546; NOVSX-NEXT: fcmpu 0, 1, 3547; NOVSX-NEXT: fmr 6, 1548; NOVSX-NEXT: stfd 4, -16(1)549; NOVSX-NEXT: stfd 2, -8(1)550; NOVSX-NEXT: stfd 3, -32(1)551; NOVSX-NEXT: stfd 1, -24(1)552; NOVSX-NEXT: bc 12, 1, .LBB7_2553; NOVSX-NEXT: # %bb.1: # %entry554; NOVSX-NEXT: fmr 6, 3555; NOVSX-NEXT: .LBB7_2: # %entry556; NOVSX-NEXT: addis 4, 2, .LCPI7_0@toc@ha557; NOVSX-NEXT: ld 3, -24(1)558; NOVSX-NEXT: lfs 0, .LCPI7_0@toc@l(4)559; NOVSX-NEXT: fmr 5, 0560; NOVSX-NEXT: bc 12, 3, .LBB7_4561; NOVSX-NEXT: # %bb.3: # %entry562; NOVSX-NEXT: fmr 5, 6563; NOVSX-NEXT: .LBB7_4: # %entry564; NOVSX-NEXT: cmpdi 3, 0565; NOVSX-NEXT: ld 4, -32(1)566; NOVSX-NEXT: bc 12, 2, .LBB7_6567; NOVSX-NEXT: # %bb.5: # %entry568; NOVSX-NEXT: fmr 1, 5569; NOVSX-NEXT: .LBB7_6: # %entry570; NOVSX-NEXT: cmpdi 4, 0571; NOVSX-NEXT: bc 12, 2, .LBB7_8572; NOVSX-NEXT: # %bb.7: # %entry573; NOVSX-NEXT: fmr 3, 1574; NOVSX-NEXT: .LBB7_8: # %entry575; NOVSX-NEXT: addis 3, 2, .LCPI7_1@toc@ha576; NOVSX-NEXT: lfs 1, .LCPI7_1@toc@l(3)577; NOVSX-NEXT: fcmpu 0, 5, 1578; NOVSX-NEXT: bc 12, 2, .LBB7_10579; NOVSX-NEXT: # %bb.9: # %entry580; NOVSX-NEXT: fmr 3, 5581; NOVSX-NEXT: .LBB7_10: # %entry582; NOVSX-NEXT: fcmpu 0, 2, 4583; NOVSX-NEXT: fmr 5, 2584; NOVSX-NEXT: bc 12, 1, .LBB7_12585; NOVSX-NEXT: # %bb.11: # %entry586; NOVSX-NEXT: fmr 5, 4587; NOVSX-NEXT: .LBB7_12: # %entry588; NOVSX-NEXT: ld 4, -8(1)589; NOVSX-NEXT: bc 12, 3, .LBB7_14590; NOVSX-NEXT: # %bb.13: # %entry591; NOVSX-NEXT: fmr 0, 5592; NOVSX-NEXT: .LBB7_14: # %entry593; NOVSX-NEXT: cmpdi 4, 0594; NOVSX-NEXT: ld 3, -16(1)595; NOVSX-NEXT: bc 4, 2, .LBB7_19596; NOVSX-NEXT: # %bb.15: # %entry597; NOVSX-NEXT: cmpdi 3, 0598; NOVSX-NEXT: bc 4, 2, .LBB7_20599; NOVSX-NEXT: .LBB7_16: # %entry600; NOVSX-NEXT: fcmpu 0, 0, 1601; NOVSX-NEXT: bc 12, 2, .LBB7_18602; NOVSX-NEXT: .LBB7_17: # %entry603; NOVSX-NEXT: fmr 4, 0604; NOVSX-NEXT: .LBB7_18: # %entry605; NOVSX-NEXT: fmr 1, 3606; NOVSX-NEXT: fmr 2, 4607; NOVSX-NEXT: blr608; NOVSX-NEXT: .LBB7_19: # %entry609; NOVSX-NEXT: fmr 2, 0610; NOVSX-NEXT: cmpdi 3, 0611; NOVSX-NEXT: bc 12, 2, .LBB7_16612; NOVSX-NEXT: .LBB7_20: # %entry613; NOVSX-NEXT: fmr 4, 2614; NOVSX-NEXT: fcmpu 0, 0, 1615; NOVSX-NEXT: bc 4, 2, .LBB7_17616; NOVSX-NEXT: b .LBB7_18617;618; VSX-LABEL: v2f64_maximum:619; VSX: # %bb.0: # %entry620; VSX-NEXT: addis 3, 2, .LCPI7_0@toc@ha621; VSX-NEXT: xvcmpeqdp 36, 35, 35622; VSX-NEXT: xvcmpeqdp 37, 34, 34623; VSX-NEXT: addi 3, 3, .LCPI7_0@toc@l624; VSX-NEXT: xxlnor 36, 36, 36625; VSX-NEXT: xxlnor 37, 37, 37626; VSX-NEXT: xvmaxdp 0, 34, 35627; VSX-NEXT: lxvd2x 2, 0, 3628; VSX-NEXT: xxlor 1, 37, 36629; VSX-NEXT: xxlxor 36, 36, 36630; VSX-NEXT: vcmpequd 5, 2, 4631; VSX-NEXT: xxsel 0, 0, 2, 1632; VSX-NEXT: xxsel 1, 0, 34, 37633; VSX-NEXT: vcmpequd 2, 3, 4634; VSX-NEXT: xxsel 1, 1, 35, 34635; VSX-NEXT: xvcmpeqdp 34, 0, 36636; VSX-NEXT: xxsel 34, 0, 1, 34637; VSX-NEXT: blr638;639; AIX-LABEL: v2f64_maximum:640; AIX: # %bb.0: # %entry641; AIX-NEXT: ld 3, L..C8(2) # %const.0642; AIX-NEXT: xvcmpeqdp 36, 35, 35643; AIX-NEXT: xvcmpeqdp 37, 34, 34644; AIX-NEXT: lxvd2x 2, 0, 3645; AIX-NEXT: xxlnor 36, 36, 36646; AIX-NEXT: xxlnor 37, 37, 37647; AIX-NEXT: xvmaxdp 0, 34, 35648; AIX-NEXT: xxlor 1, 37, 36649; AIX-NEXT: xxlxor 36, 36, 36650; AIX-NEXT: vcmpequd 5, 2, 4651; AIX-NEXT: xxsel 0, 0, 2, 1652; AIX-NEXT: xxsel 1, 0, 34, 37653; AIX-NEXT: vcmpequd 2, 3, 4654; AIX-NEXT: xxsel 1, 1, 35, 34655; AIX-NEXT: xvcmpeqdp 34, 0, 36656; AIX-NEXT: xxsel 34, 0, 1, 34657; AIX-NEXT: blr658entry:659 %m = call <2 x double> @llvm.maximum.v2f64(<2 x double> %a, <2 x double> %b)660 ret <2 x double> %m661}662 663declare float @llvm.maximum.f32(float, float)664declare double @llvm.maximum.f64(double, double)665declare <4 x float> @llvm.maximum.v4f32(<4 x float>, <4 x float>)666declare <2 x double> @llvm.maximum.v2f64(<2 x double>, <2 x double>)667 668declare float @llvm.minimum.f32(float, float)669declare double @llvm.minimum.f64(double, double)670declare <4 x float> @llvm.minimum.v4f32(<4 x float>, <4 x float>)671declare <2 x double> @llvm.minimum.v2f64(<2 x double>, <2 x double>)672