1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; 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=PWR9LE 4; 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=PWR9BE 6; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 7; RUN: -mattr=-paired-vector-memops -mcpu=pwr10 -mtriple=powerpc64le < %s | \ 8; RUN: FileCheck %s --check-prefix=PWR10LE 9; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 10; RUN: -mattr=-paired-vector-memops -mcpu=pwr10 -mtriple=powerpc64 < %s | \ 11; RUN: FileCheck %s --check-prefix=PWR10BE 12 13;; 14;; Vectors of f32 15;; 16define dso_local float @v2f32(<2 x float> %a) local_unnamed_addr #0 { 17; PWR9LE-LABEL: v2f32: 18; PWR9LE: # %bb.0: # %entry 19; PWR9LE-NEXT: xxsldwi vs0, v2, v2, 3 20; PWR9LE-NEXT: xxswapd vs1, v2 21; PWR9LE-NEXT: xscvspdpn f0, vs0 22; PWR9LE-NEXT: xscvspdpn f1, vs1 23; PWR9LE-NEXT: xsaddsp f1, f0, f1 24; PWR9LE-NEXT: blr 25; 26; PWR9BE-LABEL: v2f32: 27; PWR9BE: # %bb.0: # %entry 28; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 1 29; PWR9BE-NEXT: xscvspdpn f0, v2 30; PWR9BE-NEXT: xscvspdpn f1, vs1 31; PWR9BE-NEXT: xsaddsp f1, f0, f1 32; PWR9BE-NEXT: blr 33; 34; PWR10LE-LABEL: v2f32: 35; PWR10LE: # %bb.0: # %entry 36; PWR10LE-NEXT: xxsldwi vs0, v2, v2, 3 37; PWR10LE-NEXT: xxswapd vs1, v2 38; PWR10LE-NEXT: xscvspdpn f0, vs0 39; PWR10LE-NEXT: xscvspdpn f1, vs1 40; PWR10LE-NEXT: xsaddsp f1, f0, f1 41; PWR10LE-NEXT: blr 42; 43; PWR10BE-LABEL: v2f32: 44; PWR10BE: # %bb.0: # %entry 45; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 1 46; PWR10BE-NEXT: xscvspdpn f0, v2 47; PWR10BE-NEXT: xscvspdpn f1, vs1 48; PWR10BE-NEXT: xsaddsp f1, f0, f1 49; PWR10BE-NEXT: blr 50entry: 51 %0 = call float @llvm.vector.reduce.fadd.v2f32(float -0.000000e+00, <2 x float> %a) 52 ret float %0 53} 54 55define dso_local float @v2f32_b(<2 x float> %a, float %b) local_unnamed_addr #0 { 56; PWR9LE-LABEL: v2f32_b: 57; PWR9LE: # %bb.0: # %entry 58; PWR9LE-NEXT: xxsldwi vs0, v2, v2, 3 59; PWR9LE-NEXT: xscvspdpn f0, vs0 60; PWR9LE-NEXT: xsaddsp f0, f1, f0 61; PWR9LE-NEXT: xxswapd vs1, v2 62; PWR9LE-NEXT: xscvspdpn f1, vs1 63; PWR9LE-NEXT: xsaddsp f1, f0, f1 64; PWR9LE-NEXT: blr 65; 66; PWR9BE-LABEL: v2f32_b: 67; PWR9BE: # %bb.0: # %entry 68; PWR9BE-NEXT: xscvspdpn f0, v2 69; PWR9BE-NEXT: xsaddsp f0, f1, f0 70; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 1 71; PWR9BE-NEXT: xscvspdpn f1, vs1 72; PWR9BE-NEXT: xsaddsp f1, f0, f1 73; PWR9BE-NEXT: blr 74; 75; PWR10LE-LABEL: v2f32_b: 76; PWR10LE: # %bb.0: # %entry 77; PWR10LE-NEXT: xxsldwi vs0, v2, v2, 3 78; PWR10LE-NEXT: xscvspdpn f0, vs0 79; PWR10LE-NEXT: xsaddsp f0, f1, f0 80; PWR10LE-NEXT: xxswapd vs1, v2 81; PWR10LE-NEXT: xscvspdpn f1, vs1 82; PWR10LE-NEXT: xsaddsp f1, f0, f1 83; PWR10LE-NEXT: blr 84; 85; PWR10BE-LABEL: v2f32_b: 86; PWR10BE: # %bb.0: # %entry 87; PWR10BE-NEXT: xscvspdpn f0, v2 88; PWR10BE-NEXT: xsaddsp f0, f1, f0 89; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 1 90; PWR10BE-NEXT: xscvspdpn f1, vs1 91; PWR10BE-NEXT: xsaddsp f1, f0, f1 92; PWR10BE-NEXT: blr 93entry: 94 %0 = call float @llvm.vector.reduce.fadd.v2f32(float %b, <2 x float> %a) 95 ret float %0 96} 97 98define dso_local float @v2f32_fast(<2 x float> %a) local_unnamed_addr #0 { 99; PWR9LE-LABEL: v2f32_fast: 100; PWR9LE: # %bb.0: # %entry 101; PWR9LE-NEXT: xxspltw vs0, v2, 2 102; PWR9LE-NEXT: xvaddsp vs0, v2, vs0 103; PWR9LE-NEXT: xxsldwi vs0, vs0, vs0, 3 104; PWR9LE-NEXT: xscvspdpn f1, vs0 105; PWR9LE-NEXT: blr 106; 107; PWR9BE-LABEL: v2f32_fast: 108; PWR9BE: # %bb.0: # %entry 109; PWR9BE-NEXT: xxspltw vs0, v2, 1 110; PWR9BE-NEXT: xvaddsp vs0, v2, vs0 111; PWR9BE-NEXT: xscvspdpn f1, vs0 112; PWR9BE-NEXT: blr 113; 114; PWR10LE-LABEL: v2f32_fast: 115; PWR10LE: # %bb.0: # %entry 116; PWR10LE-NEXT: xxspltw vs0, v2, 2 117; PWR10LE-NEXT: xvaddsp vs0, v2, vs0 118; PWR10LE-NEXT: xxsldwi vs0, vs0, vs0, 3 119; PWR10LE-NEXT: xscvspdpn f1, vs0 120; PWR10LE-NEXT: blr 121; 122; PWR10BE-LABEL: v2f32_fast: 123; PWR10BE: # %bb.0: # %entry 124; PWR10BE-NEXT: xxspltw vs0, v2, 1 125; PWR10BE-NEXT: xvaddsp vs0, v2, vs0 126; PWR10BE-NEXT: xscvspdpn f1, vs0 127; PWR10BE-NEXT: blr 128entry: 129 %0 = call fast float @llvm.vector.reduce.fadd.v2f32(float -0.000000e+00, <2 x float> %a) 130 ret float %0 131} 132 133define dso_local float @v4f32(<4 x float> %a) local_unnamed_addr #0 { 134; PWR9LE-LABEL: v4f32: 135; PWR9LE: # %bb.0: # %entry 136; PWR9LE-NEXT: xxsldwi vs0, v2, v2, 3 137; PWR9LE-NEXT: xxswapd vs1, v2 138; PWR9LE-NEXT: xscvspdpn f0, vs0 139; PWR9LE-NEXT: xscvspdpn f1, vs1 140; PWR9LE-NEXT: xsaddsp f0, f0, f1 141; PWR9LE-NEXT: xxsldwi vs1, v2, v2, 1 142; PWR9LE-NEXT: xscvspdpn f1, vs1 143; PWR9LE-NEXT: xsaddsp f0, f0, f1 144; PWR9LE-NEXT: xscvspdpn f1, v2 145; PWR9LE-NEXT: xsaddsp f1, f0, f1 146; PWR9LE-NEXT: blr 147; 148; PWR9BE-LABEL: v4f32: 149; PWR9BE: # %bb.0: # %entry 150; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 1 151; PWR9BE-NEXT: xscvspdpn f0, v2 152; PWR9BE-NEXT: xscvspdpn f1, vs1 153; PWR9BE-NEXT: xsaddsp f0, f0, f1 154; PWR9BE-NEXT: xxswapd vs1, v2 155; PWR9BE-NEXT: xscvspdpn f1, vs1 156; PWR9BE-NEXT: xsaddsp f0, f0, f1 157; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 3 158; PWR9BE-NEXT: xscvspdpn f1, vs1 159; PWR9BE-NEXT: xsaddsp f1, f0, f1 160; PWR9BE-NEXT: blr 161; 162; PWR10LE-LABEL: v4f32: 163; PWR10LE: # %bb.0: # %entry 164; PWR10LE-NEXT: xxsldwi vs0, v2, v2, 3 165; PWR10LE-NEXT: xxswapd vs1, v2 166; PWR10LE-NEXT: xscvspdpn f0, vs0 167; PWR10LE-NEXT: xscvspdpn f1, vs1 168; PWR10LE-NEXT: xsaddsp f0, f0, f1 169; PWR10LE-NEXT: xxsldwi vs1, v2, v2, 1 170; PWR10LE-NEXT: xscvspdpn f1, vs1 171; PWR10LE-NEXT: xsaddsp f0, f0, f1 172; PWR10LE-NEXT: xscvspdpn f1, v2 173; PWR10LE-NEXT: xsaddsp f1, f0, f1 174; PWR10LE-NEXT: blr 175; 176; PWR10BE-LABEL: v4f32: 177; PWR10BE: # %bb.0: # %entry 178; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 1 179; PWR10BE-NEXT: xscvspdpn f0, v2 180; PWR10BE-NEXT: xscvspdpn f1, vs1 181; PWR10BE-NEXT: xsaddsp f0, f0, f1 182; PWR10BE-NEXT: xxswapd vs1, v2 183; PWR10BE-NEXT: xscvspdpn f1, vs1 184; PWR10BE-NEXT: xsaddsp f0, f0, f1 185; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 3 186; PWR10BE-NEXT: xscvspdpn f1, vs1 187; PWR10BE-NEXT: xsaddsp f1, f0, f1 188; PWR10BE-NEXT: blr 189entry: 190 %0 = call float @llvm.vector.reduce.fadd.v4f32(float -0.000000e+00, <4 x float> %a) 191 ret float %0 192} 193 194define dso_local float @v4f32_b(<4 x float> %a, float %b) local_unnamed_addr #0 { 195; PWR9LE-LABEL: v4f32_b: 196; PWR9LE: # %bb.0: # %entry 197; PWR9LE-NEXT: xxsldwi vs0, v2, v2, 3 198; PWR9LE-NEXT: xscvspdpn f0, vs0 199; PWR9LE-NEXT: xsaddsp f0, f1, f0 200; PWR9LE-NEXT: xxswapd vs1, v2 201; PWR9LE-NEXT: xscvspdpn f1, vs1 202; PWR9LE-NEXT: xsaddsp f0, f0, f1 203; PWR9LE-NEXT: xxsldwi vs1, v2, v2, 1 204; PWR9LE-NEXT: xscvspdpn f1, vs1 205; PWR9LE-NEXT: xsaddsp f0, f0, f1 206; PWR9LE-NEXT: xscvspdpn f1, v2 207; PWR9LE-NEXT: xsaddsp f1, f0, f1 208; PWR9LE-NEXT: blr 209; 210; PWR9BE-LABEL: v4f32_b: 211; PWR9BE: # %bb.0: # %entry 212; PWR9BE-NEXT: xscvspdpn f0, v2 213; PWR9BE-NEXT: xsaddsp f0, f1, f0 214; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 1 215; PWR9BE-NEXT: xscvspdpn f1, vs1 216; PWR9BE-NEXT: xsaddsp f0, f0, f1 217; PWR9BE-NEXT: xxswapd vs1, v2 218; PWR9BE-NEXT: xscvspdpn f1, vs1 219; PWR9BE-NEXT: xsaddsp f0, f0, f1 220; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 3 221; PWR9BE-NEXT: xscvspdpn f1, vs1 222; PWR9BE-NEXT: xsaddsp f1, f0, f1 223; PWR9BE-NEXT: blr 224; 225; PWR10LE-LABEL: v4f32_b: 226; PWR10LE: # %bb.0: # %entry 227; PWR10LE-NEXT: xxsldwi vs0, v2, v2, 3 228; PWR10LE-NEXT: xscvspdpn f0, vs0 229; PWR10LE-NEXT: xsaddsp f0, f1, f0 230; PWR10LE-NEXT: xxswapd vs1, v2 231; PWR10LE-NEXT: xscvspdpn f1, vs1 232; PWR10LE-NEXT: xsaddsp f0, f0, f1 233; PWR10LE-NEXT: xxsldwi vs1, v2, v2, 1 234; PWR10LE-NEXT: xscvspdpn f1, vs1 235; PWR10LE-NEXT: xsaddsp f0, f0, f1 236; PWR10LE-NEXT: xscvspdpn f1, v2 237; PWR10LE-NEXT: xsaddsp f1, f0, f1 238; PWR10LE-NEXT: blr 239; 240; PWR10BE-LABEL: v4f32_b: 241; PWR10BE: # %bb.0: # %entry 242; PWR10BE-NEXT: xscvspdpn f0, v2 243; PWR10BE-NEXT: xsaddsp f0, f1, f0 244; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 1 245; PWR10BE-NEXT: xscvspdpn f1, vs1 246; PWR10BE-NEXT: xsaddsp f0, f0, f1 247; PWR10BE-NEXT: xxswapd vs1, v2 248; PWR10BE-NEXT: xscvspdpn f1, vs1 249; PWR10BE-NEXT: xsaddsp f0, f0, f1 250; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 3 251; PWR10BE-NEXT: xscvspdpn f1, vs1 252; PWR10BE-NEXT: xsaddsp f1, f0, f1 253; PWR10BE-NEXT: blr 254entry: 255 %0 = call float @llvm.vector.reduce.fadd.v4f32(float %b, <4 x float> %a) 256 ret float %0 257} 258 259define dso_local float @v4f32_fast(<4 x float> %a) local_unnamed_addr #0 { 260; PWR9LE-LABEL: v4f32_fast: 261; PWR9LE: # %bb.0: # %entry 262; PWR9LE-NEXT: xxswapd v3, v2 263; PWR9LE-NEXT: xvaddsp vs0, v2, v3 264; PWR9LE-NEXT: xxspltw vs1, vs0, 2 265; PWR9LE-NEXT: xvaddsp vs0, vs0, vs1 266; PWR9LE-NEXT: xxsldwi vs0, vs0, vs0, 3 267; PWR9LE-NEXT: xscvspdpn f1, vs0 268; PWR9LE-NEXT: blr 269; 270; PWR9BE-LABEL: v4f32_fast: 271; PWR9BE: # %bb.0: # %entry 272; PWR9BE-NEXT: xxswapd v3, v2 273; PWR9BE-NEXT: xvaddsp vs0, v2, v3 274; PWR9BE-NEXT: xxspltw vs1, vs0, 1 275; PWR9BE-NEXT: xvaddsp vs0, vs0, vs1 276; PWR9BE-NEXT: xscvspdpn f1, vs0 277; PWR9BE-NEXT: blr 278; 279; PWR10LE-LABEL: v4f32_fast: 280; PWR10LE: # %bb.0: # %entry 281; PWR10LE-NEXT: xxswapd v3, v2 282; PWR10LE-NEXT: xvaddsp vs0, v2, v3 283; PWR10LE-NEXT: xxspltw vs1, vs0, 2 284; PWR10LE-NEXT: xvaddsp vs0, vs0, vs1 285; PWR10LE-NEXT: xxsldwi vs0, vs0, vs0, 3 286; PWR10LE-NEXT: xscvspdpn f1, vs0 287; PWR10LE-NEXT: blr 288; 289; PWR10BE-LABEL: v4f32_fast: 290; PWR10BE: # %bb.0: # %entry 291; PWR10BE-NEXT: xxswapd v3, v2 292; PWR10BE-NEXT: xvaddsp vs0, v2, v3 293; PWR10BE-NEXT: xxspltw vs1, vs0, 1 294; PWR10BE-NEXT: xvaddsp vs0, vs0, vs1 295; PWR10BE-NEXT: xscvspdpn f1, vs0 296; PWR10BE-NEXT: blr 297entry: 298 %0 = call fast float @llvm.vector.reduce.fadd.v4f32(float -0.000000e+00, <4 x float> %a) 299 ret float %0 300} 301 302define dso_local float @v8f32(<8 x float> %a) local_unnamed_addr #0 { 303; PWR9LE-LABEL: v8f32: 304; PWR9LE: # %bb.0: # %entry 305; PWR9LE-NEXT: xxsldwi vs0, v2, v2, 3 306; PWR9LE-NEXT: xxswapd vs1, v2 307; PWR9LE-NEXT: xscvspdpn f0, vs0 308; PWR9LE-NEXT: xscvspdpn f1, vs1 309; PWR9LE-NEXT: xsaddsp f0, f0, f1 310; PWR9LE-NEXT: xxsldwi vs1, v2, v2, 1 311; PWR9LE-NEXT: xscvspdpn f1, vs1 312; PWR9LE-NEXT: xsaddsp f0, f0, f1 313; PWR9LE-NEXT: xscvspdpn f1, v2 314; PWR9LE-NEXT: xsaddsp f0, f0, f1 315; PWR9LE-NEXT: xxsldwi vs1, v3, v3, 3 316; PWR9LE-NEXT: xscvspdpn f1, vs1 317; PWR9LE-NEXT: xsaddsp f0, f0, f1 318; PWR9LE-NEXT: xxswapd vs1, v3 319; PWR9LE-NEXT: xscvspdpn f1, vs1 320; PWR9LE-NEXT: xsaddsp f0, f0, f1 321; PWR9LE-NEXT: xxsldwi vs1, v3, v3, 1 322; PWR9LE-NEXT: xscvspdpn f1, vs1 323; PWR9LE-NEXT: xsaddsp f0, f0, f1 324; PWR9LE-NEXT: xscvspdpn f1, v3 325; PWR9LE-NEXT: xsaddsp f1, f0, f1 326; PWR9LE-NEXT: blr 327; 328; PWR9BE-LABEL: v8f32: 329; PWR9BE: # %bb.0: # %entry 330; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 1 331; PWR9BE-NEXT: xscvspdpn f0, v2 332; PWR9BE-NEXT: xscvspdpn f1, vs1 333; PWR9BE-NEXT: xsaddsp f0, f0, f1 334; PWR9BE-NEXT: xxswapd vs1, v2 335; PWR9BE-NEXT: xscvspdpn f1, vs1 336; PWR9BE-NEXT: xsaddsp f0, f0, f1 337; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 3 338; PWR9BE-NEXT: xscvspdpn f1, vs1 339; PWR9BE-NEXT: xsaddsp f0, f0, f1 340; PWR9BE-NEXT: xscvspdpn f1, v3 341; PWR9BE-NEXT: xsaddsp f0, f0, f1 342; PWR9BE-NEXT: xxsldwi vs1, v3, v3, 1 343; PWR9BE-NEXT: xscvspdpn f1, vs1 344; PWR9BE-NEXT: xsaddsp f0, f0, f1 345; PWR9BE-NEXT: xxswapd vs1, v3 346; PWR9BE-NEXT: xscvspdpn f1, vs1 347; PWR9BE-NEXT: xsaddsp f0, f0, f1 348; PWR9BE-NEXT: xxsldwi vs1, v3, v3, 3 349; PWR9BE-NEXT: xscvspdpn f1, vs1 350; PWR9BE-NEXT: xsaddsp f1, f0, f1 351; PWR9BE-NEXT: blr 352; 353; PWR10LE-LABEL: v8f32: 354; PWR10LE: # %bb.0: # %entry 355; PWR10LE-NEXT: xxsldwi vs0, v2, v2, 3 356; PWR10LE-NEXT: xxswapd vs1, v2 357; PWR10LE-NEXT: xscvspdpn f0, vs0 358; PWR10LE-NEXT: xscvspdpn f1, vs1 359; PWR10LE-NEXT: xsaddsp f0, f0, f1 360; PWR10LE-NEXT: xxsldwi vs1, v2, v2, 1 361; PWR10LE-NEXT: xscvspdpn f1, vs1 362; PWR10LE-NEXT: xsaddsp f0, f0, f1 363; PWR10LE-NEXT: xscvspdpn f1, v2 364; PWR10LE-NEXT: xsaddsp f0, f0, f1 365; PWR10LE-NEXT: xxsldwi vs1, v3, v3, 3 366; PWR10LE-NEXT: xscvspdpn f1, vs1 367; PWR10LE-NEXT: xsaddsp f0, f0, f1 368; PWR10LE-NEXT: xxswapd vs1, v3 369; PWR10LE-NEXT: xscvspdpn f1, vs1 370; PWR10LE-NEXT: xsaddsp f0, f0, f1 371; PWR10LE-NEXT: xxsldwi vs1, v3, v3, 1 372; PWR10LE-NEXT: xscvspdpn f1, vs1 373; PWR10LE-NEXT: xsaddsp f0, f0, f1 374; PWR10LE-NEXT: xscvspdpn f1, v3 375; PWR10LE-NEXT: xsaddsp f1, f0, f1 376; PWR10LE-NEXT: blr 377; 378; PWR10BE-LABEL: v8f32: 379; PWR10BE: # %bb.0: # %entry 380; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 1 381; PWR10BE-NEXT: xscvspdpn f0, v2 382; PWR10BE-NEXT: xscvspdpn f1, vs1 383; PWR10BE-NEXT: xsaddsp f0, f0, f1 384; PWR10BE-NEXT: xxswapd vs1, v2 385; PWR10BE-NEXT: xscvspdpn f1, vs1 386; PWR10BE-NEXT: xsaddsp f0, f0, f1 387; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 3 388; PWR10BE-NEXT: xscvspdpn f1, vs1 389; PWR10BE-NEXT: xsaddsp f0, f0, f1 390; PWR10BE-NEXT: xscvspdpn f1, v3 391; PWR10BE-NEXT: xsaddsp f0, f0, f1 392; PWR10BE-NEXT: xxsldwi vs1, v3, v3, 1 393; PWR10BE-NEXT: xscvspdpn f1, vs1 394; PWR10BE-NEXT: xsaddsp f0, f0, f1 395; PWR10BE-NEXT: xxswapd vs1, v3 396; PWR10BE-NEXT: xscvspdpn f1, vs1 397; PWR10BE-NEXT: xsaddsp f0, f0, f1 398; PWR10BE-NEXT: xxsldwi vs1, v3, v3, 3 399; PWR10BE-NEXT: xscvspdpn f1, vs1 400; PWR10BE-NEXT: xsaddsp f1, f0, f1 401; PWR10BE-NEXT: blr 402entry: 403 %0 = call float @llvm.vector.reduce.fadd.v8f32(float -0.000000e+00, <8 x float> %a) 404 ret float %0 405} 406 407define dso_local float @v8f32_b(<8 x float> %a, float %b) local_unnamed_addr #0 { 408; PWR9LE-LABEL: v8f32_b: 409; PWR9LE: # %bb.0: # %entry 410; PWR9LE-NEXT: xxsldwi vs0, v2, v2, 3 411; PWR9LE-NEXT: xscvspdpn f0, vs0 412; PWR9LE-NEXT: xsaddsp f0, f1, f0 413; PWR9LE-NEXT: xxswapd vs1, v2 414; PWR9LE-NEXT: xscvspdpn f1, vs1 415; PWR9LE-NEXT: xsaddsp f0, f0, f1 416; PWR9LE-NEXT: xxsldwi vs1, v2, v2, 1 417; PWR9LE-NEXT: xscvspdpn f1, vs1 418; PWR9LE-NEXT: xsaddsp f0, f0, f1 419; PWR9LE-NEXT: xscvspdpn f1, v2 420; PWR9LE-NEXT: xsaddsp f0, f0, f1 421; PWR9LE-NEXT: xxsldwi vs1, v3, v3, 3 422; PWR9LE-NEXT: xscvspdpn f1, vs1 423; PWR9LE-NEXT: xsaddsp f0, f0, f1 424; PWR9LE-NEXT: xxswapd vs1, v3 425; PWR9LE-NEXT: xscvspdpn f1, vs1 426; PWR9LE-NEXT: xsaddsp f0, f0, f1 427; PWR9LE-NEXT: xxsldwi vs1, v3, v3, 1 428; PWR9LE-NEXT: xscvspdpn f1, vs1 429; PWR9LE-NEXT: xsaddsp f0, f0, f1 430; PWR9LE-NEXT: xscvspdpn f1, v3 431; PWR9LE-NEXT: xsaddsp f1, f0, f1 432; PWR9LE-NEXT: blr 433; 434; PWR9BE-LABEL: v8f32_b: 435; PWR9BE: # %bb.0: # %entry 436; PWR9BE-NEXT: xscvspdpn f0, v2 437; PWR9BE-NEXT: xsaddsp f0, f1, f0 438; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 1 439; PWR9BE-NEXT: xscvspdpn f1, vs1 440; PWR9BE-NEXT: xsaddsp f0, f0, f1 441; PWR9BE-NEXT: xxswapd vs1, v2 442; PWR9BE-NEXT: xscvspdpn f1, vs1 443; PWR9BE-NEXT: xsaddsp f0, f0, f1 444; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 3 445; PWR9BE-NEXT: xscvspdpn f1, vs1 446; PWR9BE-NEXT: xsaddsp f0, f0, f1 447; PWR9BE-NEXT: xscvspdpn f1, v3 448; PWR9BE-NEXT: xsaddsp f0, f0, f1 449; PWR9BE-NEXT: xxsldwi vs1, v3, v3, 1 450; PWR9BE-NEXT: xscvspdpn f1, vs1 451; PWR9BE-NEXT: xsaddsp f0, f0, f1 452; PWR9BE-NEXT: xxswapd vs1, v3 453; PWR9BE-NEXT: xscvspdpn f1, vs1 454; PWR9BE-NEXT: xsaddsp f0, f0, f1 455; PWR9BE-NEXT: xxsldwi vs1, v3, v3, 3 456; PWR9BE-NEXT: xscvspdpn f1, vs1 457; PWR9BE-NEXT: xsaddsp f1, f0, f1 458; PWR9BE-NEXT: blr 459; 460; PWR10LE-LABEL: v8f32_b: 461; PWR10LE: # %bb.0: # %entry 462; PWR10LE-NEXT: xxsldwi vs0, v2, v2, 3 463; PWR10LE-NEXT: xscvspdpn f0, vs0 464; PWR10LE-NEXT: xsaddsp f0, f1, f0 465; PWR10LE-NEXT: xxswapd vs1, v2 466; PWR10LE-NEXT: xscvspdpn f1, vs1 467; PWR10LE-NEXT: xsaddsp f0, f0, f1 468; PWR10LE-NEXT: xxsldwi vs1, v2, v2, 1 469; PWR10LE-NEXT: xscvspdpn f1, vs1 470; PWR10LE-NEXT: xsaddsp f0, f0, f1 471; PWR10LE-NEXT: xscvspdpn f1, v2 472; PWR10LE-NEXT: xsaddsp f0, f0, f1 473; PWR10LE-NEXT: xxsldwi vs1, v3, v3, 3 474; PWR10LE-NEXT: xscvspdpn f1, vs1 475; PWR10LE-NEXT: xsaddsp f0, f0, f1 476; PWR10LE-NEXT: xxswapd vs1, v3 477; PWR10LE-NEXT: xscvspdpn f1, vs1 478; PWR10LE-NEXT: xsaddsp f0, f0, f1 479; PWR10LE-NEXT: xxsldwi vs1, v3, v3, 1 480; PWR10LE-NEXT: xscvspdpn f1, vs1 481; PWR10LE-NEXT: xsaddsp f0, f0, f1 482; PWR10LE-NEXT: xscvspdpn f1, v3 483; PWR10LE-NEXT: xsaddsp f1, f0, f1 484; PWR10LE-NEXT: blr 485; 486; PWR10BE-LABEL: v8f32_b: 487; PWR10BE: # %bb.0: # %entry 488; PWR10BE-NEXT: xscvspdpn f0, v2 489; PWR10BE-NEXT: xsaddsp f0, f1, f0 490; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 1 491; PWR10BE-NEXT: xscvspdpn f1, vs1 492; PWR10BE-NEXT: xsaddsp f0, f0, f1 493; PWR10BE-NEXT: xxswapd vs1, v2 494; PWR10BE-NEXT: xscvspdpn f1, vs1 495; PWR10BE-NEXT: xsaddsp f0, f0, f1 496; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 3 497; PWR10BE-NEXT: xscvspdpn f1, vs1 498; PWR10BE-NEXT: xsaddsp f0, f0, f1 499; PWR10BE-NEXT: xscvspdpn f1, v3 500; PWR10BE-NEXT: xsaddsp f0, f0, f1 501; PWR10BE-NEXT: xxsldwi vs1, v3, v3, 1 502; PWR10BE-NEXT: xscvspdpn f1, vs1 503; PWR10BE-NEXT: xsaddsp f0, f0, f1 504; PWR10BE-NEXT: xxswapd vs1, v3 505; PWR10BE-NEXT: xscvspdpn f1, vs1 506; PWR10BE-NEXT: xsaddsp f0, f0, f1 507; PWR10BE-NEXT: xxsldwi vs1, v3, v3, 3 508; PWR10BE-NEXT: xscvspdpn f1, vs1 509; PWR10BE-NEXT: xsaddsp f1, f0, f1 510; PWR10BE-NEXT: blr 511entry: 512 %0 = call float @llvm.vector.reduce.fadd.v8f32(float %b, <8 x float> %a) 513 ret float %0 514} 515 516define dso_local float @v8f32_fast(<8 x float> %a) local_unnamed_addr #0 { 517; PWR9LE-LABEL: v8f32_fast: 518; PWR9LE: # %bb.0: # %entry 519; PWR9LE-NEXT: xvaddsp vs0, v2, v3 520; PWR9LE-NEXT: xxswapd v2, vs0 521; PWR9LE-NEXT: xvaddsp vs0, vs0, v2 522; PWR9LE-NEXT: xxspltw vs1, vs0, 2 523; PWR9LE-NEXT: xvaddsp vs0, vs0, vs1 524; PWR9LE-NEXT: xxsldwi vs0, vs0, vs0, 3 525; PWR9LE-NEXT: xscvspdpn f1, vs0 526; PWR9LE-NEXT: blr 527; 528; PWR9BE-LABEL: v8f32_fast: 529; PWR9BE: # %bb.0: # %entry 530; PWR9BE-NEXT: xvaddsp vs0, v2, v3 531; PWR9BE-NEXT: xxswapd v2, vs0 532; PWR9BE-NEXT: xvaddsp vs0, vs0, v2 533; PWR9BE-NEXT: xxspltw vs1, vs0, 1 534; PWR9BE-NEXT: xvaddsp vs0, vs0, vs1 535; PWR9BE-NEXT: xscvspdpn f1, vs0 536; PWR9BE-NEXT: blr 537; 538; PWR10LE-LABEL: v8f32_fast: 539; PWR10LE: # %bb.0: # %entry 540; PWR10LE-NEXT: xvaddsp vs0, v2, v3 541; PWR10LE-NEXT: xxswapd v2, vs0 542; PWR10LE-NEXT: xvaddsp vs0, vs0, v2 543; PWR10LE-NEXT: xxspltw vs1, vs0, 2 544; PWR10LE-NEXT: xvaddsp vs0, vs0, vs1 545; PWR10LE-NEXT: xxsldwi vs0, vs0, vs0, 3 546; PWR10LE-NEXT: xscvspdpn f1, vs0 547; PWR10LE-NEXT: blr 548; 549; PWR10BE-LABEL: v8f32_fast: 550; PWR10BE: # %bb.0: # %entry 551; PWR10BE-NEXT: xvaddsp vs0, v2, v3 552; PWR10BE-NEXT: xxswapd v2, vs0 553; PWR10BE-NEXT: xvaddsp vs0, vs0, v2 554; PWR10BE-NEXT: xxspltw vs1, vs0, 1 555; PWR10BE-NEXT: xvaddsp vs0, vs0, vs1 556; PWR10BE-NEXT: xscvspdpn f1, vs0 557; PWR10BE-NEXT: blr 558entry: 559 %0 = call fast float @llvm.vector.reduce.fadd.v8f32(float -0.000000e+00, <8 x float> %a) 560 ret float %0 561} 562 563define dso_local float @v16f32(<16 x float> %a) local_unnamed_addr #0 { 564; PWR9LE-LABEL: v16f32: 565; PWR9LE: # %bb.0: # %entry 566; PWR9LE-NEXT: xxsldwi vs0, v2, v2, 3 567; PWR9LE-NEXT: xxswapd vs1, v2 568; PWR9LE-NEXT: xscvspdpn f0, vs0 569; PWR9LE-NEXT: xscvspdpn f1, vs1 570; PWR9LE-NEXT: xsaddsp f0, f0, f1 571; PWR9LE-NEXT: xxsldwi vs1, v2, v2, 1 572; PWR9LE-NEXT: xscvspdpn f1, vs1 573; PWR9LE-NEXT: xsaddsp f0, f0, f1 574; PWR9LE-NEXT: xscvspdpn f1, v2 575; PWR9LE-NEXT: xsaddsp f0, f0, f1 576; PWR9LE-NEXT: xxsldwi vs1, v3, v3, 3 577; PWR9LE-NEXT: xscvspdpn f1, vs1 578; PWR9LE-NEXT: xsaddsp f0, f0, f1 579; PWR9LE-NEXT: xxswapd vs1, v3 580; PWR9LE-NEXT: xscvspdpn f1, vs1 581; PWR9LE-NEXT: xsaddsp f0, f0, f1 582; PWR9LE-NEXT: xxsldwi vs1, v3, v3, 1 583; PWR9LE-NEXT: xscvspdpn f1, vs1 584; PWR9LE-NEXT: xsaddsp f0, f0, f1 585; PWR9LE-NEXT: xscvspdpn f1, v3 586; PWR9LE-NEXT: xsaddsp f0, f0, f1 587; PWR9LE-NEXT: xxsldwi vs1, v4, v4, 3 588; PWR9LE-NEXT: xscvspdpn f1, vs1 589; PWR9LE-NEXT: xsaddsp f0, f0, f1 590; PWR9LE-NEXT: xxswapd vs1, v4 591; PWR9LE-NEXT: xscvspdpn f1, vs1 592; PWR9LE-NEXT: xsaddsp f0, f0, f1 593; PWR9LE-NEXT: xxsldwi vs1, v4, v4, 1 594; PWR9LE-NEXT: xscvspdpn f1, vs1 595; PWR9LE-NEXT: xsaddsp f0, f0, f1 596; PWR9LE-NEXT: xscvspdpn f1, v4 597; PWR9LE-NEXT: xsaddsp f0, f0, f1 598; PWR9LE-NEXT: xxsldwi vs1, v5, v5, 3 599; PWR9LE-NEXT: xscvspdpn f1, vs1 600; PWR9LE-NEXT: xsaddsp f0, f0, f1 601; PWR9LE-NEXT: xxswapd vs1, v5 602; PWR9LE-NEXT: xscvspdpn f1, vs1 603; PWR9LE-NEXT: xsaddsp f0, f0, f1 604; PWR9LE-NEXT: xxsldwi vs1, v5, v5, 1 605; PWR9LE-NEXT: xscvspdpn f1, vs1 606; PWR9LE-NEXT: xsaddsp f0, f0, f1 607; PWR9LE-NEXT: xscvspdpn f1, v5 608; PWR9LE-NEXT: xsaddsp f1, f0, f1 609; PWR9LE-NEXT: blr 610; 611; PWR9BE-LABEL: v16f32: 612; PWR9BE: # %bb.0: # %entry 613; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 1 614; PWR9BE-NEXT: xscvspdpn f0, v2 615; PWR9BE-NEXT: xscvspdpn f1, vs1 616; PWR9BE-NEXT: xsaddsp f0, f0, f1 617; PWR9BE-NEXT: xxswapd vs1, v2 618; PWR9BE-NEXT: xscvspdpn f1, vs1 619; PWR9BE-NEXT: xsaddsp f0, f0, f1 620; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 3 621; PWR9BE-NEXT: xscvspdpn f1, vs1 622; PWR9BE-NEXT: xsaddsp f0, f0, f1 623; PWR9BE-NEXT: xscvspdpn f1, v3 624; PWR9BE-NEXT: xsaddsp f0, f0, f1 625; PWR9BE-NEXT: xxsldwi vs1, v3, v3, 1 626; PWR9BE-NEXT: xscvspdpn f1, vs1 627; PWR9BE-NEXT: xsaddsp f0, f0, f1 628; PWR9BE-NEXT: xxswapd vs1, v3 629; PWR9BE-NEXT: xscvspdpn f1, vs1 630; PWR9BE-NEXT: xsaddsp f0, f0, f1 631; PWR9BE-NEXT: xxsldwi vs1, v3, v3, 3 632; PWR9BE-NEXT: xscvspdpn f1, vs1 633; PWR9BE-NEXT: xsaddsp f0, f0, f1 634; PWR9BE-NEXT: xscvspdpn f1, v4 635; PWR9BE-NEXT: xsaddsp f0, f0, f1 636; PWR9BE-NEXT: xxsldwi vs1, v4, v4, 1 637; PWR9BE-NEXT: xscvspdpn f1, vs1 638; PWR9BE-NEXT: xsaddsp f0, f0, f1 639; PWR9BE-NEXT: xxswapd vs1, v4 640; PWR9BE-NEXT: xscvspdpn f1, vs1 641; PWR9BE-NEXT: xsaddsp f0, f0, f1 642; PWR9BE-NEXT: xxsldwi vs1, v4, v4, 3 643; PWR9BE-NEXT: xscvspdpn f1, vs1 644; PWR9BE-NEXT: xsaddsp f0, f0, f1 645; PWR9BE-NEXT: xscvspdpn f1, v5 646; PWR9BE-NEXT: xsaddsp f0, f0, f1 647; PWR9BE-NEXT: xxsldwi vs1, v5, v5, 1 648; PWR9BE-NEXT: xscvspdpn f1, vs1 649; PWR9BE-NEXT: xsaddsp f0, f0, f1 650; PWR9BE-NEXT: xxswapd vs1, v5 651; PWR9BE-NEXT: xscvspdpn f1, vs1 652; PWR9BE-NEXT: xsaddsp f0, f0, f1 653; PWR9BE-NEXT: xxsldwi vs1, v5, v5, 3 654; PWR9BE-NEXT: xscvspdpn f1, vs1 655; PWR9BE-NEXT: xsaddsp f1, f0, f1 656; PWR9BE-NEXT: blr 657; 658; PWR10LE-LABEL: v16f32: 659; PWR10LE: # %bb.0: # %entry 660; PWR10LE-NEXT: xxsldwi vs0, v2, v2, 3 661; PWR10LE-NEXT: xxswapd vs1, v2 662; PWR10LE-NEXT: xscvspdpn f0, vs0 663; PWR10LE-NEXT: xscvspdpn f1, vs1 664; PWR10LE-NEXT: xsaddsp f0, f0, f1 665; PWR10LE-NEXT: xxsldwi vs1, v2, v2, 1 666; PWR10LE-NEXT: xscvspdpn f1, vs1 667; PWR10LE-NEXT: xsaddsp f0, f0, f1 668; PWR10LE-NEXT: xscvspdpn f1, v2 669; PWR10LE-NEXT: xsaddsp f0, f0, f1 670; PWR10LE-NEXT: xxsldwi vs1, v3, v3, 3 671; PWR10LE-NEXT: xscvspdpn f1, vs1 672; PWR10LE-NEXT: xsaddsp f0, f0, f1 673; PWR10LE-NEXT: xxswapd vs1, v3 674; PWR10LE-NEXT: xscvspdpn f1, vs1 675; PWR10LE-NEXT: xsaddsp f0, f0, f1 676; PWR10LE-NEXT: xxsldwi vs1, v3, v3, 1 677; PWR10LE-NEXT: xscvspdpn f1, vs1 678; PWR10LE-NEXT: xsaddsp f0, f0, f1 679; PWR10LE-NEXT: xscvspdpn f1, v3 680; PWR10LE-NEXT: xsaddsp f0, f0, f1 681; PWR10LE-NEXT: xxsldwi vs1, v4, v4, 3 682; PWR10LE-NEXT: xscvspdpn f1, vs1 683; PWR10LE-NEXT: xsaddsp f0, f0, f1 684; PWR10LE-NEXT: xxswapd vs1, v4 685; PWR10LE-NEXT: xscvspdpn f1, vs1 686; PWR10LE-NEXT: xsaddsp f0, f0, f1 687; PWR10LE-NEXT: xxsldwi vs1, v4, v4, 1 688; PWR10LE-NEXT: xscvspdpn f1, vs1 689; PWR10LE-NEXT: xsaddsp f0, f0, f1 690; PWR10LE-NEXT: xscvspdpn f1, v4 691; PWR10LE-NEXT: xsaddsp f0, f0, f1 692; PWR10LE-NEXT: xxsldwi vs1, v5, v5, 3 693; PWR10LE-NEXT: xscvspdpn f1, vs1 694; PWR10LE-NEXT: xsaddsp f0, f0, f1 695; PWR10LE-NEXT: xxswapd vs1, v5 696; PWR10LE-NEXT: xscvspdpn f1, vs1 697; PWR10LE-NEXT: xsaddsp f0, f0, f1 698; PWR10LE-NEXT: xxsldwi vs1, v5, v5, 1 699; PWR10LE-NEXT: xscvspdpn f1, vs1 700; PWR10LE-NEXT: xsaddsp f0, f0, f1 701; PWR10LE-NEXT: xscvspdpn f1, v5 702; PWR10LE-NEXT: xsaddsp f1, f0, f1 703; PWR10LE-NEXT: blr 704; 705; PWR10BE-LABEL: v16f32: 706; PWR10BE: # %bb.0: # %entry 707; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 1 708; PWR10BE-NEXT: xscvspdpn f0, v2 709; PWR10BE-NEXT: xscvspdpn f1, vs1 710; PWR10BE-NEXT: xsaddsp f0, f0, f1 711; PWR10BE-NEXT: xxswapd vs1, v2 712; PWR10BE-NEXT: xscvspdpn f1, vs1 713; PWR10BE-NEXT: xsaddsp f0, f0, f1 714; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 3 715; PWR10BE-NEXT: xscvspdpn f1, vs1 716; PWR10BE-NEXT: xsaddsp f0, f0, f1 717; PWR10BE-NEXT: xscvspdpn f1, v3 718; PWR10BE-NEXT: xsaddsp f0, f0, f1 719; PWR10BE-NEXT: xxsldwi vs1, v3, v3, 1 720; PWR10BE-NEXT: xscvspdpn f1, vs1 721; PWR10BE-NEXT: xsaddsp f0, f0, f1 722; PWR10BE-NEXT: xxswapd vs1, v3 723; PWR10BE-NEXT: xscvspdpn f1, vs1 724; PWR10BE-NEXT: xsaddsp f0, f0, f1 725; PWR10BE-NEXT: xxsldwi vs1, v3, v3, 3 726; PWR10BE-NEXT: xscvspdpn f1, vs1 727; PWR10BE-NEXT: xsaddsp f0, f0, f1 728; PWR10BE-NEXT: xscvspdpn f1, v4 729; PWR10BE-NEXT: xsaddsp f0, f0, f1 730; PWR10BE-NEXT: xxsldwi vs1, v4, v4, 1 731; PWR10BE-NEXT: xscvspdpn f1, vs1 732; PWR10BE-NEXT: xsaddsp f0, f0, f1 733; PWR10BE-NEXT: xxswapd vs1, v4 734; PWR10BE-NEXT: xscvspdpn f1, vs1 735; PWR10BE-NEXT: xsaddsp f0, f0, f1 736; PWR10BE-NEXT: xxsldwi vs1, v4, v4, 3 737; PWR10BE-NEXT: xscvspdpn f1, vs1 738; PWR10BE-NEXT: xsaddsp f0, f0, f1 739; PWR10BE-NEXT: xscvspdpn f1, v5 740; PWR10BE-NEXT: xsaddsp f0, f0, f1 741; PWR10BE-NEXT: xxsldwi vs1, v5, v5, 1 742; PWR10BE-NEXT: xscvspdpn f1, vs1 743; PWR10BE-NEXT: xsaddsp f0, f0, f1 744; PWR10BE-NEXT: xxswapd vs1, v5 745; PWR10BE-NEXT: xscvspdpn f1, vs1 746; PWR10BE-NEXT: xsaddsp f0, f0, f1 747; PWR10BE-NEXT: xxsldwi vs1, v5, v5, 3 748; PWR10BE-NEXT: xscvspdpn f1, vs1 749; PWR10BE-NEXT: xsaddsp f1, f0, f1 750; PWR10BE-NEXT: blr 751entry: 752 %0 = call float @llvm.vector.reduce.fadd.v16f32(float -0.000000e+00, <16 x float> %a) 753 ret float %0 754} 755 756define dso_local float @v16f32_b(<16 x float> %a, float %b) local_unnamed_addr #0 { 757; PWR9LE-LABEL: v16f32_b: 758; PWR9LE: # %bb.0: # %entry 759; PWR9LE-NEXT: xxsldwi vs0, v2, v2, 3 760; PWR9LE-NEXT: xscvspdpn f0, vs0 761; PWR9LE-NEXT: xsaddsp f0, f1, f0 762; PWR9LE-NEXT: xxswapd vs1, v2 763; PWR9LE-NEXT: xscvspdpn f1, vs1 764; PWR9LE-NEXT: xsaddsp f0, f0, f1 765; PWR9LE-NEXT: xxsldwi vs1, v2, v2, 1 766; PWR9LE-NEXT: xscvspdpn f1, vs1 767; PWR9LE-NEXT: xsaddsp f0, f0, f1 768; PWR9LE-NEXT: xscvspdpn f1, v2 769; PWR9LE-NEXT: xsaddsp f0, f0, f1 770; PWR9LE-NEXT: xxsldwi vs1, v3, v3, 3 771; PWR9LE-NEXT: xscvspdpn f1, vs1 772; PWR9LE-NEXT: xsaddsp f0, f0, f1 773; PWR9LE-NEXT: xxswapd vs1, v3 774; PWR9LE-NEXT: xscvspdpn f1, vs1 775; PWR9LE-NEXT: xsaddsp f0, f0, f1 776; PWR9LE-NEXT: xxsldwi vs1, v3, v3, 1 777; PWR9LE-NEXT: xscvspdpn f1, vs1 778; PWR9LE-NEXT: xsaddsp f0, f0, f1 779; PWR9LE-NEXT: xscvspdpn f1, v3 780; PWR9LE-NEXT: xsaddsp f0, f0, f1 781; PWR9LE-NEXT: xxsldwi vs1, v4, v4, 3 782; PWR9LE-NEXT: xscvspdpn f1, vs1 783; PWR9LE-NEXT: xsaddsp f0, f0, f1 784; PWR9LE-NEXT: xxswapd vs1, v4 785; PWR9LE-NEXT: xscvspdpn f1, vs1 786; PWR9LE-NEXT: xsaddsp f0, f0, f1 787; PWR9LE-NEXT: xxsldwi vs1, v4, v4, 1 788; PWR9LE-NEXT: xscvspdpn f1, vs1 789; PWR9LE-NEXT: xsaddsp f0, f0, f1 790; PWR9LE-NEXT: xscvspdpn f1, v4 791; PWR9LE-NEXT: xsaddsp f0, f0, f1 792; PWR9LE-NEXT: xxsldwi vs1, v5, v5, 3 793; PWR9LE-NEXT: xscvspdpn f1, vs1 794; PWR9LE-NEXT: xsaddsp f0, f0, f1 795; PWR9LE-NEXT: xxswapd vs1, v5 796; PWR9LE-NEXT: xscvspdpn f1, vs1 797; PWR9LE-NEXT: xsaddsp f0, f0, f1 798; PWR9LE-NEXT: xxsldwi vs1, v5, v5, 1 799; PWR9LE-NEXT: xscvspdpn f1, vs1 800; PWR9LE-NEXT: xsaddsp f0, f0, f1 801; PWR9LE-NEXT: xscvspdpn f1, v5 802; PWR9LE-NEXT: xsaddsp f1, f0, f1 803; PWR9LE-NEXT: blr 804; 805; PWR9BE-LABEL: v16f32_b: 806; PWR9BE: # %bb.0: # %entry 807; PWR9BE-NEXT: xscvspdpn f0, v2 808; PWR9BE-NEXT: xsaddsp f0, f1, f0 809; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 1 810; PWR9BE-NEXT: xscvspdpn f1, vs1 811; PWR9BE-NEXT: xsaddsp f0, f0, f1 812; PWR9BE-NEXT: xxswapd vs1, v2 813; PWR9BE-NEXT: xscvspdpn f1, vs1 814; PWR9BE-NEXT: xsaddsp f0, f0, f1 815; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 3 816; PWR9BE-NEXT: xscvspdpn f1, vs1 817; PWR9BE-NEXT: xsaddsp f0, f0, f1 818; PWR9BE-NEXT: xscvspdpn f1, v3 819; PWR9BE-NEXT: xsaddsp f0, f0, f1 820; PWR9BE-NEXT: xxsldwi vs1, v3, v3, 1 821; PWR9BE-NEXT: xscvspdpn f1, vs1 822; PWR9BE-NEXT: xsaddsp f0, f0, f1 823; PWR9BE-NEXT: xxswapd vs1, v3 824; PWR9BE-NEXT: xscvspdpn f1, vs1 825; PWR9BE-NEXT: xsaddsp f0, f0, f1 826; PWR9BE-NEXT: xxsldwi vs1, v3, v3, 3 827; PWR9BE-NEXT: xscvspdpn f1, vs1 828; PWR9BE-NEXT: xsaddsp f0, f0, f1 829; PWR9BE-NEXT: xscvspdpn f1, v4 830; PWR9BE-NEXT: xsaddsp f0, f0, f1 831; PWR9BE-NEXT: xxsldwi vs1, v4, v4, 1 832; PWR9BE-NEXT: xscvspdpn f1, vs1 833; PWR9BE-NEXT: xsaddsp f0, f0, f1 834; PWR9BE-NEXT: xxswapd vs1, v4 835; PWR9BE-NEXT: xscvspdpn f1, vs1 836; PWR9BE-NEXT: xsaddsp f0, f0, f1 837; PWR9BE-NEXT: xxsldwi vs1, v4, v4, 3 838; PWR9BE-NEXT: xscvspdpn f1, vs1 839; PWR9BE-NEXT: xsaddsp f0, f0, f1 840; PWR9BE-NEXT: xscvspdpn f1, v5 841; PWR9BE-NEXT: xsaddsp f0, f0, f1 842; PWR9BE-NEXT: xxsldwi vs1, v5, v5, 1 843; PWR9BE-NEXT: xscvspdpn f1, vs1 844; PWR9BE-NEXT: xsaddsp f0, f0, f1 845; PWR9BE-NEXT: xxswapd vs1, v5 846; PWR9BE-NEXT: xscvspdpn f1, vs1 847; PWR9BE-NEXT: xsaddsp f0, f0, f1 848; PWR9BE-NEXT: xxsldwi vs1, v5, v5, 3 849; PWR9BE-NEXT: xscvspdpn f1, vs1 850; PWR9BE-NEXT: xsaddsp f1, f0, f1 851; PWR9BE-NEXT: blr 852; 853; PWR10LE-LABEL: v16f32_b: 854; PWR10LE: # %bb.0: # %entry 855; PWR10LE-NEXT: xxsldwi vs0, v2, v2, 3 856; PWR10LE-NEXT: xscvspdpn f0, vs0 857; PWR10LE-NEXT: xsaddsp f0, f1, f0 858; PWR10LE-NEXT: xxswapd vs1, v2 859; PWR10LE-NEXT: xscvspdpn f1, vs1 860; PWR10LE-NEXT: xsaddsp f0, f0, f1 861; PWR10LE-NEXT: xxsldwi vs1, v2, v2, 1 862; PWR10LE-NEXT: xscvspdpn f1, vs1 863; PWR10LE-NEXT: xsaddsp f0, f0, f1 864; PWR10LE-NEXT: xscvspdpn f1, v2 865; PWR10LE-NEXT: xsaddsp f0, f0, f1 866; PWR10LE-NEXT: xxsldwi vs1, v3, v3, 3 867; PWR10LE-NEXT: xscvspdpn f1, vs1 868; PWR10LE-NEXT: xsaddsp f0, f0, f1 869; PWR10LE-NEXT: xxswapd vs1, v3 870; PWR10LE-NEXT: xscvspdpn f1, vs1 871; PWR10LE-NEXT: xsaddsp f0, f0, f1 872; PWR10LE-NEXT: xxsldwi vs1, v3, v3, 1 873; PWR10LE-NEXT: xscvspdpn f1, vs1 874; PWR10LE-NEXT: xsaddsp f0, f0, f1 875; PWR10LE-NEXT: xscvspdpn f1, v3 876; PWR10LE-NEXT: xsaddsp f0, f0, f1 877; PWR10LE-NEXT: xxsldwi vs1, v4, v4, 3 878; PWR10LE-NEXT: xscvspdpn f1, vs1 879; PWR10LE-NEXT: xsaddsp f0, f0, f1 880; PWR10LE-NEXT: xxswapd vs1, v4 881; PWR10LE-NEXT: xscvspdpn f1, vs1 882; PWR10LE-NEXT: xsaddsp f0, f0, f1 883; PWR10LE-NEXT: xxsldwi vs1, v4, v4, 1 884; PWR10LE-NEXT: xscvspdpn f1, vs1 885; PWR10LE-NEXT: xsaddsp f0, f0, f1 886; PWR10LE-NEXT: xscvspdpn f1, v4 887; PWR10LE-NEXT: xsaddsp f0, f0, f1 888; PWR10LE-NEXT: xxsldwi vs1, v5, v5, 3 889; PWR10LE-NEXT: xscvspdpn f1, vs1 890; PWR10LE-NEXT: xsaddsp f0, f0, f1 891; PWR10LE-NEXT: xxswapd vs1, v5 892; PWR10LE-NEXT: xscvspdpn f1, vs1 893; PWR10LE-NEXT: xsaddsp f0, f0, f1 894; PWR10LE-NEXT: xxsldwi vs1, v5, v5, 1 895; PWR10LE-NEXT: xscvspdpn f1, vs1 896; PWR10LE-NEXT: xsaddsp f0, f0, f1 897; PWR10LE-NEXT: xscvspdpn f1, v5 898; PWR10LE-NEXT: xsaddsp f1, f0, f1 899; PWR10LE-NEXT: blr 900; 901; PWR10BE-LABEL: v16f32_b: 902; PWR10BE: # %bb.0: # %entry 903; PWR10BE-NEXT: xscvspdpn f0, v2 904; PWR10BE-NEXT: xsaddsp f0, f1, f0 905; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 1 906; PWR10BE-NEXT: xscvspdpn f1, vs1 907; PWR10BE-NEXT: xsaddsp f0, f0, f1 908; PWR10BE-NEXT: xxswapd vs1, v2 909; PWR10BE-NEXT: xscvspdpn f1, vs1 910; PWR10BE-NEXT: xsaddsp f0, f0, f1 911; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 3 912; PWR10BE-NEXT: xscvspdpn f1, vs1 913; PWR10BE-NEXT: xsaddsp f0, f0, f1 914; PWR10BE-NEXT: xscvspdpn f1, v3 915; PWR10BE-NEXT: xsaddsp f0, f0, f1 916; PWR10BE-NEXT: xxsldwi vs1, v3, v3, 1 917; PWR10BE-NEXT: xscvspdpn f1, vs1 918; PWR10BE-NEXT: xsaddsp f0, f0, f1 919; PWR10BE-NEXT: xxswapd vs1, v3 920; PWR10BE-NEXT: xscvspdpn f1, vs1 921; PWR10BE-NEXT: xsaddsp f0, f0, f1 922; PWR10BE-NEXT: xxsldwi vs1, v3, v3, 3 923; PWR10BE-NEXT: xscvspdpn f1, vs1 924; PWR10BE-NEXT: xsaddsp f0, f0, f1 925; PWR10BE-NEXT: xscvspdpn f1, v4 926; PWR10BE-NEXT: xsaddsp f0, f0, f1 927; PWR10BE-NEXT: xxsldwi vs1, v4, v4, 1 928; PWR10BE-NEXT: xscvspdpn f1, vs1 929; PWR10BE-NEXT: xsaddsp f0, f0, f1 930; PWR10BE-NEXT: xxswapd vs1, v4 931; PWR10BE-NEXT: xscvspdpn f1, vs1 932; PWR10BE-NEXT: xsaddsp f0, f0, f1 933; PWR10BE-NEXT: xxsldwi vs1, v4, v4, 3 934; PWR10BE-NEXT: xscvspdpn f1, vs1 935; PWR10BE-NEXT: xsaddsp f0, f0, f1 936; PWR10BE-NEXT: xscvspdpn f1, v5 937; PWR10BE-NEXT: xsaddsp f0, f0, f1 938; PWR10BE-NEXT: xxsldwi vs1, v5, v5, 1 939; PWR10BE-NEXT: xscvspdpn f1, vs1 940; PWR10BE-NEXT: xsaddsp f0, f0, f1 941; PWR10BE-NEXT: xxswapd vs1, v5 942; PWR10BE-NEXT: xscvspdpn f1, vs1 943; PWR10BE-NEXT: xsaddsp f0, f0, f1 944; PWR10BE-NEXT: xxsldwi vs1, v5, v5, 3 945; PWR10BE-NEXT: xscvspdpn f1, vs1 946; PWR10BE-NEXT: xsaddsp f1, f0, f1 947; PWR10BE-NEXT: blr 948entry: 949 %0 = call float @llvm.vector.reduce.fadd.v16f32(float %b, <16 x float> %a) 950 ret float %0 951} 952 953define dso_local float @v16f32_fast(<16 x float> %a) local_unnamed_addr #0 { 954; PWR9LE-LABEL: v16f32_fast: 955; PWR9LE: # %bb.0: # %entry 956; PWR9LE-NEXT: xvaddsp vs0, v3, v5 957; PWR9LE-NEXT: xvaddsp vs1, v2, v4 958; PWR9LE-NEXT: xvaddsp vs0, vs1, vs0 959; PWR9LE-NEXT: xxswapd v2, vs0 960; PWR9LE-NEXT: xvaddsp vs0, vs0, v2 961; PWR9LE-NEXT: xxspltw vs1, vs0, 2 962; PWR9LE-NEXT: xvaddsp vs0, vs0, vs1 963; PWR9LE-NEXT: xxsldwi vs0, vs0, vs0, 3 964; PWR9LE-NEXT: xscvspdpn f1, vs0 965; PWR9LE-NEXT: blr 966; 967; PWR9BE-LABEL: v16f32_fast: 968; PWR9BE: # %bb.0: # %entry 969; PWR9BE-NEXT: xvaddsp vs0, v3, v5 970; PWR9BE-NEXT: xvaddsp vs1, v2, v4 971; PWR9BE-NEXT: xvaddsp vs0, vs1, vs0 972; PWR9BE-NEXT: xxswapd v2, vs0 973; PWR9BE-NEXT: xvaddsp vs0, vs0, v2 974; PWR9BE-NEXT: xxspltw vs1, vs0, 1 975; PWR9BE-NEXT: xvaddsp vs0, vs0, vs1 976; PWR9BE-NEXT: xscvspdpn f1, vs0 977; PWR9BE-NEXT: blr 978; 979; PWR10LE-LABEL: v16f32_fast: 980; PWR10LE: # %bb.0: # %entry 981; PWR10LE-NEXT: xvaddsp vs0, v3, v5 982; PWR10LE-NEXT: xvaddsp vs1, v2, v4 983; PWR10LE-NEXT: xvaddsp vs0, vs1, vs0 984; PWR10LE-NEXT: xxswapd v2, vs0 985; PWR10LE-NEXT: xvaddsp vs0, vs0, v2 986; PWR10LE-NEXT: xxspltw vs1, vs0, 2 987; PWR10LE-NEXT: xvaddsp vs0, vs0, vs1 988; PWR10LE-NEXT: xxsldwi vs0, vs0, vs0, 3 989; PWR10LE-NEXT: xscvspdpn f1, vs0 990; PWR10LE-NEXT: blr 991; 992; PWR10BE-LABEL: v16f32_fast: 993; PWR10BE: # %bb.0: # %entry 994; PWR10BE-NEXT: xvaddsp vs0, v3, v5 995; PWR10BE-NEXT: xvaddsp vs1, v2, v4 996; PWR10BE-NEXT: xvaddsp vs0, vs1, vs0 997; PWR10BE-NEXT: xxswapd v2, vs0 998; PWR10BE-NEXT: xvaddsp vs0, vs0, v2 999; PWR10BE-NEXT: xxspltw vs1, vs0, 1 1000; PWR10BE-NEXT: xvaddsp vs0, vs0, vs1 1001; PWR10BE-NEXT: xscvspdpn f1, vs0 1002; PWR10BE-NEXT: blr 1003entry: 1004 %0 = call fast float @llvm.vector.reduce.fadd.v16f32(float -0.000000e+00, <16 x float> %a) 1005 ret float %0 1006} 1007 1008declare float @llvm.vector.reduce.fadd.v2f32(float, <2 x float>) #0 1009declare float @llvm.vector.reduce.fadd.v4f32(float, <4 x float>) #0 1010declare float @llvm.vector.reduce.fadd.v8f32(float, <8 x float>) #0 1011declare float @llvm.vector.reduce.fadd.v16f32(float, <16 x float>) #0 1012 1013;; 1014;; Vectors of f64 1015;; 1016define dso_local double @v2f64(<2 x double> %a) local_unnamed_addr #0 { 1017; PWR9LE-LABEL: v2f64: 1018; PWR9LE: # %bb.0: # %entry 1019; PWR9LE-NEXT: xxswapd vs0, v2 1020; PWR9LE-NEXT: xsadddp f1, f0, v2 1021; PWR9LE-NEXT: blr 1022; 1023; PWR9BE-LABEL: v2f64: 1024; PWR9BE: # %bb.0: # %entry 1025; PWR9BE-NEXT: xxswapd vs0, v2 1026; PWR9BE-NEXT: xsadddp f1, v2, f0 1027; PWR9BE-NEXT: blr 1028; 1029; PWR10LE-LABEL: v2f64: 1030; PWR10LE: # %bb.0: # %entry 1031; PWR10LE-NEXT: xxswapd vs0, v2 1032; PWR10LE-NEXT: xsadddp f1, f0, v2 1033; PWR10LE-NEXT: blr 1034; 1035; PWR10BE-LABEL: v2f64: 1036; PWR10BE: # %bb.0: # %entry 1037; PWR10BE-NEXT: xxswapd vs0, v2 1038; PWR10BE-NEXT: xsadddp f1, v2, f0 1039; PWR10BE-NEXT: blr 1040entry: 1041 %0 = call double @llvm.vector.reduce.fadd.v2f64(double -0.000000e+00, <2 x double> %a) 1042 ret double %0 1043} 1044 1045define dso_local double @v2f64_b(<2 x double> %a, double %b) local_unnamed_addr #0 { 1046; PWR9LE-LABEL: v2f64_b: 1047; PWR9LE: # %bb.0: # %entry 1048; PWR9LE-NEXT: xxswapd vs0, v2 1049; PWR9LE-NEXT: xsadddp f0, f1, f0 1050; PWR9LE-NEXT: xsadddp f1, f0, v2 1051; PWR9LE-NEXT: blr 1052; 1053; PWR9BE-LABEL: v2f64_b: 1054; PWR9BE: # %bb.0: # %entry 1055; PWR9BE-NEXT: xsadddp f0, f1, v2 1056; PWR9BE-NEXT: xxswapd vs1, v2 1057; PWR9BE-NEXT: xsadddp f1, f0, f1 1058; PWR9BE-NEXT: blr 1059; 1060; PWR10LE-LABEL: v2f64_b: 1061; PWR10LE: # %bb.0: # %entry 1062; PWR10LE-NEXT: xxswapd vs0, v2 1063; PWR10LE-NEXT: xsadddp f0, f1, f0 1064; PWR10LE-NEXT: xsadddp f1, f0, v2 1065; PWR10LE-NEXT: blr 1066; 1067; PWR10BE-LABEL: v2f64_b: 1068; PWR10BE: # %bb.0: # %entry 1069; PWR10BE-NEXT: xsadddp f0, f1, v2 1070; PWR10BE-NEXT: xxswapd vs1, v2 1071; PWR10BE-NEXT: xsadddp f1, f0, f1 1072; PWR10BE-NEXT: blr 1073entry: 1074 %0 = call double @llvm.vector.reduce.fadd.v2f64(double %b, <2 x double> %a) 1075 ret double %0 1076} 1077 1078define dso_local double @v2f64_fast(<2 x double> %a) local_unnamed_addr #0 { 1079; PWR9LE-LABEL: v2f64_fast: 1080; PWR9LE: # %bb.0: # %entry 1081; PWR9LE-NEXT: xxswapd vs0, v2 1082; PWR9LE-NEXT: xvadddp vs0, v2, vs0 1083; PWR9LE-NEXT: xxswapd vs1, vs0 1084; PWR9LE-NEXT: blr 1085; 1086; PWR9BE-LABEL: v2f64_fast: 1087; PWR9BE: # %bb.0: # %entry 1088; PWR9BE-NEXT: xxswapd vs0, v2 1089; PWR9BE-NEXT: xvadddp vs1, v2, vs0 1090; PWR9BE-NEXT: blr 1091; 1092; PWR10LE-LABEL: v2f64_fast: 1093; PWR10LE: # %bb.0: # %entry 1094; PWR10LE-NEXT: xxswapd vs0, v2 1095; PWR10LE-NEXT: xvadddp vs0, v2, vs0 1096; PWR10LE-NEXT: xxswapd vs1, vs0 1097; PWR10LE-NEXT: blr 1098; 1099; PWR10BE-LABEL: v2f64_fast: 1100; PWR10BE: # %bb.0: # %entry 1101; PWR10BE-NEXT: xxswapd vs0, v2 1102; PWR10BE-NEXT: xvadddp vs1, v2, vs0 1103; PWR10BE-NEXT: blr 1104entry: 1105 %0 = call fast double @llvm.vector.reduce.fadd.v2f64(double -0.000000e+00, <2 x double> %a) 1106 ret double %0 1107} 1108 1109define dso_local double @v4f64(<4 x double> %a) local_unnamed_addr #0 { 1110; PWR9LE-LABEL: v4f64: 1111; PWR9LE: # %bb.0: # %entry 1112; PWR9LE-NEXT: xxswapd vs0, v2 1113; PWR9LE-NEXT: xxswapd vs1, v3 1114; PWR9LE-NEXT: xsadddp f0, f0, v2 1115; PWR9LE-NEXT: xsadddp f0, f0, f1 1116; PWR9LE-NEXT: xsadddp f1, f0, v3 1117; PWR9LE-NEXT: blr 1118; 1119; PWR9BE-LABEL: v4f64: 1120; PWR9BE: # %bb.0: # %entry 1121; PWR9BE-NEXT: xxswapd vs0, v2 1122; PWR9BE-NEXT: xxswapd vs1, v3 1123; PWR9BE-NEXT: xsadddp f0, v2, f0 1124; PWR9BE-NEXT: xsadddp f0, f0, v3 1125; PWR9BE-NEXT: xsadddp f1, f0, f1 1126; PWR9BE-NEXT: blr 1127; 1128; PWR10LE-LABEL: v4f64: 1129; PWR10LE: # %bb.0: # %entry 1130; PWR10LE-NEXT: xxswapd vs0, v2 1131; PWR10LE-NEXT: xxswapd vs1, v3 1132; PWR10LE-NEXT: xsadddp f0, f0, v2 1133; PWR10LE-NEXT: xsadddp f0, f0, f1 1134; PWR10LE-NEXT: xsadddp f1, f0, v3 1135; PWR10LE-NEXT: blr 1136; 1137; PWR10BE-LABEL: v4f64: 1138; PWR10BE: # %bb.0: # %entry 1139; PWR10BE-NEXT: xxswapd vs0, v2 1140; PWR10BE-NEXT: xxswapd vs1, v3 1141; PWR10BE-NEXT: xsadddp f0, v2, f0 1142; PWR10BE-NEXT: xsadddp f0, f0, v3 1143; PWR10BE-NEXT: xsadddp f1, f0, f1 1144; PWR10BE-NEXT: blr 1145entry: 1146 %0 = call double @llvm.vector.reduce.fadd.v4f64(double -0.000000e+00, <4 x double> %a) 1147 ret double %0 1148} 1149 1150define dso_local double @v4f64_b(<4 x double> %a, double %b) local_unnamed_addr #0 { 1151; PWR9LE-LABEL: v4f64_b: 1152; PWR9LE: # %bb.0: # %entry 1153; PWR9LE-NEXT: xxswapd vs0, v2 1154; PWR9LE-NEXT: xsadddp f0, f1, f0 1155; PWR9LE-NEXT: xxswapd vs1, v3 1156; PWR9LE-NEXT: xsadddp f0, f0, v2 1157; PWR9LE-NEXT: xsadddp f0, f0, f1 1158; PWR9LE-NEXT: xsadddp f1, f0, v3 1159; PWR9LE-NEXT: blr 1160; 1161; PWR9BE-LABEL: v4f64_b: 1162; PWR9BE: # %bb.0: # %entry 1163; PWR9BE-NEXT: xsadddp f0, f1, v2 1164; PWR9BE-NEXT: xxswapd vs1, v2 1165; PWR9BE-NEXT: xsadddp f0, f0, f1 1166; PWR9BE-NEXT: xxswapd vs1, v3 1167; PWR9BE-NEXT: xsadddp f0, f0, v3 1168; PWR9BE-NEXT: xsadddp f1, f0, f1 1169; PWR9BE-NEXT: blr 1170; 1171; PWR10LE-LABEL: v4f64_b: 1172; PWR10LE: # %bb.0: # %entry 1173; PWR10LE-NEXT: xxswapd vs0, v2 1174; PWR10LE-NEXT: xsadddp f0, f1, f0 1175; PWR10LE-NEXT: xxswapd vs1, v3 1176; PWR10LE-NEXT: xsadddp f0, f0, v2 1177; PWR10LE-NEXT: xsadddp f0, f0, f1 1178; PWR10LE-NEXT: xsadddp f1, f0, v3 1179; PWR10LE-NEXT: blr 1180; 1181; PWR10BE-LABEL: v4f64_b: 1182; PWR10BE: # %bb.0: # %entry 1183; PWR10BE-NEXT: xsadddp f0, f1, v2 1184; PWR10BE-NEXT: xxswapd vs1, v2 1185; PWR10BE-NEXT: xsadddp f0, f0, f1 1186; PWR10BE-NEXT: xxswapd vs1, v3 1187; PWR10BE-NEXT: xsadddp f0, f0, v3 1188; PWR10BE-NEXT: xsadddp f1, f0, f1 1189; PWR10BE-NEXT: blr 1190entry: 1191 %0 = call double @llvm.vector.reduce.fadd.v4f64(double %b, <4 x double> %a) 1192 ret double %0 1193} 1194 1195define dso_local double @v4f64_fast(<4 x double> %a) local_unnamed_addr #0 { 1196; PWR9LE-LABEL: v4f64_fast: 1197; PWR9LE: # %bb.0: # %entry 1198; PWR9LE-NEXT: xvadddp vs0, v2, v3 1199; PWR9LE-NEXT: xxswapd vs1, vs0 1200; PWR9LE-NEXT: xvadddp vs0, vs0, vs1 1201; PWR9LE-NEXT: xxswapd vs1, vs0 1202; PWR9LE-NEXT: blr 1203; 1204; PWR9BE-LABEL: v4f64_fast: 1205; PWR9BE: # %bb.0: # %entry 1206; PWR9BE-NEXT: xvadddp vs0, v2, v3 1207; PWR9BE-NEXT: xxswapd vs1, vs0 1208; PWR9BE-NEXT: xvadddp vs1, vs0, vs1 1209; PWR9BE-NEXT: blr 1210; 1211; PWR10LE-LABEL: v4f64_fast: 1212; PWR10LE: # %bb.0: # %entry 1213; PWR10LE-NEXT: xvadddp vs0, v2, v3 1214; PWR10LE-NEXT: xxswapd vs1, vs0 1215; PWR10LE-NEXT: xvadddp vs0, vs0, vs1 1216; PWR10LE-NEXT: xxswapd vs1, vs0 1217; PWR10LE-NEXT: blr 1218; 1219; PWR10BE-LABEL: v4f64_fast: 1220; PWR10BE: # %bb.0: # %entry 1221; PWR10BE-NEXT: xvadddp vs0, v2, v3 1222; PWR10BE-NEXT: xxswapd vs1, vs0 1223; PWR10BE-NEXT: xvadddp vs1, vs0, vs1 1224; PWR10BE-NEXT: blr 1225entry: 1226 %0 = call fast double @llvm.vector.reduce.fadd.v4f64(double -0.000000e+00, <4 x double> %a) 1227 ret double %0 1228} 1229 1230define dso_local double @v8f64(<8 x double> %a) local_unnamed_addr #0 { 1231; PWR9LE-LABEL: v8f64: 1232; PWR9LE: # %bb.0: # %entry 1233; PWR9LE-NEXT: xxswapd vs0, v2 1234; PWR9LE-NEXT: xxswapd vs1, v3 1235; PWR9LE-NEXT: xsadddp f0, f0, v2 1236; PWR9LE-NEXT: xsadddp f0, f0, f1 1237; PWR9LE-NEXT: xxswapd vs1, v4 1238; PWR9LE-NEXT: xsadddp f0, f0, v3 1239; PWR9LE-NEXT: xsadddp f0, f0, f1 1240; PWR9LE-NEXT: xxswapd vs1, v5 1241; PWR9LE-NEXT: xsadddp f0, f0, v4 1242; PWR9LE-NEXT: xsadddp f0, f0, f1 1243; PWR9LE-NEXT: xsadddp f1, f0, v5 1244; PWR9LE-NEXT: blr 1245; 1246; PWR9BE-LABEL: v8f64: 1247; PWR9BE: # %bb.0: # %entry 1248; PWR9BE-NEXT: xxswapd vs0, v2 1249; PWR9BE-NEXT: xxswapd vs1, v3 1250; PWR9BE-NEXT: xsadddp f0, v2, f0 1251; PWR9BE-NEXT: xsadddp f0, f0, v3 1252; PWR9BE-NEXT: xsadddp f0, f0, f1 1253; PWR9BE-NEXT: xxswapd vs1, v4 1254; PWR9BE-NEXT: xsadddp f0, f0, v4 1255; PWR9BE-NEXT: xsadddp f0, f0, f1 1256; PWR9BE-NEXT: xxswapd vs1, v5 1257; PWR9BE-NEXT: xsadddp f0, f0, v5 1258; PWR9BE-NEXT: xsadddp f1, f0, f1 1259; PWR9BE-NEXT: blr 1260; 1261; PWR10LE-LABEL: v8f64: 1262; PWR10LE: # %bb.0: # %entry 1263; PWR10LE-NEXT: xxswapd vs0, v2 1264; PWR10LE-NEXT: xxswapd vs1, v3 1265; PWR10LE-NEXT: xsadddp f0, f0, v2 1266; PWR10LE-NEXT: xsadddp f0, f0, f1 1267; PWR10LE-NEXT: xxswapd vs1, v4 1268; PWR10LE-NEXT: xsadddp f0, f0, v3 1269; PWR10LE-NEXT: xsadddp f0, f0, f1 1270; PWR10LE-NEXT: xxswapd vs1, v5 1271; PWR10LE-NEXT: xsadddp f0, f0, v4 1272; PWR10LE-NEXT: xsadddp f0, f0, f1 1273; PWR10LE-NEXT: xsadddp f1, f0, v5 1274; PWR10LE-NEXT: blr 1275; 1276; PWR10BE-LABEL: v8f64: 1277; PWR10BE: # %bb.0: # %entry 1278; PWR10BE-NEXT: xxswapd vs0, v2 1279; PWR10BE-NEXT: xxswapd vs1, v3 1280; PWR10BE-NEXT: xsadddp f0, v2, f0 1281; PWR10BE-NEXT: xsadddp f0, f0, v3 1282; PWR10BE-NEXT: xsadddp f0, f0, f1 1283; PWR10BE-NEXT: xxswapd vs1, v4 1284; PWR10BE-NEXT: xsadddp f0, f0, v4 1285; PWR10BE-NEXT: xsadddp f0, f0, f1 1286; PWR10BE-NEXT: xxswapd vs1, v5 1287; PWR10BE-NEXT: xsadddp f0, f0, v5 1288; PWR10BE-NEXT: xsadddp f1, f0, f1 1289; PWR10BE-NEXT: blr 1290entry: 1291 %0 = call double @llvm.vector.reduce.fadd.v8f64(double -0.000000e+00, <8 x double> %a) 1292 ret double %0 1293} 1294 1295define dso_local double @v8f64_b(<8 x double> %a, double %b) local_unnamed_addr #0 { 1296; PWR9LE-LABEL: v8f64_b: 1297; PWR9LE: # %bb.0: # %entry 1298; PWR9LE-NEXT: xxswapd vs0, v2 1299; PWR9LE-NEXT: xsadddp f0, f1, f0 1300; PWR9LE-NEXT: xxswapd vs1, v3 1301; PWR9LE-NEXT: xsadddp f0, f0, v2 1302; PWR9LE-NEXT: xsadddp f0, f0, f1 1303; PWR9LE-NEXT: xxswapd vs1, v4 1304; PWR9LE-NEXT: xsadddp f0, f0, v3 1305; PWR9LE-NEXT: xsadddp f0, f0, f1 1306; PWR9LE-NEXT: xxswapd vs1, v5 1307; PWR9LE-NEXT: xsadddp f0, f0, v4 1308; PWR9LE-NEXT: xsadddp f0, f0, f1 1309; PWR9LE-NEXT: xsadddp f1, f0, v5 1310; PWR9LE-NEXT: blr 1311; 1312; PWR9BE-LABEL: v8f64_b: 1313; PWR9BE: # %bb.0: # %entry 1314; PWR9BE-NEXT: xsadddp f0, f1, v2 1315; PWR9BE-NEXT: xxswapd vs1, v2 1316; PWR9BE-NEXT: xsadddp f0, f0, f1 1317; PWR9BE-NEXT: xxswapd vs1, v3 1318; PWR9BE-NEXT: xsadddp f0, f0, v3 1319; PWR9BE-NEXT: xsadddp f0, f0, f1 1320; PWR9BE-NEXT: xxswapd vs1, v4 1321; PWR9BE-NEXT: xsadddp f0, f0, v4 1322; PWR9BE-NEXT: xsadddp f0, f0, f1 1323; PWR9BE-NEXT: xxswapd vs1, v5 1324; PWR9BE-NEXT: xsadddp f0, f0, v5 1325; PWR9BE-NEXT: xsadddp f1, f0, f1 1326; PWR9BE-NEXT: blr 1327; 1328; PWR10LE-LABEL: v8f64_b: 1329; PWR10LE: # %bb.0: # %entry 1330; PWR10LE-NEXT: xxswapd vs0, v2 1331; PWR10LE-NEXT: xsadddp f0, f1, f0 1332; PWR10LE-NEXT: xxswapd vs1, v3 1333; PWR10LE-NEXT: xsadddp f0, f0, v2 1334; PWR10LE-NEXT: xsadddp f0, f0, f1 1335; PWR10LE-NEXT: xxswapd vs1, v4 1336; PWR10LE-NEXT: xsadddp f0, f0, v3 1337; PWR10LE-NEXT: xsadddp f0, f0, f1 1338; PWR10LE-NEXT: xxswapd vs1, v5 1339; PWR10LE-NEXT: xsadddp f0, f0, v4 1340; PWR10LE-NEXT: xsadddp f0, f0, f1 1341; PWR10LE-NEXT: xsadddp f1, f0, v5 1342; PWR10LE-NEXT: blr 1343; 1344; PWR10BE-LABEL: v8f64_b: 1345; PWR10BE: # %bb.0: # %entry 1346; PWR10BE-NEXT: xsadddp f0, f1, v2 1347; PWR10BE-NEXT: xxswapd vs1, v2 1348; PWR10BE-NEXT: xsadddp f0, f0, f1 1349; PWR10BE-NEXT: xxswapd vs1, v3 1350; PWR10BE-NEXT: xsadddp f0, f0, v3 1351; PWR10BE-NEXT: xsadddp f0, f0, f1 1352; PWR10BE-NEXT: xxswapd vs1, v4 1353; PWR10BE-NEXT: xsadddp f0, f0, v4 1354; PWR10BE-NEXT: xsadddp f0, f0, f1 1355; PWR10BE-NEXT: xxswapd vs1, v5 1356; PWR10BE-NEXT: xsadddp f0, f0, v5 1357; PWR10BE-NEXT: xsadddp f1, f0, f1 1358; PWR10BE-NEXT: blr 1359entry: 1360 %0 = call double @llvm.vector.reduce.fadd.v8f64(double %b, <8 x double> %a) 1361 ret double %0 1362} 1363 1364define dso_local double @v8f64_fast(<8 x double> %a) local_unnamed_addr #0 { 1365; PWR9LE-LABEL: v8f64_fast: 1366; PWR9LE: # %bb.0: # %entry 1367; PWR9LE-NEXT: xvadddp vs0, v3, v5 1368; PWR9LE-NEXT: xvadddp vs1, v2, v4 1369; PWR9LE-NEXT: xvadddp vs0, vs1, vs0 1370; PWR9LE-NEXT: xxswapd vs1, vs0 1371; PWR9LE-NEXT: xvadddp vs0, vs0, vs1 1372; PWR9LE-NEXT: xxswapd vs1, vs0 1373; PWR9LE-NEXT: blr 1374; 1375; PWR9BE-LABEL: v8f64_fast: 1376; PWR9BE: # %bb.0: # %entry 1377; PWR9BE-NEXT: xvadddp vs0, v3, v5 1378; PWR9BE-NEXT: xvadddp vs1, v2, v4 1379; PWR9BE-NEXT: xvadddp vs0, vs1, vs0 1380; PWR9BE-NEXT: xxswapd vs1, vs0 1381; PWR9BE-NEXT: xvadddp vs1, vs0, vs1 1382; PWR9BE-NEXT: blr 1383; 1384; PWR10LE-LABEL: v8f64_fast: 1385; PWR10LE: # %bb.0: # %entry 1386; PWR10LE-NEXT: xvadddp vs0, v3, v5 1387; PWR10LE-NEXT: xvadddp vs1, v2, v4 1388; PWR10LE-NEXT: xvadddp vs0, vs1, vs0 1389; PWR10LE-NEXT: xxswapd vs1, vs0 1390; PWR10LE-NEXT: xvadddp vs0, vs0, vs1 1391; PWR10LE-NEXT: xxswapd vs1, vs0 1392; PWR10LE-NEXT: blr 1393; 1394; PWR10BE-LABEL: v8f64_fast: 1395; PWR10BE: # %bb.0: # %entry 1396; PWR10BE-NEXT: xvadddp vs0, v3, v5 1397; PWR10BE-NEXT: xvadddp vs1, v2, v4 1398; PWR10BE-NEXT: xvadddp vs0, vs1, vs0 1399; PWR10BE-NEXT: xxswapd vs1, vs0 1400; PWR10BE-NEXT: xvadddp vs1, vs0, vs1 1401; PWR10BE-NEXT: blr 1402entry: 1403 %0 = call fast double @llvm.vector.reduce.fadd.v8f64(double -0.000000e+00, <8 x double> %a) 1404 ret double %0 1405} 1406 1407define dso_local double @v16f64(<16 x double> %a) local_unnamed_addr #0 { 1408; PWR9LE-LABEL: v16f64: 1409; PWR9LE: # %bb.0: # %entry 1410; PWR9LE-NEXT: xxswapd vs0, v2 1411; PWR9LE-NEXT: xxswapd vs1, v3 1412; PWR9LE-NEXT: xsadddp f0, f0, v2 1413; PWR9LE-NEXT: xsadddp f0, f0, f1 1414; PWR9LE-NEXT: xxswapd vs1, v4 1415; PWR9LE-NEXT: xsadddp f0, f0, v3 1416; PWR9LE-NEXT: xsadddp f0, f0, f1 1417; PWR9LE-NEXT: xxswapd vs1, v5 1418; PWR9LE-NEXT: xsadddp f0, f0, v4 1419; PWR9LE-NEXT: xsadddp f0, f0, f1 1420; PWR9LE-NEXT: xxswapd vs1, v6 1421; PWR9LE-NEXT: xsadddp f0, f0, v5 1422; PWR9LE-NEXT: xsadddp f0, f0, f1 1423; PWR9LE-NEXT: xxswapd vs1, v7 1424; PWR9LE-NEXT: xsadddp f0, f0, v6 1425; PWR9LE-NEXT: xsadddp f0, f0, f1 1426; PWR9LE-NEXT: xxswapd vs1, v8 1427; PWR9LE-NEXT: xsadddp f0, f0, v7 1428; PWR9LE-NEXT: xsadddp f0, f0, f1 1429; PWR9LE-NEXT: xxswapd vs1, v9 1430; PWR9LE-NEXT: xsadddp f0, f0, v8 1431; PWR9LE-NEXT: xsadddp f0, f0, f1 1432; PWR9LE-NEXT: xsadddp f1, f0, v9 1433; PWR9LE-NEXT: blr 1434; 1435; PWR9BE-LABEL: v16f64: 1436; PWR9BE: # %bb.0: # %entry 1437; PWR9BE-NEXT: xxswapd vs0, v2 1438; PWR9BE-NEXT: xxswapd vs1, v3 1439; PWR9BE-NEXT: xsadddp f0, v2, f0 1440; PWR9BE-NEXT: xsadddp f0, f0, v3 1441; PWR9BE-NEXT: xsadddp f0, f0, f1 1442; PWR9BE-NEXT: xxswapd vs1, v4 1443; PWR9BE-NEXT: xsadddp f0, f0, v4 1444; PWR9BE-NEXT: xsadddp f0, f0, f1 1445; PWR9BE-NEXT: xxswapd vs1, v5 1446; PWR9BE-NEXT: xsadddp f0, f0, v5 1447; PWR9BE-NEXT: xsadddp f0, f0, f1 1448; PWR9BE-NEXT: xxswapd vs1, v6 1449; PWR9BE-NEXT: xsadddp f0, f0, v6 1450; PWR9BE-NEXT: xsadddp f0, f0, f1 1451; PWR9BE-NEXT: xxswapd vs1, v7 1452; PWR9BE-NEXT: xsadddp f0, f0, v7 1453; PWR9BE-NEXT: xsadddp f0, f0, f1 1454; PWR9BE-NEXT: xxswapd vs1, v8 1455; PWR9BE-NEXT: xsadddp f0, f0, v8 1456; PWR9BE-NEXT: xsadddp f0, f0, f1 1457; PWR9BE-NEXT: xxswapd vs1, v9 1458; PWR9BE-NEXT: xsadddp f0, f0, v9 1459; PWR9BE-NEXT: xsadddp f1, f0, f1 1460; PWR9BE-NEXT: blr 1461; 1462; PWR10LE-LABEL: v16f64: 1463; PWR10LE: # %bb.0: # %entry 1464; PWR10LE-NEXT: xxswapd vs0, v2 1465; PWR10LE-NEXT: xxswapd vs1, v3 1466; PWR10LE-NEXT: xsadddp f0, f0, v2 1467; PWR10LE-NEXT: xsadddp f0, f0, f1 1468; PWR10LE-NEXT: xxswapd vs1, v4 1469; PWR10LE-NEXT: xsadddp f0, f0, v3 1470; PWR10LE-NEXT: xsadddp f0, f0, f1 1471; PWR10LE-NEXT: xxswapd vs1, v5 1472; PWR10LE-NEXT: xsadddp f0, f0, v4 1473; PWR10LE-NEXT: xsadddp f0, f0, f1 1474; PWR10LE-NEXT: xxswapd vs1, v6 1475; PWR10LE-NEXT: xsadddp f0, f0, v5 1476; PWR10LE-NEXT: xsadddp f0, f0, f1 1477; PWR10LE-NEXT: xxswapd vs1, v7 1478; PWR10LE-NEXT: xsadddp f0, f0, v6 1479; PWR10LE-NEXT: xsadddp f0, f0, f1 1480; PWR10LE-NEXT: xxswapd vs1, v8 1481; PWR10LE-NEXT: xsadddp f0, f0, v7 1482; PWR10LE-NEXT: xsadddp f0, f0, f1 1483; PWR10LE-NEXT: xxswapd vs1, v9 1484; PWR10LE-NEXT: xsadddp f0, f0, v8 1485; PWR10LE-NEXT: xsadddp f0, f0, f1 1486; PWR10LE-NEXT: xsadddp f1, f0, v9 1487; PWR10LE-NEXT: blr 1488; 1489; PWR10BE-LABEL: v16f64: 1490; PWR10BE: # %bb.0: # %entry 1491; PWR10BE-NEXT: xxswapd vs0, v2 1492; PWR10BE-NEXT: xxswapd vs1, v3 1493; PWR10BE-NEXT: xsadddp f0, v2, f0 1494; PWR10BE-NEXT: xsadddp f0, f0, v3 1495; PWR10BE-NEXT: xsadddp f0, f0, f1 1496; PWR10BE-NEXT: xxswapd vs1, v4 1497; PWR10BE-NEXT: xsadddp f0, f0, v4 1498; PWR10BE-NEXT: xsadddp f0, f0, f1 1499; PWR10BE-NEXT: xxswapd vs1, v5 1500; PWR10BE-NEXT: xsadddp f0, f0, v5 1501; PWR10BE-NEXT: xsadddp f0, f0, f1 1502; PWR10BE-NEXT: xxswapd vs1, v6 1503; PWR10BE-NEXT: xsadddp f0, f0, v6 1504; PWR10BE-NEXT: xsadddp f0, f0, f1 1505; PWR10BE-NEXT: xxswapd vs1, v7 1506; PWR10BE-NEXT: xsadddp f0, f0, v7 1507; PWR10BE-NEXT: xsadddp f0, f0, f1 1508; PWR10BE-NEXT: xxswapd vs1, v8 1509; PWR10BE-NEXT: xsadddp f0, f0, v8 1510; PWR10BE-NEXT: xsadddp f0, f0, f1 1511; PWR10BE-NEXT: xxswapd vs1, v9 1512; PWR10BE-NEXT: xsadddp f0, f0, v9 1513; PWR10BE-NEXT: xsadddp f1, f0, f1 1514; PWR10BE-NEXT: blr 1515entry: 1516 %0 = call double @llvm.vector.reduce.fadd.v16f64(double -0.000000e+00, <16 x double> %a) 1517 ret double %0 1518} 1519 1520define dso_local double @v16f64_b(<16 x double> %a, double %b) local_unnamed_addr #0 { 1521; PWR9LE-LABEL: v16f64_b: 1522; PWR9LE: # %bb.0: # %entry 1523; PWR9LE-NEXT: xxswapd vs0, v2 1524; PWR9LE-NEXT: xsadddp f0, f1, f0 1525; PWR9LE-NEXT: xxswapd vs1, v3 1526; PWR9LE-NEXT: xsadddp f0, f0, v2 1527; PWR9LE-NEXT: xsadddp f0, f0, f1 1528; PWR9LE-NEXT: xxswapd vs1, v4 1529; PWR9LE-NEXT: xsadddp f0, f0, v3 1530; PWR9LE-NEXT: xsadddp f0, f0, f1 1531; PWR9LE-NEXT: xxswapd vs1, v5 1532; PWR9LE-NEXT: xsadddp f0, f0, v4 1533; PWR9LE-NEXT: xsadddp f0, f0, f1 1534; PWR9LE-NEXT: xxswapd vs1, v6 1535; PWR9LE-NEXT: xsadddp f0, f0, v5 1536; PWR9LE-NEXT: xsadddp f0, f0, f1 1537; PWR9LE-NEXT: xxswapd vs1, v7 1538; PWR9LE-NEXT: xsadddp f0, f0, v6 1539; PWR9LE-NEXT: xsadddp f0, f0, f1 1540; PWR9LE-NEXT: xxswapd vs1, v8 1541; PWR9LE-NEXT: xsadddp f0, f0, v7 1542; PWR9LE-NEXT: xsadddp f0, f0, f1 1543; PWR9LE-NEXT: xxswapd vs1, v9 1544; PWR9LE-NEXT: xsadddp f0, f0, v8 1545; PWR9LE-NEXT: xsadddp f0, f0, f1 1546; PWR9LE-NEXT: xsadddp f1, f0, v9 1547; PWR9LE-NEXT: blr 1548; 1549; PWR9BE-LABEL: v16f64_b: 1550; PWR9BE: # %bb.0: # %entry 1551; PWR9BE-NEXT: xsadddp f0, f1, v2 1552; PWR9BE-NEXT: xxswapd vs1, v2 1553; PWR9BE-NEXT: xsadddp f0, f0, f1 1554; PWR9BE-NEXT: xxswapd vs1, v3 1555; PWR9BE-NEXT: xsadddp f0, f0, v3 1556; PWR9BE-NEXT: xsadddp f0, f0, f1 1557; PWR9BE-NEXT: xxswapd vs1, v4 1558; PWR9BE-NEXT: xsadddp f0, f0, v4 1559; PWR9BE-NEXT: xsadddp f0, f0, f1 1560; PWR9BE-NEXT: xxswapd vs1, v5 1561; PWR9BE-NEXT: xsadddp f0, f0, v5 1562; PWR9BE-NEXT: xsadddp f0, f0, f1 1563; PWR9BE-NEXT: xxswapd vs1, v6 1564; PWR9BE-NEXT: xsadddp f0, f0, v6 1565; PWR9BE-NEXT: xsadddp f0, f0, f1 1566; PWR9BE-NEXT: xxswapd vs1, v7 1567; PWR9BE-NEXT: xsadddp f0, f0, v7 1568; PWR9BE-NEXT: xsadddp f0, f0, f1 1569; PWR9BE-NEXT: xxswapd vs1, v8 1570; PWR9BE-NEXT: xsadddp f0, f0, v8 1571; PWR9BE-NEXT: xsadddp f0, f0, f1 1572; PWR9BE-NEXT: xxswapd vs1, v9 1573; PWR9BE-NEXT: xsadddp f0, f0, v9 1574; PWR9BE-NEXT: xsadddp f1, f0, f1 1575; PWR9BE-NEXT: blr 1576; 1577; PWR10LE-LABEL: v16f64_b: 1578; PWR10LE: # %bb.0: # %entry 1579; PWR10LE-NEXT: xxswapd vs0, v2 1580; PWR10LE-NEXT: xsadddp f0, f1, f0 1581; PWR10LE-NEXT: xxswapd vs1, v3 1582; PWR10LE-NEXT: xsadddp f0, f0, v2 1583; PWR10LE-NEXT: xsadddp f0, f0, f1 1584; PWR10LE-NEXT: xxswapd vs1, v4 1585; PWR10LE-NEXT: xsadddp f0, f0, v3 1586; PWR10LE-NEXT: xsadddp f0, f0, f1 1587; PWR10LE-NEXT: xxswapd vs1, v5 1588; PWR10LE-NEXT: xsadddp f0, f0, v4 1589; PWR10LE-NEXT: xsadddp f0, f0, f1 1590; PWR10LE-NEXT: xxswapd vs1, v6 1591; PWR10LE-NEXT: xsadddp f0, f0, v5 1592; PWR10LE-NEXT: xsadddp f0, f0, f1 1593; PWR10LE-NEXT: xxswapd vs1, v7 1594; PWR10LE-NEXT: xsadddp f0, f0, v6 1595; PWR10LE-NEXT: xsadddp f0, f0, f1 1596; PWR10LE-NEXT: xxswapd vs1, v8 1597; PWR10LE-NEXT: xsadddp f0, f0, v7 1598; PWR10LE-NEXT: xsadddp f0, f0, f1 1599; PWR10LE-NEXT: xxswapd vs1, v9 1600; PWR10LE-NEXT: xsadddp f0, f0, v8 1601; PWR10LE-NEXT: xsadddp f0, f0, f1 1602; PWR10LE-NEXT: xsadddp f1, f0, v9 1603; PWR10LE-NEXT: blr 1604; 1605; PWR10BE-LABEL: v16f64_b: 1606; PWR10BE: # %bb.0: # %entry 1607; PWR10BE-NEXT: xsadddp f0, f1, v2 1608; PWR10BE-NEXT: xxswapd vs1, v2 1609; PWR10BE-NEXT: xsadddp f0, f0, f1 1610; PWR10BE-NEXT: xxswapd vs1, v3 1611; PWR10BE-NEXT: xsadddp f0, f0, v3 1612; PWR10BE-NEXT: xsadddp f0, f0, f1 1613; PWR10BE-NEXT: xxswapd vs1, v4 1614; PWR10BE-NEXT: xsadddp f0, f0, v4 1615; PWR10BE-NEXT: xsadddp f0, f0, f1 1616; PWR10BE-NEXT: xxswapd vs1, v5 1617; PWR10BE-NEXT: xsadddp f0, f0, v5 1618; PWR10BE-NEXT: xsadddp f0, f0, f1 1619; PWR10BE-NEXT: xxswapd vs1, v6 1620; PWR10BE-NEXT: xsadddp f0, f0, v6 1621; PWR10BE-NEXT: xsadddp f0, f0, f1 1622; PWR10BE-NEXT: xxswapd vs1, v7 1623; PWR10BE-NEXT: xsadddp f0, f0, v7 1624; PWR10BE-NEXT: xsadddp f0, f0, f1 1625; PWR10BE-NEXT: xxswapd vs1, v8 1626; PWR10BE-NEXT: xsadddp f0, f0, v8 1627; PWR10BE-NEXT: xsadddp f0, f0, f1 1628; PWR10BE-NEXT: xxswapd vs1, v9 1629; PWR10BE-NEXT: xsadddp f0, f0, v9 1630; PWR10BE-NEXT: xsadddp f1, f0, f1 1631; PWR10BE-NEXT: blr 1632entry: 1633 %0 = call double @llvm.vector.reduce.fadd.v16f64(double %b, <16 x double> %a) 1634 ret double %0 1635} 1636 1637define dso_local double @v16f64_fast(<16 x double> %a) local_unnamed_addr #0 { 1638; PWR9LE-LABEL: v16f64_fast: 1639; PWR9LE: # %bb.0: # %entry 1640; PWR9LE-NEXT: xvadddp vs0, v4, v8 1641; PWR9LE-NEXT: xvadddp vs1, v2, v6 1642; PWR9LE-NEXT: xvadddp vs2, v5, v9 1643; PWR9LE-NEXT: xvadddp vs3, v3, v7 1644; PWR9LE-NEXT: xvadddp vs2, vs3, vs2 1645; PWR9LE-NEXT: xvadddp vs0, vs1, vs0 1646; PWR9LE-NEXT: xvadddp vs0, vs0, vs2 1647; PWR9LE-NEXT: xxswapd vs1, vs0 1648; PWR9LE-NEXT: xvadddp vs0, vs0, vs1 1649; PWR9LE-NEXT: xxswapd vs1, vs0 1650; PWR9LE-NEXT: blr 1651; 1652; PWR9BE-LABEL: v16f64_fast: 1653; PWR9BE: # %bb.0: # %entry 1654; PWR9BE-NEXT: xvadddp vs0, v4, v8 1655; PWR9BE-NEXT: xvadddp vs1, v2, v6 1656; PWR9BE-NEXT: xvadddp vs2, v5, v9 1657; PWR9BE-NEXT: xvadddp vs3, v3, v7 1658; PWR9BE-NEXT: xvadddp vs2, vs3, vs2 1659; PWR9BE-NEXT: xvadddp vs0, vs1, vs0 1660; PWR9BE-NEXT: xvadddp vs0, vs0, vs2 1661; PWR9BE-NEXT: xxswapd vs1, vs0 1662; PWR9BE-NEXT: xvadddp vs1, vs0, vs1 1663; PWR9BE-NEXT: blr 1664; 1665; PWR10LE-LABEL: v16f64_fast: 1666; PWR10LE: # %bb.0: # %entry 1667; PWR10LE-NEXT: xvadddp vs0, v4, v8 1668; PWR10LE-NEXT: xvadddp vs1, v2, v6 1669; PWR10LE-NEXT: xvadddp vs2, v5, v9 1670; PWR10LE-NEXT: xvadddp vs3, v3, v7 1671; PWR10LE-NEXT: xvadddp vs2, vs3, vs2 1672; PWR10LE-NEXT: xvadddp vs0, vs1, vs0 1673; PWR10LE-NEXT: xvadddp vs0, vs0, vs2 1674; PWR10LE-NEXT: xxswapd vs1, vs0 1675; PWR10LE-NEXT: xvadddp vs0, vs0, vs1 1676; PWR10LE-NEXT: xxswapd vs1, vs0 1677; PWR10LE-NEXT: blr 1678; 1679; PWR10BE-LABEL: v16f64_fast: 1680; PWR10BE: # %bb.0: # %entry 1681; PWR10BE-NEXT: xvadddp vs0, v4, v8 1682; PWR10BE-NEXT: xvadddp vs1, v2, v6 1683; PWR10BE-NEXT: xvadddp vs2, v5, v9 1684; PWR10BE-NEXT: xvadddp vs3, v3, v7 1685; PWR10BE-NEXT: xvadddp vs2, vs3, vs2 1686; PWR10BE-NEXT: xvadddp vs0, vs1, vs0 1687; PWR10BE-NEXT: xvadddp vs0, vs0, vs2 1688; PWR10BE-NEXT: xxswapd vs1, vs0 1689; PWR10BE-NEXT: xvadddp vs1, vs0, vs1 1690; PWR10BE-NEXT: blr 1691entry: 1692 %0 = call fast double @llvm.vector.reduce.fadd.v16f64(double -0.000000e+00, <16 x double> %a) 1693 ret double %0 1694} 1695 1696define dso_local double @v32f64(<32 x double> %a) local_unnamed_addr #0 { 1697; PWR9LE-LABEL: v32f64: 1698; PWR9LE: # %bb.0: # %entry 1699; PWR9LE-NEXT: xxswapd vs4, v2 1700; PWR9LE-NEXT: xxswapd vs5, v3 1701; PWR9LE-NEXT: lxv vs3, 224(r1) 1702; PWR9LE-NEXT: lxv vs2, 240(r1) 1703; PWR9LE-NEXT: lxv vs1, 256(r1) 1704; PWR9LE-NEXT: lxv vs0, 272(r1) 1705; PWR9LE-NEXT: xsadddp f4, f4, v2 1706; PWR9LE-NEXT: xsadddp f4, f4, f5 1707; PWR9LE-NEXT: xxswapd vs5, v4 1708; PWR9LE-NEXT: xsadddp f4, f4, v3 1709; PWR9LE-NEXT: xsadddp f4, f4, f5 1710; PWR9LE-NEXT: xxswapd vs5, v5 1711; PWR9LE-NEXT: xsadddp f4, f4, v4 1712; PWR9LE-NEXT: xsadddp f4, f4, f5 1713; PWR9LE-NEXT: xxswapd vs5, v6 1714; PWR9LE-NEXT: xsadddp f4, f4, v5 1715; PWR9LE-NEXT: xsadddp f4, f4, f5 1716; PWR9LE-NEXT: xxswapd vs5, v7 1717; PWR9LE-NEXT: xsadddp f4, f4, v6 1718; PWR9LE-NEXT: xsadddp f4, f4, f5 1719; PWR9LE-NEXT: xxswapd vs5, v8 1720; PWR9LE-NEXT: xsadddp f4, f4, v7 1721; PWR9LE-NEXT: xsadddp f4, f4, f5 1722; PWR9LE-NEXT: xxswapd vs5, v9 1723; PWR9LE-NEXT: xsadddp f4, f4, v8 1724; PWR9LE-NEXT: xsadddp f4, f4, f5 1725; PWR9LE-NEXT: xxswapd vs5, v10 1726; PWR9LE-NEXT: xsadddp f4, f4, v9 1727; PWR9LE-NEXT: xsadddp f4, f4, f5 1728; PWR9LE-NEXT: xxswapd vs5, v11 1729; PWR9LE-NEXT: xsadddp f4, f4, v10 1730; PWR9LE-NEXT: xsadddp f4, f4, f5 1731; PWR9LE-NEXT: xxswapd vs5, v12 1732; PWR9LE-NEXT: xsadddp f4, f4, v11 1733; PWR9LE-NEXT: xsadddp f4, f4, f5 1734; PWR9LE-NEXT: xxswapd vs5, v13 1735; PWR9LE-NEXT: xsadddp f4, f4, v12 1736; PWR9LE-NEXT: xsadddp f4, f4, f5 1737; PWR9LE-NEXT: xxswapd vs5, vs3 1738; PWR9LE-NEXT: xsadddp f4, f4, v13 1739; PWR9LE-NEXT: xsadddp f4, f4, f5 1740; PWR9LE-NEXT: xsadddp f3, f4, f3 1741; PWR9LE-NEXT: xxswapd vs4, vs2 1742; PWR9LE-NEXT: xsadddp f3, f3, f4 1743; PWR9LE-NEXT: xsadddp f2, f3, f2 1744; PWR9LE-NEXT: xxswapd vs3, vs1 1745; PWR9LE-NEXT: xsadddp f2, f2, f3 1746; PWR9LE-NEXT: xsadddp f1, f2, f1 1747; PWR9LE-NEXT: xxswapd vs2, vs0 1748; PWR9LE-NEXT: xsadddp f1, f1, f2 1749; PWR9LE-NEXT: xsadddp f1, f1, f0 1750; PWR9LE-NEXT: blr 1751; 1752; PWR9BE-LABEL: v32f64: 1753; PWR9BE: # %bb.0: # %entry 1754; PWR9BE-NEXT: xxswapd vs4, v2 1755; PWR9BE-NEXT: xxswapd vs5, v3 1756; PWR9BE-NEXT: lxv vs3, 240(r1) 1757; PWR9BE-NEXT: lxv vs2, 256(r1) 1758; PWR9BE-NEXT: lxv vs1, 272(r1) 1759; PWR9BE-NEXT: lxv vs0, 288(r1) 1760; PWR9BE-NEXT: xsadddp f4, v2, f4 1761; PWR9BE-NEXT: xsadddp f4, f4, v3 1762; PWR9BE-NEXT: xsadddp f4, f4, f5 1763; PWR9BE-NEXT: xxswapd vs5, v4 1764; PWR9BE-NEXT: xsadddp f4, f4, v4 1765; PWR9BE-NEXT: xsadddp f4, f4, f5 1766; PWR9BE-NEXT: xxswapd vs5, v5 1767; PWR9BE-NEXT: xsadddp f4, f4, v5 1768; PWR9BE-NEXT: xsadddp f4, f4, f5 1769; PWR9BE-NEXT: xxswapd vs5, v6 1770; PWR9BE-NEXT: xsadddp f4, f4, v6 1771; PWR9BE-NEXT: xsadddp f4, f4, f5 1772; PWR9BE-NEXT: xxswapd vs5, v7 1773; PWR9BE-NEXT: xsadddp f4, f4, v7 1774; PWR9BE-NEXT: xsadddp f4, f4, f5 1775; PWR9BE-NEXT: xxswapd vs5, v8 1776; PWR9BE-NEXT: xsadddp f4, f4, v8 1777; PWR9BE-NEXT: xsadddp f4, f4, f5 1778; PWR9BE-NEXT: xxswapd vs5, v9 1779; PWR9BE-NEXT: xsadddp f4, f4, v9 1780; PWR9BE-NEXT: xsadddp f4, f4, f5 1781; PWR9BE-NEXT: xxswapd vs5, v10 1782; PWR9BE-NEXT: xsadddp f4, f4, v10 1783; PWR9BE-NEXT: xsadddp f4, f4, f5 1784; PWR9BE-NEXT: xxswapd vs5, v11 1785; PWR9BE-NEXT: xsadddp f4, f4, v11 1786; PWR9BE-NEXT: xsadddp f4, f4, f5 1787; PWR9BE-NEXT: xxswapd vs5, v12 1788; PWR9BE-NEXT: xsadddp f4, f4, v12 1789; PWR9BE-NEXT: xsadddp f4, f4, f5 1790; PWR9BE-NEXT: xxswapd vs5, v13 1791; PWR9BE-NEXT: xsadddp f4, f4, v13 1792; PWR9BE-NEXT: xsadddp f4, f4, f5 1793; PWR9BE-NEXT: xsadddp f4, f4, f3 1794; PWR9BE-NEXT: xxswapd vs3, vs3 1795; PWR9BE-NEXT: xsadddp f3, f4, f3 1796; PWR9BE-NEXT: xsadddp f3, f3, f2 1797; PWR9BE-NEXT: xxswapd vs2, vs2 1798; PWR9BE-NEXT: xsadddp f2, f3, f2 1799; PWR9BE-NEXT: xsadddp f2, f2, f1 1800; PWR9BE-NEXT: xxswapd vs1, vs1 1801; PWR9BE-NEXT: xsadddp f1, f2, f1 1802; PWR9BE-NEXT: xsadddp f1, f1, f0 1803; PWR9BE-NEXT: xxswapd vs0, vs0 1804; PWR9BE-NEXT: xsadddp f1, f1, f0 1805; PWR9BE-NEXT: blr 1806; 1807; PWR10LE-LABEL: v32f64: 1808; PWR10LE: # %bb.0: # %entry 1809; PWR10LE-NEXT: xxswapd vs4, v2 1810; PWR10LE-NEXT: xxswapd vs5, v3 1811; PWR10LE-NEXT: lxv vs3, 224(r1) 1812; PWR10LE-NEXT: lxv vs2, 240(r1) 1813; PWR10LE-NEXT: xsadddp f4, f4, v2 1814; PWR10LE-NEXT: lxv vs1, 256(r1) 1815; PWR10LE-NEXT: lxv vs0, 272(r1) 1816; PWR10LE-NEXT: xsadddp f4, f4, f5 1817; PWR10LE-NEXT: xxswapd vs5, v4 1818; PWR10LE-NEXT: xsadddp f4, f4, v3 1819; PWR10LE-NEXT: xsadddp f4, f4, f5 1820; PWR10LE-NEXT: xxswapd vs5, v5 1821; PWR10LE-NEXT: xsadddp f4, f4, v4 1822; PWR10LE-NEXT: xsadddp f4, f4, f5 1823; PWR10LE-NEXT: xxswapd vs5, v6 1824; PWR10LE-NEXT: xsadddp f4, f4, v5 1825; PWR10LE-NEXT: xsadddp f4, f4, f5 1826; PWR10LE-NEXT: xxswapd vs5, v7 1827; PWR10LE-NEXT: xsadddp f4, f4, v6 1828; PWR10LE-NEXT: xsadddp f4, f4, f5 1829; PWR10LE-NEXT: xxswapd vs5, v8 1830; PWR10LE-NEXT: xsadddp f4, f4, v7 1831; PWR10LE-NEXT: xsadddp f4, f4, f5 1832; PWR10LE-NEXT: xxswapd vs5, v9 1833; PWR10LE-NEXT: xsadddp f4, f4, v8 1834; PWR10LE-NEXT: xsadddp f4, f4, f5 1835; PWR10LE-NEXT: xxswapd vs5, v10 1836; PWR10LE-NEXT: xsadddp f4, f4, v9 1837; PWR10LE-NEXT: xsadddp f4, f4, f5 1838; PWR10LE-NEXT: xxswapd vs5, v11 1839; PWR10LE-NEXT: xsadddp f4, f4, v10 1840; PWR10LE-NEXT: xsadddp f4, f4, f5 1841; PWR10LE-NEXT: xxswapd vs5, v12 1842; PWR10LE-NEXT: xsadddp f4, f4, v11 1843; PWR10LE-NEXT: xsadddp f4, f4, f5 1844; PWR10LE-NEXT: xxswapd vs5, v13 1845; PWR10LE-NEXT: xsadddp f4, f4, v12 1846; PWR10LE-NEXT: xsadddp f4, f4, f5 1847; PWR10LE-NEXT: xxswapd vs5, vs3 1848; PWR10LE-NEXT: xsadddp f4, f4, v13 1849; PWR10LE-NEXT: xsadddp f4, f4, f5 1850; PWR10LE-NEXT: xsadddp f3, f4, f3 1851; PWR10LE-NEXT: xxswapd vs4, vs2 1852; PWR10LE-NEXT: xsadddp f3, f3, f4 1853; PWR10LE-NEXT: xsadddp f2, f3, f2 1854; PWR10LE-NEXT: xxswapd vs3, vs1 1855; PWR10LE-NEXT: xsadddp f2, f2, f3 1856; PWR10LE-NEXT: xsadddp f1, f2, f1 1857; PWR10LE-NEXT: xxswapd vs2, vs0 1858; PWR10LE-NEXT: xsadddp f1, f1, f2 1859; PWR10LE-NEXT: xsadddp f1, f1, f0 1860; PWR10LE-NEXT: blr 1861; 1862; PWR10BE-LABEL: v32f64: 1863; PWR10BE: # %bb.0: # %entry 1864; PWR10BE-NEXT: xxswapd vs4, v2 1865; PWR10BE-NEXT: xxswapd vs5, v3 1866; PWR10BE-NEXT: lxv vs3, 240(r1) 1867; PWR10BE-NEXT: lxv vs2, 256(r1) 1868; PWR10BE-NEXT: xsadddp f4, v2, f4 1869; PWR10BE-NEXT: lxv vs1, 272(r1) 1870; PWR10BE-NEXT: lxv vs0, 288(r1) 1871; PWR10BE-NEXT: xsadddp f4, f4, v3 1872; PWR10BE-NEXT: xsadddp f4, f4, f5 1873; PWR10BE-NEXT: xxswapd vs5, v4 1874; PWR10BE-NEXT: xsadddp f4, f4, v4 1875; PWR10BE-NEXT: xsadddp f4, f4, f5 1876; PWR10BE-NEXT: xxswapd vs5, v5 1877; PWR10BE-NEXT: xsadddp f4, f4, v5 1878; PWR10BE-NEXT: xsadddp f4, f4, f5 1879; PWR10BE-NEXT: xxswapd vs5, v6 1880; PWR10BE-NEXT: xsadddp f4, f4, v6 1881; PWR10BE-NEXT: xsadddp f4, f4, f5 1882; PWR10BE-NEXT: xxswapd vs5, v7 1883; PWR10BE-NEXT: xsadddp f4, f4, v7 1884; PWR10BE-NEXT: xsadddp f4, f4, f5 1885; PWR10BE-NEXT: xxswapd vs5, v8 1886; PWR10BE-NEXT: xsadddp f4, f4, v8 1887; PWR10BE-NEXT: xsadddp f4, f4, f5 1888; PWR10BE-NEXT: xxswapd vs5, v9 1889; PWR10BE-NEXT: xsadddp f4, f4, v9 1890; PWR10BE-NEXT: xsadddp f4, f4, f5 1891; PWR10BE-NEXT: xxswapd vs5, v10 1892; PWR10BE-NEXT: xsadddp f4, f4, v10 1893; PWR10BE-NEXT: xsadddp f4, f4, f5 1894; PWR10BE-NEXT: xxswapd vs5, v11 1895; PWR10BE-NEXT: xsadddp f4, f4, v11 1896; PWR10BE-NEXT: xsadddp f4, f4, f5 1897; PWR10BE-NEXT: xxswapd vs5, v12 1898; PWR10BE-NEXT: xsadddp f4, f4, v12 1899; PWR10BE-NEXT: xsadddp f4, f4, f5 1900; PWR10BE-NEXT: xxswapd vs5, v13 1901; PWR10BE-NEXT: xsadddp f4, f4, v13 1902; PWR10BE-NEXT: xsadddp f4, f4, f5 1903; PWR10BE-NEXT: xsadddp f4, f4, f3 1904; PWR10BE-NEXT: xxswapd vs3, vs3 1905; PWR10BE-NEXT: xsadddp f3, f4, f3 1906; PWR10BE-NEXT: xsadddp f3, f3, f2 1907; PWR10BE-NEXT: xxswapd vs2, vs2 1908; PWR10BE-NEXT: xsadddp f2, f3, f2 1909; PWR10BE-NEXT: xsadddp f2, f2, f1 1910; PWR10BE-NEXT: xxswapd vs1, vs1 1911; PWR10BE-NEXT: xsadddp f1, f2, f1 1912; PWR10BE-NEXT: xsadddp f1, f1, f0 1913; PWR10BE-NEXT: xxswapd vs0, vs0 1914; PWR10BE-NEXT: xsadddp f1, f1, f0 1915; PWR10BE-NEXT: blr 1916entry: 1917 %0 = call double @llvm.vector.reduce.fadd.v32f64(double -0.000000e+00, <32 x double> %a) 1918 ret double %0 1919} 1920 1921define dso_local double @v32f64_b(<32 x double> %a, double %b) local_unnamed_addr #0 { 1922; PWR9LE-LABEL: v32f64_b: 1923; PWR9LE: # %bb.0: # %entry 1924; PWR9LE-NEXT: xxswapd vs5, v2 1925; PWR9LE-NEXT: lxv vs4, 224(r1) 1926; PWR9LE-NEXT: lxv vs3, 240(r1) 1927; PWR9LE-NEXT: lxv vs2, 256(r1) 1928; PWR9LE-NEXT: lxv vs0, 272(r1) 1929; PWR9LE-NEXT: xsadddp f1, f1, f5 1930; PWR9LE-NEXT: xxswapd vs5, v3 1931; PWR9LE-NEXT: xsadddp f1, f1, v2 1932; PWR9LE-NEXT: xsadddp f1, f1, f5 1933; PWR9LE-NEXT: xxswapd vs5, v4 1934; PWR9LE-NEXT: xsadddp f1, f1, v3 1935; PWR9LE-NEXT: xsadddp f1, f1, f5 1936; PWR9LE-NEXT: xxswapd vs5, v5 1937; PWR9LE-NEXT: xsadddp f1, f1, v4 1938; PWR9LE-NEXT: xsadddp f1, f1, f5 1939; PWR9LE-NEXT: xxswapd vs5, v6 1940; PWR9LE-NEXT: xsadddp f1, f1, v5 1941; PWR9LE-NEXT: xsadddp f1, f1, f5 1942; PWR9LE-NEXT: xxswapd vs5, v7 1943; PWR9LE-NEXT: xsadddp f1, f1, v6 1944; PWR9LE-NEXT: xsadddp f1, f1, f5 1945; PWR9LE-NEXT: xxswapd vs5, v8 1946; PWR9LE-NEXT: xsadddp f1, f1, v7 1947; PWR9LE-NEXT: xsadddp f1, f1, f5 1948; PWR9LE-NEXT: xxswapd vs5, v9 1949; PWR9LE-NEXT: xsadddp f1, f1, v8 1950; PWR9LE-NEXT: xsadddp f1, f1, f5 1951; PWR9LE-NEXT: xxswapd vs5, v10 1952; PWR9LE-NEXT: xsadddp f1, f1, v9 1953; PWR9LE-NEXT: xsadddp f1, f1, f5 1954; PWR9LE-NEXT: xxswapd vs5, v11 1955; PWR9LE-NEXT: xsadddp f1, f1, v10 1956; PWR9LE-NEXT: xsadddp f1, f1, f5 1957; PWR9LE-NEXT: xxswapd vs5, v12 1958; PWR9LE-NEXT: xsadddp f1, f1, v11 1959; PWR9LE-NEXT: xsadddp f1, f1, f5 1960; PWR9LE-NEXT: xxswapd vs5, v13 1961; PWR9LE-NEXT: xsadddp f1, f1, v12 1962; PWR9LE-NEXT: xsadddp f1, f1, f5 1963; PWR9LE-NEXT: xxswapd vs5, vs4 1964; PWR9LE-NEXT: xsadddp f1, f1, v13 1965; PWR9LE-NEXT: xsadddp f1, f1, f5 1966; PWR9LE-NEXT: xsadddp f1, f1, f4 1967; PWR9LE-NEXT: xxswapd vs4, vs3 1968; PWR9LE-NEXT: xsadddp f1, f1, f4 1969; PWR9LE-NEXT: xsadddp f1, f1, f3 1970; PWR9LE-NEXT: xxswapd vs3, vs2 1971; PWR9LE-NEXT: xsadddp f1, f1, f3 1972; PWR9LE-NEXT: xsadddp f1, f1, f2 1973; PWR9LE-NEXT: xxswapd vs2, vs0 1974; PWR9LE-NEXT: xsadddp f1, f1, f2 1975; PWR9LE-NEXT: xsadddp f1, f1, f0 1976; PWR9LE-NEXT: blr 1977; 1978; PWR9BE-LABEL: v32f64_b: 1979; PWR9BE: # %bb.0: # %entry 1980; PWR9BE-NEXT: xsadddp f1, f1, v2 1981; PWR9BE-NEXT: xxswapd vs5, v2 1982; PWR9BE-NEXT: lxv vs4, 240(r1) 1983; PWR9BE-NEXT: lxv vs3, 256(r1) 1984; PWR9BE-NEXT: lxv vs2, 272(r1) 1985; PWR9BE-NEXT: lxv vs0, 288(r1) 1986; PWR9BE-NEXT: xsadddp f1, f1, f5 1987; PWR9BE-NEXT: xxswapd vs5, v3 1988; PWR9BE-NEXT: xsadddp f1, f1, v3 1989; PWR9BE-NEXT: xsadddp f1, f1, f5 1990; PWR9BE-NEXT: xxswapd vs5, v4 1991; PWR9BE-NEXT: xsadddp f1, f1, v4 1992; PWR9BE-NEXT: xsadddp f1, f1, f5 1993; PWR9BE-NEXT: xxswapd vs5, v5 1994; PWR9BE-NEXT: xsadddp f1, f1, v5 1995; PWR9BE-NEXT: xsadddp f1, f1, f5 1996; PWR9BE-NEXT: xxswapd vs5, v6 1997; PWR9BE-NEXT: xsadddp f1, f1, v6 1998; PWR9BE-NEXT: xsadddp f1, f1, f5 1999; PWR9BE-NEXT: xxswapd vs5, v7 2000; PWR9BE-NEXT: xsadddp f1, f1, v7 2001; PWR9BE-NEXT: xsadddp f1, f1, f5 2002; PWR9BE-NEXT: xxswapd vs5, v8 2003; PWR9BE-NEXT: xsadddp f1, f1, v8 2004; PWR9BE-NEXT: xsadddp f1, f1, f5 2005; PWR9BE-NEXT: xxswapd vs5, v9 2006; PWR9BE-NEXT: xsadddp f1, f1, v9 2007; PWR9BE-NEXT: xsadddp f1, f1, f5 2008; PWR9BE-NEXT: xxswapd vs5, v10 2009; PWR9BE-NEXT: xsadddp f1, f1, v10 2010; PWR9BE-NEXT: xsadddp f1, f1, f5 2011; PWR9BE-NEXT: xxswapd vs5, v11 2012; PWR9BE-NEXT: xsadddp f1, f1, v11 2013; PWR9BE-NEXT: xsadddp f1, f1, f5 2014; PWR9BE-NEXT: xxswapd vs5, v12 2015; PWR9BE-NEXT: xsadddp f1, f1, v12 2016; PWR9BE-NEXT: xsadddp f1, f1, f5 2017; PWR9BE-NEXT: xxswapd vs5, v13 2018; PWR9BE-NEXT: xsadddp f1, f1, v13 2019; PWR9BE-NEXT: xsadddp f1, f1, f5 2020; PWR9BE-NEXT: xsadddp f1, f1, f4 2021; PWR9BE-NEXT: xxswapd vs4, vs4 2022; PWR9BE-NEXT: xsadddp f1, f1, f4 2023; PWR9BE-NEXT: xsadddp f1, f1, f3 2024; PWR9BE-NEXT: xxswapd vs3, vs3 2025; PWR9BE-NEXT: xsadddp f1, f1, f3 2026; PWR9BE-NEXT: xsadddp f1, f1, f2 2027; PWR9BE-NEXT: xxswapd vs2, vs2 2028; PWR9BE-NEXT: xsadddp f1, f1, f2 2029; PWR9BE-NEXT: xsadddp f1, f1, f0 2030; PWR9BE-NEXT: xxswapd vs0, vs0 2031; PWR9BE-NEXT: xsadddp f1, f1, f0 2032; PWR9BE-NEXT: blr 2033; 2034; PWR10LE-LABEL: v32f64_b: 2035; PWR10LE: # %bb.0: # %entry 2036; PWR10LE-NEXT: xxswapd vs5, v2 2037; PWR10LE-NEXT: lxv vs4, 224(r1) 2038; PWR10LE-NEXT: lxv vs3, 240(r1) 2039; PWR10LE-NEXT: xsadddp f1, f1, f5 2040; PWR10LE-NEXT: xxswapd vs5, v3 2041; PWR10LE-NEXT: lxv vs2, 256(r1) 2042; PWR10LE-NEXT: lxv vs0, 272(r1) 2043; PWR10LE-NEXT: xsadddp f1, f1, v2 2044; PWR10LE-NEXT: xsadddp f1, f1, f5 2045; PWR10LE-NEXT: xxswapd vs5, v4 2046; PWR10LE-NEXT: xsadddp f1, f1, v3 2047; PWR10LE-NEXT: xsadddp f1, f1, f5 2048; PWR10LE-NEXT: xxswapd vs5, v5 2049; PWR10LE-NEXT: xsadddp f1, f1, v4 2050; PWR10LE-NEXT: xsadddp f1, f1, f5 2051; PWR10LE-NEXT: xxswapd vs5, v6 2052; PWR10LE-NEXT: xsadddp f1, f1, v5 2053; PWR10LE-NEXT: xsadddp f1, f1, f5 2054; PWR10LE-NEXT: xxswapd vs5, v7 2055; PWR10LE-NEXT: xsadddp f1, f1, v6 2056; PWR10LE-NEXT: xsadddp f1, f1, f5 2057; PWR10LE-NEXT: xxswapd vs5, v8 2058; PWR10LE-NEXT: xsadddp f1, f1, v7 2059; PWR10LE-NEXT: xsadddp f1, f1, f5 2060; PWR10LE-NEXT: xxswapd vs5, v9 2061; PWR10LE-NEXT: xsadddp f1, f1, v8 2062; PWR10LE-NEXT: xsadddp f1, f1, f5 2063; PWR10LE-NEXT: xxswapd vs5, v10 2064; PWR10LE-NEXT: xsadddp f1, f1, v9 2065; PWR10LE-NEXT: xsadddp f1, f1, f5 2066; PWR10LE-NEXT: xxswapd vs5, v11 2067; PWR10LE-NEXT: xsadddp f1, f1, v10 2068; PWR10LE-NEXT: xsadddp f1, f1, f5 2069; PWR10LE-NEXT: xxswapd vs5, v12 2070; PWR10LE-NEXT: xsadddp f1, f1, v11 2071; PWR10LE-NEXT: xsadddp f1, f1, f5 2072; PWR10LE-NEXT: xxswapd vs5, v13 2073; PWR10LE-NEXT: xsadddp f1, f1, v12 2074; PWR10LE-NEXT: xsadddp f1, f1, f5 2075; PWR10LE-NEXT: xxswapd vs5, vs4 2076; PWR10LE-NEXT: xsadddp f1, f1, v13 2077; PWR10LE-NEXT: xsadddp f1, f1, f5 2078; PWR10LE-NEXT: xsadddp f1, f1, f4 2079; PWR10LE-NEXT: xxswapd vs4, vs3 2080; PWR10LE-NEXT: xsadddp f1, f1, f4 2081; PWR10LE-NEXT: xsadddp f1, f1, f3 2082; PWR10LE-NEXT: xxswapd vs3, vs2 2083; PWR10LE-NEXT: xsadddp f1, f1, f3 2084; PWR10LE-NEXT: xsadddp f1, f1, f2 2085; PWR10LE-NEXT: xxswapd vs2, vs0 2086; PWR10LE-NEXT: xsadddp f1, f1, f2 2087; PWR10LE-NEXT: xsadddp f1, f1, f0 2088; PWR10LE-NEXT: blr 2089; 2090; PWR10BE-LABEL: v32f64_b: 2091; PWR10BE: # %bb.0: # %entry 2092; PWR10BE-NEXT: xsadddp f1, f1, v2 2093; PWR10BE-NEXT: xxswapd vs5, v2 2094; PWR10BE-NEXT: lxv vs4, 240(r1) 2095; PWR10BE-NEXT: lxv vs3, 256(r1) 2096; PWR10BE-NEXT: xsadddp f1, f1, f5 2097; PWR10BE-NEXT: xxswapd vs5, v3 2098; PWR10BE-NEXT: lxv vs2, 272(r1) 2099; PWR10BE-NEXT: lxv vs0, 288(r1) 2100; PWR10BE-NEXT: xsadddp f1, f1, v3 2101; PWR10BE-NEXT: xsadddp f1, f1, f5 2102; PWR10BE-NEXT: xxswapd vs5, v4 2103; PWR10BE-NEXT: xsadddp f1, f1, v4 2104; PWR10BE-NEXT: xsadddp f1, f1, f5 2105; PWR10BE-NEXT: xxswapd vs5, v5 2106; PWR10BE-NEXT: xsadddp f1, f1, v5 2107; PWR10BE-NEXT: xsadddp f1, f1, f5 2108; PWR10BE-NEXT: xxswapd vs5, v6 2109; PWR10BE-NEXT: xsadddp f1, f1, v6 2110; PWR10BE-NEXT: xsadddp f1, f1, f5 2111; PWR10BE-NEXT: xxswapd vs5, v7 2112; PWR10BE-NEXT: xsadddp f1, f1, v7 2113; PWR10BE-NEXT: xsadddp f1, f1, f5 2114; PWR10BE-NEXT: xxswapd vs5, v8 2115; PWR10BE-NEXT: xsadddp f1, f1, v8 2116; PWR10BE-NEXT: xsadddp f1, f1, f5 2117; PWR10BE-NEXT: xxswapd vs5, v9 2118; PWR10BE-NEXT: xsadddp f1, f1, v9 2119; PWR10BE-NEXT: xsadddp f1, f1, f5 2120; PWR10BE-NEXT: xxswapd vs5, v10 2121; PWR10BE-NEXT: xsadddp f1, f1, v10 2122; PWR10BE-NEXT: xsadddp f1, f1, f5 2123; PWR10BE-NEXT: xxswapd vs5, v11 2124; PWR10BE-NEXT: xsadddp f1, f1, v11 2125; PWR10BE-NEXT: xsadddp f1, f1, f5 2126; PWR10BE-NEXT: xxswapd vs5, v12 2127; PWR10BE-NEXT: xsadddp f1, f1, v12 2128; PWR10BE-NEXT: xsadddp f1, f1, f5 2129; PWR10BE-NEXT: xxswapd vs5, v13 2130; PWR10BE-NEXT: xsadddp f1, f1, v13 2131; PWR10BE-NEXT: xsadddp f1, f1, f5 2132; PWR10BE-NEXT: xsadddp f1, f1, f4 2133; PWR10BE-NEXT: xxswapd vs4, vs4 2134; PWR10BE-NEXT: xsadddp f1, f1, f4 2135; PWR10BE-NEXT: xsadddp f1, f1, f3 2136; PWR10BE-NEXT: xxswapd vs3, vs3 2137; PWR10BE-NEXT: xsadddp f1, f1, f3 2138; PWR10BE-NEXT: xsadddp f1, f1, f2 2139; PWR10BE-NEXT: xxswapd vs2, vs2 2140; PWR10BE-NEXT: xsadddp f1, f1, f2 2141; PWR10BE-NEXT: xsadddp f1, f1, f0 2142; PWR10BE-NEXT: xxswapd vs0, vs0 2143; PWR10BE-NEXT: xsadddp f1, f1, f0 2144; PWR10BE-NEXT: blr 2145entry: 2146 %0 = call double @llvm.vector.reduce.fadd.v32f64(double %b, <32 x double> %a) 2147 ret double %0 2148} 2149 2150define dso_local double @v32f64_fast(<32 x double> %a) local_unnamed_addr #0 { 2151; PWR9LE-LABEL: v32f64_fast: 2152; PWR9LE: # %bb.0: # %entry 2153; PWR9LE-NEXT: lxv vs0, 256(r1) 2154; PWR9LE-NEXT: lxv vs1, 224(r1) 2155; PWR9LE-NEXT: lxv vs2, 272(r1) 2156; PWR9LE-NEXT: lxv vs3, 240(r1) 2157; PWR9LE-NEXT: xvadddp vs4, v3, v11 2158; PWR9LE-NEXT: xvadddp vs5, v5, v13 2159; PWR9LE-NEXT: xvadddp vs6, v2, v10 2160; PWR9LE-NEXT: xvadddp vs7, v4, v12 2161; PWR9LE-NEXT: xvadddp vs3, v7, vs3 2162; PWR9LE-NEXT: xvadddp vs2, v9, vs2 2163; PWR9LE-NEXT: xvadddp vs1, v6, vs1 2164; PWR9LE-NEXT: xvadddp vs0, v8, vs0 2165; PWR9LE-NEXT: xvadddp vs0, vs7, vs0 2166; PWR9LE-NEXT: xvadddp vs1, vs6, vs1 2167; PWR9LE-NEXT: xvadddp vs2, vs5, vs2 2168; PWR9LE-NEXT: xvadddp vs3, vs4, vs3 2169; PWR9LE-NEXT: xvadddp vs2, vs3, vs2 2170; PWR9LE-NEXT: xvadddp vs0, vs1, vs0 2171; PWR9LE-NEXT: xvadddp vs0, vs0, vs2 2172; PWR9LE-NEXT: xxswapd vs1, vs0 2173; PWR9LE-NEXT: xvadddp vs0, vs0, vs1 2174; PWR9LE-NEXT: xxswapd vs1, vs0 2175; PWR9LE-NEXT: blr 2176; 2177; PWR9BE-LABEL: v32f64_fast: 2178; PWR9BE: # %bb.0: # %entry 2179; PWR9BE-NEXT: lxv vs0, 272(r1) 2180; PWR9BE-NEXT: lxv vs1, 240(r1) 2181; PWR9BE-NEXT: lxv vs2, 288(r1) 2182; PWR9BE-NEXT: lxv vs3, 256(r1) 2183; PWR9BE-NEXT: xvadddp vs4, v3, v11 2184; PWR9BE-NEXT: xvadddp vs5, v5, v13 2185; PWR9BE-NEXT: xvadddp vs6, v2, v10 2186; PWR9BE-NEXT: xvadddp vs7, v4, v12 2187; PWR9BE-NEXT: xvadddp vs3, v7, vs3 2188; PWR9BE-NEXT: xvadddp vs2, v9, vs2 2189; PWR9BE-NEXT: xvadddp vs1, v6, vs1 2190; PWR9BE-NEXT: xvadddp vs0, v8, vs0 2191; PWR9BE-NEXT: xvadddp vs0, vs7, vs0 2192; PWR9BE-NEXT: xvadddp vs1, vs6, vs1 2193; PWR9BE-NEXT: xvadddp vs2, vs5, vs2 2194; PWR9BE-NEXT: xvadddp vs3, vs4, vs3 2195; PWR9BE-NEXT: xvadddp vs2, vs3, vs2 2196; PWR9BE-NEXT: xvadddp vs0, vs1, vs0 2197; PWR9BE-NEXT: xvadddp vs0, vs0, vs2 2198; PWR9BE-NEXT: xxswapd vs1, vs0 2199; PWR9BE-NEXT: xvadddp vs1, vs0, vs1 2200; PWR9BE-NEXT: blr 2201; 2202; PWR10LE-LABEL: v32f64_fast: 2203; PWR10LE: # %bb.0: # %entry 2204; PWR10LE-NEXT: lxv vs0, 256(r1) 2205; PWR10LE-NEXT: lxv vs1, 224(r1) 2206; PWR10LE-NEXT: xvadddp vs4, v3, v11 2207; PWR10LE-NEXT: xvadddp vs5, v5, v13 2208; PWR10LE-NEXT: xvadddp vs6, v2, v10 2209; PWR10LE-NEXT: xvadddp vs7, v4, v12 2210; PWR10LE-NEXT: xvadddp vs1, v6, vs1 2211; PWR10LE-NEXT: lxv vs2, 272(r1) 2212; PWR10LE-NEXT: lxv vs3, 240(r1) 2213; PWR10LE-NEXT: xvadddp vs3, v7, vs3 2214; PWR10LE-NEXT: xvadddp vs2, v9, vs2 2215; PWR10LE-NEXT: xvadddp vs0, v8, vs0 2216; PWR10LE-NEXT: xvadddp vs0, vs7, vs0 2217; PWR10LE-NEXT: xvadddp vs1, vs6, vs1 2218; PWR10LE-NEXT: xvadddp vs2, vs5, vs2 2219; PWR10LE-NEXT: xvadddp vs3, vs4, vs3 2220; PWR10LE-NEXT: xvadddp vs2, vs3, vs2 2221; PWR10LE-NEXT: xvadddp vs0, vs1, vs0 2222; PWR10LE-NEXT: xvadddp vs0, vs0, vs2 2223; PWR10LE-NEXT: xxswapd vs1, vs0 2224; PWR10LE-NEXT: xvadddp vs0, vs0, vs1 2225; PWR10LE-NEXT: xxswapd vs1, vs0 2226; PWR10LE-NEXT: blr 2227; 2228; PWR10BE-LABEL: v32f64_fast: 2229; PWR10BE: # %bb.0: # %entry 2230; PWR10BE-NEXT: lxv vs0, 272(r1) 2231; PWR10BE-NEXT: lxv vs1, 240(r1) 2232; PWR10BE-NEXT: xvadddp vs4, v3, v11 2233; PWR10BE-NEXT: xvadddp vs5, v5, v13 2234; PWR10BE-NEXT: xvadddp vs6, v2, v10 2235; PWR10BE-NEXT: xvadddp vs7, v4, v12 2236; PWR10BE-NEXT: xvadddp vs1, v6, vs1 2237; PWR10BE-NEXT: lxv vs2, 288(r1) 2238; PWR10BE-NEXT: lxv vs3, 256(r1) 2239; PWR10BE-NEXT: xvadddp vs3, v7, vs3 2240; PWR10BE-NEXT: xvadddp vs2, v9, vs2 2241; PWR10BE-NEXT: xvadddp vs0, v8, vs0 2242; PWR10BE-NEXT: xvadddp vs0, vs7, vs0 2243; PWR10BE-NEXT: xvadddp vs1, vs6, vs1 2244; PWR10BE-NEXT: xvadddp vs2, vs5, vs2 2245; PWR10BE-NEXT: xvadddp vs3, vs4, vs3 2246; PWR10BE-NEXT: xvadddp vs2, vs3, vs2 2247; PWR10BE-NEXT: xvadddp vs0, vs1, vs0 2248; PWR10BE-NEXT: xvadddp vs0, vs0, vs2 2249; PWR10BE-NEXT: xxswapd vs1, vs0 2250; PWR10BE-NEXT: xvadddp vs1, vs0, vs1 2251; PWR10BE-NEXT: blr 2252entry: 2253 %0 = call fast double @llvm.vector.reduce.fadd.v32f64(double -0.000000e+00, <32 x double> %a) 2254 ret double %0 2255} 2256 2257define dso_local double @v64f64(<64 x double> %a) local_unnamed_addr #0 { 2258; PWR9LE-LABEL: v64f64: 2259; PWR9LE: # %bb.0: # %entry 2260; PWR9LE-NEXT: xxswapd v18, v2 2261; PWR9LE-NEXT: lxv v17, 224(r1) 2262; PWR9LE-NEXT: lxv v16, 240(r1) 2263; PWR9LE-NEXT: lxv v15, 256(r1) 2264; PWR9LE-NEXT: lxv v14, 272(r1) 2265; PWR9LE-NEXT: xsadddp v2, v18, v2 2266; PWR9LE-NEXT: xxswapd v18, v3 2267; PWR9LE-NEXT: lxv v1, 288(r1) 2268; PWR9LE-NEXT: lxv v0, 304(r1) 2269; PWR9LE-NEXT: lxv vs13, 320(r1) 2270; PWR9LE-NEXT: lxv vs12, 336(r1) 2271; PWR9LE-NEXT: lxv vs11, 352(r1) 2272; PWR9LE-NEXT: lxv vs10, 368(r1) 2273; PWR9LE-NEXT: lxv vs9, 384(r1) 2274; PWR9LE-NEXT: lxv vs8, 400(r1) 2275; PWR9LE-NEXT: lxv vs7, 416(r1) 2276; PWR9LE-NEXT: lxv vs6, 432(r1) 2277; PWR9LE-NEXT: lxv vs5, 448(r1) 2278; PWR9LE-NEXT: lxv vs4, 464(r1) 2279; PWR9LE-NEXT: xsadddp v2, v2, v18 2280; PWR9LE-NEXT: lxv vs3, 480(r1) 2281; PWR9LE-NEXT: lxv vs2, 496(r1) 2282; PWR9LE-NEXT: lxv vs1, 512(r1) 2283; PWR9LE-NEXT: lxv vs0, 528(r1) 2284; PWR9LE-NEXT: xsadddp v2, v2, v3 2285; PWR9LE-NEXT: xxswapd v3, v4 2286; PWR9LE-NEXT: xsadddp v2, v2, v3 2287; PWR9LE-NEXT: xxswapd v3, v5 2288; PWR9LE-NEXT: xsadddp v2, v2, v4 2289; PWR9LE-NEXT: xsadddp v2, v2, v3 2290; PWR9LE-NEXT: xxswapd v3, v6 2291; PWR9LE-NEXT: xsadddp v2, v2, v5 2292; PWR9LE-NEXT: xsadddp v2, v2, v3 2293; PWR9LE-NEXT: xxswapd v3, v7 2294; PWR9LE-NEXT: xsadddp v2, v2, v6 2295; PWR9LE-NEXT: xsadddp v2, v2, v3 2296; PWR9LE-NEXT: xxswapd v3, v8 2297; PWR9LE-NEXT: xsadddp v2, v2, v7 2298; PWR9LE-NEXT: xsadddp v2, v2, v3 2299; PWR9LE-NEXT: xxswapd v3, v9 2300; PWR9LE-NEXT: xsadddp v2, v2, v8 2301; PWR9LE-NEXT: xsadddp v2, v2, v3 2302; PWR9LE-NEXT: xxswapd v3, v10 2303; PWR9LE-NEXT: xsadddp v2, v2, v9 2304; PWR9LE-NEXT: xsadddp v2, v2, v3 2305; PWR9LE-NEXT: xxswapd v3, v11 2306; PWR9LE-NEXT: xsadddp v2, v2, v10 2307; PWR9LE-NEXT: xsadddp v2, v2, v3 2308; PWR9LE-NEXT: xxswapd v3, v12 2309; PWR9LE-NEXT: xsadddp v2, v2, v11 2310; PWR9LE-NEXT: xsadddp v2, v2, v3 2311; PWR9LE-NEXT: xxswapd v3, v13 2312; PWR9LE-NEXT: xsadddp v2, v2, v12 2313; PWR9LE-NEXT: xsadddp v2, v2, v3 2314; PWR9LE-NEXT: xxswapd v3, v17 2315; PWR9LE-NEXT: xsadddp v2, v2, v13 2316; PWR9LE-NEXT: xsadddp v2, v2, v3 2317; PWR9LE-NEXT: xxswapd v3, v16 2318; PWR9LE-NEXT: xsadddp v2, v2, v17 2319; PWR9LE-NEXT: xsadddp v2, v2, v3 2320; PWR9LE-NEXT: xxswapd v3, v15 2321; PWR9LE-NEXT: xsadddp v2, v2, v16 2322; PWR9LE-NEXT: xsadddp v2, v2, v3 2323; PWR9LE-NEXT: xxswapd v3, v14 2324; PWR9LE-NEXT: xsadddp v2, v2, v15 2325; PWR9LE-NEXT: xsadddp v2, v2, v3 2326; PWR9LE-NEXT: xxswapd v3, v1 2327; PWR9LE-NEXT: xsadddp v2, v2, v14 2328; PWR9LE-NEXT: xsadddp v2, v2, v3 2329; PWR9LE-NEXT: xxswapd v3, v0 2330; PWR9LE-NEXT: xsadddp v2, v2, v1 2331; PWR9LE-NEXT: xsadddp v2, v2, v3 2332; PWR9LE-NEXT: xxswapd v3, vs13 2333; PWR9LE-NEXT: xsadddp v2, v2, v0 2334; PWR9LE-NEXT: xsadddp v2, v2, v3 2335; PWR9LE-NEXT: xsadddp f13, v2, f13 2336; PWR9LE-NEXT: xxswapd v2, vs12 2337; PWR9LE-NEXT: xsadddp f13, f13, v2 2338; PWR9LE-NEXT: xsadddp f12, f13, f12 2339; PWR9LE-NEXT: xxswapd vs13, vs11 2340; PWR9LE-NEXT: xsadddp f12, f12, f13 2341; PWR9LE-NEXT: xsadddp f11, f12, f11 2342; PWR9LE-NEXT: xxswapd vs12, vs10 2343; PWR9LE-NEXT: xsadddp f11, f11, f12 2344; PWR9LE-NEXT: xsadddp f10, f11, f10 2345; PWR9LE-NEXT: xxswapd vs11, vs9 2346; PWR9LE-NEXT: xsadddp f10, f10, f11 2347; PWR9LE-NEXT: xsadddp f9, f10, f9 2348; PWR9LE-NEXT: xxswapd vs10, vs8 2349; PWR9LE-NEXT: xsadddp f9, f9, f10 2350; PWR9LE-NEXT: xsadddp f8, f9, f8 2351; PWR9LE-NEXT: xxswapd vs9, vs7 2352; PWR9LE-NEXT: xsadddp f8, f8, f9 2353; PWR9LE-NEXT: xsadddp f7, f8, f7 2354; PWR9LE-NEXT: xxswapd vs8, vs6 2355; PWR9LE-NEXT: xsadddp f7, f7, f8 2356; PWR9LE-NEXT: xsadddp f6, f7, f6 2357; PWR9LE-NEXT: xxswapd vs7, vs5 2358; PWR9LE-NEXT: xsadddp f6, f6, f7 2359; PWR9LE-NEXT: xsadddp f5, f6, f5 2360; PWR9LE-NEXT: xxswapd vs6, vs4 2361; PWR9LE-NEXT: xsadddp f5, f5, f6 2362; PWR9LE-NEXT: xsadddp f4, f5, f4 2363; PWR9LE-NEXT: xxswapd vs5, vs3 2364; PWR9LE-NEXT: xsadddp f4, f4, f5 2365; PWR9LE-NEXT: xsadddp f3, f4, f3 2366; PWR9LE-NEXT: xxswapd vs4, vs2 2367; PWR9LE-NEXT: xsadddp f3, f3, f4 2368; PWR9LE-NEXT: xsadddp f2, f3, f2 2369; PWR9LE-NEXT: xxswapd vs3, vs1 2370; PWR9LE-NEXT: xsadddp f2, f2, f3 2371; PWR9LE-NEXT: xsadddp f1, f2, f1 2372; PWR9LE-NEXT: xxswapd vs2, vs0 2373; PWR9LE-NEXT: xsadddp f1, f1, f2 2374; PWR9LE-NEXT: xsadddp f1, f1, f0 2375; PWR9LE-NEXT: blr 2376; 2377; PWR9BE-LABEL: v64f64: 2378; PWR9BE: # %bb.0: # %entry 2379; PWR9BE-NEXT: xxswapd v18, v2 2380; PWR9BE-NEXT: lxv v17, 240(r1) 2381; PWR9BE-NEXT: lxv v16, 256(r1) 2382; PWR9BE-NEXT: lxv v15, 272(r1) 2383; PWR9BE-NEXT: lxv v14, 288(r1) 2384; PWR9BE-NEXT: xsadddp v2, v2, v18 2385; PWR9BE-NEXT: lxv v1, 304(r1) 2386; PWR9BE-NEXT: lxv v0, 320(r1) 2387; PWR9BE-NEXT: lxv vs13, 336(r1) 2388; PWR9BE-NEXT: lxv vs12, 352(r1) 2389; PWR9BE-NEXT: lxv vs11, 368(r1) 2390; PWR9BE-NEXT: lxv vs10, 384(r1) 2391; PWR9BE-NEXT: lxv vs9, 400(r1) 2392; PWR9BE-NEXT: lxv vs8, 416(r1) 2393; PWR9BE-NEXT: lxv vs7, 432(r1) 2394; PWR9BE-NEXT: lxv vs6, 448(r1) 2395; PWR9BE-NEXT: lxv vs5, 464(r1) 2396; PWR9BE-NEXT: lxv vs4, 480(r1) 2397; PWR9BE-NEXT: xsadddp v2, v2, v3 2398; PWR9BE-NEXT: xxswapd v3, v3 2399; PWR9BE-NEXT: lxv vs3, 496(r1) 2400; PWR9BE-NEXT: lxv vs2, 512(r1) 2401; PWR9BE-NEXT: lxv vs1, 528(r1) 2402; PWR9BE-NEXT: lxv vs0, 544(r1) 2403; PWR9BE-NEXT: xsadddp v2, v2, v3 2404; PWR9BE-NEXT: xxswapd v3, v4 2405; PWR9BE-NEXT: xsadddp v2, v2, v4 2406; PWR9BE-NEXT: xsadddp v2, v2, v3 2407; PWR9BE-NEXT: xxswapd v3, v5 2408; PWR9BE-NEXT: xsadddp v2, v2, v5 2409; PWR9BE-NEXT: xsadddp v2, v2, v3 2410; PWR9BE-NEXT: xxswapd v3, v6 2411; PWR9BE-NEXT: xsadddp v2, v2, v6 2412; PWR9BE-NEXT: xsadddp v2, v2, v3 2413; PWR9BE-NEXT: xxswapd v3, v7 2414; PWR9BE-NEXT: xsadddp v2, v2, v7 2415; PWR9BE-NEXT: xsadddp v2, v2, v3 2416; PWR9BE-NEXT: xxswapd v3, v8 2417; PWR9BE-NEXT: xsadddp v2, v2, v8 2418; PWR9BE-NEXT: xsadddp v2, v2, v3 2419; PWR9BE-NEXT: xxswapd v3, v9 2420; PWR9BE-NEXT: xsadddp v2, v2, v9 2421; PWR9BE-NEXT: xsadddp v2, v2, v3 2422; PWR9BE-NEXT: xxswapd v3, v10 2423; PWR9BE-NEXT: xsadddp v2, v2, v10 2424; PWR9BE-NEXT: xsadddp v2, v2, v3 2425; PWR9BE-NEXT: xxswapd v3, v11 2426; PWR9BE-NEXT: xsadddp v2, v2, v11 2427; PWR9BE-NEXT: xsadddp v2, v2, v3 2428; PWR9BE-NEXT: xxswapd v3, v12 2429; PWR9BE-NEXT: xsadddp v2, v2, v12 2430; PWR9BE-NEXT: xsadddp v2, v2, v3 2431; PWR9BE-NEXT: xxswapd v3, v13 2432; PWR9BE-NEXT: xsadddp v2, v2, v13 2433; PWR9BE-NEXT: xsadddp v2, v2, v3 2434; PWR9BE-NEXT: xxswapd v3, v17 2435; PWR9BE-NEXT: xsadddp v2, v2, v17 2436; PWR9BE-NEXT: xsadddp v2, v2, v3 2437; PWR9BE-NEXT: xxswapd v3, v16 2438; PWR9BE-NEXT: xsadddp v2, v2, v16 2439; PWR9BE-NEXT: xsadddp v2, v2, v3 2440; PWR9BE-NEXT: xxswapd v3, v15 2441; PWR9BE-NEXT: xsadddp v2, v2, v15 2442; PWR9BE-NEXT: xsadddp v2, v2, v3 2443; PWR9BE-NEXT: xxswapd v3, v14 2444; PWR9BE-NEXT: xsadddp v2, v2, v14 2445; PWR9BE-NEXT: xsadddp v2, v2, v3 2446; PWR9BE-NEXT: xxswapd v3, v1 2447; PWR9BE-NEXT: xsadddp v2, v2, v1 2448; PWR9BE-NEXT: xsadddp v2, v2, v3 2449; PWR9BE-NEXT: xxswapd v3, v0 2450; PWR9BE-NEXT: xsadddp v2, v2, v0 2451; PWR9BE-NEXT: xsadddp v2, v2, v3 2452; PWR9BE-NEXT: xsadddp v2, v2, f13 2453; PWR9BE-NEXT: xxswapd vs13, vs13 2454; PWR9BE-NEXT: xsadddp f13, v2, f13 2455; PWR9BE-NEXT: xsadddp f13, f13, f12 2456; PWR9BE-NEXT: xxswapd vs12, vs12 2457; PWR9BE-NEXT: xsadddp f12, f13, f12 2458; PWR9BE-NEXT: xsadddp f12, f12, f11 2459; PWR9BE-NEXT: xxswapd vs11, vs11 2460; PWR9BE-NEXT: xsadddp f11, f12, f11 2461; PWR9BE-NEXT: xsadddp f11, f11, f10 2462; PWR9BE-NEXT: xxswapd vs10, vs10 2463; PWR9BE-NEXT: xsadddp f10, f11, f10 2464; PWR9BE-NEXT: xsadddp f10, f10, f9 2465; PWR9BE-NEXT: xxswapd vs9, vs9 2466; PWR9BE-NEXT: xsadddp f9, f10, f9 2467; PWR9BE-NEXT: xsadddp f9, f9, f8 2468; PWR9BE-NEXT: xxswapd vs8, vs8 2469; PWR9BE-NEXT: xsadddp f8, f9, f8 2470; PWR9BE-NEXT: xsadddp f8, f8, f7 2471; PWR9BE-NEXT: xxswapd vs7, vs7 2472; PWR9BE-NEXT: xsadddp f7, f8, f7 2473; PWR9BE-NEXT: xsadddp f7, f7, f6 2474; PWR9BE-NEXT: xxswapd vs6, vs6 2475; PWR9BE-NEXT: xsadddp f6, f7, f6 2476; PWR9BE-NEXT: xsadddp f6, f6, f5 2477; PWR9BE-NEXT: xxswapd vs5, vs5 2478; PWR9BE-NEXT: xsadddp f5, f6, f5 2479; PWR9BE-NEXT: xsadddp f5, f5, f4 2480; PWR9BE-NEXT: xxswapd vs4, vs4 2481; PWR9BE-NEXT: xsadddp f4, f5, f4 2482; PWR9BE-NEXT: xsadddp f4, f4, f3 2483; PWR9BE-NEXT: xxswapd vs3, vs3 2484; PWR9BE-NEXT: xsadddp f3, f4, f3 2485; PWR9BE-NEXT: xsadddp f3, f3, f2 2486; PWR9BE-NEXT: xxswapd vs2, vs2 2487; PWR9BE-NEXT: xsadddp f2, f3, f2 2488; PWR9BE-NEXT: xsadddp f2, f2, f1 2489; PWR9BE-NEXT: xxswapd vs1, vs1 2490; PWR9BE-NEXT: xsadddp f1, f2, f1 2491; PWR9BE-NEXT: xsadddp f1, f1, f0 2492; PWR9BE-NEXT: xxswapd vs0, vs0 2493; PWR9BE-NEXT: xsadddp f1, f1, f0 2494; PWR9BE-NEXT: blr 2495; 2496; PWR10LE-LABEL: v64f64: 2497; PWR10LE: # %bb.0: # %entry 2498; PWR10LE-NEXT: xxswapd v18, v2 2499; PWR10LE-NEXT: lxv v17, 224(r1) 2500; PWR10LE-NEXT: lxv v16, 240(r1) 2501; PWR10LE-NEXT: xsadddp v2, v18, v2 2502; PWR10LE-NEXT: xxswapd v18, v3 2503; PWR10LE-NEXT: lxv v15, 256(r1) 2504; PWR10LE-NEXT: lxv v14, 272(r1) 2505; PWR10LE-NEXT: lxv v1, 288(r1) 2506; PWR10LE-NEXT: lxv v0, 304(r1) 2507; PWR10LE-NEXT: lxv vs13, 320(r1) 2508; PWR10LE-NEXT: lxv vs12, 336(r1) 2509; PWR10LE-NEXT: lxv vs11, 352(r1) 2510; PWR10LE-NEXT: lxv vs10, 368(r1) 2511; PWR10LE-NEXT: xsadddp v2, v2, v18 2512; PWR10LE-NEXT: lxv vs9, 384(r1) 2513; PWR10LE-NEXT: lxv vs8, 400(r1) 2514; PWR10LE-NEXT: lxv vs7, 416(r1) 2515; PWR10LE-NEXT: lxv vs6, 432(r1) 2516; PWR10LE-NEXT: lxv vs5, 448(r1) 2517; PWR10LE-NEXT: lxv vs4, 464(r1) 2518; PWR10LE-NEXT: lxv vs3, 480(r1) 2519; PWR10LE-NEXT: lxv vs2, 496(r1) 2520; PWR10LE-NEXT: lxv vs1, 512(r1) 2521; PWR10LE-NEXT: lxv vs0, 528(r1) 2522; PWR10LE-NEXT: xsadddp v2, v2, v3 2523; PWR10LE-NEXT: xxswapd v3, v4 2524; PWR10LE-NEXT: xsadddp v2, v2, v3 2525; PWR10LE-NEXT: xxswapd v3, v5 2526; PWR10LE-NEXT: xsadddp v2, v2, v4 2527; PWR10LE-NEXT: xsadddp v2, v2, v3 2528; PWR10LE-NEXT: xxswapd v3, v6 2529; PWR10LE-NEXT: xsadddp v2, v2, v5 2530; PWR10LE-NEXT: xsadddp v2, v2, v3 2531; PWR10LE-NEXT: xxswapd v3, v7 2532; PWR10LE-NEXT: xsadddp v2, v2, v6 2533; PWR10LE-NEXT: xsadddp v2, v2, v3 2534; PWR10LE-NEXT: xxswapd v3, v8 2535; PWR10LE-NEXT: xsadddp v2, v2, v7 2536; PWR10LE-NEXT: xsadddp v2, v2, v3 2537; PWR10LE-NEXT: xxswapd v3, v9 2538; PWR10LE-NEXT: xsadddp v2, v2, v8 2539; PWR10LE-NEXT: xsadddp v2, v2, v3 2540; PWR10LE-NEXT: xxswapd v3, v10 2541; PWR10LE-NEXT: xsadddp v2, v2, v9 2542; PWR10LE-NEXT: xsadddp v2, v2, v3 2543; PWR10LE-NEXT: xxswapd v3, v11 2544; PWR10LE-NEXT: xsadddp v2, v2, v10 2545; PWR10LE-NEXT: xsadddp v2, v2, v3 2546; PWR10LE-NEXT: xxswapd v3, v12 2547; PWR10LE-NEXT: xsadddp v2, v2, v11 2548; PWR10LE-NEXT: xsadddp v2, v2, v3 2549; PWR10LE-NEXT: xxswapd v3, v13 2550; PWR10LE-NEXT: xsadddp v2, v2, v12 2551; PWR10LE-NEXT: xsadddp v2, v2, v3 2552; PWR10LE-NEXT: xxswapd v3, v17 2553; PWR10LE-NEXT: xsadddp v2, v2, v13 2554; PWR10LE-NEXT: xsadddp v2, v2, v3 2555; PWR10LE-NEXT: xxswapd v3, v16 2556; PWR10LE-NEXT: xsadddp v2, v2, v17 2557; PWR10LE-NEXT: xsadddp v2, v2, v3 2558; PWR10LE-NEXT: xxswapd v3, v15 2559; PWR10LE-NEXT: xsadddp v2, v2, v16 2560; PWR10LE-NEXT: xsadddp v2, v2, v3 2561; PWR10LE-NEXT: xxswapd v3, v14 2562; PWR10LE-NEXT: xsadddp v2, v2, v15 2563; PWR10LE-NEXT: xsadddp v2, v2, v3 2564; PWR10LE-NEXT: xxswapd v3, v1 2565; PWR10LE-NEXT: xsadddp v2, v2, v14 2566; PWR10LE-NEXT: xsadddp v2, v2, v3 2567; PWR10LE-NEXT: xxswapd v3, v0 2568; PWR10LE-NEXT: xsadddp v2, v2, v1 2569; PWR10LE-NEXT: xsadddp v2, v2, v3 2570; PWR10LE-NEXT: xxswapd v3, vs13 2571; PWR10LE-NEXT: xsadddp v2, v2, v0 2572; PWR10LE-NEXT: xsadddp v2, v2, v3 2573; PWR10LE-NEXT: xsadddp f13, v2, f13 2574; PWR10LE-NEXT: xxswapd v2, vs12 2575; PWR10LE-NEXT: xsadddp f13, f13, v2 2576; PWR10LE-NEXT: xsadddp f12, f13, f12 2577; PWR10LE-NEXT: xxswapd vs13, vs11 2578; PWR10LE-NEXT: xsadddp f12, f12, f13 2579; PWR10LE-NEXT: xsadddp f11, f12, f11 2580; PWR10LE-NEXT: xxswapd vs12, vs10 2581; PWR10LE-NEXT: xsadddp f11, f11, f12 2582; PWR10LE-NEXT: xsadddp f10, f11, f10 2583; PWR10LE-NEXT: xxswapd vs11, vs9 2584; PWR10LE-NEXT: xsadddp f10, f10, f11 2585; PWR10LE-NEXT: xsadddp f9, f10, f9 2586; PWR10LE-NEXT: xxswapd vs10, vs8 2587; PWR10LE-NEXT: xsadddp f9, f9, f10 2588; PWR10LE-NEXT: xsadddp f8, f9, f8 2589; PWR10LE-NEXT: xxswapd vs9, vs7 2590; PWR10LE-NEXT: xsadddp f8, f8, f9 2591; PWR10LE-NEXT: xsadddp f7, f8, f7 2592; PWR10LE-NEXT: xxswapd vs8, vs6 2593; PWR10LE-NEXT: xsadddp f7, f7, f8 2594; PWR10LE-NEXT: xsadddp f6, f7, f6 2595; PWR10LE-NEXT: xxswapd vs7, vs5 2596; PWR10LE-NEXT: xsadddp f6, f6, f7 2597; PWR10LE-NEXT: xsadddp f5, f6, f5 2598; PWR10LE-NEXT: xxswapd vs6, vs4 2599; PWR10LE-NEXT: xsadddp f5, f5, f6 2600; PWR10LE-NEXT: xsadddp f4, f5, f4 2601; PWR10LE-NEXT: xxswapd vs5, vs3 2602; PWR10LE-NEXT: xsadddp f4, f4, f5 2603; PWR10LE-NEXT: xsadddp f3, f4, f3 2604; PWR10LE-NEXT: xxswapd vs4, vs2 2605; PWR10LE-NEXT: xsadddp f3, f3, f4 2606; PWR10LE-NEXT: xsadddp f2, f3, f2 2607; PWR10LE-NEXT: xxswapd vs3, vs1 2608; PWR10LE-NEXT: xsadddp f2, f2, f3 2609; PWR10LE-NEXT: xsadddp f1, f2, f1 2610; PWR10LE-NEXT: xxswapd vs2, vs0 2611; PWR10LE-NEXT: xsadddp f1, f1, f2 2612; PWR10LE-NEXT: xsadddp f1, f1, f0 2613; PWR10LE-NEXT: blr 2614; 2615; PWR10BE-LABEL: v64f64: 2616; PWR10BE: # %bb.0: # %entry 2617; PWR10BE-NEXT: xxswapd v18, v2 2618; PWR10BE-NEXT: lxv v17, 240(r1) 2619; PWR10BE-NEXT: lxv v16, 256(r1) 2620; PWR10BE-NEXT: xsadddp v2, v2, v18 2621; PWR10BE-NEXT: lxv v15, 272(r1) 2622; PWR10BE-NEXT: lxv v14, 288(r1) 2623; PWR10BE-NEXT: lxv v1, 304(r1) 2624; PWR10BE-NEXT: lxv v0, 320(r1) 2625; PWR10BE-NEXT: lxv vs13, 336(r1) 2626; PWR10BE-NEXT: lxv vs12, 352(r1) 2627; PWR10BE-NEXT: lxv vs11, 368(r1) 2628; PWR10BE-NEXT: lxv vs10, 384(r1) 2629; PWR10BE-NEXT: xsadddp v2, v2, v3 2630; PWR10BE-NEXT: xxswapd v3, v3 2631; PWR10BE-NEXT: lxv vs9, 400(r1) 2632; PWR10BE-NEXT: lxv vs8, 416(r1) 2633; PWR10BE-NEXT: lxv vs7, 432(r1) 2634; PWR10BE-NEXT: lxv vs6, 448(r1) 2635; PWR10BE-NEXT: lxv vs5, 464(r1) 2636; PWR10BE-NEXT: lxv vs4, 480(r1) 2637; PWR10BE-NEXT: lxv vs3, 496(r1) 2638; PWR10BE-NEXT: lxv vs2, 512(r1) 2639; PWR10BE-NEXT: lxv vs1, 528(r1) 2640; PWR10BE-NEXT: lxv vs0, 544(r1) 2641; PWR10BE-NEXT: xsadddp v2, v2, v3 2642; PWR10BE-NEXT: xxswapd v3, v4 2643; PWR10BE-NEXT: xsadddp v2, v2, v4 2644; PWR10BE-NEXT: xsadddp v2, v2, v3 2645; PWR10BE-NEXT: xxswapd v3, v5 2646; PWR10BE-NEXT: xsadddp v2, v2, v5 2647; PWR10BE-NEXT: xsadddp v2, v2, v3 2648; PWR10BE-NEXT: xxswapd v3, v6 2649; PWR10BE-NEXT: xsadddp v2, v2, v6 2650; PWR10BE-NEXT: xsadddp v2, v2, v3 2651; PWR10BE-NEXT: xxswapd v3, v7 2652; PWR10BE-NEXT: xsadddp v2, v2, v7 2653; PWR10BE-NEXT: xsadddp v2, v2, v3 2654; PWR10BE-NEXT: xxswapd v3, v8 2655; PWR10BE-NEXT: xsadddp v2, v2, v8 2656; PWR10BE-NEXT: xsadddp v2, v2, v3 2657; PWR10BE-NEXT: xxswapd v3, v9 2658; PWR10BE-NEXT: xsadddp v2, v2, v9 2659; PWR10BE-NEXT: xsadddp v2, v2, v3 2660; PWR10BE-NEXT: xxswapd v3, v10 2661; PWR10BE-NEXT: xsadddp v2, v2, v10 2662; PWR10BE-NEXT: xsadddp v2, v2, v3 2663; PWR10BE-NEXT: xxswapd v3, v11 2664; PWR10BE-NEXT: xsadddp v2, v2, v11 2665; PWR10BE-NEXT: xsadddp v2, v2, v3 2666; PWR10BE-NEXT: xxswapd v3, v12 2667; PWR10BE-NEXT: xsadddp v2, v2, v12 2668; PWR10BE-NEXT: xsadddp v2, v2, v3 2669; PWR10BE-NEXT: xxswapd v3, v13 2670; PWR10BE-NEXT: xsadddp v2, v2, v13 2671; PWR10BE-NEXT: xsadddp v2, v2, v3 2672; PWR10BE-NEXT: xxswapd v3, v17 2673; PWR10BE-NEXT: xsadddp v2, v2, v17 2674; PWR10BE-NEXT: xsadddp v2, v2, v3 2675; PWR10BE-NEXT: xxswapd v3, v16 2676; PWR10BE-NEXT: xsadddp v2, v2, v16 2677; PWR10BE-NEXT: xsadddp v2, v2, v3 2678; PWR10BE-NEXT: xxswapd v3, v15 2679; PWR10BE-NEXT: xsadddp v2, v2, v15 2680; PWR10BE-NEXT: xsadddp v2, v2, v3 2681; PWR10BE-NEXT: xxswapd v3, v14 2682; PWR10BE-NEXT: xsadddp v2, v2, v14 2683; PWR10BE-NEXT: xsadddp v2, v2, v3 2684; PWR10BE-NEXT: xxswapd v3, v1 2685; PWR10BE-NEXT: xsadddp v2, v2, v1 2686; PWR10BE-NEXT: xsadddp v2, v2, v3 2687; PWR10BE-NEXT: xxswapd v3, v0 2688; PWR10BE-NEXT: xsadddp v2, v2, v0 2689; PWR10BE-NEXT: xsadddp v2, v2, v3 2690; PWR10BE-NEXT: xsadddp v2, v2, f13 2691; PWR10BE-NEXT: xxswapd vs13, vs13 2692; PWR10BE-NEXT: xsadddp f13, v2, f13 2693; PWR10BE-NEXT: xsadddp f13, f13, f12 2694; PWR10BE-NEXT: xxswapd vs12, vs12 2695; PWR10BE-NEXT: xsadddp f12, f13, f12 2696; PWR10BE-NEXT: xsadddp f12, f12, f11 2697; PWR10BE-NEXT: xxswapd vs11, vs11 2698; PWR10BE-NEXT: xsadddp f11, f12, f11 2699; PWR10BE-NEXT: xsadddp f11, f11, f10 2700; PWR10BE-NEXT: xxswapd vs10, vs10 2701; PWR10BE-NEXT: xsadddp f10, f11, f10 2702; PWR10BE-NEXT: xsadddp f10, f10, f9 2703; PWR10BE-NEXT: xxswapd vs9, vs9 2704; PWR10BE-NEXT: xsadddp f9, f10, f9 2705; PWR10BE-NEXT: xsadddp f9, f9, f8 2706; PWR10BE-NEXT: xxswapd vs8, vs8 2707; PWR10BE-NEXT: xsadddp f8, f9, f8 2708; PWR10BE-NEXT: xsadddp f8, f8, f7 2709; PWR10BE-NEXT: xxswapd vs7, vs7 2710; PWR10BE-NEXT: xsadddp f7, f8, f7 2711; PWR10BE-NEXT: xsadddp f7, f7, f6 2712; PWR10BE-NEXT: xxswapd vs6, vs6 2713; PWR10BE-NEXT: xsadddp f6, f7, f6 2714; PWR10BE-NEXT: xsadddp f6, f6, f5 2715; PWR10BE-NEXT: xxswapd vs5, vs5 2716; PWR10BE-NEXT: xsadddp f5, f6, f5 2717; PWR10BE-NEXT: xsadddp f5, f5, f4 2718; PWR10BE-NEXT: xxswapd vs4, vs4 2719; PWR10BE-NEXT: xsadddp f4, f5, f4 2720; PWR10BE-NEXT: xsadddp f4, f4, f3 2721; PWR10BE-NEXT: xxswapd vs3, vs3 2722; PWR10BE-NEXT: xsadddp f3, f4, f3 2723; PWR10BE-NEXT: xsadddp f3, f3, f2 2724; PWR10BE-NEXT: xxswapd vs2, vs2 2725; PWR10BE-NEXT: xsadddp f2, f3, f2 2726; PWR10BE-NEXT: xsadddp f2, f2, f1 2727; PWR10BE-NEXT: xxswapd vs1, vs1 2728; PWR10BE-NEXT: xsadddp f1, f2, f1 2729; PWR10BE-NEXT: xsadddp f1, f1, f0 2730; PWR10BE-NEXT: xxswapd vs0, vs0 2731; PWR10BE-NEXT: xsadddp f1, f1, f0 2732; PWR10BE-NEXT: blr 2733entry: 2734 %0 = call double @llvm.vector.reduce.fadd.v64f64(double -0.000000e+00, <64 x double> %a) 2735 ret double %0 2736} 2737 2738define dso_local double @v64f64_b(<64 x double> %a, double %b) local_unnamed_addr #0 { 2739; PWR9LE-LABEL: v64f64_b: 2740; PWR9LE: # %bb.0: # %entry 2741; PWR9LE-NEXT: xxswapd v19, v2 2742; PWR9LE-NEXT: lxv v18, 224(r1) 2743; PWR9LE-NEXT: lxv v17, 240(r1) 2744; PWR9LE-NEXT: lxv v16, 256(r1) 2745; PWR9LE-NEXT: lxv v15, 272(r1) 2746; PWR9LE-NEXT: xsadddp f1, f1, v19 2747; PWR9LE-NEXT: lxv v14, 288(r1) 2748; PWR9LE-NEXT: lxv v1, 304(r1) 2749; PWR9LE-NEXT: lxv v0, 320(r1) 2750; PWR9LE-NEXT: lxv vs13, 336(r1) 2751; PWR9LE-NEXT: lxv vs12, 352(r1) 2752; PWR9LE-NEXT: lxv vs11, 368(r1) 2753; PWR9LE-NEXT: lxv vs10, 384(r1) 2754; PWR9LE-NEXT: lxv vs9, 400(r1) 2755; PWR9LE-NEXT: lxv vs8, 416(r1) 2756; PWR9LE-NEXT: lxv vs7, 432(r1) 2757; PWR9LE-NEXT: lxv vs6, 448(r1) 2758; PWR9LE-NEXT: lxv vs5, 464(r1) 2759; PWR9LE-NEXT: xsadddp f1, f1, v2 2760; PWR9LE-NEXT: xxswapd v2, v3 2761; PWR9LE-NEXT: lxv vs4, 480(r1) 2762; PWR9LE-NEXT: lxv vs3, 496(r1) 2763; PWR9LE-NEXT: lxv vs2, 512(r1) 2764; PWR9LE-NEXT: lxv vs0, 528(r1) 2765; PWR9LE-NEXT: xsadddp f1, f1, v2 2766; PWR9LE-NEXT: xxswapd v2, v4 2767; PWR9LE-NEXT: xsadddp f1, f1, v3 2768; PWR9LE-NEXT: xsadddp f1, f1, v2 2769; PWR9LE-NEXT: xxswapd v2, v5 2770; PWR9LE-NEXT: xsadddp f1, f1, v4 2771; PWR9LE-NEXT: xsadddp f1, f1, v2 2772; PWR9LE-NEXT: xxswapd v2, v6 2773; PWR9LE-NEXT: xsadddp f1, f1, v5 2774; PWR9LE-NEXT: xsadddp f1, f1, v2 2775; PWR9LE-NEXT: xxswapd v2, v7 2776; PWR9LE-NEXT: xsadddp f1, f1, v6 2777; PWR9LE-NEXT: xsadddp f1, f1, v2 2778; PWR9LE-NEXT: xxswapd v2, v8 2779; PWR9LE-NEXT: xsadddp f1, f1, v7 2780; PWR9LE-NEXT: xsadddp f1, f1, v2 2781; PWR9LE-NEXT: xxswapd v2, v9 2782; PWR9LE-NEXT: xsadddp f1, f1, v8 2783; PWR9LE-NEXT: xsadddp f1, f1, v2 2784; PWR9LE-NEXT: xxswapd v2, v10 2785; PWR9LE-NEXT: xsadddp f1, f1, v9 2786; PWR9LE-NEXT: xsadddp f1, f1, v2 2787; PWR9LE-NEXT: xxswapd v2, v11 2788; PWR9LE-NEXT: xsadddp f1, f1, v10 2789; PWR9LE-NEXT: xsadddp f1, f1, v2 2790; PWR9LE-NEXT: xxswapd v2, v12 2791; PWR9LE-NEXT: xsadddp f1, f1, v11 2792; PWR9LE-NEXT: xsadddp f1, f1, v2 2793; PWR9LE-NEXT: xxswapd v2, v13 2794; PWR9LE-NEXT: xsadddp f1, f1, v12 2795; PWR9LE-NEXT: xsadddp f1, f1, v2 2796; PWR9LE-NEXT: xxswapd v2, v18 2797; PWR9LE-NEXT: xsadddp f1, f1, v13 2798; PWR9LE-NEXT: xsadddp f1, f1, v2 2799; PWR9LE-NEXT: xxswapd v2, v17 2800; PWR9LE-NEXT: xsadddp f1, f1, v18 2801; PWR9LE-NEXT: xsadddp f1, f1, v2 2802; PWR9LE-NEXT: xxswapd v2, v16 2803; PWR9LE-NEXT: xsadddp f1, f1, v17 2804; PWR9LE-NEXT: xsadddp f1, f1, v2 2805; PWR9LE-NEXT: xxswapd v2, v15 2806; PWR9LE-NEXT: xsadddp f1, f1, v16 2807; PWR9LE-NEXT: xsadddp f1, f1, v2 2808; PWR9LE-NEXT: xxswapd v2, v14 2809; PWR9LE-NEXT: xsadddp f1, f1, v15 2810; PWR9LE-NEXT: xsadddp f1, f1, v2 2811; PWR9LE-NEXT: xxswapd v2, v1 2812; PWR9LE-NEXT: xsadddp f1, f1, v14 2813; PWR9LE-NEXT: xsadddp f1, f1, v2 2814; PWR9LE-NEXT: xxswapd v2, v0 2815; PWR9LE-NEXT: xsadddp f1, f1, v1 2816; PWR9LE-NEXT: xsadddp f1, f1, v2 2817; PWR9LE-NEXT: xxswapd v2, vs13 2818; PWR9LE-NEXT: xsadddp f1, f1, v0 2819; PWR9LE-NEXT: xsadddp f1, f1, v2 2820; PWR9LE-NEXT: xsadddp f1, f1, f13 2821; PWR9LE-NEXT: xxswapd vs13, vs12 2822; PWR9LE-NEXT: xsadddp f1, f1, f13 2823; PWR9LE-NEXT: xsadddp f1, f1, f12 2824; PWR9LE-NEXT: xxswapd vs12, vs11 2825; PWR9LE-NEXT: xsadddp f1, f1, f12 2826; PWR9LE-NEXT: xsadddp f1, f1, f11 2827; PWR9LE-NEXT: xxswapd vs11, vs10 2828; PWR9LE-NEXT: xsadddp f1, f1, f11 2829; PWR9LE-NEXT: xsadddp f1, f1, f10 2830; PWR9LE-NEXT: xxswapd vs10, vs9 2831; PWR9LE-NEXT: xsadddp f1, f1, f10 2832; PWR9LE-NEXT: xsadddp f1, f1, f9 2833; PWR9LE-NEXT: xxswapd vs9, vs8 2834; PWR9LE-NEXT: xsadddp f1, f1, f9 2835; PWR9LE-NEXT: xsadddp f1, f1, f8 2836; PWR9LE-NEXT: xxswapd vs8, vs7 2837; PWR9LE-NEXT: xsadddp f1, f1, f8 2838; PWR9LE-NEXT: xsadddp f1, f1, f7 2839; PWR9LE-NEXT: xxswapd vs7, vs6 2840; PWR9LE-NEXT: xsadddp f1, f1, f7 2841; PWR9LE-NEXT: xsadddp f1, f1, f6 2842; PWR9LE-NEXT: xxswapd vs6, vs5 2843; PWR9LE-NEXT: xsadddp f1, f1, f6 2844; PWR9LE-NEXT: xsadddp f1, f1, f5 2845; PWR9LE-NEXT: xxswapd vs5, vs4 2846; PWR9LE-NEXT: xsadddp f1, f1, f5 2847; PWR9LE-NEXT: xsadddp f1, f1, f4 2848; PWR9LE-NEXT: xxswapd vs4, vs3 2849; PWR9LE-NEXT: xsadddp f1, f1, f4 2850; PWR9LE-NEXT: xsadddp f1, f1, f3 2851; PWR9LE-NEXT: xxswapd vs3, vs2 2852; PWR9LE-NEXT: xsadddp f1, f1, f3 2853; PWR9LE-NEXT: xsadddp f1, f1, f2 2854; PWR9LE-NEXT: xxswapd vs2, vs0 2855; PWR9LE-NEXT: xsadddp f1, f1, f2 2856; PWR9LE-NEXT: xsadddp f1, f1, f0 2857; PWR9LE-NEXT: blr 2858; 2859; PWR9BE-LABEL: v64f64_b: 2860; PWR9BE: # %bb.0: # %entry 2861; PWR9BE-NEXT: xsadddp f1, f1, v2 2862; PWR9BE-NEXT: xxswapd v2, v2 2863; PWR9BE-NEXT: lxv v18, 240(r1) 2864; PWR9BE-NEXT: lxv v17, 256(r1) 2865; PWR9BE-NEXT: lxv v16, 272(r1) 2866; PWR9BE-NEXT: lxv v15, 288(r1) 2867; PWR9BE-NEXT: lxv v14, 304(r1) 2868; PWR9BE-NEXT: xsadddp f1, f1, v2 2869; PWR9BE-NEXT: xxswapd v2, v3 2870; PWR9BE-NEXT: lxv v1, 320(r1) 2871; PWR9BE-NEXT: lxv v0, 336(r1) 2872; PWR9BE-NEXT: lxv vs13, 352(r1) 2873; PWR9BE-NEXT: lxv vs12, 368(r1) 2874; PWR9BE-NEXT: lxv vs11, 384(r1) 2875; PWR9BE-NEXT: lxv vs10, 400(r1) 2876; PWR9BE-NEXT: lxv vs9, 416(r1) 2877; PWR9BE-NEXT: lxv vs8, 432(r1) 2878; PWR9BE-NEXT: lxv vs7, 448(r1) 2879; PWR9BE-NEXT: lxv vs6, 464(r1) 2880; PWR9BE-NEXT: lxv vs5, 480(r1) 2881; PWR9BE-NEXT: lxv vs4, 496(r1) 2882; PWR9BE-NEXT: lxv vs3, 512(r1) 2883; PWR9BE-NEXT: lxv vs2, 528(r1) 2884; PWR9BE-NEXT: lxv vs0, 544(r1) 2885; PWR9BE-NEXT: xsadddp f1, f1, v3 2886; PWR9BE-NEXT: xsadddp f1, f1, v2 2887; PWR9BE-NEXT: xxswapd v2, v4 2888; PWR9BE-NEXT: xsadddp f1, f1, v4 2889; PWR9BE-NEXT: xsadddp f1, f1, v2 2890; PWR9BE-NEXT: xxswapd v2, v5 2891; PWR9BE-NEXT: xsadddp f1, f1, v5 2892; PWR9BE-NEXT: xsadddp f1, f1, v2 2893; PWR9BE-NEXT: xxswapd v2, v6 2894; PWR9BE-NEXT: xsadddp f1, f1, v6 2895; PWR9BE-NEXT: xsadddp f1, f1, v2 2896; PWR9BE-NEXT: xxswapd v2, v7 2897; PWR9BE-NEXT: xsadddp f1, f1, v7 2898; PWR9BE-NEXT: xsadddp f1, f1, v2 2899; PWR9BE-NEXT: xxswapd v2, v8 2900; PWR9BE-NEXT: xsadddp f1, f1, v8 2901; PWR9BE-NEXT: xsadddp f1, f1, v2 2902; PWR9BE-NEXT: xxswapd v2, v9 2903; PWR9BE-NEXT: xsadddp f1, f1, v9 2904; PWR9BE-NEXT: xsadddp f1, f1, v2 2905; PWR9BE-NEXT: xxswapd v2, v10 2906; PWR9BE-NEXT: xsadddp f1, f1, v10 2907; PWR9BE-NEXT: xsadddp f1, f1, v2 2908; PWR9BE-NEXT: xxswapd v2, v11 2909; PWR9BE-NEXT: xsadddp f1, f1, v11 2910; PWR9BE-NEXT: xsadddp f1, f1, v2 2911; PWR9BE-NEXT: xxswapd v2, v12 2912; PWR9BE-NEXT: xsadddp f1, f1, v12 2913; PWR9BE-NEXT: xsadddp f1, f1, v2 2914; PWR9BE-NEXT: xxswapd v2, v13 2915; PWR9BE-NEXT: xsadddp f1, f1, v13 2916; PWR9BE-NEXT: xsadddp f1, f1, v2 2917; PWR9BE-NEXT: xxswapd v2, v18 2918; PWR9BE-NEXT: xsadddp f1, f1, v18 2919; PWR9BE-NEXT: xsadddp f1, f1, v2 2920; PWR9BE-NEXT: xxswapd v2, v17 2921; PWR9BE-NEXT: xsadddp f1, f1, v17 2922; PWR9BE-NEXT: xsadddp f1, f1, v2 2923; PWR9BE-NEXT: xxswapd v2, v16 2924; PWR9BE-NEXT: xsadddp f1, f1, v16 2925; PWR9BE-NEXT: xsadddp f1, f1, v2 2926; PWR9BE-NEXT: xxswapd v2, v15 2927; PWR9BE-NEXT: xsadddp f1, f1, v15 2928; PWR9BE-NEXT: xsadddp f1, f1, v2 2929; PWR9BE-NEXT: xxswapd v2, v14 2930; PWR9BE-NEXT: xsadddp f1, f1, v14 2931; PWR9BE-NEXT: xsadddp f1, f1, v2 2932; PWR9BE-NEXT: xxswapd v2, v1 2933; PWR9BE-NEXT: xsadddp f1, f1, v1 2934; PWR9BE-NEXT: xsadddp f1, f1, v2 2935; PWR9BE-NEXT: xxswapd v2, v0 2936; PWR9BE-NEXT: xsadddp f1, f1, v0 2937; PWR9BE-NEXT: xsadddp f1, f1, v2 2938; PWR9BE-NEXT: xsadddp f1, f1, f13 2939; PWR9BE-NEXT: xxswapd vs13, vs13 2940; PWR9BE-NEXT: xsadddp f1, f1, f13 2941; PWR9BE-NEXT: xsadddp f1, f1, f12 2942; PWR9BE-NEXT: xxswapd vs12, vs12 2943; PWR9BE-NEXT: xsadddp f1, f1, f12 2944; PWR9BE-NEXT: xsadddp f1, f1, f11 2945; PWR9BE-NEXT: xxswapd vs11, vs11 2946; PWR9BE-NEXT: xsadddp f1, f1, f11 2947; PWR9BE-NEXT: xsadddp f1, f1, f10 2948; PWR9BE-NEXT: xxswapd vs10, vs10 2949; PWR9BE-NEXT: xsadddp f1, f1, f10 2950; PWR9BE-NEXT: xsadddp f1, f1, f9 2951; PWR9BE-NEXT: xxswapd vs9, vs9 2952; PWR9BE-NEXT: xsadddp f1, f1, f9 2953; PWR9BE-NEXT: xsadddp f1, f1, f8 2954; PWR9BE-NEXT: xxswapd vs8, vs8 2955; PWR9BE-NEXT: xsadddp f1, f1, f8 2956; PWR9BE-NEXT: xsadddp f1, f1, f7 2957; PWR9BE-NEXT: xxswapd vs7, vs7 2958; PWR9BE-NEXT: xsadddp f1, f1, f7 2959; PWR9BE-NEXT: xsadddp f1, f1, f6 2960; PWR9BE-NEXT: xxswapd vs6, vs6 2961; PWR9BE-NEXT: xsadddp f1, f1, f6 2962; PWR9BE-NEXT: xsadddp f1, f1, f5 2963; PWR9BE-NEXT: xxswapd vs5, vs5 2964; PWR9BE-NEXT: xsadddp f1, f1, f5 2965; PWR9BE-NEXT: xsadddp f1, f1, f4 2966; PWR9BE-NEXT: xxswapd vs4, vs4 2967; PWR9BE-NEXT: xsadddp f1, f1, f4 2968; PWR9BE-NEXT: xsadddp f1, f1, f3 2969; PWR9BE-NEXT: xxswapd vs3, vs3 2970; PWR9BE-NEXT: xsadddp f1, f1, f3 2971; PWR9BE-NEXT: xsadddp f1, f1, f2 2972; PWR9BE-NEXT: xxswapd vs2, vs2 2973; PWR9BE-NEXT: xsadddp f1, f1, f2 2974; PWR9BE-NEXT: xsadddp f1, f1, f0 2975; PWR9BE-NEXT: xxswapd vs0, vs0 2976; PWR9BE-NEXT: xsadddp f1, f1, f0 2977; PWR9BE-NEXT: blr 2978; 2979; PWR10LE-LABEL: v64f64_b: 2980; PWR10LE: # %bb.0: # %entry 2981; PWR10LE-NEXT: xxswapd v19, v2 2982; PWR10LE-NEXT: lxv v18, 224(r1) 2983; PWR10LE-NEXT: lxv v17, 240(r1) 2984; PWR10LE-NEXT: xsadddp f1, f1, v19 2985; PWR10LE-NEXT: lxv v16, 256(r1) 2986; PWR10LE-NEXT: lxv v15, 272(r1) 2987; PWR10LE-NEXT: lxv v14, 288(r1) 2988; PWR10LE-NEXT: lxv v1, 304(r1) 2989; PWR10LE-NEXT: lxv v0, 320(r1) 2990; PWR10LE-NEXT: lxv vs13, 336(r1) 2991; PWR10LE-NEXT: lxv vs12, 352(r1) 2992; PWR10LE-NEXT: lxv vs11, 368(r1) 2993; PWR10LE-NEXT: xsadddp f1, f1, v2 2994; PWR10LE-NEXT: xxswapd v2, v3 2995; PWR10LE-NEXT: lxv vs10, 384(r1) 2996; PWR10LE-NEXT: lxv vs9, 400(r1) 2997; PWR10LE-NEXT: lxv vs8, 416(r1) 2998; PWR10LE-NEXT: lxv vs7, 432(r1) 2999; PWR10LE-NEXT: lxv vs6, 448(r1) 3000; PWR10LE-NEXT: lxv vs5, 464(r1) 3001; PWR10LE-NEXT: lxv vs4, 480(r1) 3002; PWR10LE-NEXT: lxv vs3, 496(r1) 3003; PWR10LE-NEXT: lxv vs2, 512(r1) 3004; PWR10LE-NEXT: lxv vs0, 528(r1) 3005; PWR10LE-NEXT: xsadddp f1, f1, v2 3006; PWR10LE-NEXT: xxswapd v2, v4 3007; PWR10LE-NEXT: xsadddp f1, f1, v3 3008; PWR10LE-NEXT: xsadddp f1, f1, v2 3009; PWR10LE-NEXT: xxswapd v2, v5 3010; PWR10LE-NEXT: xsadddp f1, f1, v4 3011; PWR10LE-NEXT: xsadddp f1, f1, v2 3012; PWR10LE-NEXT: xxswapd v2, v6 3013; PWR10LE-NEXT: xsadddp f1, f1, v5 3014; PWR10LE-NEXT: xsadddp f1, f1, v2 3015; PWR10LE-NEXT: xxswapd v2, v7 3016; PWR10LE-NEXT: xsadddp f1, f1, v6 3017; PWR10LE-NEXT: xsadddp f1, f1, v2 3018; PWR10LE-NEXT: xxswapd v2, v8 3019; PWR10LE-NEXT: xsadddp f1, f1, v7 3020; PWR10LE-NEXT: xsadddp f1, f1, v2 3021; PWR10LE-NEXT: xxswapd v2, v9 3022; PWR10LE-NEXT: xsadddp f1, f1, v8 3023; PWR10LE-NEXT: xsadddp f1, f1, v2 3024; PWR10LE-NEXT: xxswapd v2, v10 3025; PWR10LE-NEXT: xsadddp f1, f1, v9 3026; PWR10LE-NEXT: xsadddp f1, f1, v2 3027; PWR10LE-NEXT: xxswapd v2, v11 3028; PWR10LE-NEXT: xsadddp f1, f1, v10 3029; PWR10LE-NEXT: xsadddp f1, f1, v2 3030; PWR10LE-NEXT: xxswapd v2, v12 3031; PWR10LE-NEXT: xsadddp f1, f1, v11 3032; PWR10LE-NEXT: xsadddp f1, f1, v2 3033; PWR10LE-NEXT: xxswapd v2, v13 3034; PWR10LE-NEXT: xsadddp f1, f1, v12 3035; PWR10LE-NEXT: xsadddp f1, f1, v2 3036; PWR10LE-NEXT: xxswapd v2, v18 3037; PWR10LE-NEXT: xsadddp f1, f1, v13 3038; PWR10LE-NEXT: xsadddp f1, f1, v2 3039; PWR10LE-NEXT: xxswapd v2, v17 3040; PWR10LE-NEXT: xsadddp f1, f1, v18 3041; PWR10LE-NEXT: xsadddp f1, f1, v2 3042; PWR10LE-NEXT: xxswapd v2, v16 3043; PWR10LE-NEXT: xsadddp f1, f1, v17 3044; PWR10LE-NEXT: xsadddp f1, f1, v2 3045; PWR10LE-NEXT: xxswapd v2, v15 3046; PWR10LE-NEXT: xsadddp f1, f1, v16 3047; PWR10LE-NEXT: xsadddp f1, f1, v2 3048; PWR10LE-NEXT: xxswapd v2, v14 3049; PWR10LE-NEXT: xsadddp f1, f1, v15 3050; PWR10LE-NEXT: xsadddp f1, f1, v2 3051; PWR10LE-NEXT: xxswapd v2, v1 3052; PWR10LE-NEXT: xsadddp f1, f1, v14 3053; PWR10LE-NEXT: xsadddp f1, f1, v2 3054; PWR10LE-NEXT: xxswapd v2, v0 3055; PWR10LE-NEXT: xsadddp f1, f1, v1 3056; PWR10LE-NEXT: xsadddp f1, f1, v2 3057; PWR10LE-NEXT: xxswapd v2, vs13 3058; PWR10LE-NEXT: xsadddp f1, f1, v0 3059; PWR10LE-NEXT: xsadddp f1, f1, v2 3060; PWR10LE-NEXT: xsadddp f1, f1, f13 3061; PWR10LE-NEXT: xxswapd vs13, vs12 3062; PWR10LE-NEXT: xsadddp f1, f1, f13 3063; PWR10LE-NEXT: xsadddp f1, f1, f12 3064; PWR10LE-NEXT: xxswapd vs12, vs11 3065; PWR10LE-NEXT: xsadddp f1, f1, f12 3066; PWR10LE-NEXT: xsadddp f1, f1, f11 3067; PWR10LE-NEXT: xxswapd vs11, vs10 3068; PWR10LE-NEXT: xsadddp f1, f1, f11 3069; PWR10LE-NEXT: xsadddp f1, f1, f10 3070; PWR10LE-NEXT: xxswapd vs10, vs9 3071; PWR10LE-NEXT: xsadddp f1, f1, f10 3072; PWR10LE-NEXT: xsadddp f1, f1, f9 3073; PWR10LE-NEXT: xxswapd vs9, vs8 3074; PWR10LE-NEXT: xsadddp f1, f1, f9 3075; PWR10LE-NEXT: xsadddp f1, f1, f8 3076; PWR10LE-NEXT: xxswapd vs8, vs7 3077; PWR10LE-NEXT: xsadddp f1, f1, f8 3078; PWR10LE-NEXT: xsadddp f1, f1, f7 3079; PWR10LE-NEXT: xxswapd vs7, vs6 3080; PWR10LE-NEXT: xsadddp f1, f1, f7 3081; PWR10LE-NEXT: xsadddp f1, f1, f6 3082; PWR10LE-NEXT: xxswapd vs6, vs5 3083; PWR10LE-NEXT: xsadddp f1, f1, f6 3084; PWR10LE-NEXT: xsadddp f1, f1, f5 3085; PWR10LE-NEXT: xxswapd vs5, vs4 3086; PWR10LE-NEXT: xsadddp f1, f1, f5 3087; PWR10LE-NEXT: xsadddp f1, f1, f4 3088; PWR10LE-NEXT: xxswapd vs4, vs3 3089; PWR10LE-NEXT: xsadddp f1, f1, f4 3090; PWR10LE-NEXT: xsadddp f1, f1, f3 3091; PWR10LE-NEXT: xxswapd vs3, vs2 3092; PWR10LE-NEXT: xsadddp f1, f1, f3 3093; PWR10LE-NEXT: xsadddp f1, f1, f2 3094; PWR10LE-NEXT: xxswapd vs2, vs0 3095; PWR10LE-NEXT: xsadddp f1, f1, f2 3096; PWR10LE-NEXT: xsadddp f1, f1, f0 3097; PWR10LE-NEXT: blr 3098; 3099; PWR10BE-LABEL: v64f64_b: 3100; PWR10BE: # %bb.0: # %entry 3101; PWR10BE-NEXT: xsadddp f1, f1, v2 3102; PWR10BE-NEXT: xxswapd v2, v2 3103; PWR10BE-NEXT: lxv v18, 240(r1) 3104; PWR10BE-NEXT: lxv v17, 256(r1) 3105; PWR10BE-NEXT: xsadddp f1, f1, v2 3106; PWR10BE-NEXT: xxswapd v2, v3 3107; PWR10BE-NEXT: lxv v16, 272(r1) 3108; PWR10BE-NEXT: lxv v15, 288(r1) 3109; PWR10BE-NEXT: lxv v14, 304(r1) 3110; PWR10BE-NEXT: lxv v1, 320(r1) 3111; PWR10BE-NEXT: lxv v0, 336(r1) 3112; PWR10BE-NEXT: lxv vs13, 352(r1) 3113; PWR10BE-NEXT: lxv vs12, 368(r1) 3114; PWR10BE-NEXT: lxv vs11, 384(r1) 3115; PWR10BE-NEXT: lxv vs10, 400(r1) 3116; PWR10BE-NEXT: lxv vs9, 416(r1) 3117; PWR10BE-NEXT: xsadddp f1, f1, v3 3118; PWR10BE-NEXT: lxv vs8, 432(r1) 3119; PWR10BE-NEXT: lxv vs7, 448(r1) 3120; PWR10BE-NEXT: lxv vs6, 464(r1) 3121; PWR10BE-NEXT: lxv vs5, 480(r1) 3122; PWR10BE-NEXT: lxv vs4, 496(r1) 3123; PWR10BE-NEXT: lxv vs3, 512(r1) 3124; PWR10BE-NEXT: lxv vs2, 528(r1) 3125; PWR10BE-NEXT: lxv vs0, 544(r1) 3126; PWR10BE-NEXT: xsadddp f1, f1, v2 3127; PWR10BE-NEXT: xxswapd v2, v4 3128; PWR10BE-NEXT: xsadddp f1, f1, v4 3129; PWR10BE-NEXT: xsadddp f1, f1, v2 3130; PWR10BE-NEXT: xxswapd v2, v5 3131; PWR10BE-NEXT: xsadddp f1, f1, v5 3132; PWR10BE-NEXT: xsadddp f1, f1, v2 3133; PWR10BE-NEXT: xxswapd v2, v6 3134; PWR10BE-NEXT: xsadddp f1, f1, v6 3135; PWR10BE-NEXT: xsadddp f1, f1, v2 3136; PWR10BE-NEXT: xxswapd v2, v7 3137; PWR10BE-NEXT: xsadddp f1, f1, v7 3138; PWR10BE-NEXT: xsadddp f1, f1, v2 3139; PWR10BE-NEXT: xxswapd v2, v8 3140; PWR10BE-NEXT: xsadddp f1, f1, v8 3141; PWR10BE-NEXT: xsadddp f1, f1, v2 3142; PWR10BE-NEXT: xxswapd v2, v9 3143; PWR10BE-NEXT: xsadddp f1, f1, v9 3144; PWR10BE-NEXT: xsadddp f1, f1, v2 3145; PWR10BE-NEXT: xxswapd v2, v10 3146; PWR10BE-NEXT: xsadddp f1, f1, v10 3147; PWR10BE-NEXT: xsadddp f1, f1, v2 3148; PWR10BE-NEXT: xxswapd v2, v11 3149; PWR10BE-NEXT: xsadddp f1, f1, v11 3150; PWR10BE-NEXT: xsadddp f1, f1, v2 3151; PWR10BE-NEXT: xxswapd v2, v12 3152; PWR10BE-NEXT: xsadddp f1, f1, v12 3153; PWR10BE-NEXT: xsadddp f1, f1, v2 3154; PWR10BE-NEXT: xxswapd v2, v13 3155; PWR10BE-NEXT: xsadddp f1, f1, v13 3156; PWR10BE-NEXT: xsadddp f1, f1, v2 3157; PWR10BE-NEXT: xxswapd v2, v18 3158; PWR10BE-NEXT: xsadddp f1, f1, v18 3159; PWR10BE-NEXT: xsadddp f1, f1, v2 3160; PWR10BE-NEXT: xxswapd v2, v17 3161; PWR10BE-NEXT: xsadddp f1, f1, v17 3162; PWR10BE-NEXT: xsadddp f1, f1, v2 3163; PWR10BE-NEXT: xxswapd v2, v16 3164; PWR10BE-NEXT: xsadddp f1, f1, v16 3165; PWR10BE-NEXT: xsadddp f1, f1, v2 3166; PWR10BE-NEXT: xxswapd v2, v15 3167; PWR10BE-NEXT: xsadddp f1, f1, v15 3168; PWR10BE-NEXT: xsadddp f1, f1, v2 3169; PWR10BE-NEXT: xxswapd v2, v14 3170; PWR10BE-NEXT: xsadddp f1, f1, v14 3171; PWR10BE-NEXT: xsadddp f1, f1, v2 3172; PWR10BE-NEXT: xxswapd v2, v1 3173; PWR10BE-NEXT: xsadddp f1, f1, v1 3174; PWR10BE-NEXT: xsadddp f1, f1, v2 3175; PWR10BE-NEXT: xxswapd v2, v0 3176; PWR10BE-NEXT: xsadddp f1, f1, v0 3177; PWR10BE-NEXT: xsadddp f1, f1, v2 3178; PWR10BE-NEXT: xsadddp f1, f1, f13 3179; PWR10BE-NEXT: xxswapd vs13, vs13 3180; PWR10BE-NEXT: xsadddp f1, f1, f13 3181; PWR10BE-NEXT: xsadddp f1, f1, f12 3182; PWR10BE-NEXT: xxswapd vs12, vs12 3183; PWR10BE-NEXT: xsadddp f1, f1, f12 3184; PWR10BE-NEXT: xsadddp f1, f1, f11 3185; PWR10BE-NEXT: xxswapd vs11, vs11 3186; PWR10BE-NEXT: xsadddp f1, f1, f11 3187; PWR10BE-NEXT: xsadddp f1, f1, f10 3188; PWR10BE-NEXT: xxswapd vs10, vs10 3189; PWR10BE-NEXT: xsadddp f1, f1, f10 3190; PWR10BE-NEXT: xsadddp f1, f1, f9 3191; PWR10BE-NEXT: xxswapd vs9, vs9 3192; PWR10BE-NEXT: xsadddp f1, f1, f9 3193; PWR10BE-NEXT: xsadddp f1, f1, f8 3194; PWR10BE-NEXT: xxswapd vs8, vs8 3195; PWR10BE-NEXT: xsadddp f1, f1, f8 3196; PWR10BE-NEXT: xsadddp f1, f1, f7 3197; PWR10BE-NEXT: xxswapd vs7, vs7 3198; PWR10BE-NEXT: xsadddp f1, f1, f7 3199; PWR10BE-NEXT: xsadddp f1, f1, f6 3200; PWR10BE-NEXT: xxswapd vs6, vs6 3201; PWR10BE-NEXT: xsadddp f1, f1, f6 3202; PWR10BE-NEXT: xsadddp f1, f1, f5 3203; PWR10BE-NEXT: xxswapd vs5, vs5 3204; PWR10BE-NEXT: xsadddp f1, f1, f5 3205; PWR10BE-NEXT: xsadddp f1, f1, f4 3206; PWR10BE-NEXT: xxswapd vs4, vs4 3207; PWR10BE-NEXT: xsadddp f1, f1, f4 3208; PWR10BE-NEXT: xsadddp f1, f1, f3 3209; PWR10BE-NEXT: xxswapd vs3, vs3 3210; PWR10BE-NEXT: xsadddp f1, f1, f3 3211; PWR10BE-NEXT: xsadddp f1, f1, f2 3212; PWR10BE-NEXT: xxswapd vs2, vs2 3213; PWR10BE-NEXT: xsadddp f1, f1, f2 3214; PWR10BE-NEXT: xsadddp f1, f1, f0 3215; PWR10BE-NEXT: xxswapd vs0, vs0 3216; PWR10BE-NEXT: xsadddp f1, f1, f0 3217; PWR10BE-NEXT: blr 3218entry: 3219 %0 = call double @llvm.vector.reduce.fadd.v64f64(double %b, <64 x double> %a) 3220 ret double %0 3221} 3222 3223define dso_local double @v64f64_fast(<64 x double> %a) local_unnamed_addr #0 { 3224; PWR9LE-LABEL: v64f64_fast: 3225; PWR9LE: # %bb.0: # %entry 3226; PWR9LE-NEXT: lxv vs0, 368(r1) 3227; PWR9LE-NEXT: lxv vs1, 496(r1) 3228; PWR9LE-NEXT: lxv vs2, 240(r1) 3229; PWR9LE-NEXT: lxv vs3, 304(r1) 3230; PWR9LE-NEXT: xvadddp vs3, v3, vs3 3231; PWR9LE-NEXT: lxv vs4, 432(r1) 3232; PWR9LE-NEXT: lxv vs5, 400(r1) 3233; PWR9LE-NEXT: lxv vs6, 528(r1) 3234; PWR9LE-NEXT: lxv vs7, 272(r1) 3235; PWR9LE-NEXT: lxv vs8, 336(r1) 3236; PWR9LE-NEXT: lxv vs9, 464(r1) 3237; PWR9LE-NEXT: lxv vs10, 352(r1) 3238; PWR9LE-NEXT: lxv vs11, 480(r1) 3239; PWR9LE-NEXT: lxv vs12, 224(r1) 3240; PWR9LE-NEXT: lxv vs13, 288(r1) 3241; PWR9LE-NEXT: lxv v0, 416(r1) 3242; PWR9LE-NEXT: lxv v1, 384(r1) 3243; PWR9LE-NEXT: lxv v14, 512(r1) 3244; PWR9LE-NEXT: lxv v15, 256(r1) 3245; PWR9LE-NEXT: lxv v16, 320(r1) 3246; PWR9LE-NEXT: lxv v17, 448(r1) 3247; PWR9LE-NEXT: xvadddp v12, v12, v17 3248; PWR9LE-NEXT: xvadddp v4, v4, v16 3249; PWR9LE-NEXT: xvadddp v14, v15, v14 3250; PWR9LE-NEXT: xvadddp v1, v8, v1 3251; PWR9LE-NEXT: xvadddp v0, v10, v0 3252; PWR9LE-NEXT: xvadddp vs13, v2, vs13 3253; PWR9LE-NEXT: xvadddp vs11, vs12, vs11 3254; PWR9LE-NEXT: xvadddp vs10, v6, vs10 3255; PWR9LE-NEXT: xvadddp vs9, v13, vs9 3256; PWR9LE-NEXT: xvadddp vs8, v5, vs8 3257; PWR9LE-NEXT: xvadddp vs6, vs7, vs6 3258; PWR9LE-NEXT: xvadddp vs5, v9, vs5 3259; PWR9LE-NEXT: xvadddp vs4, v11, vs4 3260; PWR9LE-NEXT: xvadddp vs1, vs2, vs1 3261; PWR9LE-NEXT: xvadddp vs0, v7, vs0 3262; PWR9LE-NEXT: xvadddp vs0, vs0, vs1 3263; PWR9LE-NEXT: xvadddp vs1, vs3, vs4 3264; PWR9LE-NEXT: xvadddp vs2, vs5, vs6 3265; PWR9LE-NEXT: xvadddp vs3, vs8, vs9 3266; PWR9LE-NEXT: xvadddp vs4, vs10, vs11 3267; PWR9LE-NEXT: xvadddp vs5, vs13, v0 3268; PWR9LE-NEXT: xvadddp vs6, v1, v14 3269; PWR9LE-NEXT: xvadddp vs7, v4, v12 3270; PWR9LE-NEXT: xvadddp vs6, vs7, vs6 3271; PWR9LE-NEXT: xvadddp vs4, vs5, vs4 3272; PWR9LE-NEXT: xvadddp vs2, vs3, vs2 3273; PWR9LE-NEXT: xvadddp vs0, vs1, vs0 3274; PWR9LE-NEXT: xvadddp vs0, vs0, vs2 3275; PWR9LE-NEXT: xvadddp vs1, vs4, vs6 3276; PWR9LE-NEXT: xvadddp vs0, vs1, vs0 3277; PWR9LE-NEXT: xxswapd vs1, vs0 3278; PWR9LE-NEXT: xvadddp vs0, vs0, vs1 3279; PWR9LE-NEXT: xxswapd vs1, vs0 3280; PWR9LE-NEXT: blr 3281; 3282; PWR9BE-LABEL: v64f64_fast: 3283; PWR9BE: # %bb.0: # %entry 3284; PWR9BE-NEXT: lxv vs0, 384(r1) 3285; PWR9BE-NEXT: lxv vs1, 512(r1) 3286; PWR9BE-NEXT: lxv vs2, 256(r1) 3287; PWR9BE-NEXT: lxv vs3, 320(r1) 3288; PWR9BE-NEXT: xvadddp vs3, v3, vs3 3289; PWR9BE-NEXT: lxv vs4, 448(r1) 3290; PWR9BE-NEXT: lxv vs5, 416(r1) 3291; PWR9BE-NEXT: lxv vs6, 544(r1) 3292; PWR9BE-NEXT: lxv vs7, 288(r1) 3293; PWR9BE-NEXT: lxv vs8, 352(r1) 3294; PWR9BE-NEXT: lxv vs9, 480(r1) 3295; PWR9BE-NEXT: lxv vs10, 368(r1) 3296; PWR9BE-NEXT: lxv vs11, 496(r1) 3297; PWR9BE-NEXT: lxv vs12, 240(r1) 3298; PWR9BE-NEXT: lxv vs13, 304(r1) 3299; PWR9BE-NEXT: lxv v0, 432(r1) 3300; PWR9BE-NEXT: lxv v1, 400(r1) 3301; PWR9BE-NEXT: lxv v14, 528(r1) 3302; PWR9BE-NEXT: lxv v15, 272(r1) 3303; PWR9BE-NEXT: lxv v16, 336(r1) 3304; PWR9BE-NEXT: lxv v17, 464(r1) 3305; PWR9BE-NEXT: xvadddp v12, v12, v17 3306; PWR9BE-NEXT: xvadddp v4, v4, v16 3307; PWR9BE-NEXT: xvadddp v14, v15, v14 3308; PWR9BE-NEXT: xvadddp v1, v8, v1 3309; PWR9BE-NEXT: xvadddp v0, v10, v0 3310; PWR9BE-NEXT: xvadddp vs13, v2, vs13 3311; PWR9BE-NEXT: xvadddp vs11, vs12, vs11 3312; PWR9BE-NEXT: xvadddp vs10, v6, vs10 3313; PWR9BE-NEXT: xvadddp vs9, v13, vs9 3314; PWR9BE-NEXT: xvadddp vs8, v5, vs8 3315; PWR9BE-NEXT: xvadddp vs6, vs7, vs6 3316; PWR9BE-NEXT: xvadddp vs5, v9, vs5 3317; PWR9BE-NEXT: xvadddp vs4, v11, vs4 3318; PWR9BE-NEXT: xvadddp vs1, vs2, vs1 3319; PWR9BE-NEXT: xvadddp vs0, v7, vs0 3320; PWR9BE-NEXT: xvadddp vs0, vs0, vs1 3321; PWR9BE-NEXT: xvadddp vs1, vs3, vs4 3322; PWR9BE-NEXT: xvadddp vs2, vs5, vs6 3323; PWR9BE-NEXT: xvadddp vs3, vs8, vs9 3324; PWR9BE-NEXT: xvadddp vs4, vs10, vs11 3325; PWR9BE-NEXT: xvadddp vs5, vs13, v0 3326; PWR9BE-NEXT: xvadddp vs6, v1, v14 3327; PWR9BE-NEXT: xvadddp vs7, v4, v12 3328; PWR9BE-NEXT: xvadddp vs6, vs7, vs6 3329; PWR9BE-NEXT: xvadddp vs4, vs5, vs4 3330; PWR9BE-NEXT: xvadddp vs2, vs3, vs2 3331; PWR9BE-NEXT: xvadddp vs0, vs1, vs0 3332; PWR9BE-NEXT: xvadddp vs0, vs0, vs2 3333; PWR9BE-NEXT: xvadddp vs1, vs4, vs6 3334; PWR9BE-NEXT: xvadddp vs0, vs1, vs0 3335; PWR9BE-NEXT: xxswapd vs1, vs0 3336; PWR9BE-NEXT: xvadddp vs1, vs0, vs1 3337; PWR9BE-NEXT: blr 3338; 3339; PWR10LE-LABEL: v64f64_fast: 3340; PWR10LE: # %bb.0: # %entry 3341; PWR10LE-NEXT: lxv vs0, 368(r1) 3342; PWR10LE-NEXT: lxv vs1, 496(r1) 3343; PWR10LE-NEXT: xvadddp vs0, v7, vs0 3344; PWR10LE-NEXT: lxv vs2, 240(r1) 3345; PWR10LE-NEXT: lxv vs3, 304(r1) 3346; PWR10LE-NEXT: lxv vs4, 432(r1) 3347; PWR10LE-NEXT: lxv vs5, 400(r1) 3348; PWR10LE-NEXT: lxv vs6, 528(r1) 3349; PWR10LE-NEXT: lxv vs7, 272(r1) 3350; PWR10LE-NEXT: lxv vs8, 336(r1) 3351; PWR10LE-NEXT: lxv vs9, 464(r1) 3352; PWR10LE-NEXT: lxv vs10, 352(r1) 3353; PWR10LE-NEXT: lxv vs11, 480(r1) 3354; PWR10LE-NEXT: lxv vs12, 224(r1) 3355; PWR10LE-NEXT: lxv vs13, 288(r1) 3356; PWR10LE-NEXT: xvadddp vs13, v2, vs13 3357; PWR10LE-NEXT: xvadddp vs11, vs12, vs11 3358; PWR10LE-NEXT: xvadddp vs10, v6, vs10 3359; PWR10LE-NEXT: xvadddp vs9, v13, vs9 3360; PWR10LE-NEXT: xvadddp vs8, v5, vs8 3361; PWR10LE-NEXT: xvadddp vs6, vs7, vs6 3362; PWR10LE-NEXT: xvadddp vs5, v9, vs5 3363; PWR10LE-NEXT: xvadddp vs4, v11, vs4 3364; PWR10LE-NEXT: xvadddp vs3, v3, vs3 3365; PWR10LE-NEXT: xvadddp vs1, vs2, vs1 3366; PWR10LE-NEXT: xvadddp vs0, vs0, vs1 3367; PWR10LE-NEXT: lxv v0, 416(r1) 3368; PWR10LE-NEXT: lxv v1, 384(r1) 3369; PWR10LE-NEXT: lxv v14, 512(r1) 3370; PWR10LE-NEXT: lxv v15, 256(r1) 3371; PWR10LE-NEXT: lxv v16, 320(r1) 3372; PWR10LE-NEXT: lxv v17, 448(r1) 3373; PWR10LE-NEXT: xvadddp v12, v12, v17 3374; PWR10LE-NEXT: xvadddp v4, v4, v16 3375; PWR10LE-NEXT: xvadddp v14, v15, v14 3376; PWR10LE-NEXT: xvadddp v1, v8, v1 3377; PWR10LE-NEXT: xvadddp v0, v10, v0 3378; PWR10LE-NEXT: xvadddp vs1, vs3, vs4 3379; PWR10LE-NEXT: xvadddp vs2, vs5, vs6 3380; PWR10LE-NEXT: xvadddp vs3, vs8, vs9 3381; PWR10LE-NEXT: xvadddp vs4, vs10, vs11 3382; PWR10LE-NEXT: xvadddp vs5, vs13, v0 3383; PWR10LE-NEXT: xvadddp vs6, v1, v14 3384; PWR10LE-NEXT: xvadddp vs7, v4, v12 3385; PWR10LE-NEXT: xvadddp vs6, vs7, vs6 3386; PWR10LE-NEXT: xvadddp vs4, vs5, vs4 3387; PWR10LE-NEXT: xvadddp vs2, vs3, vs2 3388; PWR10LE-NEXT: xvadddp vs0, vs1, vs0 3389; PWR10LE-NEXT: xvadddp vs0, vs0, vs2 3390; PWR10LE-NEXT: xvadddp vs1, vs4, vs6 3391; PWR10LE-NEXT: xvadddp vs0, vs1, vs0 3392; PWR10LE-NEXT: xxswapd vs1, vs0 3393; PWR10LE-NEXT: xvadddp vs0, vs0, vs1 3394; PWR10LE-NEXT: xxswapd vs1, vs0 3395; PWR10LE-NEXT: blr 3396; 3397; PWR10BE-LABEL: v64f64_fast: 3398; PWR10BE: # %bb.0: # %entry 3399; PWR10BE-NEXT: lxv vs0, 384(r1) 3400; PWR10BE-NEXT: lxv vs1, 512(r1) 3401; PWR10BE-NEXT: xvadddp vs0, v7, vs0 3402; PWR10BE-NEXT: lxv vs2, 256(r1) 3403; PWR10BE-NEXT: lxv vs3, 320(r1) 3404; PWR10BE-NEXT: lxv vs4, 448(r1) 3405; PWR10BE-NEXT: lxv vs5, 416(r1) 3406; PWR10BE-NEXT: lxv vs6, 544(r1) 3407; PWR10BE-NEXT: lxv vs7, 288(r1) 3408; PWR10BE-NEXT: lxv vs8, 352(r1) 3409; PWR10BE-NEXT: lxv vs9, 480(r1) 3410; PWR10BE-NEXT: lxv vs10, 368(r1) 3411; PWR10BE-NEXT: lxv vs11, 496(r1) 3412; PWR10BE-NEXT: lxv vs12, 240(r1) 3413; PWR10BE-NEXT: lxv vs13, 304(r1) 3414; PWR10BE-NEXT: xvadddp vs13, v2, vs13 3415; PWR10BE-NEXT: xvadddp vs11, vs12, vs11 3416; PWR10BE-NEXT: xvadddp vs10, v6, vs10 3417; PWR10BE-NEXT: xvadddp vs9, v13, vs9 3418; PWR10BE-NEXT: xvadddp vs8, v5, vs8 3419; PWR10BE-NEXT: xvadddp vs6, vs7, vs6 3420; PWR10BE-NEXT: xvadddp vs5, v9, vs5 3421; PWR10BE-NEXT: xvadddp vs4, v11, vs4 3422; PWR10BE-NEXT: xvadddp vs3, v3, vs3 3423; PWR10BE-NEXT: xvadddp vs1, vs2, vs1 3424; PWR10BE-NEXT: xvadddp vs0, vs0, vs1 3425; PWR10BE-NEXT: lxv v0, 432(r1) 3426; PWR10BE-NEXT: lxv v1, 400(r1) 3427; PWR10BE-NEXT: lxv v14, 528(r1) 3428; PWR10BE-NEXT: lxv v15, 272(r1) 3429; PWR10BE-NEXT: lxv v16, 336(r1) 3430; PWR10BE-NEXT: lxv v17, 464(r1) 3431; PWR10BE-NEXT: xvadddp v12, v12, v17 3432; PWR10BE-NEXT: xvadddp v4, v4, v16 3433; PWR10BE-NEXT: xvadddp v14, v15, v14 3434; PWR10BE-NEXT: xvadddp v1, v8, v1 3435; PWR10BE-NEXT: xvadddp v0, v10, v0 3436; PWR10BE-NEXT: xvadddp vs1, vs3, vs4 3437; PWR10BE-NEXT: xvadddp vs2, vs5, vs6 3438; PWR10BE-NEXT: xvadddp vs3, vs8, vs9 3439; PWR10BE-NEXT: xvadddp vs4, vs10, vs11 3440; PWR10BE-NEXT: xvadddp vs5, vs13, v0 3441; PWR10BE-NEXT: xvadddp vs6, v1, v14 3442; PWR10BE-NEXT: xvadddp vs7, v4, v12 3443; PWR10BE-NEXT: xvadddp vs6, vs7, vs6 3444; PWR10BE-NEXT: xvadddp vs4, vs5, vs4 3445; PWR10BE-NEXT: xvadddp vs2, vs3, vs2 3446; PWR10BE-NEXT: xvadddp vs0, vs1, vs0 3447; PWR10BE-NEXT: xvadddp vs0, vs0, vs2 3448; PWR10BE-NEXT: xvadddp vs1, vs4, vs6 3449; PWR10BE-NEXT: xvadddp vs0, vs1, vs0 3450; PWR10BE-NEXT: xxswapd vs1, vs0 3451; PWR10BE-NEXT: xvadddp vs1, vs0, vs1 3452; PWR10BE-NEXT: blr 3453entry: 3454 %0 = call fast double @llvm.vector.reduce.fadd.v64f64(double -0.000000e+00, <64 x double> %a) 3455 ret double %0 3456} 3457 3458declare double @llvm.vector.reduce.fadd.v2f64(double, <2 x double>) #0 3459declare double @llvm.vector.reduce.fadd.v4f64(double, <4 x double>) #0 3460declare double @llvm.vector.reduce.fadd.v8f64(double, <8 x double>) #0 3461declare double @llvm.vector.reduce.fadd.v16f64(double, <16 x double>) #0 3462declare double @llvm.vector.reduce.fadd.v32f64(double, <32 x double>) #0 3463declare double @llvm.vector.reduce.fadd.v64f64(double, <64 x double>) #0 3464 3465;; 3466;; Vectors of ppc_fp128 3467;; 3468define dso_local ppc_fp128 @v2ppcf128(<2 x ppc_fp128> %a) local_unnamed_addr #0 { 3469; PWR9LE-LABEL: v2ppcf128: 3470; PWR9LE: # %bb.0: # %entry 3471; PWR9LE-NEXT: mflr r0 3472; PWR9LE-NEXT: stdu r1, -32(r1) 3473; PWR9LE-NEXT: std r0, 48(r1) 3474; PWR9LE-NEXT: bl __gcc_qadd 3475; PWR9LE-NEXT: nop 3476; PWR9LE-NEXT: addi r1, r1, 32 3477; PWR9LE-NEXT: ld r0, 16(r1) 3478; PWR9LE-NEXT: mtlr r0 3479; PWR9LE-NEXT: blr 3480; 3481; PWR9BE-LABEL: v2ppcf128: 3482; PWR9BE: # %bb.0: # %entry 3483; PWR9BE-NEXT: mflr r0 3484; PWR9BE-NEXT: stdu r1, -112(r1) 3485; PWR9BE-NEXT: std r0, 128(r1) 3486; PWR9BE-NEXT: bl __gcc_qadd 3487; PWR9BE-NEXT: nop 3488; PWR9BE-NEXT: addi r1, r1, 112 3489; PWR9BE-NEXT: ld r0, 16(r1) 3490; PWR9BE-NEXT: mtlr r0 3491; PWR9BE-NEXT: blr 3492; 3493; PWR10LE-LABEL: v2ppcf128: 3494; PWR10LE: # %bb.0: # %entry 3495; PWR10LE-NEXT: mflr r0 3496; PWR10LE-NEXT: std r0, 16(r1) 3497; PWR10LE-NEXT: stdu r1, -32(r1) 3498; PWR10LE-NEXT: bl __gcc_qadd@notoc 3499; PWR10LE-NEXT: addi r1, r1, 32 3500; PWR10LE-NEXT: ld r0, 16(r1) 3501; PWR10LE-NEXT: mtlr r0 3502; PWR10LE-NEXT: blr 3503; 3504; PWR10BE-LABEL: v2ppcf128: 3505; PWR10BE: # %bb.0: # %entry 3506; PWR10BE-NEXT: mflr r0 3507; PWR10BE-NEXT: std r0, 16(r1) 3508; PWR10BE-NEXT: stdu r1, -112(r1) 3509; PWR10BE-NEXT: bl __gcc_qadd 3510; PWR10BE-NEXT: nop 3511; PWR10BE-NEXT: addi r1, r1, 112 3512; PWR10BE-NEXT: ld r0, 16(r1) 3513; PWR10BE-NEXT: mtlr r0 3514; PWR10BE-NEXT: blr 3515entry: 3516 %0 = call ppc_fp128 @llvm.vector.reduce.fadd.v2ppcf128(ppc_fp128 0xM80000000000000000000000000000000, <2 x ppc_fp128> %a) 3517 ret ppc_fp128 %0 3518} 3519 3520define dso_local ppc_fp128 @v2ppcf128_b(<2 x ppc_fp128> %a, ppc_fp128 %b) local_unnamed_addr #0 { 3521; PWR9LE-LABEL: v2ppcf128_b: 3522; PWR9LE: # %bb.0: # %entry 3523; PWR9LE-NEXT: mflr r0 3524; PWR9LE-NEXT: stfd f30, -16(r1) # 8-byte Folded Spill 3525; PWR9LE-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill 3526; PWR9LE-NEXT: stdu r1, -48(r1) 3527; PWR9LE-NEXT: fmr f31, f4 3528; PWR9LE-NEXT: fmr f30, f3 3529; PWR9LE-NEXT: fmr f4, f2 3530; PWR9LE-NEXT: fmr f3, f1 3531; PWR9LE-NEXT: fmr f1, f5 3532; PWR9LE-NEXT: fmr f2, f6 3533; PWR9LE-NEXT: std r0, 64(r1) 3534; PWR9LE-NEXT: bl __gcc_qadd 3535; PWR9LE-NEXT: nop 3536; PWR9LE-NEXT: fmr f3, f30 3537; PWR9LE-NEXT: fmr f4, f31 3538; PWR9LE-NEXT: bl __gcc_qadd 3539; PWR9LE-NEXT: nop 3540; PWR9LE-NEXT: addi r1, r1, 48 3541; PWR9LE-NEXT: ld r0, 16(r1) 3542; PWR9LE-NEXT: lfd f31, -8(r1) # 8-byte Folded Reload 3543; PWR9LE-NEXT: lfd f30, -16(r1) # 8-byte Folded Reload 3544; PWR9LE-NEXT: mtlr r0 3545; PWR9LE-NEXT: blr 3546; 3547; PWR9BE-LABEL: v2ppcf128_b: 3548; PWR9BE: # %bb.0: # %entry 3549; PWR9BE-NEXT: mflr r0 3550; PWR9BE-NEXT: stdu r1, -128(r1) 3551; PWR9BE-NEXT: std r0, 144(r1) 3552; PWR9BE-NEXT: stfd f30, 112(r1) # 8-byte Folded Spill 3553; PWR9BE-NEXT: stfd f31, 120(r1) # 8-byte Folded Spill 3554; PWR9BE-NEXT: fmr f31, f4 3555; PWR9BE-NEXT: fmr f30, f3 3556; PWR9BE-NEXT: fmr f4, f2 3557; PWR9BE-NEXT: fmr f3, f1 3558; PWR9BE-NEXT: fmr f1, f5 3559; PWR9BE-NEXT: fmr f2, f6 3560; PWR9BE-NEXT: bl __gcc_qadd 3561; PWR9BE-NEXT: nop 3562; PWR9BE-NEXT: fmr f3, f30 3563; PWR9BE-NEXT: fmr f4, f31 3564; PWR9BE-NEXT: bl __gcc_qadd 3565; PWR9BE-NEXT: nop 3566; PWR9BE-NEXT: lfd f31, 120(r1) # 8-byte Folded Reload 3567; PWR9BE-NEXT: lfd f30, 112(r1) # 8-byte Folded Reload 3568; PWR9BE-NEXT: addi r1, r1, 128 3569; PWR9BE-NEXT: ld r0, 16(r1) 3570; PWR9BE-NEXT: mtlr r0 3571; PWR9BE-NEXT: blr 3572; 3573; PWR10LE-LABEL: v2ppcf128_b: 3574; PWR10LE: # %bb.0: # %entry 3575; PWR10LE-NEXT: mflr r0 3576; PWR10LE-NEXT: stfd f30, -16(r1) # 8-byte Folded Spill 3577; PWR10LE-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill 3578; PWR10LE-NEXT: std r0, 16(r1) 3579; PWR10LE-NEXT: stdu r1, -48(r1) 3580; PWR10LE-NEXT: fmr f31, f4 3581; PWR10LE-NEXT: fmr f30, f3 3582; PWR10LE-NEXT: fmr f4, f2 3583; PWR10LE-NEXT: fmr f3, f1 3584; PWR10LE-NEXT: fmr f1, f5 3585; PWR10LE-NEXT: fmr f2, f6 3586; PWR10LE-NEXT: bl __gcc_qadd@notoc 3587; PWR10LE-NEXT: fmr f3, f30 3588; PWR10LE-NEXT: fmr f4, f31 3589; PWR10LE-NEXT: bl __gcc_qadd@notoc 3590; PWR10LE-NEXT: addi r1, r1, 48 3591; PWR10LE-NEXT: ld r0, 16(r1) 3592; PWR10LE-NEXT: lfd f31, -8(r1) # 8-byte Folded Reload 3593; PWR10LE-NEXT: mtlr r0 3594; PWR10LE-NEXT: lfd f30, -16(r1) # 8-byte Folded Reload 3595; PWR10LE-NEXT: blr 3596; 3597; PWR10BE-LABEL: v2ppcf128_b: 3598; PWR10BE: # %bb.0: # %entry 3599; PWR10BE-NEXT: mflr r0 3600; PWR10BE-NEXT: std r0, 16(r1) 3601; PWR10BE-NEXT: stdu r1, -128(r1) 3602; PWR10BE-NEXT: stfd f30, 112(r1) # 8-byte Folded Spill 3603; PWR10BE-NEXT: stfd f31, 120(r1) # 8-byte Folded Spill 3604; PWR10BE-NEXT: fmr f31, f4 3605; PWR10BE-NEXT: fmr f30, f3 3606; PWR10BE-NEXT: fmr f4, f2 3607; PWR10BE-NEXT: fmr f3, f1 3608; PWR10BE-NEXT: fmr f1, f5 3609; PWR10BE-NEXT: fmr f2, f6 3610; PWR10BE-NEXT: bl __gcc_qadd 3611; PWR10BE-NEXT: nop 3612; PWR10BE-NEXT: fmr f3, f30 3613; PWR10BE-NEXT: fmr f4, f31 3614; PWR10BE-NEXT: bl __gcc_qadd 3615; PWR10BE-NEXT: nop 3616; PWR10BE-NEXT: lfd f31, 120(r1) # 8-byte Folded Reload 3617; PWR10BE-NEXT: lfd f30, 112(r1) # 8-byte Folded Reload 3618; PWR10BE-NEXT: addi r1, r1, 128 3619; PWR10BE-NEXT: ld r0, 16(r1) 3620; PWR10BE-NEXT: mtlr r0 3621; PWR10BE-NEXT: blr 3622entry: 3623 %0 = call ppc_fp128 @llvm.vector.reduce.fadd.v2ppcf128(ppc_fp128 %b, <2 x ppc_fp128> %a) 3624 ret ppc_fp128 %0 3625} 3626 3627define dso_local ppc_fp128 @v2ppcf128_fast(<2 x ppc_fp128> %a) local_unnamed_addr #0 { 3628; PWR9LE-LABEL: v2ppcf128_fast: 3629; PWR9LE: # %bb.0: # %entry 3630; PWR9LE-NEXT: mflr r0 3631; PWR9LE-NEXT: stdu r1, -48(r1) 3632; PWR9LE-NEXT: std r0, 64(r1) 3633; PWR9LE-NEXT: bl __gcc_qadd 3634; PWR9LE-NEXT: nop 3635; PWR9LE-NEXT: stfd f2, 40(r1) 3636; PWR9LE-NEXT: stfd f1, 32(r1) 3637; PWR9LE-NEXT: lxv vs1, 32(r1) 3638; PWR9LE-NEXT: xxswapd vs2, vs1 3639; PWR9LE-NEXT: addi r1, r1, 48 3640; PWR9LE-NEXT: ld r0, 16(r1) 3641; PWR9LE-NEXT: mtlr r0 3642; PWR9LE-NEXT: blr 3643; 3644; PWR9BE-LABEL: v2ppcf128_fast: 3645; PWR9BE: # %bb.0: # %entry 3646; PWR9BE-NEXT: mflr r0 3647; PWR9BE-NEXT: stdu r1, -128(r1) 3648; PWR9BE-NEXT: std r0, 144(r1) 3649; PWR9BE-NEXT: bl __gcc_qadd 3650; PWR9BE-NEXT: nop 3651; PWR9BE-NEXT: stfd f2, 120(r1) 3652; PWR9BE-NEXT: stfd f1, 112(r1) 3653; PWR9BE-NEXT: lxv vs1, 112(r1) 3654; PWR9BE-NEXT: xxswapd vs2, vs1 3655; PWR9BE-NEXT: addi r1, r1, 128 3656; PWR9BE-NEXT: ld r0, 16(r1) 3657; PWR9BE-NEXT: mtlr r0 3658; PWR9BE-NEXT: blr 3659; 3660; PWR10LE-LABEL: v2ppcf128_fast: 3661; PWR10LE: # %bb.0: # %entry 3662; PWR10LE-NEXT: mflr r0 3663; PWR10LE-NEXT: std r0, 16(r1) 3664; PWR10LE-NEXT: stdu r1, -48(r1) 3665; PWR10LE-NEXT: bl __gcc_qadd@notoc 3666; PWR10LE-NEXT: stfd f2, 40(r1) 3667; PWR10LE-NEXT: stfd f1, 32(r1) 3668; PWR10LE-NEXT: lxv vs1, 32(r1) 3669; PWR10LE-NEXT: xxswapd vs2, vs1 3670; PWR10LE-NEXT: addi r1, r1, 48 3671; PWR10LE-NEXT: ld r0, 16(r1) 3672; PWR10LE-NEXT: mtlr r0 3673; PWR10LE-NEXT: blr 3674; 3675; PWR10BE-LABEL: v2ppcf128_fast: 3676; PWR10BE: # %bb.0: # %entry 3677; PWR10BE-NEXT: mflr r0 3678; PWR10BE-NEXT: std r0, 16(r1) 3679; PWR10BE-NEXT: stdu r1, -128(r1) 3680; PWR10BE-NEXT: bl __gcc_qadd 3681; PWR10BE-NEXT: nop 3682; PWR10BE-NEXT: stfd f2, 120(r1) 3683; PWR10BE-NEXT: stfd f1, 112(r1) 3684; PWR10BE-NEXT: lxv vs1, 112(r1) 3685; PWR10BE-NEXT: xxswapd vs2, vs1 3686; PWR10BE-NEXT: addi r1, r1, 128 3687; PWR10BE-NEXT: ld r0, 16(r1) 3688; PWR10BE-NEXT: mtlr r0 3689; PWR10BE-NEXT: blr 3690entry: 3691 %0 = call fast ppc_fp128 @llvm.vector.reduce.fadd.v2ppcf128(ppc_fp128 0xM80000000000000000000000000000000, <2 x ppc_fp128> %a) 3692 ret ppc_fp128 %0 3693} 3694 3695define dso_local ppc_fp128 @v4ppcf128(<4 x ppc_fp128> %a) local_unnamed_addr #0 { 3696; PWR9LE-LABEL: v4ppcf128: 3697; PWR9LE: # %bb.0: # %entry 3698; PWR9LE-NEXT: mflr r0 3699; PWR9LE-NEXT: stfd f28, -32(r1) # 8-byte Folded Spill 3700; PWR9LE-NEXT: stfd f29, -24(r1) # 8-byte Folded Spill 3701; PWR9LE-NEXT: stfd f30, -16(r1) # 8-byte Folded Spill 3702; PWR9LE-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill 3703; PWR9LE-NEXT: stdu r1, -64(r1) 3704; PWR9LE-NEXT: std r0, 80(r1) 3705; PWR9LE-NEXT: fmr f31, f8 3706; PWR9LE-NEXT: fmr f30, f7 3707; PWR9LE-NEXT: fmr f29, f6 3708; PWR9LE-NEXT: fmr f28, f5 3709; PWR9LE-NEXT: bl __gcc_qadd 3710; PWR9LE-NEXT: nop 3711; PWR9LE-NEXT: fmr f3, f28 3712; PWR9LE-NEXT: fmr f4, f29 3713; PWR9LE-NEXT: bl __gcc_qadd 3714; PWR9LE-NEXT: nop 3715; PWR9LE-NEXT: fmr f3, f30 3716; PWR9LE-NEXT: fmr f4, f31 3717; PWR9LE-NEXT: bl __gcc_qadd 3718; PWR9LE-NEXT: nop 3719; PWR9LE-NEXT: addi r1, r1, 64 3720; PWR9LE-NEXT: ld r0, 16(r1) 3721; PWR9LE-NEXT: lfd f31, -8(r1) # 8-byte Folded Reload 3722; PWR9LE-NEXT: lfd f30, -16(r1) # 8-byte Folded Reload 3723; PWR9LE-NEXT: mtlr r0 3724; PWR9LE-NEXT: lfd f29, -24(r1) # 8-byte Folded Reload 3725; PWR9LE-NEXT: lfd f28, -32(r1) # 8-byte Folded Reload 3726; PWR9LE-NEXT: blr 3727; 3728; PWR9BE-LABEL: v4ppcf128: 3729; PWR9BE: # %bb.0: # %entry 3730; PWR9BE-NEXT: mflr r0 3731; PWR9BE-NEXT: stdu r1, -144(r1) 3732; PWR9BE-NEXT: std r0, 160(r1) 3733; PWR9BE-NEXT: stfd f28, 112(r1) # 8-byte Folded Spill 3734; PWR9BE-NEXT: stfd f29, 120(r1) # 8-byte Folded Spill 3735; PWR9BE-NEXT: stfd f30, 128(r1) # 8-byte Folded Spill 3736; PWR9BE-NEXT: stfd f31, 136(r1) # 8-byte Folded Spill 3737; PWR9BE-NEXT: fmr f31, f8 3738; PWR9BE-NEXT: fmr f30, f7 3739; PWR9BE-NEXT: fmr f29, f6 3740; PWR9BE-NEXT: fmr f28, f5 3741; PWR9BE-NEXT: bl __gcc_qadd 3742; PWR9BE-NEXT: nop 3743; PWR9BE-NEXT: fmr f3, f28 3744; PWR9BE-NEXT: fmr f4, f29 3745; PWR9BE-NEXT: bl __gcc_qadd 3746; PWR9BE-NEXT: nop 3747; PWR9BE-NEXT: fmr f3, f30 3748; PWR9BE-NEXT: fmr f4, f31 3749; PWR9BE-NEXT: bl __gcc_qadd 3750; PWR9BE-NEXT: nop 3751; PWR9BE-NEXT: lfd f31, 136(r1) # 8-byte Folded Reload 3752; PWR9BE-NEXT: lfd f30, 128(r1) # 8-byte Folded Reload 3753; PWR9BE-NEXT: lfd f29, 120(r1) # 8-byte Folded Reload 3754; PWR9BE-NEXT: lfd f28, 112(r1) # 8-byte Folded Reload 3755; PWR9BE-NEXT: addi r1, r1, 144 3756; PWR9BE-NEXT: ld r0, 16(r1) 3757; PWR9BE-NEXT: mtlr r0 3758; PWR9BE-NEXT: blr 3759; 3760; PWR10LE-LABEL: v4ppcf128: 3761; PWR10LE: # %bb.0: # %entry 3762; PWR10LE-NEXT: mflr r0 3763; PWR10LE-NEXT: stfd f28, -32(r1) # 8-byte Folded Spill 3764; PWR10LE-NEXT: stfd f29, -24(r1) # 8-byte Folded Spill 3765; PWR10LE-NEXT: stfd f30, -16(r1) # 8-byte Folded Spill 3766; PWR10LE-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill 3767; PWR10LE-NEXT: std r0, 16(r1) 3768; PWR10LE-NEXT: stdu r1, -64(r1) 3769; PWR10LE-NEXT: fmr f31, f8 3770; PWR10LE-NEXT: fmr f30, f7 3771; PWR10LE-NEXT: fmr f29, f6 3772; PWR10LE-NEXT: fmr f28, f5 3773; PWR10LE-NEXT: bl __gcc_qadd@notoc 3774; PWR10LE-NEXT: fmr f3, f28 3775; PWR10LE-NEXT: fmr f4, f29 3776; PWR10LE-NEXT: bl __gcc_qadd@notoc 3777; PWR10LE-NEXT: fmr f3, f30 3778; PWR10LE-NEXT: fmr f4, f31 3779; PWR10LE-NEXT: bl __gcc_qadd@notoc 3780; PWR10LE-NEXT: addi r1, r1, 64 3781; PWR10LE-NEXT: ld r0, 16(r1) 3782; PWR10LE-NEXT: lfd f31, -8(r1) # 8-byte Folded Reload 3783; PWR10LE-NEXT: mtlr r0 3784; PWR10LE-NEXT: lfd f30, -16(r1) # 8-byte Folded Reload 3785; PWR10LE-NEXT: lfd f29, -24(r1) # 8-byte Folded Reload 3786; PWR10LE-NEXT: lfd f28, -32(r1) # 8-byte Folded Reload 3787; PWR10LE-NEXT: blr 3788; 3789; PWR10BE-LABEL: v4ppcf128: 3790; PWR10BE: # %bb.0: # %entry 3791; PWR10BE-NEXT: mflr r0 3792; PWR10BE-NEXT: std r0, 16(r1) 3793; PWR10BE-NEXT: stdu r1, -144(r1) 3794; PWR10BE-NEXT: stfd f28, 112(r1) # 8-byte Folded Spill 3795; PWR10BE-NEXT: stfd f29, 120(r1) # 8-byte Folded Spill 3796; PWR10BE-NEXT: fmr f29, f6 3797; PWR10BE-NEXT: fmr f28, f5 3798; PWR10BE-NEXT: stfd f30, 128(r1) # 8-byte Folded Spill 3799; PWR10BE-NEXT: stfd f31, 136(r1) # 8-byte Folded Spill 3800; PWR10BE-NEXT: fmr f31, f8 3801; PWR10BE-NEXT: fmr f30, f7 3802; PWR10BE-NEXT: bl __gcc_qadd 3803; PWR10BE-NEXT: nop 3804; PWR10BE-NEXT: fmr f3, f28 3805; PWR10BE-NEXT: fmr f4, f29 3806; PWR10BE-NEXT: bl __gcc_qadd 3807; PWR10BE-NEXT: nop 3808; PWR10BE-NEXT: fmr f3, f30 3809; PWR10BE-NEXT: fmr f4, f31 3810; PWR10BE-NEXT: bl __gcc_qadd 3811; PWR10BE-NEXT: nop 3812; PWR10BE-NEXT: lfd f31, 136(r1) # 8-byte Folded Reload 3813; PWR10BE-NEXT: lfd f30, 128(r1) # 8-byte Folded Reload 3814; PWR10BE-NEXT: lfd f29, 120(r1) # 8-byte Folded Reload 3815; PWR10BE-NEXT: lfd f28, 112(r1) # 8-byte Folded Reload 3816; PWR10BE-NEXT: addi r1, r1, 144 3817; PWR10BE-NEXT: ld r0, 16(r1) 3818; PWR10BE-NEXT: mtlr r0 3819; PWR10BE-NEXT: blr 3820entry: 3821 %0 = call ppc_fp128 @llvm.vector.reduce.fadd.v4ppcf128(ppc_fp128 0xM80000000000000000000000000000000, <4 x ppc_fp128> %a) 3822 ret ppc_fp128 %0 3823} 3824 3825define dso_local ppc_fp128 @v4ppcf128_b(<4 x ppc_fp128> %a, ppc_fp128 %b) local_unnamed_addr #0 { 3826; PWR9LE-LABEL: v4ppcf128_b: 3827; PWR9LE: # %bb.0: # %entry 3828; PWR9LE-NEXT: mflr r0 3829; PWR9LE-NEXT: stfd f26, -48(r1) # 8-byte Folded Spill 3830; PWR9LE-NEXT: stfd f27, -40(r1) # 8-byte Folded Spill 3831; PWR9LE-NEXT: stfd f28, -32(r1) # 8-byte Folded Spill 3832; PWR9LE-NEXT: stfd f29, -24(r1) # 8-byte Folded Spill 3833; PWR9LE-NEXT: stfd f30, -16(r1) # 8-byte Folded Spill 3834; PWR9LE-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill 3835; PWR9LE-NEXT: stdu r1, -80(r1) 3836; PWR9LE-NEXT: fmr f27, f4 3837; PWR9LE-NEXT: fmr f26, f3 3838; PWR9LE-NEXT: fmr f4, f2 3839; PWR9LE-NEXT: fmr f3, f1 3840; PWR9LE-NEXT: fmr f1, f9 3841; PWR9LE-NEXT: fmr f2, f10 3842; PWR9LE-NEXT: std r0, 96(r1) 3843; PWR9LE-NEXT: fmr f31, f8 3844; PWR9LE-NEXT: fmr f30, f7 3845; PWR9LE-NEXT: fmr f29, f6 3846; PWR9LE-NEXT: fmr f28, f5 3847; PWR9LE-NEXT: bl __gcc_qadd 3848; PWR9LE-NEXT: nop 3849; PWR9LE-NEXT: fmr f3, f26 3850; PWR9LE-NEXT: fmr f4, f27 3851; PWR9LE-NEXT: bl __gcc_qadd 3852; PWR9LE-NEXT: nop 3853; PWR9LE-NEXT: fmr f3, f28 3854; PWR9LE-NEXT: fmr f4, f29 3855; PWR9LE-NEXT: bl __gcc_qadd 3856; PWR9LE-NEXT: nop 3857; PWR9LE-NEXT: fmr f3, f30 3858; PWR9LE-NEXT: fmr f4, f31 3859; PWR9LE-NEXT: bl __gcc_qadd 3860; PWR9LE-NEXT: nop 3861; PWR9LE-NEXT: addi r1, r1, 80 3862; PWR9LE-NEXT: ld r0, 16(r1) 3863; PWR9LE-NEXT: lfd f31, -8(r1) # 8-byte Folded Reload 3864; PWR9LE-NEXT: lfd f30, -16(r1) # 8-byte Folded Reload 3865; PWR9LE-NEXT: mtlr r0 3866; PWR9LE-NEXT: lfd f29, -24(r1) # 8-byte Folded Reload 3867; PWR9LE-NEXT: lfd f28, -32(r1) # 8-byte Folded Reload 3868; PWR9LE-NEXT: lfd f27, -40(r1) # 8-byte Folded Reload 3869; PWR9LE-NEXT: lfd f26, -48(r1) # 8-byte Folded Reload 3870; PWR9LE-NEXT: blr 3871; 3872; PWR9BE-LABEL: v4ppcf128_b: 3873; PWR9BE: # %bb.0: # %entry 3874; PWR9BE-NEXT: mflr r0 3875; PWR9BE-NEXT: stdu r1, -160(r1) 3876; PWR9BE-NEXT: std r0, 176(r1) 3877; PWR9BE-NEXT: stfd f26, 112(r1) # 8-byte Folded Spill 3878; PWR9BE-NEXT: stfd f27, 120(r1) # 8-byte Folded Spill 3879; PWR9BE-NEXT: fmr f27, f4 3880; PWR9BE-NEXT: fmr f26, f3 3881; PWR9BE-NEXT: fmr f4, f2 3882; PWR9BE-NEXT: fmr f3, f1 3883; PWR9BE-NEXT: fmr f1, f9 3884; PWR9BE-NEXT: fmr f2, f10 3885; PWR9BE-NEXT: stfd f28, 128(r1) # 8-byte Folded Spill 3886; PWR9BE-NEXT: stfd f29, 136(r1) # 8-byte Folded Spill 3887; PWR9BE-NEXT: stfd f30, 144(r1) # 8-byte Folded Spill 3888; PWR9BE-NEXT: stfd f31, 152(r1) # 8-byte Folded Spill 3889; PWR9BE-NEXT: fmr f31, f8 3890; PWR9BE-NEXT: fmr f30, f7 3891; PWR9BE-NEXT: fmr f29, f6 3892; PWR9BE-NEXT: fmr f28, f5 3893; PWR9BE-NEXT: bl __gcc_qadd 3894; PWR9BE-NEXT: nop 3895; PWR9BE-NEXT: fmr f3, f26 3896; PWR9BE-NEXT: fmr f4, f27 3897; PWR9BE-NEXT: bl __gcc_qadd 3898; PWR9BE-NEXT: nop 3899; PWR9BE-NEXT: fmr f3, f28 3900; PWR9BE-NEXT: fmr f4, f29 3901; PWR9BE-NEXT: bl __gcc_qadd 3902; PWR9BE-NEXT: nop 3903; PWR9BE-NEXT: fmr f3, f30 3904; PWR9BE-NEXT: fmr f4, f31 3905; PWR9BE-NEXT: bl __gcc_qadd 3906; PWR9BE-NEXT: nop 3907; PWR9BE-NEXT: lfd f31, 152(r1) # 8-byte Folded Reload 3908; PWR9BE-NEXT: lfd f30, 144(r1) # 8-byte Folded Reload 3909; PWR9BE-NEXT: lfd f29, 136(r1) # 8-byte Folded Reload 3910; PWR9BE-NEXT: lfd f28, 128(r1) # 8-byte Folded Reload 3911; PWR9BE-NEXT: lfd f27, 120(r1) # 8-byte Folded Reload 3912; PWR9BE-NEXT: lfd f26, 112(r1) # 8-byte Folded Reload 3913; PWR9BE-NEXT: addi r1, r1, 160 3914; PWR9BE-NEXT: ld r0, 16(r1) 3915; PWR9BE-NEXT: mtlr r0 3916; PWR9BE-NEXT: blr 3917; 3918; PWR10LE-LABEL: v4ppcf128_b: 3919; PWR10LE: # %bb.0: # %entry 3920; PWR10LE-NEXT: mflr r0 3921; PWR10LE-NEXT: stfd f26, -48(r1) # 8-byte Folded Spill 3922; PWR10LE-NEXT: stfd f27, -40(r1) # 8-byte Folded Spill 3923; PWR10LE-NEXT: stfd f28, -32(r1) # 8-byte Folded Spill 3924; PWR10LE-NEXT: stfd f29, -24(r1) # 8-byte Folded Spill 3925; PWR10LE-NEXT: stfd f30, -16(r1) # 8-byte Folded Spill 3926; PWR10LE-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill 3927; PWR10LE-NEXT: std r0, 16(r1) 3928; PWR10LE-NEXT: stdu r1, -80(r1) 3929; PWR10LE-NEXT: fmr f27, f4 3930; PWR10LE-NEXT: fmr f26, f3 3931; PWR10LE-NEXT: fmr f4, f2 3932; PWR10LE-NEXT: fmr f3, f1 3933; PWR10LE-NEXT: fmr f1, f9 3934; PWR10LE-NEXT: fmr f2, f10 3935; PWR10LE-NEXT: fmr f31, f8 3936; PWR10LE-NEXT: fmr f30, f7 3937; PWR10LE-NEXT: fmr f29, f6 3938; PWR10LE-NEXT: fmr f28, f5 3939; PWR10LE-NEXT: bl __gcc_qadd@notoc 3940; PWR10LE-NEXT: fmr f3, f26 3941; PWR10LE-NEXT: fmr f4, f27 3942; PWR10LE-NEXT: bl __gcc_qadd@notoc 3943; PWR10LE-NEXT: fmr f3, f28 3944; PWR10LE-NEXT: fmr f4, f29 3945; PWR10LE-NEXT: bl __gcc_qadd@notoc 3946; PWR10LE-NEXT: fmr f3, f30 3947; PWR10LE-NEXT: fmr f4, f31 3948; PWR10LE-NEXT: bl __gcc_qadd@notoc 3949; PWR10LE-NEXT: addi r1, r1, 80 3950; PWR10LE-NEXT: ld r0, 16(r1) 3951; PWR10LE-NEXT: lfd f31, -8(r1) # 8-byte Folded Reload 3952; PWR10LE-NEXT: mtlr r0 3953; PWR10LE-NEXT: lfd f30, -16(r1) # 8-byte Folded Reload 3954; PWR10LE-NEXT: lfd f29, -24(r1) # 8-byte Folded Reload 3955; PWR10LE-NEXT: lfd f28, -32(r1) # 8-byte Folded Reload 3956; PWR10LE-NEXT: lfd f27, -40(r1) # 8-byte Folded Reload 3957; PWR10LE-NEXT: lfd f26, -48(r1) # 8-byte Folded Reload 3958; PWR10LE-NEXT: blr 3959; 3960; PWR10BE-LABEL: v4ppcf128_b: 3961; PWR10BE: # %bb.0: # %entry 3962; PWR10BE-NEXT: mflr r0 3963; PWR10BE-NEXT: std r0, 16(r1) 3964; PWR10BE-NEXT: stdu r1, -160(r1) 3965; PWR10BE-NEXT: stfd f26, 112(r1) # 8-byte Folded Spill 3966; PWR10BE-NEXT: stfd f27, 120(r1) # 8-byte Folded Spill 3967; PWR10BE-NEXT: fmr f27, f4 3968; PWR10BE-NEXT: fmr f26, f3 3969; PWR10BE-NEXT: fmr f4, f2 3970; PWR10BE-NEXT: fmr f3, f1 3971; PWR10BE-NEXT: fmr f1, f9 3972; PWR10BE-NEXT: stfd f28, 128(r1) # 8-byte Folded Spill 3973; PWR10BE-NEXT: stfd f29, 136(r1) # 8-byte Folded Spill 3974; PWR10BE-NEXT: fmr f2, f10 3975; PWR10BE-NEXT: fmr f29, f6 3976; PWR10BE-NEXT: fmr f28, f5 3977; PWR10BE-NEXT: stfd f30, 144(r1) # 8-byte Folded Spill 3978; PWR10BE-NEXT: stfd f31, 152(r1) # 8-byte Folded Spill 3979; PWR10BE-NEXT: fmr f31, f8 3980; PWR10BE-NEXT: fmr f30, f7 3981; PWR10BE-NEXT: bl __gcc_qadd 3982; PWR10BE-NEXT: nop 3983; PWR10BE-NEXT: fmr f3, f26 3984; PWR10BE-NEXT: fmr f4, f27 3985; PWR10BE-NEXT: bl __gcc_qadd 3986; PWR10BE-NEXT: nop 3987; PWR10BE-NEXT: fmr f3, f28 3988; PWR10BE-NEXT: fmr f4, f29 3989; PWR10BE-NEXT: bl __gcc_qadd 3990; PWR10BE-NEXT: nop 3991; PWR10BE-NEXT: fmr f3, f30 3992; PWR10BE-NEXT: fmr f4, f31 3993; PWR10BE-NEXT: bl __gcc_qadd 3994; PWR10BE-NEXT: nop 3995; PWR10BE-NEXT: lfd f31, 152(r1) # 8-byte Folded Reload 3996; PWR10BE-NEXT: lfd f30, 144(r1) # 8-byte Folded Reload 3997; PWR10BE-NEXT: lfd f29, 136(r1) # 8-byte Folded Reload 3998; PWR10BE-NEXT: lfd f28, 128(r1) # 8-byte Folded Reload 3999; PWR10BE-NEXT: lfd f27, 120(r1) # 8-byte Folded Reload 4000; PWR10BE-NEXT: lfd f26, 112(r1) # 8-byte Folded Reload 4001; PWR10BE-NEXT: addi r1, r1, 160 4002; PWR10BE-NEXT: ld r0, 16(r1) 4003; PWR10BE-NEXT: mtlr r0 4004; PWR10BE-NEXT: blr 4005entry: 4006 %0 = call ppc_fp128 @llvm.vector.reduce.fadd.v4ppcf128(ppc_fp128 %b, <4 x ppc_fp128> %a) 4007 ret ppc_fp128 %0 4008} 4009 4010define dso_local ppc_fp128 @v4ppcf128_fast(<4 x ppc_fp128> %a) local_unnamed_addr #0 { 4011; PWR9LE-LABEL: v4ppcf128_fast: 4012; PWR9LE: # %bb.0: # %entry 4013; PWR9LE-NEXT: mflr r0 4014; PWR9LE-NEXT: stfd f26, -48(r1) # 8-byte Folded Spill 4015; PWR9LE-NEXT: stfd f27, -40(r1) # 8-byte Folded Spill 4016; PWR9LE-NEXT: stfd f28, -32(r1) # 8-byte Folded Spill 4017; PWR9LE-NEXT: stfd f29, -24(r1) # 8-byte Folded Spill 4018; PWR9LE-NEXT: stfd f30, -16(r1) # 8-byte Folded Spill 4019; PWR9LE-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill 4020; PWR9LE-NEXT: stdu r1, -96(r1) 4021; PWR9LE-NEXT: fmr f29, f4 4022; PWR9LE-NEXT: fmr f28, f3 4023; PWR9LE-NEXT: fmr f3, f5 4024; PWR9LE-NEXT: fmr f4, f6 4025; PWR9LE-NEXT: std r0, 112(r1) 4026; PWR9LE-NEXT: fmr f31, f8 4027; PWR9LE-NEXT: fmr f30, f7 4028; PWR9LE-NEXT: bl __gcc_qadd 4029; PWR9LE-NEXT: nop 4030; PWR9LE-NEXT: fmr f27, f1 4031; PWR9LE-NEXT: fmr f26, f2 4032; PWR9LE-NEXT: fmr f1, f28 4033; PWR9LE-NEXT: fmr f2, f29 4034; PWR9LE-NEXT: fmr f3, f30 4035; PWR9LE-NEXT: fmr f4, f31 4036; PWR9LE-NEXT: bl __gcc_qadd 4037; PWR9LE-NEXT: nop 4038; PWR9LE-NEXT: fmr f3, f1 4039; PWR9LE-NEXT: fmr f4, f2 4040; PWR9LE-NEXT: fmr f1, f27 4041; PWR9LE-NEXT: fmr f2, f26 4042; PWR9LE-NEXT: bl __gcc_qadd 4043; PWR9LE-NEXT: nop 4044; PWR9LE-NEXT: stfd f2, 40(r1) 4045; PWR9LE-NEXT: stfd f1, 32(r1) 4046; PWR9LE-NEXT: lxv vs1, 32(r1) 4047; PWR9LE-NEXT: xxswapd vs2, vs1 4048; PWR9LE-NEXT: addi r1, r1, 96 4049; PWR9LE-NEXT: ld r0, 16(r1) 4050; PWR9LE-NEXT: lfd f31, -8(r1) # 8-byte Folded Reload 4051; PWR9LE-NEXT: lfd f30, -16(r1) # 8-byte Folded Reload 4052; PWR9LE-NEXT: mtlr r0 4053; PWR9LE-NEXT: lfd f29, -24(r1) # 8-byte Folded Reload 4054; PWR9LE-NEXT: lfd f28, -32(r1) # 8-byte Folded Reload 4055; PWR9LE-NEXT: lfd f27, -40(r1) # 8-byte Folded Reload 4056; PWR9LE-NEXT: lfd f26, -48(r1) # 8-byte Folded Reload 4057; PWR9LE-NEXT: blr 4058; 4059; PWR9BE-LABEL: v4ppcf128_fast: 4060; PWR9BE: # %bb.0: # %entry 4061; PWR9BE-NEXT: mflr r0 4062; PWR9BE-NEXT: stdu r1, -176(r1) 4063; PWR9BE-NEXT: std r0, 192(r1) 4064; PWR9BE-NEXT: stfd f28, 144(r1) # 8-byte Folded Spill 4065; PWR9BE-NEXT: stfd f29, 152(r1) # 8-byte Folded Spill 4066; PWR9BE-NEXT: fmr f29, f4 4067; PWR9BE-NEXT: fmr f28, f3 4068; PWR9BE-NEXT: fmr f3, f5 4069; PWR9BE-NEXT: fmr f4, f6 4070; PWR9BE-NEXT: stfd f26, 128(r1) # 8-byte Folded Spill 4071; PWR9BE-NEXT: stfd f27, 136(r1) # 8-byte Folded Spill 4072; PWR9BE-NEXT: stfd f30, 160(r1) # 8-byte Folded Spill 4073; PWR9BE-NEXT: stfd f31, 168(r1) # 8-byte Folded Spill 4074; PWR9BE-NEXT: fmr f31, f8 4075; PWR9BE-NEXT: fmr f30, f7 4076; PWR9BE-NEXT: bl __gcc_qadd 4077; PWR9BE-NEXT: nop 4078; PWR9BE-NEXT: fmr f27, f1 4079; PWR9BE-NEXT: fmr f26, f2 4080; PWR9BE-NEXT: fmr f1, f28 4081; PWR9BE-NEXT: fmr f2, f29 4082; PWR9BE-NEXT: fmr f3, f30 4083; PWR9BE-NEXT: fmr f4, f31 4084; PWR9BE-NEXT: bl __gcc_qadd 4085; PWR9BE-NEXT: nop 4086; PWR9BE-NEXT: fmr f3, f1 4087; PWR9BE-NEXT: fmr f4, f2 4088; PWR9BE-NEXT: fmr f1, f27 4089; PWR9BE-NEXT: fmr f2, f26 4090; PWR9BE-NEXT: bl __gcc_qadd 4091; PWR9BE-NEXT: nop 4092; PWR9BE-NEXT: stfd f2, 120(r1) 4093; PWR9BE-NEXT: stfd f1, 112(r1) 4094; PWR9BE-NEXT: lxv vs1, 112(r1) 4095; PWR9BE-NEXT: lfd f31, 168(r1) # 8-byte Folded Reload 4096; PWR9BE-NEXT: lfd f30, 160(r1) # 8-byte Folded Reload 4097; PWR9BE-NEXT: xxswapd vs2, vs1 4098; PWR9BE-NEXT: lfd f29, 152(r1) # 8-byte Folded Reload 4099; PWR9BE-NEXT: lfd f28, 144(r1) # 8-byte Folded Reload 4100; PWR9BE-NEXT: lfd f27, 136(r1) # 8-byte Folded Reload 4101; PWR9BE-NEXT: lfd f26, 128(r1) # 8-byte Folded Reload 4102; PWR9BE-NEXT: addi r1, r1, 176 4103; PWR9BE-NEXT: ld r0, 16(r1) 4104; PWR9BE-NEXT: mtlr r0 4105; PWR9BE-NEXT: blr 4106; 4107; PWR10LE-LABEL: v4ppcf128_fast: 4108; PWR10LE: # %bb.0: # %entry 4109; PWR10LE-NEXT: mflr r0 4110; PWR10LE-NEXT: stfd f26, -48(r1) # 8-byte Folded Spill 4111; PWR10LE-NEXT: stfd f27, -40(r1) # 8-byte Folded Spill 4112; PWR10LE-NEXT: stfd f28, -32(r1) # 8-byte Folded Spill 4113; PWR10LE-NEXT: stfd f29, -24(r1) # 8-byte Folded Spill 4114; PWR10LE-NEXT: stfd f30, -16(r1) # 8-byte Folded Spill 4115; PWR10LE-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill 4116; PWR10LE-NEXT: std r0, 16(r1) 4117; PWR10LE-NEXT: stdu r1, -96(r1) 4118; PWR10LE-NEXT: fmr f29, f4 4119; PWR10LE-NEXT: fmr f28, f3 4120; PWR10LE-NEXT: fmr f3, f5 4121; PWR10LE-NEXT: fmr f4, f6 4122; PWR10LE-NEXT: fmr f31, f8 4123; PWR10LE-NEXT: fmr f30, f7 4124; PWR10LE-NEXT: bl __gcc_qadd@notoc 4125; PWR10LE-NEXT: fmr f27, f1 4126; PWR10LE-NEXT: fmr f26, f2 4127; PWR10LE-NEXT: fmr f1, f28 4128; PWR10LE-NEXT: fmr f2, f29 4129; PWR10LE-NEXT: fmr f3, f30 4130; PWR10LE-NEXT: fmr f4, f31 4131; PWR10LE-NEXT: bl __gcc_qadd@notoc 4132; PWR10LE-NEXT: fmr f3, f1 4133; PWR10LE-NEXT: fmr f4, f2 4134; PWR10LE-NEXT: fmr f1, f27 4135; PWR10LE-NEXT: fmr f2, f26 4136; PWR10LE-NEXT: bl __gcc_qadd@notoc 4137; PWR10LE-NEXT: stfd f2, 40(r1) 4138; PWR10LE-NEXT: stfd f1, 32(r1) 4139; PWR10LE-NEXT: lxv vs1, 32(r1) 4140; PWR10LE-NEXT: xxswapd vs2, vs1 4141; PWR10LE-NEXT: addi r1, r1, 96 4142; PWR10LE-NEXT: ld r0, 16(r1) 4143; PWR10LE-NEXT: lfd f31, -8(r1) # 8-byte Folded Reload 4144; PWR10LE-NEXT: mtlr r0 4145; PWR10LE-NEXT: lfd f30, -16(r1) # 8-byte Folded Reload 4146; PWR10LE-NEXT: lfd f29, -24(r1) # 8-byte Folded Reload 4147; PWR10LE-NEXT: lfd f28, -32(r1) # 8-byte Folded Reload 4148; PWR10LE-NEXT: lfd f27, -40(r1) # 8-byte Folded Reload 4149; PWR10LE-NEXT: lfd f26, -48(r1) # 8-byte Folded Reload 4150; PWR10LE-NEXT: blr 4151; 4152; PWR10BE-LABEL: v4ppcf128_fast: 4153; PWR10BE: # %bb.0: # %entry 4154; PWR10BE-NEXT: mflr r0 4155; PWR10BE-NEXT: std r0, 16(r1) 4156; PWR10BE-NEXT: stdu r1, -176(r1) 4157; PWR10BE-NEXT: stfd f28, 144(r1) # 8-byte Folded Spill 4158; PWR10BE-NEXT: stfd f29, 152(r1) # 8-byte Folded Spill 4159; PWR10BE-NEXT: fmr f29, f4 4160; PWR10BE-NEXT: fmr f28, f3 4161; PWR10BE-NEXT: fmr f3, f5 4162; PWR10BE-NEXT: fmr f4, f6 4163; PWR10BE-NEXT: stfd f26, 128(r1) # 8-byte Folded Spill 4164; PWR10BE-NEXT: stfd f27, 136(r1) # 8-byte Folded Spill 4165; PWR10BE-NEXT: stfd f30, 160(r1) # 8-byte Folded Spill 4166; PWR10BE-NEXT: stfd f31, 168(r1) # 8-byte Folded Spill 4167; PWR10BE-NEXT: fmr f31, f8 4168; PWR10BE-NEXT: fmr f30, f7 4169; PWR10BE-NEXT: bl __gcc_qadd 4170; PWR10BE-NEXT: nop 4171; PWR10BE-NEXT: fmr f27, f1 4172; PWR10BE-NEXT: fmr f26, f2 4173; PWR10BE-NEXT: fmr f1, f28 4174; PWR10BE-NEXT: fmr f2, f29 4175; PWR10BE-NEXT: fmr f3, f30 4176; PWR10BE-NEXT: fmr f4, f31 4177; PWR10BE-NEXT: bl __gcc_qadd 4178; PWR10BE-NEXT: nop 4179; PWR10BE-NEXT: fmr f3, f1 4180; PWR10BE-NEXT: fmr f4, f2 4181; PWR10BE-NEXT: fmr f1, f27 4182; PWR10BE-NEXT: fmr f2, f26 4183; PWR10BE-NEXT: bl __gcc_qadd 4184; PWR10BE-NEXT: nop 4185; PWR10BE-NEXT: stfd f2, 120(r1) 4186; PWR10BE-NEXT: stfd f1, 112(r1) 4187; PWR10BE-NEXT: lfd f31, 168(r1) # 8-byte Folded Reload 4188; PWR10BE-NEXT: lfd f30, 160(r1) # 8-byte Folded Reload 4189; PWR10BE-NEXT: lfd f29, 152(r1) # 8-byte Folded Reload 4190; PWR10BE-NEXT: lfd f28, 144(r1) # 8-byte Folded Reload 4191; PWR10BE-NEXT: lfd f27, 136(r1) # 8-byte Folded Reload 4192; PWR10BE-NEXT: lfd f26, 128(r1) # 8-byte Folded Reload 4193; PWR10BE-NEXT: lxv vs1, 112(r1) 4194; PWR10BE-NEXT: xxswapd vs2, vs1 4195; PWR10BE-NEXT: addi r1, r1, 176 4196; PWR10BE-NEXT: ld r0, 16(r1) 4197; PWR10BE-NEXT: mtlr r0 4198; PWR10BE-NEXT: blr 4199entry: 4200 %0 = call fast ppc_fp128 @llvm.vector.reduce.fadd.v4ppcf128(ppc_fp128 0xM80000000000000000000000000000000, <4 x ppc_fp128> %a) 4201 ret ppc_fp128 %0 4202} 4203 4204declare ppc_fp128 @llvm.vector.reduce.fadd.v2ppcf128(ppc_fp128, <2 x ppc_fp128>) #0 4205declare ppc_fp128 @llvm.vector.reduce.fadd.v4ppcf128(ppc_fp128, <4 x ppc_fp128>) #0 4206 4207attributes #0 = { nounwind } 4208