brintos

brintos / llvm-project-archived public Read only

0
0
Text · 37.6 KiB · 7d02414 Raw
1150 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \3; RUN:   -mcpu=pwr9 -mtriple=powerpc64le < %s | FileCheck %s --check-prefix=PWR9LE4; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \5; RUN:   -mcpu=pwr9 -mtriple=powerpc64 < %s | FileCheck %s --check-prefix=PWR9BE6; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \7; RUN:   -mcpu=pwr10 -mattr=-paired-vector-memops -mtriple=powerpc64le < %s | \8; RUN:   FileCheck %s --check-prefix=PWR10LE9; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \10; RUN:   -mcpu=pwr10 -mattr=-paired-vector-memops -mtriple=powerpc64 < %s | \11; RUN:   FileCheck %s --check-prefix=PWR10BE12 13;;14;; Vectors of f3215;;16define dso_local float @v2f32(<2 x float> %a) local_unnamed_addr #0 {17; PWR9LE-LABEL: v2f32:18; PWR9LE:       # %bb.0: # %entry19; PWR9LE-NEXT:    xxswapd vs0, v220; PWR9LE-NEXT:    xxsldwi vs1, v2, v2, 321; PWR9LE-NEXT:    xscvspdpn f0, vs022; PWR9LE-NEXT:    xscvspdpn f1, vs123; PWR9LE-NEXT:    xsmaxdp f1, f1, f024; PWR9LE-NEXT:    blr25;26; PWR9BE-LABEL: v2f32:27; PWR9BE:       # %bb.0: # %entry28; PWR9BE-NEXT:    xxsldwi vs1, v2, v2, 129; PWR9BE-NEXT:    xscvspdpn f0, v230; PWR9BE-NEXT:    xscvspdpn f1, vs131; PWR9BE-NEXT:    xsmaxdp f1, f0, f132; PWR9BE-NEXT:    blr33;34; PWR10LE-LABEL: v2f32:35; PWR10LE:       # %bb.0: # %entry36; PWR10LE-NEXT:    xxswapd vs0, v237; PWR10LE-NEXT:    xxsldwi vs1, v2, v2, 338; PWR10LE-NEXT:    xscvspdpn f0, vs039; PWR10LE-NEXT:    xscvspdpn f1, vs140; PWR10LE-NEXT:    xsmaxdp f1, f1, f041; PWR10LE-NEXT:    blr42;43; PWR10BE-LABEL: v2f32:44; PWR10BE:       # %bb.0: # %entry45; PWR10BE-NEXT:    xxsldwi vs1, v2, v2, 146; PWR10BE-NEXT:    xscvspdpn f0, v247; PWR10BE-NEXT:    xscvspdpn f1, vs148; PWR10BE-NEXT:    xsmaxdp f1, f0, f149; PWR10BE-NEXT:    blr50entry:51  %0 = call float @llvm.vector.reduce.fmax.v2f32(<2 x float> %a)52  ret float %053}54 55define dso_local float @v2f32_fast(<2 x float> %a) local_unnamed_addr #0 {56; PWR9LE-LABEL: v2f32_fast:57; PWR9LE:       # %bb.0: # %entry58; PWR9LE-NEXT:    xxspltw vs0, v2, 259; PWR9LE-NEXT:    xvmaxsp vs0, v2, vs060; PWR9LE-NEXT:    xxsldwi vs0, vs0, vs0, 361; PWR9LE-NEXT:    xscvspdpn f1, vs062; PWR9LE-NEXT:    blr63;64; PWR9BE-LABEL: v2f32_fast:65; PWR9BE:       # %bb.0: # %entry66; PWR9BE-NEXT:    xxspltw vs0, v2, 167; PWR9BE-NEXT:    xvmaxsp vs0, v2, vs068; PWR9BE-NEXT:    xscvspdpn f1, vs069; PWR9BE-NEXT:    blr70;71; PWR10LE-LABEL: v2f32_fast:72; PWR10LE:       # %bb.0: # %entry73; PWR10LE-NEXT:    xxspltw vs0, v2, 274; PWR10LE-NEXT:    xvmaxsp vs0, v2, vs075; PWR10LE-NEXT:    xxsldwi vs0, vs0, vs0, 376; PWR10LE-NEXT:    xscvspdpn f1, vs077; PWR10LE-NEXT:    blr78;79; PWR10BE-LABEL: v2f32_fast:80; PWR10BE:       # %bb.0: # %entry81; PWR10BE-NEXT:    xxspltw vs0, v2, 182; PWR10BE-NEXT:    xvmaxsp vs0, v2, vs083; PWR10BE-NEXT:    xscvspdpn f1, vs084; PWR10BE-NEXT:    blr85entry:86  %0 = call fast float @llvm.vector.reduce.fmax.v2f32(<2 x float> %a)87  ret float %088}89 90define dso_local float @v4f32(<4 x float> %a) local_unnamed_addr #0 {91; PWR9LE-LABEL: v4f32:92; PWR9LE:       # %bb.0: # %entry93; PWR9LE-NEXT:    xxsldwi vs2, v2, v2, 394; PWR9LE-NEXT:    xxswapd vs3, v295; PWR9LE-NEXT:    xscvspdpn f0, v296; PWR9LE-NEXT:    xscvspdpn f2, vs297; PWR9LE-NEXT:    xxsldwi vs1, v2, v2, 198; PWR9LE-NEXT:    xscvspdpn f3, vs399; PWR9LE-NEXT:    xscvspdpn f1, vs1100; PWR9LE-NEXT:    xsmaxdp f2, f2, f3101; PWR9LE-NEXT:    xsmaxdp f1, f2, f1102; PWR9LE-NEXT:    xsmaxdp f1, f1, f0103; PWR9LE-NEXT:    blr104;105; PWR9BE-LABEL: v4f32:106; PWR9BE:       # %bb.0: # %entry107; PWR9BE-NEXT:    xxsldwi vs2, v2, v2, 1108; PWR9BE-NEXT:    xxswapd vs1, v2109; PWR9BE-NEXT:    xscvspdpn f3, v2110; PWR9BE-NEXT:    xscvspdpn f2, vs2111; PWR9BE-NEXT:    xxsldwi vs0, v2, v2, 3112; PWR9BE-NEXT:    xscvspdpn f1, vs1113; PWR9BE-NEXT:    xscvspdpn f0, vs0114; PWR9BE-NEXT:    xsmaxdp f2, f3, f2115; PWR9BE-NEXT:    xsmaxdp f1, f2, f1116; PWR9BE-NEXT:    xsmaxdp f1, f1, f0117; PWR9BE-NEXT:    blr118;119; PWR10LE-LABEL: v4f32:120; PWR10LE:       # %bb.0: # %entry121; PWR10LE-NEXT:    xxsldwi vs2, v2, v2, 3122; PWR10LE-NEXT:    xxswapd vs3, v2123; PWR10LE-NEXT:    xxsldwi vs1, v2, v2, 1124; PWR10LE-NEXT:    xscvspdpn f0, v2125; PWR10LE-NEXT:    xscvspdpn f2, vs2126; PWR10LE-NEXT:    xscvspdpn f3, vs3127; PWR10LE-NEXT:    xscvspdpn f1, vs1128; PWR10LE-NEXT:    xsmaxdp f2, f2, f3129; PWR10LE-NEXT:    xsmaxdp f1, f2, f1130; PWR10LE-NEXT:    xsmaxdp f1, f1, f0131; PWR10LE-NEXT:    blr132;133; PWR10BE-LABEL: v4f32:134; PWR10BE:       # %bb.0: # %entry135; PWR10BE-NEXT:    xxsldwi vs2, v2, v2, 1136; PWR10BE-NEXT:    xxswapd vs1, v2137; PWR10BE-NEXT:    xscvspdpn f3, v2138; PWR10BE-NEXT:    xxsldwi vs0, v2, v2, 3139; PWR10BE-NEXT:    xscvspdpn f2, vs2140; PWR10BE-NEXT:    xscvspdpn f1, vs1141; PWR10BE-NEXT:    xscvspdpn f0, vs0142; PWR10BE-NEXT:    xsmaxdp f2, f3, f2143; PWR10BE-NEXT:    xsmaxdp f1, f2, f1144; PWR10BE-NEXT:    xsmaxdp f1, f1, f0145; PWR10BE-NEXT:    blr146entry:147  %0 = call float @llvm.vector.reduce.fmax.v4f32(<4 x float> %a)148  ret float %0149}150 151define dso_local float @v4f32_fast(<4 x float> %a) local_unnamed_addr #0 {152; PWR9LE-LABEL: v4f32_fast:153; PWR9LE:       # %bb.0: # %entry154; PWR9LE-NEXT:    xxswapd v3, v2155; PWR9LE-NEXT:    xvmaxsp vs0, v2, v3156; PWR9LE-NEXT:    xxspltw vs1, vs0, 2157; PWR9LE-NEXT:    xvmaxsp vs0, vs0, vs1158; PWR9LE-NEXT:    xxsldwi vs0, vs0, vs0, 3159; PWR9LE-NEXT:    xscvspdpn f1, vs0160; PWR9LE-NEXT:    blr161;162; PWR9BE-LABEL: v4f32_fast:163; PWR9BE:       # %bb.0: # %entry164; PWR9BE-NEXT:    xxswapd v3, v2165; PWR9BE-NEXT:    xvmaxsp vs0, v2, v3166; PWR9BE-NEXT:    xxspltw vs1, vs0, 1167; PWR9BE-NEXT:    xvmaxsp vs0, vs0, vs1168; PWR9BE-NEXT:    xscvspdpn f1, vs0169; PWR9BE-NEXT:    blr170;171; PWR10LE-LABEL: v4f32_fast:172; PWR10LE:       # %bb.0: # %entry173; PWR10LE-NEXT:    xxswapd v3, v2174; PWR10LE-NEXT:    xvmaxsp vs0, v2, v3175; PWR10LE-NEXT:    xxspltw vs1, vs0, 2176; PWR10LE-NEXT:    xvmaxsp vs0, vs0, vs1177; PWR10LE-NEXT:    xxsldwi vs0, vs0, vs0, 3178; PWR10LE-NEXT:    xscvspdpn f1, vs0179; PWR10LE-NEXT:    blr180;181; PWR10BE-LABEL: v4f32_fast:182; PWR10BE:       # %bb.0: # %entry183; PWR10BE-NEXT:    xxswapd v3, v2184; PWR10BE-NEXT:    xvmaxsp vs0, v2, v3185; PWR10BE-NEXT:    xxspltw vs1, vs0, 1186; PWR10BE-NEXT:    xvmaxsp vs0, vs0, vs1187; PWR10BE-NEXT:    xscvspdpn f1, vs0188; PWR10BE-NEXT:    blr189entry:190  %0 = call fast float @llvm.vector.reduce.fmax.v4f32(<4 x float> %a)191  ret float %0192}193 194define dso_local float @v8f32(<8 x float> %a) local_unnamed_addr #0 {195; PWR9LE-LABEL: v8f32:196; PWR9LE:       # %bb.0: # %entry197; PWR9LE-NEXT:    xvmaxsp vs0, v2, v3198; PWR9LE-NEXT:    xxswapd vs1, vs0199; PWR9LE-NEXT:    xxsldwi vs2, vs0, vs0, 3200; PWR9LE-NEXT:    xscvspdpn f1, vs1201; PWR9LE-NEXT:    xscvspdpn f2, vs2202; PWR9LE-NEXT:    xsmaxdp f1, f2, f1203; PWR9LE-NEXT:    xxsldwi vs2, vs0, vs0, 1204; PWR9LE-NEXT:    xscvspdpn f0, vs0205; PWR9LE-NEXT:    xscvspdpn f2, vs2206; PWR9LE-NEXT:    xsmaxdp f1, f1, f2207; PWR9LE-NEXT:    xsmaxdp f1, f1, f0208; PWR9LE-NEXT:    blr209;210; PWR9BE-LABEL: v8f32:211; PWR9BE:       # %bb.0: # %entry212; PWR9BE-NEXT:    xvmaxsp vs0, v2, v3213; PWR9BE-NEXT:    xxsldwi vs2, vs0, vs0, 1214; PWR9BE-NEXT:    xscvspdpn f1, vs0215; PWR9BE-NEXT:    xscvspdpn f2, vs2216; PWR9BE-NEXT:    xsmaxdp f1, f1, f2217; PWR9BE-NEXT:    xxswapd vs2, vs0218; PWR9BE-NEXT:    xxsldwi vs0, vs0, vs0, 3219; PWR9BE-NEXT:    xscvspdpn f2, vs2220; PWR9BE-NEXT:    xscvspdpn f0, vs0221; PWR9BE-NEXT:    xsmaxdp f1, f1, f2222; PWR9BE-NEXT:    xsmaxdp f1, f1, f0223; PWR9BE-NEXT:    blr224;225; PWR10LE-LABEL: v8f32:226; PWR10LE:       # %bb.0: # %entry227; PWR10LE-NEXT:    xvmaxsp vs0, v2, v3228; PWR10LE-NEXT:    xxswapd vs1, vs0229; PWR10LE-NEXT:    xxsldwi vs2, vs0, vs0, 3230; PWR10LE-NEXT:    xscvspdpn f1, vs1231; PWR10LE-NEXT:    xscvspdpn f2, vs2232; PWR10LE-NEXT:    xsmaxdp f1, f2, f1233; PWR10LE-NEXT:    xxsldwi vs2, vs0, vs0, 1234; PWR10LE-NEXT:    xscvspdpn f0, vs0235; PWR10LE-NEXT:    xscvspdpn f2, vs2236; PWR10LE-NEXT:    xsmaxdp f1, f1, f2237; PWR10LE-NEXT:    xsmaxdp f1, f1, f0238; PWR10LE-NEXT:    blr239;240; PWR10BE-LABEL: v8f32:241; PWR10BE:       # %bb.0: # %entry242; PWR10BE-NEXT:    xvmaxsp vs0, v2, v3243; PWR10BE-NEXT:    xxsldwi vs2, vs0, vs0, 1244; PWR10BE-NEXT:    xscvspdpn f1, vs0245; PWR10BE-NEXT:    xscvspdpn f2, vs2246; PWR10BE-NEXT:    xsmaxdp f1, f1, f2247; PWR10BE-NEXT:    xxswapd vs2, vs0248; PWR10BE-NEXT:    xxsldwi vs0, vs0, vs0, 3249; PWR10BE-NEXT:    xscvspdpn f2, vs2250; PWR10BE-NEXT:    xscvspdpn f0, vs0251; PWR10BE-NEXT:    xsmaxdp f1, f1, f2252; PWR10BE-NEXT:    xsmaxdp f1, f1, f0253; PWR10BE-NEXT:    blr254entry:255  %0 = call float @llvm.vector.reduce.fmax.v8f32(<8 x float> %a)256  ret float %0257}258 259define dso_local float @v8f32_fast(<8 x float> %a) local_unnamed_addr #0 {260; PWR9LE-LABEL: v8f32_fast:261; PWR9LE:       # %bb.0: # %entry262; PWR9LE-NEXT:    xvmaxsp vs0, v2, v3263; PWR9LE-NEXT:    xxswapd v2, vs0264; PWR9LE-NEXT:    xvmaxsp vs0, vs0, v2265; PWR9LE-NEXT:    xxspltw vs1, vs0, 2266; PWR9LE-NEXT:    xvmaxsp vs0, vs0, vs1267; PWR9LE-NEXT:    xxsldwi vs0, vs0, vs0, 3268; PWR9LE-NEXT:    xscvspdpn f1, vs0269; PWR9LE-NEXT:    blr270;271; PWR9BE-LABEL: v8f32_fast:272; PWR9BE:       # %bb.0: # %entry273; PWR9BE-NEXT:    xvmaxsp vs0, v2, v3274; PWR9BE-NEXT:    xxswapd v2, vs0275; PWR9BE-NEXT:    xvmaxsp vs0, vs0, v2276; PWR9BE-NEXT:    xxspltw vs1, vs0, 1277; PWR9BE-NEXT:    xvmaxsp vs0, vs0, vs1278; PWR9BE-NEXT:    xscvspdpn f1, vs0279; PWR9BE-NEXT:    blr280;281; PWR10LE-LABEL: v8f32_fast:282; PWR10LE:       # %bb.0: # %entry283; PWR10LE-NEXT:    xvmaxsp vs0, v2, v3284; PWR10LE-NEXT:    xxswapd v2, vs0285; PWR10LE-NEXT:    xvmaxsp vs0, vs0, v2286; PWR10LE-NEXT:    xxspltw vs1, vs0, 2287; PWR10LE-NEXT:    xvmaxsp vs0, vs0, vs1288; PWR10LE-NEXT:    xxsldwi vs0, vs0, vs0, 3289; PWR10LE-NEXT:    xscvspdpn f1, vs0290; PWR10LE-NEXT:    blr291;292; PWR10BE-LABEL: v8f32_fast:293; PWR10BE:       # %bb.0: # %entry294; PWR10BE-NEXT:    xvmaxsp vs0, v2, v3295; PWR10BE-NEXT:    xxswapd v2, vs0296; PWR10BE-NEXT:    xvmaxsp vs0, vs0, v2297; PWR10BE-NEXT:    xxspltw vs1, vs0, 1298; PWR10BE-NEXT:    xvmaxsp vs0, vs0, vs1299; PWR10BE-NEXT:    xscvspdpn f1, vs0300; PWR10BE-NEXT:    blr301entry:302  %0 = call fast float @llvm.vector.reduce.fmax.v8f32(<8 x float> %a)303  ret float %0304}305 306define dso_local float @v16f32(<16 x float> %a) local_unnamed_addr #0 {307; PWR9LE-LABEL: v16f32:308; PWR9LE:       # %bb.0: # %entry309; PWR9LE-NEXT:    xvmaxsp vs0, v3, v5310; PWR9LE-NEXT:    xvmaxsp vs1, v2, v4311; PWR9LE-NEXT:    xvmaxsp vs0, vs1, vs0312; PWR9LE-NEXT:    xxswapd vs1, vs0313; PWR9LE-NEXT:    xxsldwi vs2, vs0, vs0, 3314; PWR9LE-NEXT:    xscvspdpn f1, vs1315; PWR9LE-NEXT:    xscvspdpn f2, vs2316; PWR9LE-NEXT:    xsmaxdp f1, f2, f1317; PWR9LE-NEXT:    xxsldwi vs2, vs0, vs0, 1318; PWR9LE-NEXT:    xscvspdpn f0, vs0319; PWR9LE-NEXT:    xscvspdpn f2, vs2320; PWR9LE-NEXT:    xsmaxdp f1, f1, f2321; PWR9LE-NEXT:    xsmaxdp f1, f1, f0322; PWR9LE-NEXT:    blr323;324; PWR9BE-LABEL: v16f32:325; PWR9BE:       # %bb.0: # %entry326; PWR9BE-NEXT:    xvmaxsp vs0, v3, v5327; PWR9BE-NEXT:    xvmaxsp vs1, v2, v4328; PWR9BE-NEXT:    xvmaxsp vs0, vs1, vs0329; PWR9BE-NEXT:    xxsldwi vs2, vs0, vs0, 1330; PWR9BE-NEXT:    xscvspdpn f1, vs0331; PWR9BE-NEXT:    xscvspdpn f2, vs2332; PWR9BE-NEXT:    xsmaxdp f1, f1, f2333; PWR9BE-NEXT:    xxswapd vs2, vs0334; PWR9BE-NEXT:    xxsldwi vs0, vs0, vs0, 3335; PWR9BE-NEXT:    xscvspdpn f2, vs2336; PWR9BE-NEXT:    xscvspdpn f0, vs0337; PWR9BE-NEXT:    xsmaxdp f1, f1, f2338; PWR9BE-NEXT:    xsmaxdp f1, f1, f0339; PWR9BE-NEXT:    blr340;341; PWR10LE-LABEL: v16f32:342; PWR10LE:       # %bb.0: # %entry343; PWR10LE-NEXT:    xvmaxsp vs0, v3, v5344; PWR10LE-NEXT:    xvmaxsp vs1, v2, v4345; PWR10LE-NEXT:    xvmaxsp vs0, vs1, vs0346; PWR10LE-NEXT:    xxswapd vs1, vs0347; PWR10LE-NEXT:    xxsldwi vs2, vs0, vs0, 3348; PWR10LE-NEXT:    xscvspdpn f1, vs1349; PWR10LE-NEXT:    xscvspdpn f2, vs2350; PWR10LE-NEXT:    xsmaxdp f1, f2, f1351; PWR10LE-NEXT:    xxsldwi vs2, vs0, vs0, 1352; PWR10LE-NEXT:    xscvspdpn f0, vs0353; PWR10LE-NEXT:    xscvspdpn f2, vs2354; PWR10LE-NEXT:    xsmaxdp f1, f1, f2355; PWR10LE-NEXT:    xsmaxdp f1, f1, f0356; PWR10LE-NEXT:    blr357;358; PWR10BE-LABEL: v16f32:359; PWR10BE:       # %bb.0: # %entry360; PWR10BE-NEXT:    xvmaxsp vs0, v3, v5361; PWR10BE-NEXT:    xvmaxsp vs1, v2, v4362; PWR10BE-NEXT:    xvmaxsp vs0, vs1, vs0363; PWR10BE-NEXT:    xxsldwi vs2, vs0, vs0, 1364; PWR10BE-NEXT:    xscvspdpn f1, vs0365; PWR10BE-NEXT:    xscvspdpn f2, vs2366; PWR10BE-NEXT:    xsmaxdp f1, f1, f2367; PWR10BE-NEXT:    xxswapd vs2, vs0368; PWR10BE-NEXT:    xxsldwi vs0, vs0, vs0, 3369; PWR10BE-NEXT:    xscvspdpn f2, vs2370; PWR10BE-NEXT:    xscvspdpn f0, vs0371; PWR10BE-NEXT:    xsmaxdp f1, f1, f2372; PWR10BE-NEXT:    xsmaxdp f1, f1, f0373; PWR10BE-NEXT:    blr374entry:375  %0 = call float @llvm.vector.reduce.fmax.v16f32(<16 x float> %a)376  ret float %0377}378 379define dso_local float @v16f32_fast(<16 x float> %a) local_unnamed_addr #0 {380; PWR9LE-LABEL: v16f32_fast:381; PWR9LE:       # %bb.0: # %entry382; PWR9LE-NEXT:    xvmaxsp vs0, v3, v5383; PWR9LE-NEXT:    xvmaxsp vs1, v2, v4384; PWR9LE-NEXT:    xvmaxsp vs0, vs1, vs0385; PWR9LE-NEXT:    xxswapd v2, vs0386; PWR9LE-NEXT:    xvmaxsp vs0, vs0, v2387; PWR9LE-NEXT:    xxspltw vs1, vs0, 2388; PWR9LE-NEXT:    xvmaxsp vs0, vs0, vs1389; PWR9LE-NEXT:    xxsldwi vs0, vs0, vs0, 3390; PWR9LE-NEXT:    xscvspdpn f1, vs0391; PWR9LE-NEXT:    blr392;393; PWR9BE-LABEL: v16f32_fast:394; PWR9BE:       # %bb.0: # %entry395; PWR9BE-NEXT:    xvmaxsp vs0, v3, v5396; PWR9BE-NEXT:    xvmaxsp vs1, v2, v4397; PWR9BE-NEXT:    xvmaxsp vs0, vs1, vs0398; PWR9BE-NEXT:    xxswapd v2, vs0399; PWR9BE-NEXT:    xvmaxsp vs0, vs0, v2400; PWR9BE-NEXT:    xxspltw vs1, vs0, 1401; PWR9BE-NEXT:    xvmaxsp vs0, vs0, vs1402; PWR9BE-NEXT:    xscvspdpn f1, vs0403; PWR9BE-NEXT:    blr404;405; PWR10LE-LABEL: v16f32_fast:406; PWR10LE:       # %bb.0: # %entry407; PWR10LE-NEXT:    xvmaxsp vs0, v3, v5408; PWR10LE-NEXT:    xvmaxsp vs1, v2, v4409; PWR10LE-NEXT:    xvmaxsp vs0, vs1, vs0410; PWR10LE-NEXT:    xxswapd v2, vs0411; PWR10LE-NEXT:    xvmaxsp vs0, vs0, v2412; PWR10LE-NEXT:    xxspltw vs1, vs0, 2413; PWR10LE-NEXT:    xvmaxsp vs0, vs0, vs1414; PWR10LE-NEXT:    xxsldwi vs0, vs0, vs0, 3415; PWR10LE-NEXT:    xscvspdpn f1, vs0416; PWR10LE-NEXT:    blr417;418; PWR10BE-LABEL: v16f32_fast:419; PWR10BE:       # %bb.0: # %entry420; PWR10BE-NEXT:    xvmaxsp vs0, v3, v5421; PWR10BE-NEXT:    xvmaxsp vs1, v2, v4422; PWR10BE-NEXT:    xvmaxsp vs0, vs1, vs0423; PWR10BE-NEXT:    xxswapd v2, vs0424; PWR10BE-NEXT:    xvmaxsp vs0, vs0, v2425; PWR10BE-NEXT:    xxspltw vs1, vs0, 1426; PWR10BE-NEXT:    xvmaxsp vs0, vs0, vs1427; PWR10BE-NEXT:    xscvspdpn f1, vs0428; PWR10BE-NEXT:    blr429entry:430  %0 = call fast float @llvm.vector.reduce.fmax.v16f32(<16 x float> %a)431  ret float %0432}433 434define dso_local float @v32f32(<32 x float> %a) local_unnamed_addr #0 {435; PWR9LE-LABEL: v32f32:436; PWR9LE:       # %bb.0: # %entry437; PWR9LE-NEXT:    xvmaxsp vs0, v5, v9438; PWR9LE-NEXT:    xvmaxsp vs1, v3, v7439; PWR9LE-NEXT:    xvmaxsp vs2, v2, v6440; PWR9LE-NEXT:    xvmaxsp vs0, vs1, vs0441; PWR9LE-NEXT:    xvmaxsp vs1, v4, v8442; PWR9LE-NEXT:    xvmaxsp vs1, vs2, vs1443; PWR9LE-NEXT:    xvmaxsp vs0, vs1, vs0444; PWR9LE-NEXT:    xxswapd vs1, vs0445; PWR9LE-NEXT:    xxsldwi vs2, vs0, vs0, 3446; PWR9LE-NEXT:    xscvspdpn f1, vs1447; PWR9LE-NEXT:    xscvspdpn f2, vs2448; PWR9LE-NEXT:    xsmaxdp f1, f2, f1449; PWR9LE-NEXT:    xxsldwi vs2, vs0, vs0, 1450; PWR9LE-NEXT:    xscvspdpn f0, vs0451; PWR9LE-NEXT:    xscvspdpn f2, vs2452; PWR9LE-NEXT:    xsmaxdp f1, f1, f2453; PWR9LE-NEXT:    xsmaxdp f1, f1, f0454; PWR9LE-NEXT:    blr455;456; PWR9BE-LABEL: v32f32:457; PWR9BE:       # %bb.0: # %entry458; PWR9BE-NEXT:    xvmaxsp vs0, v5, v9459; PWR9BE-NEXT:    xvmaxsp vs1, v3, v7460; PWR9BE-NEXT:    xvmaxsp vs2, v2, v6461; PWR9BE-NEXT:    xvmaxsp vs0, vs1, vs0462; PWR9BE-NEXT:    xvmaxsp vs1, v4, v8463; PWR9BE-NEXT:    xvmaxsp vs1, vs2, vs1464; PWR9BE-NEXT:    xvmaxsp vs0, vs1, vs0465; PWR9BE-NEXT:    xxsldwi vs2, vs0, vs0, 1466; PWR9BE-NEXT:    xscvspdpn f1, vs0467; PWR9BE-NEXT:    xscvspdpn f2, vs2468; PWR9BE-NEXT:    xsmaxdp f1, f1, f2469; PWR9BE-NEXT:    xxswapd vs2, vs0470; PWR9BE-NEXT:    xxsldwi vs0, vs0, vs0, 3471; PWR9BE-NEXT:    xscvspdpn f2, vs2472; PWR9BE-NEXT:    xscvspdpn f0, vs0473; PWR9BE-NEXT:    xsmaxdp f1, f1, f2474; PWR9BE-NEXT:    xsmaxdp f1, f1, f0475; PWR9BE-NEXT:    blr476;477; PWR10LE-LABEL: v32f32:478; PWR10LE:       # %bb.0: # %entry479; PWR10LE-NEXT:    xvmaxsp vs0, v5, v9480; PWR10LE-NEXT:    xvmaxsp vs1, v3, v7481; PWR10LE-NEXT:    xvmaxsp vs2, v2, v6482; PWR10LE-NEXT:    xvmaxsp vs0, vs1, vs0483; PWR10LE-NEXT:    xvmaxsp vs1, v4, v8484; PWR10LE-NEXT:    xvmaxsp vs1, vs2, vs1485; PWR10LE-NEXT:    xvmaxsp vs0, vs1, vs0486; PWR10LE-NEXT:    xxswapd vs1, vs0487; PWR10LE-NEXT:    xxsldwi vs2, vs0, vs0, 3488; PWR10LE-NEXT:    xscvspdpn f1, vs1489; PWR10LE-NEXT:    xscvspdpn f2, vs2490; PWR10LE-NEXT:    xsmaxdp f1, f2, f1491; PWR10LE-NEXT:    xxsldwi vs2, vs0, vs0, 1492; PWR10LE-NEXT:    xscvspdpn f0, vs0493; PWR10LE-NEXT:    xscvspdpn f2, vs2494; PWR10LE-NEXT:    xsmaxdp f1, f1, f2495; PWR10LE-NEXT:    xsmaxdp f1, f1, f0496; PWR10LE-NEXT:    blr497;498; PWR10BE-LABEL: v32f32:499; PWR10BE:       # %bb.0: # %entry500; PWR10BE-NEXT:    xvmaxsp vs0, v5, v9501; PWR10BE-NEXT:    xvmaxsp vs1, v3, v7502; PWR10BE-NEXT:    xvmaxsp vs2, v2, v6503; PWR10BE-NEXT:    xvmaxsp vs0, vs1, vs0504; PWR10BE-NEXT:    xvmaxsp vs1, v4, v8505; PWR10BE-NEXT:    xvmaxsp vs1, vs2, vs1506; PWR10BE-NEXT:    xvmaxsp vs0, vs1, vs0507; PWR10BE-NEXT:    xxsldwi vs2, vs0, vs0, 1508; PWR10BE-NEXT:    xscvspdpn f1, vs0509; PWR10BE-NEXT:    xscvspdpn f2, vs2510; PWR10BE-NEXT:    xsmaxdp f1, f1, f2511; PWR10BE-NEXT:    xxswapd vs2, vs0512; PWR10BE-NEXT:    xxsldwi vs0, vs0, vs0, 3513; PWR10BE-NEXT:    xscvspdpn f2, vs2514; PWR10BE-NEXT:    xscvspdpn f0, vs0515; PWR10BE-NEXT:    xsmaxdp f1, f1, f2516; PWR10BE-NEXT:    xsmaxdp f1, f1, f0517; PWR10BE-NEXT:    blr518entry:519  %0 = call float @llvm.vector.reduce.fmax.v32f32(<32 x float> %a)520  ret float %0521}522 523define dso_local float @v32f32_fast(<32 x float> %a) local_unnamed_addr #0 {524; PWR9LE-LABEL: v32f32_fast:525; PWR9LE:       # %bb.0: # %entry526; PWR9LE-NEXT:    xvmaxsp vs0, v4, v8527; PWR9LE-NEXT:    xvmaxsp vs1, v2, v6528; PWR9LE-NEXT:    xvmaxsp vs2, v5, v9529; PWR9LE-NEXT:    xvmaxsp vs3, v3, v7530; PWR9LE-NEXT:    xvmaxsp vs2, vs3, vs2531; PWR9LE-NEXT:    xvmaxsp vs0, vs1, vs0532; PWR9LE-NEXT:    xvmaxsp vs0, vs0, vs2533; PWR9LE-NEXT:    xxswapd v2, vs0534; PWR9LE-NEXT:    xvmaxsp vs0, vs0, v2535; PWR9LE-NEXT:    xxspltw vs1, vs0, 2536; PWR9LE-NEXT:    xvmaxsp vs0, vs0, vs1537; PWR9LE-NEXT:    xxsldwi vs0, vs0, vs0, 3538; PWR9LE-NEXT:    xscvspdpn f1, vs0539; PWR9LE-NEXT:    blr540;541; PWR9BE-LABEL: v32f32_fast:542; PWR9BE:       # %bb.0: # %entry543; PWR9BE-NEXT:    xvmaxsp vs0, v4, v8544; PWR9BE-NEXT:    xvmaxsp vs1, v2, v6545; PWR9BE-NEXT:    xvmaxsp vs2, v5, v9546; PWR9BE-NEXT:    xvmaxsp vs3, v3, v7547; PWR9BE-NEXT:    xvmaxsp vs2, vs3, vs2548; PWR9BE-NEXT:    xvmaxsp vs0, vs1, vs0549; PWR9BE-NEXT:    xvmaxsp vs0, vs0, vs2550; PWR9BE-NEXT:    xxswapd v2, vs0551; PWR9BE-NEXT:    xvmaxsp vs0, vs0, v2552; PWR9BE-NEXT:    xxspltw vs1, vs0, 1553; PWR9BE-NEXT:    xvmaxsp vs0, vs0, vs1554; PWR9BE-NEXT:    xscvspdpn f1, vs0555; PWR9BE-NEXT:    blr556;557; PWR10LE-LABEL: v32f32_fast:558; PWR10LE:       # %bb.0: # %entry559; PWR10LE-NEXT:    xvmaxsp vs0, v4, v8560; PWR10LE-NEXT:    xvmaxsp vs1, v2, v6561; PWR10LE-NEXT:    xvmaxsp vs2, v5, v9562; PWR10LE-NEXT:    xvmaxsp vs3, v3, v7563; PWR10LE-NEXT:    xvmaxsp vs2, vs3, vs2564; PWR10LE-NEXT:    xvmaxsp vs0, vs1, vs0565; PWR10LE-NEXT:    xvmaxsp vs0, vs0, vs2566; PWR10LE-NEXT:    xxswapd v2, vs0567; PWR10LE-NEXT:    xvmaxsp vs0, vs0, v2568; PWR10LE-NEXT:    xxspltw vs1, vs0, 2569; PWR10LE-NEXT:    xvmaxsp vs0, vs0, vs1570; PWR10LE-NEXT:    xxsldwi vs0, vs0, vs0, 3571; PWR10LE-NEXT:    xscvspdpn f1, vs0572; PWR10LE-NEXT:    blr573;574; PWR10BE-LABEL: v32f32_fast:575; PWR10BE:       # %bb.0: # %entry576; PWR10BE-NEXT:    xvmaxsp vs0, v4, v8577; PWR10BE-NEXT:    xvmaxsp vs1, v2, v6578; PWR10BE-NEXT:    xvmaxsp vs2, v5, v9579; PWR10BE-NEXT:    xvmaxsp vs3, v3, v7580; PWR10BE-NEXT:    xvmaxsp vs2, vs3, vs2581; PWR10BE-NEXT:    xvmaxsp vs0, vs1, vs0582; PWR10BE-NEXT:    xvmaxsp vs0, vs0, vs2583; PWR10BE-NEXT:    xxswapd v2, vs0584; PWR10BE-NEXT:    xvmaxsp vs0, vs0, v2585; PWR10BE-NEXT:    xxspltw vs1, vs0, 1586; PWR10BE-NEXT:    xvmaxsp vs0, vs0, vs1587; PWR10BE-NEXT:    xscvspdpn f1, vs0588; PWR10BE-NEXT:    blr589entry:590  %0 = call fast float @llvm.vector.reduce.fmax.v32f32(<32 x float> %a)591  ret float %0592}593 594declare float @llvm.vector.reduce.fmax.v2f32(<2 x float>) #0595declare float @llvm.vector.reduce.fmax.v4f32(<4 x float>) #0596declare float @llvm.vector.reduce.fmax.v8f32(<8 x float>) #0597declare float @llvm.vector.reduce.fmax.v16f32(<16 x float>) #0598declare float @llvm.vector.reduce.fmax.v32f32(<32 x float>) #0599 600;;601;; Vectors of f64602;;603define dso_local double @v2f64(<2 x double> %a) local_unnamed_addr #0 {604; PWR9LE-LABEL: v2f64:605; PWR9LE:       # %bb.0: # %entry606; PWR9LE-NEXT:    xxswapd vs0, v2607; PWR9LE-NEXT:    xsmaxdp f1, f0, v2608; PWR9LE-NEXT:    blr609;610; PWR9BE-LABEL: v2f64:611; PWR9BE:       # %bb.0: # %entry612; PWR9BE-NEXT:    xxswapd vs0, v2613; PWR9BE-NEXT:    xsmaxdp f1, v2, f0614; PWR9BE-NEXT:    blr615;616; PWR10LE-LABEL: v2f64:617; PWR10LE:       # %bb.0: # %entry618; PWR10LE-NEXT:    xxswapd vs0, v2619; PWR10LE-NEXT:    xsmaxdp f1, f0, v2620; PWR10LE-NEXT:    blr621;622; PWR10BE-LABEL: v2f64:623; PWR10BE:       # %bb.0: # %entry624; PWR10BE-NEXT:    xxswapd vs0, v2625; PWR10BE-NEXT:    xsmaxdp f1, v2, f0626; PWR10BE-NEXT:    blr627entry:628  %0 = call double @llvm.vector.reduce.fmax.v2f64(<2 x double> %a)629  ret double %0630}631 632define dso_local double @v2f64_fast(<2 x double> %a) local_unnamed_addr #0 {633; PWR9LE-LABEL: v2f64_fast:634; PWR9LE:       # %bb.0: # %entry635; PWR9LE-NEXT:    xxswapd vs0, v2636; PWR9LE-NEXT:    xvmaxdp vs0, v2, vs0637; PWR9LE-NEXT:    xxswapd vs1, vs0638; PWR9LE-NEXT:    blr639;640; PWR9BE-LABEL: v2f64_fast:641; PWR9BE:       # %bb.0: # %entry642; PWR9BE-NEXT:    xxswapd vs0, v2643; PWR9BE-NEXT:    xvmaxdp vs1, v2, vs0644; PWR9BE-NEXT:    blr645;646; PWR10LE-LABEL: v2f64_fast:647; PWR10LE:       # %bb.0: # %entry648; PWR10LE-NEXT:    xxswapd vs0, v2649; PWR10LE-NEXT:    xvmaxdp vs0, v2, vs0650; PWR10LE-NEXT:    xxswapd vs1, vs0651; PWR10LE-NEXT:    blr652;653; PWR10BE-LABEL: v2f64_fast:654; PWR10BE:       # %bb.0: # %entry655; PWR10BE-NEXT:    xxswapd vs0, v2656; PWR10BE-NEXT:    xvmaxdp vs1, v2, vs0657; PWR10BE-NEXT:    blr658entry:659  %0 = call fast double @llvm.vector.reduce.fmax.v2f64(<2 x double> %a)660  ret double %0661}662 663define dso_local double @v4f64(<4 x double> %a) local_unnamed_addr #0 {664; PWR9LE-LABEL: v4f64:665; PWR9LE:       # %bb.0: # %entry666; PWR9LE-NEXT:    xvmaxdp vs0, v2, v3667; PWR9LE-NEXT:    xxswapd vs1, vs0668; PWR9LE-NEXT:    xsmaxdp f1, f1, f0669; PWR9LE-NEXT:    blr670;671; PWR9BE-LABEL: v4f64:672; PWR9BE:       # %bb.0: # %entry673; PWR9BE-NEXT:    xvmaxdp vs0, v2, v3674; PWR9BE-NEXT:    xxswapd vs1, vs0675; PWR9BE-NEXT:    xsmaxdp f1, f0, f1676; PWR9BE-NEXT:    blr677;678; PWR10LE-LABEL: v4f64:679; PWR10LE:       # %bb.0: # %entry680; PWR10LE-NEXT:    xvmaxdp vs0, v2, v3681; PWR10LE-NEXT:    xxswapd vs1, vs0682; PWR10LE-NEXT:    xsmaxdp f1, f1, f0683; PWR10LE-NEXT:    blr684;685; PWR10BE-LABEL: v4f64:686; PWR10BE:       # %bb.0: # %entry687; PWR10BE-NEXT:    xvmaxdp vs0, v2, v3688; PWR10BE-NEXT:    xxswapd vs1, vs0689; PWR10BE-NEXT:    xsmaxdp f1, f0, f1690; PWR10BE-NEXT:    blr691entry:692  %0 = call double @llvm.vector.reduce.fmax.v4f64(<4 x double> %a)693  ret double %0694}695 696define dso_local double @v4f64_fast(<4 x double> %a) local_unnamed_addr #0 {697; PWR9LE-LABEL: v4f64_fast:698; PWR9LE:       # %bb.0: # %entry699; PWR9LE-NEXT:    xvmaxdp vs0, v2, v3700; PWR9LE-NEXT:    xxswapd vs1, vs0701; PWR9LE-NEXT:    xvmaxdp vs0, vs0, vs1702; PWR9LE-NEXT:    xxswapd vs1, vs0703; PWR9LE-NEXT:    blr704;705; PWR9BE-LABEL: v4f64_fast:706; PWR9BE:       # %bb.0: # %entry707; PWR9BE-NEXT:    xvmaxdp vs0, v2, v3708; PWR9BE-NEXT:    xxswapd vs1, vs0709; PWR9BE-NEXT:    xvmaxdp vs1, vs0, vs1710; PWR9BE-NEXT:    blr711;712; PWR10LE-LABEL: v4f64_fast:713; PWR10LE:       # %bb.0: # %entry714; PWR10LE-NEXT:    xvmaxdp vs0, v2, v3715; PWR10LE-NEXT:    xxswapd vs1, vs0716; PWR10LE-NEXT:    xvmaxdp vs0, vs0, vs1717; PWR10LE-NEXT:    xxswapd vs1, vs0718; PWR10LE-NEXT:    blr719;720; PWR10BE-LABEL: v4f64_fast:721; PWR10BE:       # %bb.0: # %entry722; PWR10BE-NEXT:    xvmaxdp vs0, v2, v3723; PWR10BE-NEXT:    xxswapd vs1, vs0724; PWR10BE-NEXT:    xvmaxdp vs1, vs0, vs1725; PWR10BE-NEXT:    blr726entry:727  %0 = call fast double @llvm.vector.reduce.fmax.v4f64(<4 x double> %a)728  ret double %0729}730 731define dso_local double @v8f64(<8 x double> %a) local_unnamed_addr #0 {732; PWR9LE-LABEL: v8f64:733; PWR9LE:       # %bb.0: # %entry734; PWR9LE-NEXT:    xvmaxdp vs0, v3, v5735; PWR9LE-NEXT:    xvmaxdp vs1, v2, v4736; PWR9LE-NEXT:    xvmaxdp vs0, vs1, vs0737; PWR9LE-NEXT:    xxswapd vs1, vs0738; PWR9LE-NEXT:    xsmaxdp f1, f1, f0739; PWR9LE-NEXT:    blr740;741; PWR9BE-LABEL: v8f64:742; PWR9BE:       # %bb.0: # %entry743; PWR9BE-NEXT:    xvmaxdp vs0, v3, v5744; PWR9BE-NEXT:    xvmaxdp vs1, v2, v4745; PWR9BE-NEXT:    xvmaxdp vs0, vs1, vs0746; PWR9BE-NEXT:    xxswapd vs1, vs0747; PWR9BE-NEXT:    xsmaxdp f1, f0, f1748; PWR9BE-NEXT:    blr749;750; PWR10LE-LABEL: v8f64:751; PWR10LE:       # %bb.0: # %entry752; PWR10LE-NEXT:    xvmaxdp vs0, v3, v5753; PWR10LE-NEXT:    xvmaxdp vs1, v2, v4754; PWR10LE-NEXT:    xvmaxdp vs0, vs1, vs0755; PWR10LE-NEXT:    xxswapd vs1, vs0756; PWR10LE-NEXT:    xsmaxdp f1, f1, f0757; PWR10LE-NEXT:    blr758;759; PWR10BE-LABEL: v8f64:760; PWR10BE:       # %bb.0: # %entry761; PWR10BE-NEXT:    xvmaxdp vs0, v3, v5762; PWR10BE-NEXT:    xvmaxdp vs1, v2, v4763; PWR10BE-NEXT:    xvmaxdp vs0, vs1, vs0764; PWR10BE-NEXT:    xxswapd vs1, vs0765; PWR10BE-NEXT:    xsmaxdp f1, f0, f1766; PWR10BE-NEXT:    blr767entry:768  %0 = call double @llvm.vector.reduce.fmax.v8f64(<8 x double> %a)769  ret double %0770}771 772define dso_local double @v8f64_fast(<8 x double> %a) local_unnamed_addr #0 {773; PWR9LE-LABEL: v8f64_fast:774; PWR9LE:       # %bb.0: # %entry775; PWR9LE-NEXT:    xvmaxdp vs0, v3, v5776; PWR9LE-NEXT:    xvmaxdp vs1, v2, v4777; PWR9LE-NEXT:    xvmaxdp vs0, vs1, vs0778; PWR9LE-NEXT:    xxswapd vs1, vs0779; PWR9LE-NEXT:    xvmaxdp vs0, vs0, vs1780; PWR9LE-NEXT:    xxswapd vs1, vs0781; PWR9LE-NEXT:    blr782;783; PWR9BE-LABEL: v8f64_fast:784; PWR9BE:       # %bb.0: # %entry785; PWR9BE-NEXT:    xvmaxdp vs0, v3, v5786; PWR9BE-NEXT:    xvmaxdp vs1, v2, v4787; PWR9BE-NEXT:    xvmaxdp vs0, vs1, vs0788; PWR9BE-NEXT:    xxswapd vs1, vs0789; PWR9BE-NEXT:    xvmaxdp vs1, vs0, vs1790; PWR9BE-NEXT:    blr791;792; PWR10LE-LABEL: v8f64_fast:793; PWR10LE:       # %bb.0: # %entry794; PWR10LE-NEXT:    xvmaxdp vs0, v3, v5795; PWR10LE-NEXT:    xvmaxdp vs1, v2, v4796; PWR10LE-NEXT:    xvmaxdp vs0, vs1, vs0797; PWR10LE-NEXT:    xxswapd vs1, vs0798; PWR10LE-NEXT:    xvmaxdp vs0, vs0, vs1799; PWR10LE-NEXT:    xxswapd vs1, vs0800; PWR10LE-NEXT:    blr801;802; PWR10BE-LABEL: v8f64_fast:803; PWR10BE:       # %bb.0: # %entry804; PWR10BE-NEXT:    xvmaxdp vs0, v3, v5805; PWR10BE-NEXT:    xvmaxdp vs1, v2, v4806; PWR10BE-NEXT:    xvmaxdp vs0, vs1, vs0807; PWR10BE-NEXT:    xxswapd vs1, vs0808; PWR10BE-NEXT:    xvmaxdp vs1, vs0, vs1809; PWR10BE-NEXT:    blr810entry:811  %0 = call fast double @llvm.vector.reduce.fmax.v8f64(<8 x double> %a)812  ret double %0813}814 815define dso_local double @v16f64(<16 x double> %a) local_unnamed_addr #0 {816; PWR9LE-LABEL: v16f64:817; PWR9LE:       # %bb.0: # %entry818; PWR9LE-NEXT:    xvmaxdp vs0, v5, v9819; PWR9LE-NEXT:    xvmaxdp vs1, v3, v7820; PWR9LE-NEXT:    xvmaxdp vs2, v2, v6821; PWR9LE-NEXT:    xvmaxdp vs0, vs1, vs0822; PWR9LE-NEXT:    xvmaxdp vs1, v4, v8823; PWR9LE-NEXT:    xvmaxdp vs1, vs2, vs1824; PWR9LE-NEXT:    xvmaxdp vs0, vs1, vs0825; PWR9LE-NEXT:    xxswapd vs1, vs0826; PWR9LE-NEXT:    xsmaxdp f1, f1, f0827; PWR9LE-NEXT:    blr828;829; PWR9BE-LABEL: v16f64:830; PWR9BE:       # %bb.0: # %entry831; PWR9BE-NEXT:    xvmaxdp vs0, v5, v9832; PWR9BE-NEXT:    xvmaxdp vs1, v3, v7833; PWR9BE-NEXT:    xvmaxdp vs2, v2, v6834; PWR9BE-NEXT:    xvmaxdp vs0, vs1, vs0835; PWR9BE-NEXT:    xvmaxdp vs1, v4, v8836; PWR9BE-NEXT:    xvmaxdp vs1, vs2, vs1837; PWR9BE-NEXT:    xvmaxdp vs0, vs1, vs0838; PWR9BE-NEXT:    xxswapd vs1, vs0839; PWR9BE-NEXT:    xsmaxdp f1, f0, f1840; PWR9BE-NEXT:    blr841;842; PWR10LE-LABEL: v16f64:843; PWR10LE:       # %bb.0: # %entry844; PWR10LE-NEXT:    xvmaxdp vs0, v5, v9845; PWR10LE-NEXT:    xvmaxdp vs1, v3, v7846; PWR10LE-NEXT:    xvmaxdp vs2, v2, v6847; PWR10LE-NEXT:    xvmaxdp vs0, vs1, vs0848; PWR10LE-NEXT:    xvmaxdp vs1, v4, v8849; PWR10LE-NEXT:    xvmaxdp vs1, vs2, vs1850; PWR10LE-NEXT:    xvmaxdp vs0, vs1, vs0851; PWR10LE-NEXT:    xxswapd vs1, vs0852; PWR10LE-NEXT:    xsmaxdp f1, f1, f0853; PWR10LE-NEXT:    blr854;855; PWR10BE-LABEL: v16f64:856; PWR10BE:       # %bb.0: # %entry857; PWR10BE-NEXT:    xvmaxdp vs0, v5, v9858; PWR10BE-NEXT:    xvmaxdp vs1, v3, v7859; PWR10BE-NEXT:    xvmaxdp vs2, v2, v6860; PWR10BE-NEXT:    xvmaxdp vs0, vs1, vs0861; PWR10BE-NEXT:    xvmaxdp vs1, v4, v8862; PWR10BE-NEXT:    xvmaxdp vs1, vs2, vs1863; PWR10BE-NEXT:    xvmaxdp vs0, vs1, vs0864; PWR10BE-NEXT:    xxswapd vs1, vs0865; PWR10BE-NEXT:    xsmaxdp f1, f0, f1866; PWR10BE-NEXT:    blr867entry:868  %0 = call double @llvm.vector.reduce.fmax.v16f64(<16 x double> %a)869  ret double %0870}871 872define dso_local double @v16f64_fast(<16 x double> %a) local_unnamed_addr #0 {873; PWR9LE-LABEL: v16f64_fast:874; PWR9LE:       # %bb.0: # %entry875; PWR9LE-NEXT:    xvmaxdp vs0, v4, v8876; PWR9LE-NEXT:    xvmaxdp vs1, v2, v6877; PWR9LE-NEXT:    xvmaxdp vs2, v5, v9878; PWR9LE-NEXT:    xvmaxdp vs3, v3, v7879; PWR9LE-NEXT:    xvmaxdp vs2, vs3, vs2880; PWR9LE-NEXT:    xvmaxdp vs0, vs1, vs0881; PWR9LE-NEXT:    xvmaxdp vs0, vs0, vs2882; PWR9LE-NEXT:    xxswapd vs1, vs0883; PWR9LE-NEXT:    xvmaxdp vs0, vs0, vs1884; PWR9LE-NEXT:    xxswapd vs1, vs0885; PWR9LE-NEXT:    blr886;887; PWR9BE-LABEL: v16f64_fast:888; PWR9BE:       # %bb.0: # %entry889; PWR9BE-NEXT:    xvmaxdp vs0, v4, v8890; PWR9BE-NEXT:    xvmaxdp vs1, v2, v6891; PWR9BE-NEXT:    xvmaxdp vs2, v5, v9892; PWR9BE-NEXT:    xvmaxdp vs3, v3, v7893; PWR9BE-NEXT:    xvmaxdp vs2, vs3, vs2894; PWR9BE-NEXT:    xvmaxdp vs0, vs1, vs0895; PWR9BE-NEXT:    xvmaxdp vs0, vs0, vs2896; PWR9BE-NEXT:    xxswapd vs1, vs0897; PWR9BE-NEXT:    xvmaxdp vs1, vs0, vs1898; PWR9BE-NEXT:    blr899;900; PWR10LE-LABEL: v16f64_fast:901; PWR10LE:       # %bb.0: # %entry902; PWR10LE-NEXT:    xvmaxdp vs0, v4, v8903; PWR10LE-NEXT:    xvmaxdp vs1, v2, v6904; PWR10LE-NEXT:    xvmaxdp vs2, v5, v9905; PWR10LE-NEXT:    xvmaxdp vs3, v3, v7906; PWR10LE-NEXT:    xvmaxdp vs2, vs3, vs2907; PWR10LE-NEXT:    xvmaxdp vs0, vs1, vs0908; PWR10LE-NEXT:    xvmaxdp vs0, vs0, vs2909; PWR10LE-NEXT:    xxswapd vs1, vs0910; PWR10LE-NEXT:    xvmaxdp vs0, vs0, vs1911; PWR10LE-NEXT:    xxswapd vs1, vs0912; PWR10LE-NEXT:    blr913;914; PWR10BE-LABEL: v16f64_fast:915; PWR10BE:       # %bb.0: # %entry916; PWR10BE-NEXT:    xvmaxdp vs0, v4, v8917; PWR10BE-NEXT:    xvmaxdp vs1, v2, v6918; PWR10BE-NEXT:    xvmaxdp vs2, v5, v9919; PWR10BE-NEXT:    xvmaxdp vs3, v3, v7920; PWR10BE-NEXT:    xvmaxdp vs2, vs3, vs2921; PWR10BE-NEXT:    xvmaxdp vs0, vs1, vs0922; PWR10BE-NEXT:    xvmaxdp vs0, vs0, vs2923; PWR10BE-NEXT:    xxswapd vs1, vs0924; PWR10BE-NEXT:    xvmaxdp vs1, vs0, vs1925; PWR10BE-NEXT:    blr926entry:927  %0 = call fast double @llvm.vector.reduce.fmax.v16f64(<16 x double> %a)928  ret double %0929}930 931define dso_local double @v32f64(<32 x double> %a) local_unnamed_addr #0 {932; PWR9LE-LABEL: v32f64:933; PWR9LE:       # %bb.0: # %entry934; PWR9LE-NEXT:    lxv vs3, 272(r1)935; PWR9LE-NEXT:    lxv vs2, 240(r1)936; PWR9LE-NEXT:    xvmaxdp vs4, v5, v13937; PWR9LE-NEXT:    lxv vs1, 256(r1)938; PWR9LE-NEXT:    lxv vs0, 224(r1)939; PWR9LE-NEXT:    xvmaxdp vs3, v9, vs3940; PWR9LE-NEXT:    xvmaxdp vs2, v7, vs2941; PWR9LE-NEXT:    xvmaxdp vs1, v8, vs1942; PWR9LE-NEXT:    xvmaxdp vs0, v6, vs0943; PWR9LE-NEXT:    xvmaxdp vs3, vs4, vs3944; PWR9LE-NEXT:    xvmaxdp vs4, v3, v11945; PWR9LE-NEXT:    xvmaxdp vs2, vs4, vs2946; PWR9LE-NEXT:    xvmaxdp vs2, vs2, vs3947; PWR9LE-NEXT:    xvmaxdp vs3, v4, v12948; PWR9LE-NEXT:    xvmaxdp vs1, vs3, vs1949; PWR9LE-NEXT:    xvmaxdp vs3, v2, v10950; PWR9LE-NEXT:    xvmaxdp vs0, vs3, vs0951; PWR9LE-NEXT:    xvmaxdp vs0, vs0, vs1952; PWR9LE-NEXT:    xvmaxdp vs0, vs0, vs2953; PWR9LE-NEXT:    xxswapd vs1, vs0954; PWR9LE-NEXT:    xsmaxdp f1, f1, f0955; PWR9LE-NEXT:    blr956;957; PWR9BE-LABEL: v32f64:958; PWR9BE:       # %bb.0: # %entry959; PWR9BE-NEXT:    lxv vs3, 288(r1)960; PWR9BE-NEXT:    lxv vs2, 256(r1)961; PWR9BE-NEXT:    xvmaxdp vs4, v5, v13962; PWR9BE-NEXT:    lxv vs1, 272(r1)963; PWR9BE-NEXT:    lxv vs0, 240(r1)964; PWR9BE-NEXT:    xvmaxdp vs3, v9, vs3965; PWR9BE-NEXT:    xvmaxdp vs2, v7, vs2966; PWR9BE-NEXT:    xvmaxdp vs1, v8, vs1967; PWR9BE-NEXT:    xvmaxdp vs0, v6, vs0968; PWR9BE-NEXT:    xvmaxdp vs3, vs4, vs3969; PWR9BE-NEXT:    xvmaxdp vs4, v3, v11970; PWR9BE-NEXT:    xvmaxdp vs2, vs4, vs2971; PWR9BE-NEXT:    xvmaxdp vs2, vs2, vs3972; PWR9BE-NEXT:    xvmaxdp vs3, v4, v12973; PWR9BE-NEXT:    xvmaxdp vs1, vs3, vs1974; PWR9BE-NEXT:    xvmaxdp vs3, v2, v10975; PWR9BE-NEXT:    xvmaxdp vs0, vs3, vs0976; PWR9BE-NEXT:    xvmaxdp vs0, vs0, vs1977; PWR9BE-NEXT:    xvmaxdp vs0, vs0, vs2978; PWR9BE-NEXT:    xxswapd vs1, vs0979; PWR9BE-NEXT:    xsmaxdp f1, f0, f1980; PWR9BE-NEXT:    blr981;982; PWR10LE-LABEL: v32f64:983; PWR10LE:       # %bb.0: # %entry984; PWR10LE-NEXT:    lxv vs3, 272(r1)985; PWR10LE-NEXT:    lxv vs2, 240(r1)986; PWR10LE-NEXT:    xvmaxdp vs4, v5, v13987; PWR10LE-NEXT:    xvmaxdp vs3, v9, vs3988; PWR10LE-NEXT:    lxv vs1, 256(r1)989; PWR10LE-NEXT:    xvmaxdp vs2, v7, vs2990; PWR10LE-NEXT:    lxv vs0, 224(r1)991; PWR10LE-NEXT:    xvmaxdp vs1, v8, vs1992; PWR10LE-NEXT:    xvmaxdp vs0, v6, vs0993; PWR10LE-NEXT:    xvmaxdp vs3, vs4, vs3994; PWR10LE-NEXT:    xvmaxdp vs4, v3, v11995; PWR10LE-NEXT:    xvmaxdp vs2, vs4, vs2996; PWR10LE-NEXT:    xvmaxdp vs2, vs2, vs3997; PWR10LE-NEXT:    xvmaxdp vs3, v4, v12998; PWR10LE-NEXT:    xvmaxdp vs1, vs3, vs1999; PWR10LE-NEXT:    xvmaxdp vs3, v2, v101000; PWR10LE-NEXT:    xvmaxdp vs0, vs3, vs01001; PWR10LE-NEXT:    xvmaxdp vs0, vs0, vs11002; PWR10LE-NEXT:    xvmaxdp vs0, vs0, vs21003; PWR10LE-NEXT:    xxswapd vs1, vs01004; PWR10LE-NEXT:    xsmaxdp f1, f1, f01005; PWR10LE-NEXT:    blr1006;1007; PWR10BE-LABEL: v32f64:1008; PWR10BE:       # %bb.0: # %entry1009; PWR10BE-NEXT:    lxv vs3, 288(r1)1010; PWR10BE-NEXT:    lxv vs2, 256(r1)1011; PWR10BE-NEXT:    xvmaxdp vs4, v5, v131012; PWR10BE-NEXT:    xvmaxdp vs3, v9, vs31013; PWR10BE-NEXT:    lxv vs1, 272(r1)1014; PWR10BE-NEXT:    xvmaxdp vs2, v7, vs21015; PWR10BE-NEXT:    lxv vs0, 240(r1)1016; PWR10BE-NEXT:    xvmaxdp vs1, v8, vs11017; PWR10BE-NEXT:    xvmaxdp vs0, v6, vs01018; PWR10BE-NEXT:    xvmaxdp vs3, vs4, vs31019; PWR10BE-NEXT:    xvmaxdp vs4, v3, v111020; PWR10BE-NEXT:    xvmaxdp vs2, vs4, vs21021; PWR10BE-NEXT:    xvmaxdp vs2, vs2, vs31022; PWR10BE-NEXT:    xvmaxdp vs3, v4, v121023; PWR10BE-NEXT:    xvmaxdp vs1, vs3, vs11024; PWR10BE-NEXT:    xvmaxdp vs3, v2, v101025; PWR10BE-NEXT:    xvmaxdp vs0, vs3, vs01026; PWR10BE-NEXT:    xvmaxdp vs0, vs0, vs11027; PWR10BE-NEXT:    xvmaxdp vs0, vs0, vs21028; PWR10BE-NEXT:    xxswapd vs1, vs01029; PWR10BE-NEXT:    xsmaxdp f1, f0, f11030; PWR10BE-NEXT:    blr1031entry:1032  %0 = call double @llvm.vector.reduce.fmax.v32f64(<32 x double> %a)1033  ret double %01034}1035 1036define dso_local double @v32f64_fast(<32 x double> %a) local_unnamed_addr #0 {1037; PWR9LE-LABEL: v32f64_fast:1038; PWR9LE:       # %bb.0: # %entry1039; PWR9LE-NEXT:    lxv vs0, 256(r1)1040; PWR9LE-NEXT:    lxv vs1, 224(r1)1041; PWR9LE-NEXT:    lxv vs2, 272(r1)1042; PWR9LE-NEXT:    lxv vs3, 240(r1)1043; PWR9LE-NEXT:    xvmaxdp vs4, v3, v111044; PWR9LE-NEXT:    xvmaxdp vs5, v5, v131045; PWR9LE-NEXT:    xvmaxdp vs6, v2, v101046; PWR9LE-NEXT:    xvmaxdp vs7, v4, v121047; PWR9LE-NEXT:    xvmaxdp vs3, v7, vs31048; PWR9LE-NEXT:    xvmaxdp vs2, v9, vs21049; PWR9LE-NEXT:    xvmaxdp vs1, v6, vs11050; PWR9LE-NEXT:    xvmaxdp vs0, v8, vs01051; PWR9LE-NEXT:    xvmaxdp vs0, vs7, vs01052; PWR9LE-NEXT:    xvmaxdp vs1, vs6, vs11053; PWR9LE-NEXT:    xvmaxdp vs2, vs5, vs21054; PWR9LE-NEXT:    xvmaxdp vs3, vs4, vs31055; PWR9LE-NEXT:    xvmaxdp vs2, vs3, vs21056; PWR9LE-NEXT:    xvmaxdp vs0, vs1, vs01057; PWR9LE-NEXT:    xvmaxdp vs0, vs0, vs21058; PWR9LE-NEXT:    xxswapd vs1, vs01059; PWR9LE-NEXT:    xvmaxdp vs0, vs0, vs11060; PWR9LE-NEXT:    xxswapd vs1, vs01061; PWR9LE-NEXT:    blr1062;1063; PWR9BE-LABEL: v32f64_fast:1064; PWR9BE:       # %bb.0: # %entry1065; PWR9BE-NEXT:    lxv vs0, 272(r1)1066; PWR9BE-NEXT:    lxv vs1, 240(r1)1067; PWR9BE-NEXT:    lxv vs2, 288(r1)1068; PWR9BE-NEXT:    lxv vs3, 256(r1)1069; PWR9BE-NEXT:    xvmaxdp vs4, v3, v111070; PWR9BE-NEXT:    xvmaxdp vs5, v5, v131071; PWR9BE-NEXT:    xvmaxdp vs6, v2, v101072; PWR9BE-NEXT:    xvmaxdp vs7, v4, v121073; PWR9BE-NEXT:    xvmaxdp vs3, v7, vs31074; PWR9BE-NEXT:    xvmaxdp vs2, v9, vs21075; PWR9BE-NEXT:    xvmaxdp vs1, v6, vs11076; PWR9BE-NEXT:    xvmaxdp vs0, v8, vs01077; PWR9BE-NEXT:    xvmaxdp vs0, vs7, vs01078; PWR9BE-NEXT:    xvmaxdp vs1, vs6, vs11079; PWR9BE-NEXT:    xvmaxdp vs2, vs5, vs21080; PWR9BE-NEXT:    xvmaxdp vs3, vs4, vs31081; PWR9BE-NEXT:    xvmaxdp vs2, vs3, vs21082; PWR9BE-NEXT:    xvmaxdp vs0, vs1, vs01083; PWR9BE-NEXT:    xvmaxdp vs0, vs0, vs21084; PWR9BE-NEXT:    xxswapd vs1, vs01085; PWR9BE-NEXT:    xvmaxdp vs1, vs0, vs11086; PWR9BE-NEXT:    blr1087;1088; PWR10LE-LABEL: v32f64_fast:1089; PWR10LE:       # %bb.0: # %entry1090; PWR10LE-NEXT:    lxv vs0, 256(r1)1091; PWR10LE-NEXT:    lxv vs1, 224(r1)1092; PWR10LE-NEXT:    xvmaxdp vs4, v3, v111093; PWR10LE-NEXT:    xvmaxdp vs5, v5, v131094; PWR10LE-NEXT:    xvmaxdp vs6, v2, v101095; PWR10LE-NEXT:    xvmaxdp vs7, v4, v121096; PWR10LE-NEXT:    xvmaxdp vs1, v6, vs11097; PWR10LE-NEXT:    lxv vs2, 272(r1)1098; PWR10LE-NEXT:    lxv vs3, 240(r1)1099; PWR10LE-NEXT:    xvmaxdp vs3, v7, vs31100; PWR10LE-NEXT:    xvmaxdp vs2, v9, vs21101; PWR10LE-NEXT:    xvmaxdp vs0, v8, vs01102; PWR10LE-NEXT:    xvmaxdp vs0, vs7, vs01103; PWR10LE-NEXT:    xvmaxdp vs1, vs6, vs11104; PWR10LE-NEXT:    xvmaxdp vs2, vs5, vs21105; PWR10LE-NEXT:    xvmaxdp vs3, vs4, vs31106; PWR10LE-NEXT:    xvmaxdp vs2, vs3, vs21107; PWR10LE-NEXT:    xvmaxdp vs0, vs1, vs01108; PWR10LE-NEXT:    xvmaxdp vs0, vs0, vs21109; PWR10LE-NEXT:    xxswapd vs1, vs01110; PWR10LE-NEXT:    xvmaxdp vs0, vs0, vs11111; PWR10LE-NEXT:    xxswapd vs1, vs01112; PWR10LE-NEXT:    blr1113;1114; PWR10BE-LABEL: v32f64_fast:1115; PWR10BE:       # %bb.0: # %entry1116; PWR10BE-NEXT:    lxv vs0, 272(r1)1117; PWR10BE-NEXT:    lxv vs1, 240(r1)1118; PWR10BE-NEXT:    xvmaxdp vs4, v3, v111119; PWR10BE-NEXT:    xvmaxdp vs5, v5, v131120; PWR10BE-NEXT:    xvmaxdp vs6, v2, v101121; PWR10BE-NEXT:    xvmaxdp vs7, v4, v121122; PWR10BE-NEXT:    xvmaxdp vs1, v6, vs11123; PWR10BE-NEXT:    lxv vs2, 288(r1)1124; PWR10BE-NEXT:    lxv vs3, 256(r1)1125; PWR10BE-NEXT:    xvmaxdp vs3, v7, vs31126; PWR10BE-NEXT:    xvmaxdp vs2, v9, vs21127; PWR10BE-NEXT:    xvmaxdp vs0, v8, vs01128; PWR10BE-NEXT:    xvmaxdp vs0, vs7, vs01129; PWR10BE-NEXT:    xvmaxdp vs1, vs6, vs11130; PWR10BE-NEXT:    xvmaxdp vs2, vs5, vs21131; PWR10BE-NEXT:    xvmaxdp vs3, vs4, vs31132; PWR10BE-NEXT:    xvmaxdp vs2, vs3, vs21133; PWR10BE-NEXT:    xvmaxdp vs0, vs1, vs01134; PWR10BE-NEXT:    xvmaxdp vs0, vs0, vs21135; PWR10BE-NEXT:    xxswapd vs1, vs01136; PWR10BE-NEXT:    xvmaxdp vs1, vs0, vs11137; PWR10BE-NEXT:    blr1138entry:1139  %0 = call fast double @llvm.vector.reduce.fmax.v32f64(<32 x double> %a)1140  ret double %01141}1142 1143declare double @llvm.vector.reduce.fmax.v2f64(<2 x double>) #01144declare double @llvm.vector.reduce.fmax.v4f64(<4 x double>) #01145declare double @llvm.vector.reduce.fmax.v8f64(<8 x double>) #01146declare double @llvm.vector.reduce.fmax.v16f64(<16 x double>) #01147declare double @llvm.vector.reduce.fmax.v32f64(<32 x double>) #01148 1149attributes #0 = { nounwind }1150