; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ ; RUN: -mcpu=pwr9 -mtriple=powerpc64le < %s | FileCheck %s --check-prefix=PWR9LE ; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ ; RUN: -mcpu=pwr9 -mtriple=powerpc64 < %s | FileCheck %s --check-prefix=PWR9BE ; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ ; RUN: -mattr=-paired-vector-memops -mcpu=pwr10 -mtriple=powerpc64le < %s | \ ; RUN: FileCheck %s --check-prefix=PWR10LE ; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ ; RUN: -mattr=-paired-vector-memops -mcpu=pwr10 -mtriple=powerpc64 < %s | \ ; RUN: FileCheck %s --check-prefix=PWR10BE ;; ;; Vectors of f32 ;; define dso_local float @v2f32(<2 x float> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v2f32: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxsldwi vs0, v2, v2, 3 ; PWR9LE-NEXT: xxswapd vs1, v2 ; PWR9LE-NEXT: xscvspdpn f0, vs0 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f1, f0, f1 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v2f32: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR9BE-NEXT: xscvspdpn f0, v2 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f1, f0, f1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v2f32: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxsldwi vs0, v2, v2, 3 ; PWR10LE-NEXT: xxswapd vs1, v2 ; PWR10LE-NEXT: xscvspdpn f0, vs0 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f1, f0, f1 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v2f32: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR10BE-NEXT: xscvspdpn f0, v2 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f1, f0, f1 ; PWR10BE-NEXT: blr entry: %0 = call float @llvm.vector.reduce.fadd.v2f32(float -0.000000e+00, <2 x float> %a) ret float %0 } define dso_local float @v2f32_b(<2 x float> %a, float %b) local_unnamed_addr #0 { ; PWR9LE-LABEL: v2f32_b: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxsldwi vs0, v2, v2, 3 ; PWR9LE-NEXT: xscvspdpn f0, vs0 ; PWR9LE-NEXT: xsaddsp f0, f1, f0 ; PWR9LE-NEXT: xxswapd vs1, v2 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f1, f0, f1 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v2f32_b: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xscvspdpn f0, v2 ; PWR9BE-NEXT: xsaddsp f0, f1, f0 ; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f1, f0, f1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v2f32_b: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxsldwi vs0, v2, v2, 3 ; PWR10LE-NEXT: xscvspdpn f0, vs0 ; PWR10LE-NEXT: xsaddsp f0, f1, f0 ; PWR10LE-NEXT: xxswapd vs1, v2 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f1, f0, f1 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v2f32_b: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xscvspdpn f0, v2 ; PWR10BE-NEXT: xsaddsp f0, f1, f0 ; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f1, f0, f1 ; PWR10BE-NEXT: blr entry: %0 = call float @llvm.vector.reduce.fadd.v2f32(float %b, <2 x float> %a) ret float %0 } define dso_local float @v2f32_fast(<2 x float> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v2f32_fast: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxspltw vs0, v2, 2 ; PWR9LE-NEXT: xvaddsp vs0, v2, vs0 ; PWR9LE-NEXT: xxsldwi vs0, vs0, vs0, 3 ; PWR9LE-NEXT: xscvspdpn f1, vs0 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v2f32_fast: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xxspltw vs0, v2, 1 ; PWR9BE-NEXT: xvaddsp vs0, v2, vs0 ; PWR9BE-NEXT: xscvspdpn f1, vs0 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v2f32_fast: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxspltw vs0, v2, 2 ; PWR10LE-NEXT: xvaddsp vs0, v2, vs0 ; PWR10LE-NEXT: xxsldwi vs0, vs0, vs0, 3 ; PWR10LE-NEXT: xscvspdpn f1, vs0 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v2f32_fast: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xxspltw vs0, v2, 1 ; PWR10BE-NEXT: xvaddsp vs0, v2, vs0 ; PWR10BE-NEXT: xscvspdpn f1, vs0 ; PWR10BE-NEXT: blr entry: %0 = call fast float @llvm.vector.reduce.fadd.v2f32(float -0.000000e+00, <2 x float> %a) ret float %0 } define dso_local float @v4f32(<4 x float> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v4f32: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxsldwi vs0, v2, v2, 3 ; PWR9LE-NEXT: xxswapd vs1, v2 ; PWR9LE-NEXT: xscvspdpn f0, vs0 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xscvspdpn f1, v2 ; PWR9LE-NEXT: xsaddsp f1, f0, f1 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v4f32: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR9BE-NEXT: xscvspdpn f0, v2 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v2 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f1, f0, f1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v4f32: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxsldwi vs0, v2, v2, 3 ; PWR10LE-NEXT: xxswapd vs1, v2 ; PWR10LE-NEXT: xscvspdpn f0, vs0 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xscvspdpn f1, v2 ; PWR10LE-NEXT: xsaddsp f1, f0, f1 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v4f32: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR10BE-NEXT: xscvspdpn f0, v2 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v2 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f1, f0, f1 ; PWR10BE-NEXT: blr entry: %0 = call float @llvm.vector.reduce.fadd.v4f32(float -0.000000e+00, <4 x float> %a) ret float %0 } define dso_local float @v4f32_b(<4 x float> %a, float %b) local_unnamed_addr #0 { ; PWR9LE-LABEL: v4f32_b: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxsldwi vs0, v2, v2, 3 ; PWR9LE-NEXT: xscvspdpn f0, vs0 ; PWR9LE-NEXT: xsaddsp f0, f1, f0 ; PWR9LE-NEXT: xxswapd vs1, v2 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xscvspdpn f1, v2 ; PWR9LE-NEXT: xsaddsp f1, f0, f1 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v4f32_b: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xscvspdpn f0, v2 ; PWR9BE-NEXT: xsaddsp f0, f1, f0 ; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v2 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f1, f0, f1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v4f32_b: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxsldwi vs0, v2, v2, 3 ; PWR10LE-NEXT: xscvspdpn f0, vs0 ; PWR10LE-NEXT: xsaddsp f0, f1, f0 ; PWR10LE-NEXT: xxswapd vs1, v2 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xscvspdpn f1, v2 ; PWR10LE-NEXT: xsaddsp f1, f0, f1 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v4f32_b: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xscvspdpn f0, v2 ; PWR10BE-NEXT: xsaddsp f0, f1, f0 ; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v2 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f1, f0, f1 ; PWR10BE-NEXT: blr entry: %0 = call float @llvm.vector.reduce.fadd.v4f32(float %b, <4 x float> %a) ret float %0 } define dso_local float @v4f32_fast(<4 x float> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v4f32_fast: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxswapd v3, v2 ; PWR9LE-NEXT: xvaddsp vs0, v2, v3 ; PWR9LE-NEXT: xxspltw vs1, vs0, 2 ; PWR9LE-NEXT: xvaddsp vs0, vs0, vs1 ; PWR9LE-NEXT: xxsldwi vs0, vs0, vs0, 3 ; PWR9LE-NEXT: xscvspdpn f1, vs0 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v4f32_fast: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xxswapd v3, v2 ; PWR9BE-NEXT: xvaddsp vs0, v2, v3 ; PWR9BE-NEXT: xxspltw vs1, vs0, 1 ; PWR9BE-NEXT: xvaddsp vs0, vs0, vs1 ; PWR9BE-NEXT: xscvspdpn f1, vs0 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v4f32_fast: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxswapd v3, v2 ; PWR10LE-NEXT: xvaddsp vs0, v2, v3 ; PWR10LE-NEXT: xxspltw vs1, vs0, 2 ; PWR10LE-NEXT: xvaddsp vs0, vs0, vs1 ; PWR10LE-NEXT: xxsldwi vs0, vs0, vs0, 3 ; PWR10LE-NEXT: xscvspdpn f1, vs0 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v4f32_fast: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xxswapd v3, v2 ; PWR10BE-NEXT: xvaddsp vs0, v2, v3 ; PWR10BE-NEXT: xxspltw vs1, vs0, 1 ; PWR10BE-NEXT: xvaddsp vs0, vs0, vs1 ; PWR10BE-NEXT: xscvspdpn f1, vs0 ; PWR10BE-NEXT: blr entry: %0 = call fast float @llvm.vector.reduce.fadd.v4f32(float -0.000000e+00, <4 x float> %a) ret float %0 } define dso_local float @v8f32(<8 x float> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v8f32: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxsldwi vs0, v2, v2, 3 ; PWR9LE-NEXT: xxswapd vs1, v2 ; PWR9LE-NEXT: xscvspdpn f0, vs0 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xscvspdpn f1, v2 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v3, v3, 3 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v3 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v3, v3, 1 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xscvspdpn f1, v3 ; PWR9LE-NEXT: xsaddsp f1, f0, f1 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v8f32: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR9BE-NEXT: xscvspdpn f0, v2 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v2 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xscvspdpn f1, v3 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v3, v3, 1 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v3, v3, 3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f1, f0, f1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v8f32: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxsldwi vs0, v2, v2, 3 ; PWR10LE-NEXT: xxswapd vs1, v2 ; PWR10LE-NEXT: xscvspdpn f0, vs0 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xscvspdpn f1, v2 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v3, v3, 3 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v3 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v3, v3, 1 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xscvspdpn f1, v3 ; PWR10LE-NEXT: xsaddsp f1, f0, f1 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v8f32: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR10BE-NEXT: xscvspdpn f0, v2 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v2 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xscvspdpn f1, v3 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v3, v3, 1 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v3, v3, 3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f1, f0, f1 ; PWR10BE-NEXT: blr entry: %0 = call float @llvm.vector.reduce.fadd.v8f32(float -0.000000e+00, <8 x float> %a) ret float %0 } define dso_local float @v8f32_b(<8 x float> %a, float %b) local_unnamed_addr #0 { ; PWR9LE-LABEL: v8f32_b: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxsldwi vs0, v2, v2, 3 ; PWR9LE-NEXT: xscvspdpn f0, vs0 ; PWR9LE-NEXT: xsaddsp f0, f1, f0 ; PWR9LE-NEXT: xxswapd vs1, v2 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xscvspdpn f1, v2 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v3, v3, 3 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v3 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v3, v3, 1 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xscvspdpn f1, v3 ; PWR9LE-NEXT: xsaddsp f1, f0, f1 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v8f32_b: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xscvspdpn f0, v2 ; PWR9BE-NEXT: xsaddsp f0, f1, f0 ; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v2 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xscvspdpn f1, v3 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v3, v3, 1 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v3, v3, 3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f1, f0, f1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v8f32_b: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxsldwi vs0, v2, v2, 3 ; PWR10LE-NEXT: xscvspdpn f0, vs0 ; PWR10LE-NEXT: xsaddsp f0, f1, f0 ; PWR10LE-NEXT: xxswapd vs1, v2 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xscvspdpn f1, v2 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v3, v3, 3 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v3 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v3, v3, 1 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xscvspdpn f1, v3 ; PWR10LE-NEXT: xsaddsp f1, f0, f1 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v8f32_b: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xscvspdpn f0, v2 ; PWR10BE-NEXT: xsaddsp f0, f1, f0 ; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v2 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xscvspdpn f1, v3 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v3, v3, 1 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v3, v3, 3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f1, f0, f1 ; PWR10BE-NEXT: blr entry: %0 = call float @llvm.vector.reduce.fadd.v8f32(float %b, <8 x float> %a) ret float %0 } define dso_local float @v8f32_fast(<8 x float> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v8f32_fast: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xvaddsp vs0, v2, v3 ; PWR9LE-NEXT: xxswapd v2, vs0 ; PWR9LE-NEXT: xvaddsp vs0, vs0, v2 ; PWR9LE-NEXT: xxspltw vs1, vs0, 2 ; PWR9LE-NEXT: xvaddsp vs0, vs0, vs1 ; PWR9LE-NEXT: xxsldwi vs0, vs0, vs0, 3 ; PWR9LE-NEXT: xscvspdpn f1, vs0 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v8f32_fast: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xvaddsp vs0, v2, v3 ; PWR9BE-NEXT: xxswapd v2, vs0 ; PWR9BE-NEXT: xvaddsp vs0, vs0, v2 ; PWR9BE-NEXT: xxspltw vs1, vs0, 1 ; PWR9BE-NEXT: xvaddsp vs0, vs0, vs1 ; PWR9BE-NEXT: xscvspdpn f1, vs0 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v8f32_fast: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xvaddsp vs0, v2, v3 ; PWR10LE-NEXT: xxswapd v2, vs0 ; PWR10LE-NEXT: xvaddsp vs0, vs0, v2 ; PWR10LE-NEXT: xxspltw vs1, vs0, 2 ; PWR10LE-NEXT: xvaddsp vs0, vs0, vs1 ; PWR10LE-NEXT: xxsldwi vs0, vs0, vs0, 3 ; PWR10LE-NEXT: xscvspdpn f1, vs0 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v8f32_fast: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xvaddsp vs0, v2, v3 ; PWR10BE-NEXT: xxswapd v2, vs0 ; PWR10BE-NEXT: xvaddsp vs0, vs0, v2 ; PWR10BE-NEXT: xxspltw vs1, vs0, 1 ; PWR10BE-NEXT: xvaddsp vs0, vs0, vs1 ; PWR10BE-NEXT: xscvspdpn f1, vs0 ; PWR10BE-NEXT: blr entry: %0 = call fast float @llvm.vector.reduce.fadd.v8f32(float -0.000000e+00, <8 x float> %a) ret float %0 } define dso_local float @v16f32(<16 x float> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v16f32: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxsldwi vs0, v2, v2, 3 ; PWR9LE-NEXT: xxswapd vs1, v2 ; PWR9LE-NEXT: xscvspdpn f0, vs0 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xscvspdpn f1, v2 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v3, v3, 3 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v3 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v3, v3, 1 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xscvspdpn f1, v3 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v4, v4, 3 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v4 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v4, v4, 1 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xscvspdpn f1, v4 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v5, v5, 3 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v5 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v5, v5, 1 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xscvspdpn f1, v5 ; PWR9LE-NEXT: xsaddsp f1, f0, f1 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v16f32: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR9BE-NEXT: xscvspdpn f0, v2 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v2 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xscvspdpn f1, v3 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v3, v3, 1 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v3, v3, 3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xscvspdpn f1, v4 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v4, v4, 1 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v4 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v4, v4, 3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xscvspdpn f1, v5 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v5, v5, 1 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v5 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v5, v5, 3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f1, f0, f1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v16f32: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxsldwi vs0, v2, v2, 3 ; PWR10LE-NEXT: xxswapd vs1, v2 ; PWR10LE-NEXT: xscvspdpn f0, vs0 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xscvspdpn f1, v2 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v3, v3, 3 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v3 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v3, v3, 1 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xscvspdpn f1, v3 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v4, v4, 3 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v4 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v4, v4, 1 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xscvspdpn f1, v4 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v5, v5, 3 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v5 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v5, v5, 1 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xscvspdpn f1, v5 ; PWR10LE-NEXT: xsaddsp f1, f0, f1 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v16f32: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR10BE-NEXT: xscvspdpn f0, v2 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v2 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xscvspdpn f1, v3 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v3, v3, 1 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v3, v3, 3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xscvspdpn f1, v4 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v4, v4, 1 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v4 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v4, v4, 3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xscvspdpn f1, v5 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v5, v5, 1 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v5 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v5, v5, 3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f1, f0, f1 ; PWR10BE-NEXT: blr entry: %0 = call float @llvm.vector.reduce.fadd.v16f32(float -0.000000e+00, <16 x float> %a) ret float %0 } define dso_local float @v16f32_b(<16 x float> %a, float %b) local_unnamed_addr #0 { ; PWR9LE-LABEL: v16f32_b: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxsldwi vs0, v2, v2, 3 ; PWR9LE-NEXT: xscvspdpn f0, vs0 ; PWR9LE-NEXT: xsaddsp f0, f1, f0 ; PWR9LE-NEXT: xxswapd vs1, v2 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xscvspdpn f1, v2 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v3, v3, 3 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v3 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v3, v3, 1 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xscvspdpn f1, v3 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v4, v4, 3 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v4 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v4, v4, 1 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xscvspdpn f1, v4 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v5, v5, 3 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v5 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xxsldwi vs1, v5, v5, 1 ; PWR9LE-NEXT: xscvspdpn f1, vs1 ; PWR9LE-NEXT: xsaddsp f0, f0, f1 ; PWR9LE-NEXT: xscvspdpn f1, v5 ; PWR9LE-NEXT: xsaddsp f1, f0, f1 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v16f32_b: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xscvspdpn f0, v2 ; PWR9BE-NEXT: xsaddsp f0, f1, f0 ; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v2 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v2, v2, 3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xscvspdpn f1, v3 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v3, v3, 1 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v3, v3, 3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xscvspdpn f1, v4 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v4, v4, 1 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v4 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v4, v4, 3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xscvspdpn f1, v5 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v5, v5, 1 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v5 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f0, f0, f1 ; PWR9BE-NEXT: xxsldwi vs1, v5, v5, 3 ; PWR9BE-NEXT: xscvspdpn f1, vs1 ; PWR9BE-NEXT: xsaddsp f1, f0, f1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v16f32_b: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxsldwi vs0, v2, v2, 3 ; PWR10LE-NEXT: xscvspdpn f0, vs0 ; PWR10LE-NEXT: xsaddsp f0, f1, f0 ; PWR10LE-NEXT: xxswapd vs1, v2 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xscvspdpn f1, v2 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v3, v3, 3 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v3 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v3, v3, 1 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xscvspdpn f1, v3 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v4, v4, 3 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v4 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v4, v4, 1 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xscvspdpn f1, v4 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v5, v5, 3 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v5 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xxsldwi vs1, v5, v5, 1 ; PWR10LE-NEXT: xscvspdpn f1, vs1 ; PWR10LE-NEXT: xsaddsp f0, f0, f1 ; PWR10LE-NEXT: xscvspdpn f1, v5 ; PWR10LE-NEXT: xsaddsp f1, f0, f1 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v16f32_b: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xscvspdpn f0, v2 ; PWR10BE-NEXT: xsaddsp f0, f1, f0 ; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 1 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v2 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v2, v2, 3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xscvspdpn f1, v3 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v3, v3, 1 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v3, v3, 3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xscvspdpn f1, v4 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v4, v4, 1 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v4 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v4, v4, 3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xscvspdpn f1, v5 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v5, v5, 1 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v5 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f0, f0, f1 ; PWR10BE-NEXT: xxsldwi vs1, v5, v5, 3 ; PWR10BE-NEXT: xscvspdpn f1, vs1 ; PWR10BE-NEXT: xsaddsp f1, f0, f1 ; PWR10BE-NEXT: blr entry: %0 = call float @llvm.vector.reduce.fadd.v16f32(float %b, <16 x float> %a) ret float %0 } define dso_local float @v16f32_fast(<16 x float> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v16f32_fast: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xvaddsp vs0, v3, v5 ; PWR9LE-NEXT: xvaddsp vs1, v2, v4 ; PWR9LE-NEXT: xvaddsp vs0, vs1, vs0 ; PWR9LE-NEXT: xxswapd v2, vs0 ; PWR9LE-NEXT: xvaddsp vs0, vs0, v2 ; PWR9LE-NEXT: xxspltw vs1, vs0, 2 ; PWR9LE-NEXT: xvaddsp vs0, vs0, vs1 ; PWR9LE-NEXT: xxsldwi vs0, vs0, vs0, 3 ; PWR9LE-NEXT: xscvspdpn f1, vs0 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v16f32_fast: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xvaddsp vs0, v3, v5 ; PWR9BE-NEXT: xvaddsp vs1, v2, v4 ; PWR9BE-NEXT: xvaddsp vs0, vs1, vs0 ; PWR9BE-NEXT: xxswapd v2, vs0 ; PWR9BE-NEXT: xvaddsp vs0, vs0, v2 ; PWR9BE-NEXT: xxspltw vs1, vs0, 1 ; PWR9BE-NEXT: xvaddsp vs0, vs0, vs1 ; PWR9BE-NEXT: xscvspdpn f1, vs0 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v16f32_fast: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xvaddsp vs0, v3, v5 ; PWR10LE-NEXT: xvaddsp vs1, v2, v4 ; PWR10LE-NEXT: xvaddsp vs0, vs1, vs0 ; PWR10LE-NEXT: xxswapd v2, vs0 ; PWR10LE-NEXT: xvaddsp vs0, vs0, v2 ; PWR10LE-NEXT: xxspltw vs1, vs0, 2 ; PWR10LE-NEXT: xvaddsp vs0, vs0, vs1 ; PWR10LE-NEXT: xxsldwi vs0, vs0, vs0, 3 ; PWR10LE-NEXT: xscvspdpn f1, vs0 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v16f32_fast: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xvaddsp vs0, v3, v5 ; PWR10BE-NEXT: xvaddsp vs1, v2, v4 ; PWR10BE-NEXT: xvaddsp vs0, vs1, vs0 ; PWR10BE-NEXT: xxswapd v2, vs0 ; PWR10BE-NEXT: xvaddsp vs0, vs0, v2 ; PWR10BE-NEXT: xxspltw vs1, vs0, 1 ; PWR10BE-NEXT: xvaddsp vs0, vs0, vs1 ; PWR10BE-NEXT: xscvspdpn f1, vs0 ; PWR10BE-NEXT: blr entry: %0 = call fast float @llvm.vector.reduce.fadd.v16f32(float -0.000000e+00, <16 x float> %a) ret float %0 } declare float @llvm.vector.reduce.fadd.v2f32(float, <2 x float>) #0 declare float @llvm.vector.reduce.fadd.v4f32(float, <4 x float>) #0 declare float @llvm.vector.reduce.fadd.v8f32(float, <8 x float>) #0 declare float @llvm.vector.reduce.fadd.v16f32(float, <16 x float>) #0 ;; ;; Vectors of f64 ;; define dso_local double @v2f64(<2 x double> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v2f64: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxswapd vs0, v2 ; PWR9LE-NEXT: xsadddp f1, f0, v2 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v2f64: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xxswapd vs0, v2 ; PWR9BE-NEXT: xsadddp f1, v2, f0 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v2f64: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxswapd vs0, v2 ; PWR10LE-NEXT: xsadddp f1, f0, v2 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v2f64: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xxswapd vs0, v2 ; PWR10BE-NEXT: xsadddp f1, v2, f0 ; PWR10BE-NEXT: blr entry: %0 = call double @llvm.vector.reduce.fadd.v2f64(double -0.000000e+00, <2 x double> %a) ret double %0 } define dso_local double @v2f64_b(<2 x double> %a, double %b) local_unnamed_addr #0 { ; PWR9LE-LABEL: v2f64_b: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxswapd vs0, v2 ; PWR9LE-NEXT: xsadddp f0, f1, f0 ; PWR9LE-NEXT: xsadddp f1, f0, v2 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v2f64_b: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xsadddp f0, f1, v2 ; PWR9BE-NEXT: xxswapd vs1, v2 ; PWR9BE-NEXT: xsadddp f1, f0, f1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v2f64_b: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxswapd vs0, v2 ; PWR10LE-NEXT: xsadddp f0, f1, f0 ; PWR10LE-NEXT: xsadddp f1, f0, v2 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v2f64_b: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xsadddp f0, f1, v2 ; PWR10BE-NEXT: xxswapd vs1, v2 ; PWR10BE-NEXT: xsadddp f1, f0, f1 ; PWR10BE-NEXT: blr entry: %0 = call double @llvm.vector.reduce.fadd.v2f64(double %b, <2 x double> %a) ret double %0 } define dso_local double @v2f64_fast(<2 x double> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v2f64_fast: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxswapd vs0, v2 ; PWR9LE-NEXT: xvadddp vs0, v2, vs0 ; PWR9LE-NEXT: xxswapd vs1, vs0 ; PWR9LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v2f64_fast: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xxswapd vs0, v2 ; PWR9BE-NEXT: xvadddp vs1, v2, vs0 ; PWR9BE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v2f64_fast: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxswapd vs0, v2 ; PWR10LE-NEXT: xvadddp vs0, v2, vs0 ; PWR10LE-NEXT: xxswapd vs1, vs0 ; PWR10LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v2f64_fast: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xxswapd vs0, v2 ; PWR10BE-NEXT: xvadddp vs1, v2, vs0 ; PWR10BE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR10BE-NEXT: blr entry: %0 = call fast double @llvm.vector.reduce.fadd.v2f64(double -0.000000e+00, <2 x double> %a) ret double %0 } define dso_local double @v4f64(<4 x double> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v4f64: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxswapd vs0, v2 ; PWR9LE-NEXT: xxswapd vs1, v3 ; PWR9LE-NEXT: xsadddp f0, f0, v2 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xsadddp f1, f0, v3 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v4f64: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xxswapd vs0, v2 ; PWR9BE-NEXT: xxswapd vs1, v3 ; PWR9BE-NEXT: xsadddp f0, v2, f0 ; PWR9BE-NEXT: xsadddp f0, f0, v3 ; PWR9BE-NEXT: xsadddp f1, f0, f1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v4f64: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxswapd vs0, v2 ; PWR10LE-NEXT: xxswapd vs1, v3 ; PWR10LE-NEXT: xsadddp f0, f0, v2 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xsadddp f1, f0, v3 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v4f64: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xxswapd vs0, v2 ; PWR10BE-NEXT: xxswapd vs1, v3 ; PWR10BE-NEXT: xsadddp f0, v2, f0 ; PWR10BE-NEXT: xsadddp f0, f0, v3 ; PWR10BE-NEXT: xsadddp f1, f0, f1 ; PWR10BE-NEXT: blr entry: %0 = call double @llvm.vector.reduce.fadd.v4f64(double -0.000000e+00, <4 x double> %a) ret double %0 } define dso_local double @v4f64_b(<4 x double> %a, double %b) local_unnamed_addr #0 { ; PWR9LE-LABEL: v4f64_b: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxswapd vs0, v2 ; PWR9LE-NEXT: xsadddp f0, f1, f0 ; PWR9LE-NEXT: xxswapd vs1, v3 ; PWR9LE-NEXT: xsadddp f0, f0, v2 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xsadddp f1, f0, v3 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v4f64_b: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xsadddp f0, f1, v2 ; PWR9BE-NEXT: xxswapd vs1, v2 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v3 ; PWR9BE-NEXT: xsadddp f0, f0, v3 ; PWR9BE-NEXT: xsadddp f1, f0, f1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v4f64_b: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxswapd vs0, v2 ; PWR10LE-NEXT: xsadddp f0, f1, f0 ; PWR10LE-NEXT: xxswapd vs1, v3 ; PWR10LE-NEXT: xsadddp f0, f0, v2 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xsadddp f1, f0, v3 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v4f64_b: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xsadddp f0, f1, v2 ; PWR10BE-NEXT: xxswapd vs1, v2 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v3 ; PWR10BE-NEXT: xsadddp f0, f0, v3 ; PWR10BE-NEXT: xsadddp f1, f0, f1 ; PWR10BE-NEXT: blr entry: %0 = call double @llvm.vector.reduce.fadd.v4f64(double %b, <4 x double> %a) ret double %0 } define dso_local double @v4f64_fast(<4 x double> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v4f64_fast: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xvadddp vs0, v2, v3 ; PWR9LE-NEXT: xxswapd vs1, vs0 ; PWR9LE-NEXT: xvadddp vs0, vs0, vs1 ; PWR9LE-NEXT: xxswapd vs1, vs0 ; PWR9LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v4f64_fast: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xvadddp vs0, v2, v3 ; PWR9BE-NEXT: xxswapd vs1, vs0 ; PWR9BE-NEXT: xvadddp vs1, vs0, vs1 ; PWR9BE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v4f64_fast: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xvadddp vs0, v2, v3 ; PWR10LE-NEXT: xxswapd vs1, vs0 ; PWR10LE-NEXT: xvadddp vs0, vs0, vs1 ; PWR10LE-NEXT: xxswapd vs1, vs0 ; PWR10LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v4f64_fast: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xvadddp vs0, v2, v3 ; PWR10BE-NEXT: xxswapd vs1, vs0 ; PWR10BE-NEXT: xvadddp vs1, vs0, vs1 ; PWR10BE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR10BE-NEXT: blr entry: %0 = call fast double @llvm.vector.reduce.fadd.v4f64(double -0.000000e+00, <4 x double> %a) ret double %0 } define dso_local double @v8f64(<8 x double> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v8f64: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxswapd vs0, v2 ; PWR9LE-NEXT: xxswapd vs1, v3 ; PWR9LE-NEXT: xsadddp f0, f0, v2 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v4 ; PWR9LE-NEXT: xsadddp f0, f0, v3 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v5 ; PWR9LE-NEXT: xsadddp f0, f0, v4 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xsadddp f1, f0, v5 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v8f64: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xxswapd vs0, v2 ; PWR9BE-NEXT: xxswapd vs1, v3 ; PWR9BE-NEXT: xsadddp f0, v2, f0 ; PWR9BE-NEXT: xsadddp f0, f0, v3 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v4 ; PWR9BE-NEXT: xsadddp f0, f0, v4 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v5 ; PWR9BE-NEXT: xsadddp f0, f0, v5 ; PWR9BE-NEXT: xsadddp f1, f0, f1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v8f64: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxswapd vs0, v2 ; PWR10LE-NEXT: xxswapd vs1, v3 ; PWR10LE-NEXT: xsadddp f0, f0, v2 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v4 ; PWR10LE-NEXT: xsadddp f0, f0, v3 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v5 ; PWR10LE-NEXT: xsadddp f0, f0, v4 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xsadddp f1, f0, v5 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v8f64: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xxswapd vs0, v2 ; PWR10BE-NEXT: xxswapd vs1, v3 ; PWR10BE-NEXT: xsadddp f0, v2, f0 ; PWR10BE-NEXT: xsadddp f0, f0, v3 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v4 ; PWR10BE-NEXT: xsadddp f0, f0, v4 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v5 ; PWR10BE-NEXT: xsadddp f0, f0, v5 ; PWR10BE-NEXT: xsadddp f1, f0, f1 ; PWR10BE-NEXT: blr entry: %0 = call double @llvm.vector.reduce.fadd.v8f64(double -0.000000e+00, <8 x double> %a) ret double %0 } define dso_local double @v8f64_b(<8 x double> %a, double %b) local_unnamed_addr #0 { ; PWR9LE-LABEL: v8f64_b: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxswapd vs0, v2 ; PWR9LE-NEXT: xsadddp f0, f1, f0 ; PWR9LE-NEXT: xxswapd vs1, v3 ; PWR9LE-NEXT: xsadddp f0, f0, v2 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v4 ; PWR9LE-NEXT: xsadddp f0, f0, v3 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v5 ; PWR9LE-NEXT: xsadddp f0, f0, v4 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xsadddp f1, f0, v5 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v8f64_b: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xsadddp f0, f1, v2 ; PWR9BE-NEXT: xxswapd vs1, v2 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v3 ; PWR9BE-NEXT: xsadddp f0, f0, v3 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v4 ; PWR9BE-NEXT: xsadddp f0, f0, v4 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v5 ; PWR9BE-NEXT: xsadddp f0, f0, v5 ; PWR9BE-NEXT: xsadddp f1, f0, f1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v8f64_b: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxswapd vs0, v2 ; PWR10LE-NEXT: xsadddp f0, f1, f0 ; PWR10LE-NEXT: xxswapd vs1, v3 ; PWR10LE-NEXT: xsadddp f0, f0, v2 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v4 ; PWR10LE-NEXT: xsadddp f0, f0, v3 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v5 ; PWR10LE-NEXT: xsadddp f0, f0, v4 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xsadddp f1, f0, v5 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v8f64_b: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xsadddp f0, f1, v2 ; PWR10BE-NEXT: xxswapd vs1, v2 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v3 ; PWR10BE-NEXT: xsadddp f0, f0, v3 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v4 ; PWR10BE-NEXT: xsadddp f0, f0, v4 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v5 ; PWR10BE-NEXT: xsadddp f0, f0, v5 ; PWR10BE-NEXT: xsadddp f1, f0, f1 ; PWR10BE-NEXT: blr entry: %0 = call double @llvm.vector.reduce.fadd.v8f64(double %b, <8 x double> %a) ret double %0 } define dso_local double @v8f64_fast(<8 x double> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v8f64_fast: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xvadddp vs0, v3, v5 ; PWR9LE-NEXT: xvadddp vs1, v2, v4 ; PWR9LE-NEXT: xvadddp vs0, vs1, vs0 ; PWR9LE-NEXT: xxswapd vs1, vs0 ; PWR9LE-NEXT: xvadddp vs0, vs0, vs1 ; PWR9LE-NEXT: xxswapd vs1, vs0 ; PWR9LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v8f64_fast: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xvadddp vs0, v3, v5 ; PWR9BE-NEXT: xvadddp vs1, v2, v4 ; PWR9BE-NEXT: xvadddp vs0, vs1, vs0 ; PWR9BE-NEXT: xxswapd vs1, vs0 ; PWR9BE-NEXT: xvadddp vs1, vs0, vs1 ; PWR9BE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v8f64_fast: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xvadddp vs0, v3, v5 ; PWR10LE-NEXT: xvadddp vs1, v2, v4 ; PWR10LE-NEXT: xvadddp vs0, vs1, vs0 ; PWR10LE-NEXT: xxswapd vs1, vs0 ; PWR10LE-NEXT: xvadddp vs0, vs0, vs1 ; PWR10LE-NEXT: xxswapd vs1, vs0 ; PWR10LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v8f64_fast: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xvadddp vs0, v3, v5 ; PWR10BE-NEXT: xvadddp vs1, v2, v4 ; PWR10BE-NEXT: xvadddp vs0, vs1, vs0 ; PWR10BE-NEXT: xxswapd vs1, vs0 ; PWR10BE-NEXT: xvadddp vs1, vs0, vs1 ; PWR10BE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR10BE-NEXT: blr entry: %0 = call fast double @llvm.vector.reduce.fadd.v8f64(double -0.000000e+00, <8 x double> %a) ret double %0 } define dso_local double @v16f64(<16 x double> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v16f64: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxswapd vs0, v2 ; PWR9LE-NEXT: xxswapd vs1, v3 ; PWR9LE-NEXT: xsadddp f0, f0, v2 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v4 ; PWR9LE-NEXT: xsadddp f0, f0, v3 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v5 ; PWR9LE-NEXT: xsadddp f0, f0, v4 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v6 ; PWR9LE-NEXT: xsadddp f0, f0, v5 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v7 ; PWR9LE-NEXT: xsadddp f0, f0, v6 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v8 ; PWR9LE-NEXT: xsadddp f0, f0, v7 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v9 ; PWR9LE-NEXT: xsadddp f0, f0, v8 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xsadddp f1, f0, v9 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v16f64: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xxswapd vs0, v2 ; PWR9BE-NEXT: xxswapd vs1, v3 ; PWR9BE-NEXT: xsadddp f0, v2, f0 ; PWR9BE-NEXT: xsadddp f0, f0, v3 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v4 ; PWR9BE-NEXT: xsadddp f0, f0, v4 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v5 ; PWR9BE-NEXT: xsadddp f0, f0, v5 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v6 ; PWR9BE-NEXT: xsadddp f0, f0, v6 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v7 ; PWR9BE-NEXT: xsadddp f0, f0, v7 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v8 ; PWR9BE-NEXT: xsadddp f0, f0, v8 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v9 ; PWR9BE-NEXT: xsadddp f0, f0, v9 ; PWR9BE-NEXT: xsadddp f1, f0, f1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v16f64: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxswapd vs0, v2 ; PWR10LE-NEXT: xxswapd vs1, v3 ; PWR10LE-NEXT: xsadddp f0, f0, v2 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v4 ; PWR10LE-NEXT: xsadddp f0, f0, v3 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v5 ; PWR10LE-NEXT: xsadddp f0, f0, v4 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v6 ; PWR10LE-NEXT: xsadddp f0, f0, v5 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v7 ; PWR10LE-NEXT: xsadddp f0, f0, v6 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v8 ; PWR10LE-NEXT: xsadddp f0, f0, v7 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v9 ; PWR10LE-NEXT: xsadddp f0, f0, v8 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xsadddp f1, f0, v9 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v16f64: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xxswapd vs0, v2 ; PWR10BE-NEXT: xxswapd vs1, v3 ; PWR10BE-NEXT: xsadddp f0, v2, f0 ; PWR10BE-NEXT: xsadddp f0, f0, v3 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v4 ; PWR10BE-NEXT: xsadddp f0, f0, v4 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v5 ; PWR10BE-NEXT: xsadddp f0, f0, v5 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v6 ; PWR10BE-NEXT: xsadddp f0, f0, v6 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v7 ; PWR10BE-NEXT: xsadddp f0, f0, v7 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v8 ; PWR10BE-NEXT: xsadddp f0, f0, v8 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v9 ; PWR10BE-NEXT: xsadddp f0, f0, v9 ; PWR10BE-NEXT: xsadddp f1, f0, f1 ; PWR10BE-NEXT: blr entry: %0 = call double @llvm.vector.reduce.fadd.v16f64(double -0.000000e+00, <16 x double> %a) ret double %0 } define dso_local double @v16f64_b(<16 x double> %a, double %b) local_unnamed_addr #0 { ; PWR9LE-LABEL: v16f64_b: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxswapd vs0, v2 ; PWR9LE-NEXT: xsadddp f0, f1, f0 ; PWR9LE-NEXT: xxswapd vs1, v3 ; PWR9LE-NEXT: xsadddp f0, f0, v2 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v4 ; PWR9LE-NEXT: xsadddp f0, f0, v3 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v5 ; PWR9LE-NEXT: xsadddp f0, f0, v4 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v6 ; PWR9LE-NEXT: xsadddp f0, f0, v5 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v7 ; PWR9LE-NEXT: xsadddp f0, f0, v6 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v8 ; PWR9LE-NEXT: xsadddp f0, f0, v7 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xxswapd vs1, v9 ; PWR9LE-NEXT: xsadddp f0, f0, v8 ; PWR9LE-NEXT: xsadddp f0, f0, f1 ; PWR9LE-NEXT: xsadddp f1, f0, v9 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v16f64_b: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xsadddp f0, f1, v2 ; PWR9BE-NEXT: xxswapd vs1, v2 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v3 ; PWR9BE-NEXT: xsadddp f0, f0, v3 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v4 ; PWR9BE-NEXT: xsadddp f0, f0, v4 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v5 ; PWR9BE-NEXT: xsadddp f0, f0, v5 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v6 ; PWR9BE-NEXT: xsadddp f0, f0, v6 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v7 ; PWR9BE-NEXT: xsadddp f0, f0, v7 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v8 ; PWR9BE-NEXT: xsadddp f0, f0, v8 ; PWR9BE-NEXT: xsadddp f0, f0, f1 ; PWR9BE-NEXT: xxswapd vs1, v9 ; PWR9BE-NEXT: xsadddp f0, f0, v9 ; PWR9BE-NEXT: xsadddp f1, f0, f1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v16f64_b: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxswapd vs0, v2 ; PWR10LE-NEXT: xsadddp f0, f1, f0 ; PWR10LE-NEXT: xxswapd vs1, v3 ; PWR10LE-NEXT: xsadddp f0, f0, v2 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v4 ; PWR10LE-NEXT: xsadddp f0, f0, v3 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v5 ; PWR10LE-NEXT: xsadddp f0, f0, v4 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v6 ; PWR10LE-NEXT: xsadddp f0, f0, v5 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v7 ; PWR10LE-NEXT: xsadddp f0, f0, v6 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v8 ; PWR10LE-NEXT: xsadddp f0, f0, v7 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xxswapd vs1, v9 ; PWR10LE-NEXT: xsadddp f0, f0, v8 ; PWR10LE-NEXT: xsadddp f0, f0, f1 ; PWR10LE-NEXT: xsadddp f1, f0, v9 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v16f64_b: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xsadddp f0, f1, v2 ; PWR10BE-NEXT: xxswapd vs1, v2 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v3 ; PWR10BE-NEXT: xsadddp f0, f0, v3 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v4 ; PWR10BE-NEXT: xsadddp f0, f0, v4 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v5 ; PWR10BE-NEXT: xsadddp f0, f0, v5 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v6 ; PWR10BE-NEXT: xsadddp f0, f0, v6 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v7 ; PWR10BE-NEXT: xsadddp f0, f0, v7 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v8 ; PWR10BE-NEXT: xsadddp f0, f0, v8 ; PWR10BE-NEXT: xsadddp f0, f0, f1 ; PWR10BE-NEXT: xxswapd vs1, v9 ; PWR10BE-NEXT: xsadddp f0, f0, v9 ; PWR10BE-NEXT: xsadddp f1, f0, f1 ; PWR10BE-NEXT: blr entry: %0 = call double @llvm.vector.reduce.fadd.v16f64(double %b, <16 x double> %a) ret double %0 } define dso_local double @v16f64_fast(<16 x double> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v16f64_fast: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xvadddp vs0, v4, v8 ; PWR9LE-NEXT: xvadddp vs1, v2, v6 ; PWR9LE-NEXT: xvadddp vs2, v5, v9 ; PWR9LE-NEXT: xvadddp vs3, v3, v7 ; PWR9LE-NEXT: xvadddp vs2, vs3, vs2 ; PWR9LE-NEXT: xvadddp vs0, vs1, vs0 ; PWR9LE-NEXT: xvadddp vs0, vs0, vs2 ; PWR9LE-NEXT: xxswapd vs1, vs0 ; PWR9LE-NEXT: xvadddp vs0, vs0, vs1 ; PWR9LE-NEXT: xxswapd vs1, vs0 ; PWR9LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v16f64_fast: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xvadddp vs0, v4, v8 ; PWR9BE-NEXT: xvadddp vs1, v2, v6 ; PWR9BE-NEXT: xvadddp vs2, v5, v9 ; PWR9BE-NEXT: xvadddp vs3, v3, v7 ; PWR9BE-NEXT: xvadddp vs2, vs3, vs2 ; PWR9BE-NEXT: xvadddp vs0, vs1, vs0 ; PWR9BE-NEXT: xvadddp vs0, vs0, vs2 ; PWR9BE-NEXT: xxswapd vs1, vs0 ; PWR9BE-NEXT: xvadddp vs1, vs0, vs1 ; PWR9BE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v16f64_fast: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xvadddp vs0, v4, v8 ; PWR10LE-NEXT: xvadddp vs1, v2, v6 ; PWR10LE-NEXT: xvadddp vs2, v5, v9 ; PWR10LE-NEXT: xvadddp vs3, v3, v7 ; PWR10LE-NEXT: xvadddp vs2, vs3, vs2 ; PWR10LE-NEXT: xvadddp vs0, vs1, vs0 ; PWR10LE-NEXT: xvadddp vs0, vs0, vs2 ; PWR10LE-NEXT: xxswapd vs1, vs0 ; PWR10LE-NEXT: xvadddp vs0, vs0, vs1 ; PWR10LE-NEXT: xxswapd vs1, vs0 ; PWR10LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v16f64_fast: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xvadddp vs0, v4, v8 ; PWR10BE-NEXT: xvadddp vs1, v2, v6 ; PWR10BE-NEXT: xvadddp vs2, v5, v9 ; PWR10BE-NEXT: xvadddp vs3, v3, v7 ; PWR10BE-NEXT: xvadddp vs2, vs3, vs2 ; PWR10BE-NEXT: xvadddp vs0, vs1, vs0 ; PWR10BE-NEXT: xvadddp vs0, vs0, vs2 ; PWR10BE-NEXT: xxswapd vs1, vs0 ; PWR10BE-NEXT: xvadddp vs1, vs0, vs1 ; PWR10BE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR10BE-NEXT: blr entry: %0 = call fast double @llvm.vector.reduce.fadd.v16f64(double -0.000000e+00, <16 x double> %a) ret double %0 } define dso_local double @v32f64(<32 x double> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v32f64: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxswapd vs4, v2 ; PWR9LE-NEXT: xxswapd vs5, v3 ; PWR9LE-NEXT: lxv vs3, 224(r1) ; PWR9LE-NEXT: lxv vs2, 240(r1) ; PWR9LE-NEXT: lxv vs1, 256(r1) ; PWR9LE-NEXT: lxv vs0, 272(r1) ; PWR9LE-NEXT: xsadddp f4, f4, v2 ; PWR9LE-NEXT: xsadddp f4, f4, f5 ; PWR9LE-NEXT: xxswapd vs5, v4 ; PWR9LE-NEXT: xsadddp f4, f4, v3 ; PWR9LE-NEXT: xsadddp f4, f4, f5 ; PWR9LE-NEXT: xxswapd vs5, v5 ; PWR9LE-NEXT: xsadddp f4, f4, v4 ; PWR9LE-NEXT: xsadddp f4, f4, f5 ; PWR9LE-NEXT: xxswapd vs5, v6 ; PWR9LE-NEXT: xsadddp f4, f4, v5 ; PWR9LE-NEXT: xsadddp f4, f4, f5 ; PWR9LE-NEXT: xxswapd vs5, v7 ; PWR9LE-NEXT: xsadddp f4, f4, v6 ; PWR9LE-NEXT: xsadddp f4, f4, f5 ; PWR9LE-NEXT: xxswapd vs5, v8 ; PWR9LE-NEXT: xsadddp f4, f4, v7 ; PWR9LE-NEXT: xsadddp f4, f4, f5 ; PWR9LE-NEXT: xxswapd vs5, v9 ; PWR9LE-NEXT: xsadddp f4, f4, v8 ; PWR9LE-NEXT: xsadddp f4, f4, f5 ; PWR9LE-NEXT: xxswapd vs5, v10 ; PWR9LE-NEXT: xsadddp f4, f4, v9 ; PWR9LE-NEXT: xsadddp f4, f4, f5 ; PWR9LE-NEXT: xxswapd vs5, v11 ; PWR9LE-NEXT: xsadddp f4, f4, v10 ; PWR9LE-NEXT: xsadddp f4, f4, f5 ; PWR9LE-NEXT: xxswapd vs5, v12 ; PWR9LE-NEXT: xsadddp f4, f4, v11 ; PWR9LE-NEXT: xsadddp f4, f4, f5 ; PWR9LE-NEXT: xxswapd vs5, v13 ; PWR9LE-NEXT: xsadddp f4, f4, v12 ; PWR9LE-NEXT: xsadddp f4, f4, f5 ; PWR9LE-NEXT: xxswapd vs5, vs3 ; PWR9LE-NEXT: xsadddp f4, f4, v13 ; PWR9LE-NEXT: xsadddp f4, f4, f5 ; PWR9LE-NEXT: xsadddp f3, f4, f3 ; PWR9LE-NEXT: xxswapd vs4, vs2 ; PWR9LE-NEXT: xsadddp f3, f3, f4 ; PWR9LE-NEXT: xsadddp f2, f3, f2 ; PWR9LE-NEXT: xxswapd vs3, vs1 ; PWR9LE-NEXT: xsadddp f2, f2, f3 ; PWR9LE-NEXT: xsadddp f1, f2, f1 ; PWR9LE-NEXT: xxswapd vs2, vs0 ; PWR9LE-NEXT: xsadddp f1, f1, f2 ; PWR9LE-NEXT: xsadddp f1, f1, f0 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v32f64: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xxswapd vs4, v2 ; PWR9BE-NEXT: xxswapd vs5, v3 ; PWR9BE-NEXT: lxv vs3, 240(r1) ; PWR9BE-NEXT: lxv vs2, 256(r1) ; PWR9BE-NEXT: lxv vs1, 272(r1) ; PWR9BE-NEXT: lxv vs0, 288(r1) ; PWR9BE-NEXT: xsadddp f4, v2, f4 ; PWR9BE-NEXT: xsadddp f4, f4, v3 ; PWR9BE-NEXT: xsadddp f4, f4, f5 ; PWR9BE-NEXT: xxswapd vs5, v4 ; PWR9BE-NEXT: xsadddp f4, f4, v4 ; PWR9BE-NEXT: xsadddp f4, f4, f5 ; PWR9BE-NEXT: xxswapd vs5, v5 ; PWR9BE-NEXT: xsadddp f4, f4, v5 ; PWR9BE-NEXT: xsadddp f4, f4, f5 ; PWR9BE-NEXT: xxswapd vs5, v6 ; PWR9BE-NEXT: xsadddp f4, f4, v6 ; PWR9BE-NEXT: xsadddp f4, f4, f5 ; PWR9BE-NEXT: xxswapd vs5, v7 ; PWR9BE-NEXT: xsadddp f4, f4, v7 ; PWR9BE-NEXT: xsadddp f4, f4, f5 ; PWR9BE-NEXT: xxswapd vs5, v8 ; PWR9BE-NEXT: xsadddp f4, f4, v8 ; PWR9BE-NEXT: xsadddp f4, f4, f5 ; PWR9BE-NEXT: xxswapd vs5, v9 ; PWR9BE-NEXT: xsadddp f4, f4, v9 ; PWR9BE-NEXT: xsadddp f4, f4, f5 ; PWR9BE-NEXT: xxswapd vs5, v10 ; PWR9BE-NEXT: xsadddp f4, f4, v10 ; PWR9BE-NEXT: xsadddp f4, f4, f5 ; PWR9BE-NEXT: xxswapd vs5, v11 ; PWR9BE-NEXT: xsadddp f4, f4, v11 ; PWR9BE-NEXT: xsadddp f4, f4, f5 ; PWR9BE-NEXT: xxswapd vs5, v12 ; PWR9BE-NEXT: xsadddp f4, f4, v12 ; PWR9BE-NEXT: xsadddp f4, f4, f5 ; PWR9BE-NEXT: xxswapd vs5, v13 ; PWR9BE-NEXT: xsadddp f4, f4, v13 ; PWR9BE-NEXT: xsadddp f4, f4, f5 ; PWR9BE-NEXT: xsadddp f4, f4, f3 ; PWR9BE-NEXT: xxswapd vs3, vs3 ; PWR9BE-NEXT: xsadddp f3, f4, f3 ; PWR9BE-NEXT: xsadddp f3, f3, f2 ; PWR9BE-NEXT: xxswapd vs2, vs2 ; PWR9BE-NEXT: xsadddp f2, f3, f2 ; PWR9BE-NEXT: xsadddp f2, f2, f1 ; PWR9BE-NEXT: xxswapd vs1, vs1 ; PWR9BE-NEXT: xsadddp f1, f2, f1 ; PWR9BE-NEXT: xsadddp f1, f1, f0 ; PWR9BE-NEXT: xxswapd vs0, vs0 ; PWR9BE-NEXT: xsadddp f1, f1, f0 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v32f64: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxswapd vs4, v2 ; PWR10LE-NEXT: xxswapd vs5, v3 ; PWR10LE-NEXT: lxv vs3, 224(r1) ; PWR10LE-NEXT: lxv vs2, 240(r1) ; PWR10LE-NEXT: xsadddp f4, f4, v2 ; PWR10LE-NEXT: lxv vs1, 256(r1) ; PWR10LE-NEXT: lxv vs0, 272(r1) ; PWR10LE-NEXT: xsadddp f4, f4, f5 ; PWR10LE-NEXT: xxswapd vs5, v4 ; PWR10LE-NEXT: xsadddp f4, f4, v3 ; PWR10LE-NEXT: xsadddp f4, f4, f5 ; PWR10LE-NEXT: xxswapd vs5, v5 ; PWR10LE-NEXT: xsadddp f4, f4, v4 ; PWR10LE-NEXT: xsadddp f4, f4, f5 ; PWR10LE-NEXT: xxswapd vs5, v6 ; PWR10LE-NEXT: xsadddp f4, f4, v5 ; PWR10LE-NEXT: xsadddp f4, f4, f5 ; PWR10LE-NEXT: xxswapd vs5, v7 ; PWR10LE-NEXT: xsadddp f4, f4, v6 ; PWR10LE-NEXT: xsadddp f4, f4, f5 ; PWR10LE-NEXT: xxswapd vs5, v8 ; PWR10LE-NEXT: xsadddp f4, f4, v7 ; PWR10LE-NEXT: xsadddp f4, f4, f5 ; PWR10LE-NEXT: xxswapd vs5, v9 ; PWR10LE-NEXT: xsadddp f4, f4, v8 ; PWR10LE-NEXT: xsadddp f4, f4, f5 ; PWR10LE-NEXT: xxswapd vs5, v10 ; PWR10LE-NEXT: xsadddp f4, f4, v9 ; PWR10LE-NEXT: xsadddp f4, f4, f5 ; PWR10LE-NEXT: xxswapd vs5, v11 ; PWR10LE-NEXT: xsadddp f4, f4, v10 ; PWR10LE-NEXT: xsadddp f4, f4, f5 ; PWR10LE-NEXT: xxswapd vs5, v12 ; PWR10LE-NEXT: xsadddp f4, f4, v11 ; PWR10LE-NEXT: xsadddp f4, f4, f5 ; PWR10LE-NEXT: xxswapd vs5, v13 ; PWR10LE-NEXT: xsadddp f4, f4, v12 ; PWR10LE-NEXT: xsadddp f4, f4, f5 ; PWR10LE-NEXT: xxswapd vs5, vs3 ; PWR10LE-NEXT: xsadddp f4, f4, v13 ; PWR10LE-NEXT: xsadddp f4, f4, f5 ; PWR10LE-NEXT: xsadddp f3, f4, f3 ; PWR10LE-NEXT: xxswapd vs4, vs2 ; PWR10LE-NEXT: xsadddp f3, f3, f4 ; PWR10LE-NEXT: xsadddp f2, f3, f2 ; PWR10LE-NEXT: xxswapd vs3, vs1 ; PWR10LE-NEXT: xsadddp f2, f2, f3 ; PWR10LE-NEXT: xsadddp f1, f2, f1 ; PWR10LE-NEXT: xxswapd vs2, vs0 ; PWR10LE-NEXT: xsadddp f1, f1, f2 ; PWR10LE-NEXT: xsadddp f1, f1, f0 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v32f64: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xxswapd vs4, v2 ; PWR10BE-NEXT: xxswapd vs5, v3 ; PWR10BE-NEXT: lxv vs3, 240(r1) ; PWR10BE-NEXT: lxv vs2, 256(r1) ; PWR10BE-NEXT: xsadddp f4, v2, f4 ; PWR10BE-NEXT: lxv vs1, 272(r1) ; PWR10BE-NEXT: lxv vs0, 288(r1) ; PWR10BE-NEXT: xsadddp f4, f4, v3 ; PWR10BE-NEXT: xsadddp f4, f4, f5 ; PWR10BE-NEXT: xxswapd vs5, v4 ; PWR10BE-NEXT: xsadddp f4, f4, v4 ; PWR10BE-NEXT: xsadddp f4, f4, f5 ; PWR10BE-NEXT: xxswapd vs5, v5 ; PWR10BE-NEXT: xsadddp f4, f4, v5 ; PWR10BE-NEXT: xsadddp f4, f4, f5 ; PWR10BE-NEXT: xxswapd vs5, v6 ; PWR10BE-NEXT: xsadddp f4, f4, v6 ; PWR10BE-NEXT: xsadddp f4, f4, f5 ; PWR10BE-NEXT: xxswapd vs5, v7 ; PWR10BE-NEXT: xsadddp f4, f4, v7 ; PWR10BE-NEXT: xsadddp f4, f4, f5 ; PWR10BE-NEXT: xxswapd vs5, v8 ; PWR10BE-NEXT: xsadddp f4, f4, v8 ; PWR10BE-NEXT: xsadddp f4, f4, f5 ; PWR10BE-NEXT: xxswapd vs5, v9 ; PWR10BE-NEXT: xsadddp f4, f4, v9 ; PWR10BE-NEXT: xsadddp f4, f4, f5 ; PWR10BE-NEXT: xxswapd vs5, v10 ; PWR10BE-NEXT: xsadddp f4, f4, v10 ; PWR10BE-NEXT: xsadddp f4, f4, f5 ; PWR10BE-NEXT: xxswapd vs5, v11 ; PWR10BE-NEXT: xsadddp f4, f4, v11 ; PWR10BE-NEXT: xsadddp f4, f4, f5 ; PWR10BE-NEXT: xxswapd vs5, v12 ; PWR10BE-NEXT: xsadddp f4, f4, v12 ; PWR10BE-NEXT: xsadddp f4, f4, f5 ; PWR10BE-NEXT: xxswapd vs5, v13 ; PWR10BE-NEXT: xsadddp f4, f4, v13 ; PWR10BE-NEXT: xsadddp f4, f4, f5 ; PWR10BE-NEXT: xsadddp f4, f4, f3 ; PWR10BE-NEXT: xxswapd vs3, vs3 ; PWR10BE-NEXT: xsadddp f3, f4, f3 ; PWR10BE-NEXT: xsadddp f3, f3, f2 ; PWR10BE-NEXT: xxswapd vs2, vs2 ; PWR10BE-NEXT: xsadddp f2, f3, f2 ; PWR10BE-NEXT: xsadddp f2, f2, f1 ; PWR10BE-NEXT: xxswapd vs1, vs1 ; PWR10BE-NEXT: xsadddp f1, f2, f1 ; PWR10BE-NEXT: xsadddp f1, f1, f0 ; PWR10BE-NEXT: xxswapd vs0, vs0 ; PWR10BE-NEXT: xsadddp f1, f1, f0 ; PWR10BE-NEXT: blr entry: %0 = call double @llvm.vector.reduce.fadd.v32f64(double -0.000000e+00, <32 x double> %a) ret double %0 } define dso_local double @v32f64_b(<32 x double> %a, double %b) local_unnamed_addr #0 { ; PWR9LE-LABEL: v32f64_b: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxswapd vs5, v2 ; PWR9LE-NEXT: lxv vs4, 224(r1) ; PWR9LE-NEXT: lxv vs3, 240(r1) ; PWR9LE-NEXT: lxv vs2, 256(r1) ; PWR9LE-NEXT: lxv vs0, 272(r1) ; PWR9LE-NEXT: xsadddp f1, f1, f5 ; PWR9LE-NEXT: xxswapd vs5, v3 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xsadddp f1, f1, f5 ; PWR9LE-NEXT: xxswapd vs5, v4 ; PWR9LE-NEXT: xsadddp f1, f1, v3 ; PWR9LE-NEXT: xsadddp f1, f1, f5 ; PWR9LE-NEXT: xxswapd vs5, v5 ; PWR9LE-NEXT: xsadddp f1, f1, v4 ; PWR9LE-NEXT: xsadddp f1, f1, f5 ; PWR9LE-NEXT: xxswapd vs5, v6 ; PWR9LE-NEXT: xsadddp f1, f1, v5 ; PWR9LE-NEXT: xsadddp f1, f1, f5 ; PWR9LE-NEXT: xxswapd vs5, v7 ; PWR9LE-NEXT: xsadddp f1, f1, v6 ; PWR9LE-NEXT: xsadddp f1, f1, f5 ; PWR9LE-NEXT: xxswapd vs5, v8 ; PWR9LE-NEXT: xsadddp f1, f1, v7 ; PWR9LE-NEXT: xsadddp f1, f1, f5 ; PWR9LE-NEXT: xxswapd vs5, v9 ; PWR9LE-NEXT: xsadddp f1, f1, v8 ; PWR9LE-NEXT: xsadddp f1, f1, f5 ; PWR9LE-NEXT: xxswapd vs5, v10 ; PWR9LE-NEXT: xsadddp f1, f1, v9 ; PWR9LE-NEXT: xsadddp f1, f1, f5 ; PWR9LE-NEXT: xxswapd vs5, v11 ; PWR9LE-NEXT: xsadddp f1, f1, v10 ; PWR9LE-NEXT: xsadddp f1, f1, f5 ; PWR9LE-NEXT: xxswapd vs5, v12 ; PWR9LE-NEXT: xsadddp f1, f1, v11 ; PWR9LE-NEXT: xsadddp f1, f1, f5 ; PWR9LE-NEXT: xxswapd vs5, v13 ; PWR9LE-NEXT: xsadddp f1, f1, v12 ; PWR9LE-NEXT: xsadddp f1, f1, f5 ; PWR9LE-NEXT: xxswapd vs5, vs4 ; PWR9LE-NEXT: xsadddp f1, f1, v13 ; PWR9LE-NEXT: xsadddp f1, f1, f5 ; PWR9LE-NEXT: xsadddp f1, f1, f4 ; PWR9LE-NEXT: xxswapd vs4, vs3 ; PWR9LE-NEXT: xsadddp f1, f1, f4 ; PWR9LE-NEXT: xsadddp f1, f1, f3 ; PWR9LE-NEXT: xxswapd vs3, vs2 ; PWR9LE-NEXT: xsadddp f1, f1, f3 ; PWR9LE-NEXT: xsadddp f1, f1, f2 ; PWR9LE-NEXT: xxswapd vs2, vs0 ; PWR9LE-NEXT: xsadddp f1, f1, f2 ; PWR9LE-NEXT: xsadddp f1, f1, f0 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v32f64_b: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd vs5, v2 ; PWR9BE-NEXT: lxv vs4, 240(r1) ; PWR9BE-NEXT: lxv vs3, 256(r1) ; PWR9BE-NEXT: lxv vs2, 272(r1) ; PWR9BE-NEXT: lxv vs0, 288(r1) ; PWR9BE-NEXT: xsadddp f1, f1, f5 ; PWR9BE-NEXT: xxswapd vs5, v3 ; PWR9BE-NEXT: xsadddp f1, f1, v3 ; PWR9BE-NEXT: xsadddp f1, f1, f5 ; PWR9BE-NEXT: xxswapd vs5, v4 ; PWR9BE-NEXT: xsadddp f1, f1, v4 ; PWR9BE-NEXT: xsadddp f1, f1, f5 ; PWR9BE-NEXT: xxswapd vs5, v5 ; PWR9BE-NEXT: xsadddp f1, f1, v5 ; PWR9BE-NEXT: xsadddp f1, f1, f5 ; PWR9BE-NEXT: xxswapd vs5, v6 ; PWR9BE-NEXT: xsadddp f1, f1, v6 ; PWR9BE-NEXT: xsadddp f1, f1, f5 ; PWR9BE-NEXT: xxswapd vs5, v7 ; PWR9BE-NEXT: xsadddp f1, f1, v7 ; PWR9BE-NEXT: xsadddp f1, f1, f5 ; PWR9BE-NEXT: xxswapd vs5, v8 ; PWR9BE-NEXT: xsadddp f1, f1, v8 ; PWR9BE-NEXT: xsadddp f1, f1, f5 ; PWR9BE-NEXT: xxswapd vs5, v9 ; PWR9BE-NEXT: xsadddp f1, f1, v9 ; PWR9BE-NEXT: xsadddp f1, f1, f5 ; PWR9BE-NEXT: xxswapd vs5, v10 ; PWR9BE-NEXT: xsadddp f1, f1, v10 ; PWR9BE-NEXT: xsadddp f1, f1, f5 ; PWR9BE-NEXT: xxswapd vs5, v11 ; PWR9BE-NEXT: xsadddp f1, f1, v11 ; PWR9BE-NEXT: xsadddp f1, f1, f5 ; PWR9BE-NEXT: xxswapd vs5, v12 ; PWR9BE-NEXT: xsadddp f1, f1, v12 ; PWR9BE-NEXT: xsadddp f1, f1, f5 ; PWR9BE-NEXT: xxswapd vs5, v13 ; PWR9BE-NEXT: xsadddp f1, f1, v13 ; PWR9BE-NEXT: xsadddp f1, f1, f5 ; PWR9BE-NEXT: xsadddp f1, f1, f4 ; PWR9BE-NEXT: xxswapd vs4, vs4 ; PWR9BE-NEXT: xsadddp f1, f1, f4 ; PWR9BE-NEXT: xsadddp f1, f1, f3 ; PWR9BE-NEXT: xxswapd vs3, vs3 ; PWR9BE-NEXT: xsadddp f1, f1, f3 ; PWR9BE-NEXT: xsadddp f1, f1, f2 ; PWR9BE-NEXT: xxswapd vs2, vs2 ; PWR9BE-NEXT: xsadddp f1, f1, f2 ; PWR9BE-NEXT: xsadddp f1, f1, f0 ; PWR9BE-NEXT: xxswapd vs0, vs0 ; PWR9BE-NEXT: xsadddp f1, f1, f0 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v32f64_b: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxswapd vs5, v2 ; PWR10LE-NEXT: lxv vs4, 224(r1) ; PWR10LE-NEXT: lxv vs3, 240(r1) ; PWR10LE-NEXT: xsadddp f1, f1, f5 ; PWR10LE-NEXT: xxswapd vs5, v3 ; PWR10LE-NEXT: lxv vs2, 256(r1) ; PWR10LE-NEXT: lxv vs0, 272(r1) ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xsadddp f1, f1, f5 ; PWR10LE-NEXT: xxswapd vs5, v4 ; PWR10LE-NEXT: xsadddp f1, f1, v3 ; PWR10LE-NEXT: xsadddp f1, f1, f5 ; PWR10LE-NEXT: xxswapd vs5, v5 ; PWR10LE-NEXT: xsadddp f1, f1, v4 ; PWR10LE-NEXT: xsadddp f1, f1, f5 ; PWR10LE-NEXT: xxswapd vs5, v6 ; PWR10LE-NEXT: xsadddp f1, f1, v5 ; PWR10LE-NEXT: xsadddp f1, f1, f5 ; PWR10LE-NEXT: xxswapd vs5, v7 ; PWR10LE-NEXT: xsadddp f1, f1, v6 ; PWR10LE-NEXT: xsadddp f1, f1, f5 ; PWR10LE-NEXT: xxswapd vs5, v8 ; PWR10LE-NEXT: xsadddp f1, f1, v7 ; PWR10LE-NEXT: xsadddp f1, f1, f5 ; PWR10LE-NEXT: xxswapd vs5, v9 ; PWR10LE-NEXT: xsadddp f1, f1, v8 ; PWR10LE-NEXT: xsadddp f1, f1, f5 ; PWR10LE-NEXT: xxswapd vs5, v10 ; PWR10LE-NEXT: xsadddp f1, f1, v9 ; PWR10LE-NEXT: xsadddp f1, f1, f5 ; PWR10LE-NEXT: xxswapd vs5, v11 ; PWR10LE-NEXT: xsadddp f1, f1, v10 ; PWR10LE-NEXT: xsadddp f1, f1, f5 ; PWR10LE-NEXT: xxswapd vs5, v12 ; PWR10LE-NEXT: xsadddp f1, f1, v11 ; PWR10LE-NEXT: xsadddp f1, f1, f5 ; PWR10LE-NEXT: xxswapd vs5, v13 ; PWR10LE-NEXT: xsadddp f1, f1, v12 ; PWR10LE-NEXT: xsadddp f1, f1, f5 ; PWR10LE-NEXT: xxswapd vs5, vs4 ; PWR10LE-NEXT: xsadddp f1, f1, v13 ; PWR10LE-NEXT: xsadddp f1, f1, f5 ; PWR10LE-NEXT: xsadddp f1, f1, f4 ; PWR10LE-NEXT: xxswapd vs4, vs3 ; PWR10LE-NEXT: xsadddp f1, f1, f4 ; PWR10LE-NEXT: xsadddp f1, f1, f3 ; PWR10LE-NEXT: xxswapd vs3, vs2 ; PWR10LE-NEXT: xsadddp f1, f1, f3 ; PWR10LE-NEXT: xsadddp f1, f1, f2 ; PWR10LE-NEXT: xxswapd vs2, vs0 ; PWR10LE-NEXT: xsadddp f1, f1, f2 ; PWR10LE-NEXT: xsadddp f1, f1, f0 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v32f64_b: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd vs5, v2 ; PWR10BE-NEXT: lxv vs4, 240(r1) ; PWR10BE-NEXT: lxv vs3, 256(r1) ; PWR10BE-NEXT: xsadddp f1, f1, f5 ; PWR10BE-NEXT: xxswapd vs5, v3 ; PWR10BE-NEXT: lxv vs2, 272(r1) ; PWR10BE-NEXT: lxv vs0, 288(r1) ; PWR10BE-NEXT: xsadddp f1, f1, v3 ; PWR10BE-NEXT: xsadddp f1, f1, f5 ; PWR10BE-NEXT: xxswapd vs5, v4 ; PWR10BE-NEXT: xsadddp f1, f1, v4 ; PWR10BE-NEXT: xsadddp f1, f1, f5 ; PWR10BE-NEXT: xxswapd vs5, v5 ; PWR10BE-NEXT: xsadddp f1, f1, v5 ; PWR10BE-NEXT: xsadddp f1, f1, f5 ; PWR10BE-NEXT: xxswapd vs5, v6 ; PWR10BE-NEXT: xsadddp f1, f1, v6 ; PWR10BE-NEXT: xsadddp f1, f1, f5 ; PWR10BE-NEXT: xxswapd vs5, v7 ; PWR10BE-NEXT: xsadddp f1, f1, v7 ; PWR10BE-NEXT: xsadddp f1, f1, f5 ; PWR10BE-NEXT: xxswapd vs5, v8 ; PWR10BE-NEXT: xsadddp f1, f1, v8 ; PWR10BE-NEXT: xsadddp f1, f1, f5 ; PWR10BE-NEXT: xxswapd vs5, v9 ; PWR10BE-NEXT: xsadddp f1, f1, v9 ; PWR10BE-NEXT: xsadddp f1, f1, f5 ; PWR10BE-NEXT: xxswapd vs5, v10 ; PWR10BE-NEXT: xsadddp f1, f1, v10 ; PWR10BE-NEXT: xsadddp f1, f1, f5 ; PWR10BE-NEXT: xxswapd vs5, v11 ; PWR10BE-NEXT: xsadddp f1, f1, v11 ; PWR10BE-NEXT: xsadddp f1, f1, f5 ; PWR10BE-NEXT: xxswapd vs5, v12 ; PWR10BE-NEXT: xsadddp f1, f1, v12 ; PWR10BE-NEXT: xsadddp f1, f1, f5 ; PWR10BE-NEXT: xxswapd vs5, v13 ; PWR10BE-NEXT: xsadddp f1, f1, v13 ; PWR10BE-NEXT: xsadddp f1, f1, f5 ; PWR10BE-NEXT: xsadddp f1, f1, f4 ; PWR10BE-NEXT: xxswapd vs4, vs4 ; PWR10BE-NEXT: xsadddp f1, f1, f4 ; PWR10BE-NEXT: xsadddp f1, f1, f3 ; PWR10BE-NEXT: xxswapd vs3, vs3 ; PWR10BE-NEXT: xsadddp f1, f1, f3 ; PWR10BE-NEXT: xsadddp f1, f1, f2 ; PWR10BE-NEXT: xxswapd vs2, vs2 ; PWR10BE-NEXT: xsadddp f1, f1, f2 ; PWR10BE-NEXT: xsadddp f1, f1, f0 ; PWR10BE-NEXT: xxswapd vs0, vs0 ; PWR10BE-NEXT: xsadddp f1, f1, f0 ; PWR10BE-NEXT: blr entry: %0 = call double @llvm.vector.reduce.fadd.v32f64(double %b, <32 x double> %a) ret double %0 } define dso_local double @v32f64_fast(<32 x double> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v32f64_fast: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: lxv vs0, 256(r1) ; PWR9LE-NEXT: lxv vs1, 224(r1) ; PWR9LE-NEXT: lxv vs2, 272(r1) ; PWR9LE-NEXT: lxv vs3, 240(r1) ; PWR9LE-NEXT: xvadddp vs4, v3, v11 ; PWR9LE-NEXT: xvadddp vs5, v5, v13 ; PWR9LE-NEXT: xvadddp vs6, v2, v10 ; PWR9LE-NEXT: xvadddp vs7, v4, v12 ; PWR9LE-NEXT: xvadddp vs3, v7, vs3 ; PWR9LE-NEXT: xvadddp vs2, v9, vs2 ; PWR9LE-NEXT: xvadddp vs1, v6, vs1 ; PWR9LE-NEXT: xvadddp vs0, v8, vs0 ; PWR9LE-NEXT: xvadddp vs0, vs7, vs0 ; PWR9LE-NEXT: xvadddp vs1, vs6, vs1 ; PWR9LE-NEXT: xvadddp vs2, vs5, vs2 ; PWR9LE-NEXT: xvadddp vs3, vs4, vs3 ; PWR9LE-NEXT: xvadddp vs2, vs3, vs2 ; PWR9LE-NEXT: xvadddp vs0, vs1, vs0 ; PWR9LE-NEXT: xvadddp vs0, vs0, vs2 ; PWR9LE-NEXT: xxswapd vs1, vs0 ; PWR9LE-NEXT: xvadddp vs0, vs0, vs1 ; PWR9LE-NEXT: xxswapd vs1, vs0 ; PWR9LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v32f64_fast: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: lxv vs0, 272(r1) ; PWR9BE-NEXT: lxv vs1, 240(r1) ; PWR9BE-NEXT: lxv vs2, 288(r1) ; PWR9BE-NEXT: lxv vs3, 256(r1) ; PWR9BE-NEXT: xvadddp vs4, v3, v11 ; PWR9BE-NEXT: xvadddp vs5, v5, v13 ; PWR9BE-NEXT: xvadddp vs6, v2, v10 ; PWR9BE-NEXT: xvadddp vs7, v4, v12 ; PWR9BE-NEXT: xvadddp vs3, v7, vs3 ; PWR9BE-NEXT: xvadddp vs2, v9, vs2 ; PWR9BE-NEXT: xvadddp vs1, v6, vs1 ; PWR9BE-NEXT: xvadddp vs0, v8, vs0 ; PWR9BE-NEXT: xvadddp vs0, vs7, vs0 ; PWR9BE-NEXT: xvadddp vs1, vs6, vs1 ; PWR9BE-NEXT: xvadddp vs2, vs5, vs2 ; PWR9BE-NEXT: xvadddp vs3, vs4, vs3 ; PWR9BE-NEXT: xvadddp vs2, vs3, vs2 ; PWR9BE-NEXT: xvadddp vs0, vs1, vs0 ; PWR9BE-NEXT: xvadddp vs0, vs0, vs2 ; PWR9BE-NEXT: xxswapd vs1, vs0 ; PWR9BE-NEXT: xvadddp vs1, vs0, vs1 ; PWR9BE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v32f64_fast: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: lxv vs0, 256(r1) ; PWR10LE-NEXT: lxv vs1, 224(r1) ; PWR10LE-NEXT: xvadddp vs4, v3, v11 ; PWR10LE-NEXT: xvadddp vs5, v5, v13 ; PWR10LE-NEXT: xvadddp vs6, v2, v10 ; PWR10LE-NEXT: xvadddp vs7, v4, v12 ; PWR10LE-NEXT: xvadddp vs1, v6, vs1 ; PWR10LE-NEXT: lxv vs2, 272(r1) ; PWR10LE-NEXT: lxv vs3, 240(r1) ; PWR10LE-NEXT: xvadddp vs3, v7, vs3 ; PWR10LE-NEXT: xvadddp vs2, v9, vs2 ; PWR10LE-NEXT: xvadddp vs0, v8, vs0 ; PWR10LE-NEXT: xvadddp vs0, vs7, vs0 ; PWR10LE-NEXT: xvadddp vs1, vs6, vs1 ; PWR10LE-NEXT: xvadddp vs2, vs5, vs2 ; PWR10LE-NEXT: xvadddp vs3, vs4, vs3 ; PWR10LE-NEXT: xvadddp vs2, vs3, vs2 ; PWR10LE-NEXT: xvadddp vs0, vs1, vs0 ; PWR10LE-NEXT: xvadddp vs0, vs0, vs2 ; PWR10LE-NEXT: xxswapd vs1, vs0 ; PWR10LE-NEXT: xvadddp vs0, vs0, vs1 ; PWR10LE-NEXT: xxswapd vs1, vs0 ; PWR10LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v32f64_fast: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: lxv vs0, 272(r1) ; PWR10BE-NEXT: lxv vs1, 240(r1) ; PWR10BE-NEXT: xvadddp vs4, v3, v11 ; PWR10BE-NEXT: xvadddp vs5, v5, v13 ; PWR10BE-NEXT: xvadddp vs6, v2, v10 ; PWR10BE-NEXT: xvadddp vs7, v4, v12 ; PWR10BE-NEXT: xvadddp vs1, v6, vs1 ; PWR10BE-NEXT: lxv vs2, 288(r1) ; PWR10BE-NEXT: lxv vs3, 256(r1) ; PWR10BE-NEXT: xvadddp vs3, v7, vs3 ; PWR10BE-NEXT: xvadddp vs2, v9, vs2 ; PWR10BE-NEXT: xvadddp vs0, v8, vs0 ; PWR10BE-NEXT: xvadddp vs0, vs7, vs0 ; PWR10BE-NEXT: xvadddp vs1, vs6, vs1 ; PWR10BE-NEXT: xvadddp vs2, vs5, vs2 ; PWR10BE-NEXT: xvadddp vs3, vs4, vs3 ; PWR10BE-NEXT: xvadddp vs2, vs3, vs2 ; PWR10BE-NEXT: xvadddp vs0, vs1, vs0 ; PWR10BE-NEXT: xvadddp vs0, vs0, vs2 ; PWR10BE-NEXT: xxswapd vs1, vs0 ; PWR10BE-NEXT: xvadddp vs1, vs0, vs1 ; PWR10BE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR10BE-NEXT: blr entry: %0 = call fast double @llvm.vector.reduce.fadd.v32f64(double -0.000000e+00, <32 x double> %a) ret double %0 } define dso_local double @v64f64(<64 x double> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v64f64: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxswapd v18, v2 ; PWR9LE-NEXT: lxv v17, 224(r1) ; PWR9LE-NEXT: lxv v16, 240(r1) ; PWR9LE-NEXT: lxv v15, 256(r1) ; PWR9LE-NEXT: lxv v14, 272(r1) ; PWR9LE-NEXT: xsadddp v2, v18, v2 ; PWR9LE-NEXT: xxswapd v18, v3 ; PWR9LE-NEXT: lxv v1, 288(r1) ; PWR9LE-NEXT: lxv v0, 304(r1) ; PWR9LE-NEXT: lxv vs13, 320(r1) ; PWR9LE-NEXT: lxv vs12, 336(r1) ; PWR9LE-NEXT: lxv vs11, 352(r1) ; PWR9LE-NEXT: lxv vs10, 368(r1) ; PWR9LE-NEXT: lxv vs9, 384(r1) ; PWR9LE-NEXT: lxv vs8, 400(r1) ; PWR9LE-NEXT: lxv vs7, 416(r1) ; PWR9LE-NEXT: lxv vs6, 432(r1) ; PWR9LE-NEXT: lxv vs5, 448(r1) ; PWR9LE-NEXT: lxv vs4, 464(r1) ; PWR9LE-NEXT: xsadddp v2, v2, v18 ; PWR9LE-NEXT: lxv vs3, 480(r1) ; PWR9LE-NEXT: lxv vs2, 496(r1) ; PWR9LE-NEXT: lxv vs1, 512(r1) ; PWR9LE-NEXT: lxv vs0, 528(r1) ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, v4 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, v5 ; PWR9LE-NEXT: xsadddp v2, v2, v4 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, v6 ; PWR9LE-NEXT: xsadddp v2, v2, v5 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, v7 ; PWR9LE-NEXT: xsadddp v2, v2, v6 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, v8 ; PWR9LE-NEXT: xsadddp v2, v2, v7 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, v9 ; PWR9LE-NEXT: xsadddp v2, v2, v8 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, v10 ; PWR9LE-NEXT: xsadddp v2, v2, v9 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, v11 ; PWR9LE-NEXT: xsadddp v2, v2, v10 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, v12 ; PWR9LE-NEXT: xsadddp v2, v2, v11 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, v13 ; PWR9LE-NEXT: xsadddp v2, v2, v12 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, v17 ; PWR9LE-NEXT: xsadddp v2, v2, v13 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, v16 ; PWR9LE-NEXT: xsadddp v2, v2, v17 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, v15 ; PWR9LE-NEXT: xsadddp v2, v2, v16 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, v14 ; PWR9LE-NEXT: xsadddp v2, v2, v15 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, v1 ; PWR9LE-NEXT: xsadddp v2, v2, v14 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, v0 ; PWR9LE-NEXT: xsadddp v2, v2, v1 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xxswapd v3, vs13 ; PWR9LE-NEXT: xsadddp v2, v2, v0 ; PWR9LE-NEXT: xsadddp v2, v2, v3 ; PWR9LE-NEXT: xsadddp f13, v2, f13 ; PWR9LE-NEXT: xxswapd v2, vs12 ; PWR9LE-NEXT: xsadddp f13, f13, v2 ; PWR9LE-NEXT: xsadddp f12, f13, f12 ; PWR9LE-NEXT: xxswapd vs13, vs11 ; PWR9LE-NEXT: xsadddp f12, f12, f13 ; PWR9LE-NEXT: xsadddp f11, f12, f11 ; PWR9LE-NEXT: xxswapd vs12, vs10 ; PWR9LE-NEXT: xsadddp f11, f11, f12 ; PWR9LE-NEXT: xsadddp f10, f11, f10 ; PWR9LE-NEXT: xxswapd vs11, vs9 ; PWR9LE-NEXT: xsadddp f10, f10, f11 ; PWR9LE-NEXT: xsadddp f9, f10, f9 ; PWR9LE-NEXT: xxswapd vs10, vs8 ; PWR9LE-NEXT: xsadddp f9, f9, f10 ; PWR9LE-NEXT: xsadddp f8, f9, f8 ; PWR9LE-NEXT: xxswapd vs9, vs7 ; PWR9LE-NEXT: xsadddp f8, f8, f9 ; PWR9LE-NEXT: xsadddp f7, f8, f7 ; PWR9LE-NEXT: xxswapd vs8, vs6 ; PWR9LE-NEXT: xsadddp f7, f7, f8 ; PWR9LE-NEXT: xsadddp f6, f7, f6 ; PWR9LE-NEXT: xxswapd vs7, vs5 ; PWR9LE-NEXT: xsadddp f6, f6, f7 ; PWR9LE-NEXT: xsadddp f5, f6, f5 ; PWR9LE-NEXT: xxswapd vs6, vs4 ; PWR9LE-NEXT: xsadddp f5, f5, f6 ; PWR9LE-NEXT: xsadddp f4, f5, f4 ; PWR9LE-NEXT: xxswapd vs5, vs3 ; PWR9LE-NEXT: xsadddp f4, f4, f5 ; PWR9LE-NEXT: xsadddp f3, f4, f3 ; PWR9LE-NEXT: xxswapd vs4, vs2 ; PWR9LE-NEXT: xsadddp f3, f3, f4 ; PWR9LE-NEXT: xsadddp f2, f3, f2 ; PWR9LE-NEXT: xxswapd vs3, vs1 ; PWR9LE-NEXT: xsadddp f2, f2, f3 ; PWR9LE-NEXT: xsadddp f1, f2, f1 ; PWR9LE-NEXT: xxswapd vs2, vs0 ; PWR9LE-NEXT: xsadddp f1, f1, f2 ; PWR9LE-NEXT: xsadddp f1, f1, f0 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v64f64: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xxswapd v18, v2 ; PWR9BE-NEXT: lxv v17, 240(r1) ; PWR9BE-NEXT: lxv v16, 256(r1) ; PWR9BE-NEXT: lxv v15, 272(r1) ; PWR9BE-NEXT: lxv v14, 288(r1) ; PWR9BE-NEXT: xsadddp v2, v2, v18 ; PWR9BE-NEXT: lxv v1, 304(r1) ; PWR9BE-NEXT: lxv v0, 320(r1) ; PWR9BE-NEXT: lxv vs13, 336(r1) ; PWR9BE-NEXT: lxv vs12, 352(r1) ; PWR9BE-NEXT: lxv vs11, 368(r1) ; PWR9BE-NEXT: lxv vs10, 384(r1) ; PWR9BE-NEXT: lxv vs9, 400(r1) ; PWR9BE-NEXT: lxv vs8, 416(r1) ; PWR9BE-NEXT: lxv vs7, 432(r1) ; PWR9BE-NEXT: lxv vs6, 448(r1) ; PWR9BE-NEXT: lxv vs5, 464(r1) ; PWR9BE-NEXT: lxv vs4, 480(r1) ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v3 ; PWR9BE-NEXT: lxv vs3, 496(r1) ; PWR9BE-NEXT: lxv vs2, 512(r1) ; PWR9BE-NEXT: lxv vs1, 528(r1) ; PWR9BE-NEXT: lxv vs0, 544(r1) ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v4 ; PWR9BE-NEXT: xsadddp v2, v2, v4 ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v5 ; PWR9BE-NEXT: xsadddp v2, v2, v5 ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v6 ; PWR9BE-NEXT: xsadddp v2, v2, v6 ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v7 ; PWR9BE-NEXT: xsadddp v2, v2, v7 ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v8 ; PWR9BE-NEXT: xsadddp v2, v2, v8 ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v9 ; PWR9BE-NEXT: xsadddp v2, v2, v9 ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v10 ; PWR9BE-NEXT: xsadddp v2, v2, v10 ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v11 ; PWR9BE-NEXT: xsadddp v2, v2, v11 ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v12 ; PWR9BE-NEXT: xsadddp v2, v2, v12 ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v13 ; PWR9BE-NEXT: xsadddp v2, v2, v13 ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v17 ; PWR9BE-NEXT: xsadddp v2, v2, v17 ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v16 ; PWR9BE-NEXT: xsadddp v2, v2, v16 ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v15 ; PWR9BE-NEXT: xsadddp v2, v2, v15 ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v14 ; PWR9BE-NEXT: xsadddp v2, v2, v14 ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v1 ; PWR9BE-NEXT: xsadddp v2, v2, v1 ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xxswapd v3, v0 ; PWR9BE-NEXT: xsadddp v2, v2, v0 ; PWR9BE-NEXT: xsadddp v2, v2, v3 ; PWR9BE-NEXT: xsadddp v2, v2, f13 ; PWR9BE-NEXT: xxswapd vs13, vs13 ; PWR9BE-NEXT: xsadddp f13, v2, f13 ; PWR9BE-NEXT: xsadddp f13, f13, f12 ; PWR9BE-NEXT: xxswapd vs12, vs12 ; PWR9BE-NEXT: xsadddp f12, f13, f12 ; PWR9BE-NEXT: xsadddp f12, f12, f11 ; PWR9BE-NEXT: xxswapd vs11, vs11 ; PWR9BE-NEXT: xsadddp f11, f12, f11 ; PWR9BE-NEXT: xsadddp f11, f11, f10 ; PWR9BE-NEXT: xxswapd vs10, vs10 ; PWR9BE-NEXT: xsadddp f10, f11, f10 ; PWR9BE-NEXT: xsadddp f10, f10, f9 ; PWR9BE-NEXT: xxswapd vs9, vs9 ; PWR9BE-NEXT: xsadddp f9, f10, f9 ; PWR9BE-NEXT: xsadddp f9, f9, f8 ; PWR9BE-NEXT: xxswapd vs8, vs8 ; PWR9BE-NEXT: xsadddp f8, f9, f8 ; PWR9BE-NEXT: xsadddp f8, f8, f7 ; PWR9BE-NEXT: xxswapd vs7, vs7 ; PWR9BE-NEXT: xsadddp f7, f8, f7 ; PWR9BE-NEXT: xsadddp f7, f7, f6 ; PWR9BE-NEXT: xxswapd vs6, vs6 ; PWR9BE-NEXT: xsadddp f6, f7, f6 ; PWR9BE-NEXT: xsadddp f6, f6, f5 ; PWR9BE-NEXT: xxswapd vs5, vs5 ; PWR9BE-NEXT: xsadddp f5, f6, f5 ; PWR9BE-NEXT: xsadddp f5, f5, f4 ; PWR9BE-NEXT: xxswapd vs4, vs4 ; PWR9BE-NEXT: xsadddp f4, f5, f4 ; PWR9BE-NEXT: xsadddp f4, f4, f3 ; PWR9BE-NEXT: xxswapd vs3, vs3 ; PWR9BE-NEXT: xsadddp f3, f4, f3 ; PWR9BE-NEXT: xsadddp f3, f3, f2 ; PWR9BE-NEXT: xxswapd vs2, vs2 ; PWR9BE-NEXT: xsadddp f2, f3, f2 ; PWR9BE-NEXT: xsadddp f2, f2, f1 ; PWR9BE-NEXT: xxswapd vs1, vs1 ; PWR9BE-NEXT: xsadddp f1, f2, f1 ; PWR9BE-NEXT: xsadddp f1, f1, f0 ; PWR9BE-NEXT: xxswapd vs0, vs0 ; PWR9BE-NEXT: xsadddp f1, f1, f0 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v64f64: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxswapd v18, v2 ; PWR10LE-NEXT: lxv v17, 224(r1) ; PWR10LE-NEXT: lxv v16, 240(r1) ; PWR10LE-NEXT: xsadddp v2, v18, v2 ; PWR10LE-NEXT: xxswapd v18, v3 ; PWR10LE-NEXT: lxv v15, 256(r1) ; PWR10LE-NEXT: lxv v14, 272(r1) ; PWR10LE-NEXT: lxv v1, 288(r1) ; PWR10LE-NEXT: lxv v0, 304(r1) ; PWR10LE-NEXT: lxv vs13, 320(r1) ; PWR10LE-NEXT: lxv vs12, 336(r1) ; PWR10LE-NEXT: lxv vs11, 352(r1) ; PWR10LE-NEXT: lxv vs10, 368(r1) ; PWR10LE-NEXT: xsadddp v2, v2, v18 ; PWR10LE-NEXT: lxv vs9, 384(r1) ; PWR10LE-NEXT: lxv vs8, 400(r1) ; PWR10LE-NEXT: lxv vs7, 416(r1) ; PWR10LE-NEXT: lxv vs6, 432(r1) ; PWR10LE-NEXT: lxv vs5, 448(r1) ; PWR10LE-NEXT: lxv vs4, 464(r1) ; PWR10LE-NEXT: lxv vs3, 480(r1) ; PWR10LE-NEXT: lxv vs2, 496(r1) ; PWR10LE-NEXT: lxv vs1, 512(r1) ; PWR10LE-NEXT: lxv vs0, 528(r1) ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, v4 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, v5 ; PWR10LE-NEXT: xsadddp v2, v2, v4 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, v6 ; PWR10LE-NEXT: xsadddp v2, v2, v5 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, v7 ; PWR10LE-NEXT: xsadddp v2, v2, v6 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, v8 ; PWR10LE-NEXT: xsadddp v2, v2, v7 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, v9 ; PWR10LE-NEXT: xsadddp v2, v2, v8 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, v10 ; PWR10LE-NEXT: xsadddp v2, v2, v9 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, v11 ; PWR10LE-NEXT: xsadddp v2, v2, v10 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, v12 ; PWR10LE-NEXT: xsadddp v2, v2, v11 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, v13 ; PWR10LE-NEXT: xsadddp v2, v2, v12 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, v17 ; PWR10LE-NEXT: xsadddp v2, v2, v13 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, v16 ; PWR10LE-NEXT: xsadddp v2, v2, v17 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, v15 ; PWR10LE-NEXT: xsadddp v2, v2, v16 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, v14 ; PWR10LE-NEXT: xsadddp v2, v2, v15 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, v1 ; PWR10LE-NEXT: xsadddp v2, v2, v14 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, v0 ; PWR10LE-NEXT: xsadddp v2, v2, v1 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xxswapd v3, vs13 ; PWR10LE-NEXT: xsadddp v2, v2, v0 ; PWR10LE-NEXT: xsadddp v2, v2, v3 ; PWR10LE-NEXT: xsadddp f13, v2, f13 ; PWR10LE-NEXT: xxswapd v2, vs12 ; PWR10LE-NEXT: xsadddp f13, f13, v2 ; PWR10LE-NEXT: xsadddp f12, f13, f12 ; PWR10LE-NEXT: xxswapd vs13, vs11 ; PWR10LE-NEXT: xsadddp f12, f12, f13 ; PWR10LE-NEXT: xsadddp f11, f12, f11 ; PWR10LE-NEXT: xxswapd vs12, vs10 ; PWR10LE-NEXT: xsadddp f11, f11, f12 ; PWR10LE-NEXT: xsadddp f10, f11, f10 ; PWR10LE-NEXT: xxswapd vs11, vs9 ; PWR10LE-NEXT: xsadddp f10, f10, f11 ; PWR10LE-NEXT: xsadddp f9, f10, f9 ; PWR10LE-NEXT: xxswapd vs10, vs8 ; PWR10LE-NEXT: xsadddp f9, f9, f10 ; PWR10LE-NEXT: xsadddp f8, f9, f8 ; PWR10LE-NEXT: xxswapd vs9, vs7 ; PWR10LE-NEXT: xsadddp f8, f8, f9 ; PWR10LE-NEXT: xsadddp f7, f8, f7 ; PWR10LE-NEXT: xxswapd vs8, vs6 ; PWR10LE-NEXT: xsadddp f7, f7, f8 ; PWR10LE-NEXT: xsadddp f6, f7, f6 ; PWR10LE-NEXT: xxswapd vs7, vs5 ; PWR10LE-NEXT: xsadddp f6, f6, f7 ; PWR10LE-NEXT: xsadddp f5, f6, f5 ; PWR10LE-NEXT: xxswapd vs6, vs4 ; PWR10LE-NEXT: xsadddp f5, f5, f6 ; PWR10LE-NEXT: xsadddp f4, f5, f4 ; PWR10LE-NEXT: xxswapd vs5, vs3 ; PWR10LE-NEXT: xsadddp f4, f4, f5 ; PWR10LE-NEXT: xsadddp f3, f4, f3 ; PWR10LE-NEXT: xxswapd vs4, vs2 ; PWR10LE-NEXT: xsadddp f3, f3, f4 ; PWR10LE-NEXT: xsadddp f2, f3, f2 ; PWR10LE-NEXT: xxswapd vs3, vs1 ; PWR10LE-NEXT: xsadddp f2, f2, f3 ; PWR10LE-NEXT: xsadddp f1, f2, f1 ; PWR10LE-NEXT: xxswapd vs2, vs0 ; PWR10LE-NEXT: xsadddp f1, f1, f2 ; PWR10LE-NEXT: xsadddp f1, f1, f0 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v64f64: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xxswapd v18, v2 ; PWR10BE-NEXT: lxv v17, 240(r1) ; PWR10BE-NEXT: lxv v16, 256(r1) ; PWR10BE-NEXT: xsadddp v2, v2, v18 ; PWR10BE-NEXT: lxv v15, 272(r1) ; PWR10BE-NEXT: lxv v14, 288(r1) ; PWR10BE-NEXT: lxv v1, 304(r1) ; PWR10BE-NEXT: lxv v0, 320(r1) ; PWR10BE-NEXT: lxv vs13, 336(r1) ; PWR10BE-NEXT: lxv vs12, 352(r1) ; PWR10BE-NEXT: lxv vs11, 368(r1) ; PWR10BE-NEXT: lxv vs10, 384(r1) ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v3 ; PWR10BE-NEXT: lxv vs9, 400(r1) ; PWR10BE-NEXT: lxv vs8, 416(r1) ; PWR10BE-NEXT: lxv vs7, 432(r1) ; PWR10BE-NEXT: lxv vs6, 448(r1) ; PWR10BE-NEXT: lxv vs5, 464(r1) ; PWR10BE-NEXT: lxv vs4, 480(r1) ; PWR10BE-NEXT: lxv vs3, 496(r1) ; PWR10BE-NEXT: lxv vs2, 512(r1) ; PWR10BE-NEXT: lxv vs1, 528(r1) ; PWR10BE-NEXT: lxv vs0, 544(r1) ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v4 ; PWR10BE-NEXT: xsadddp v2, v2, v4 ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v5 ; PWR10BE-NEXT: xsadddp v2, v2, v5 ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v6 ; PWR10BE-NEXT: xsadddp v2, v2, v6 ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v7 ; PWR10BE-NEXT: xsadddp v2, v2, v7 ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v8 ; PWR10BE-NEXT: xsadddp v2, v2, v8 ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v9 ; PWR10BE-NEXT: xsadddp v2, v2, v9 ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v10 ; PWR10BE-NEXT: xsadddp v2, v2, v10 ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v11 ; PWR10BE-NEXT: xsadddp v2, v2, v11 ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v12 ; PWR10BE-NEXT: xsadddp v2, v2, v12 ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v13 ; PWR10BE-NEXT: xsadddp v2, v2, v13 ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v17 ; PWR10BE-NEXT: xsadddp v2, v2, v17 ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v16 ; PWR10BE-NEXT: xsadddp v2, v2, v16 ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v15 ; PWR10BE-NEXT: xsadddp v2, v2, v15 ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v14 ; PWR10BE-NEXT: xsadddp v2, v2, v14 ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v1 ; PWR10BE-NEXT: xsadddp v2, v2, v1 ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xxswapd v3, v0 ; PWR10BE-NEXT: xsadddp v2, v2, v0 ; PWR10BE-NEXT: xsadddp v2, v2, v3 ; PWR10BE-NEXT: xsadddp v2, v2, f13 ; PWR10BE-NEXT: xxswapd vs13, vs13 ; PWR10BE-NEXT: xsadddp f13, v2, f13 ; PWR10BE-NEXT: xsadddp f13, f13, f12 ; PWR10BE-NEXT: xxswapd vs12, vs12 ; PWR10BE-NEXT: xsadddp f12, f13, f12 ; PWR10BE-NEXT: xsadddp f12, f12, f11 ; PWR10BE-NEXT: xxswapd vs11, vs11 ; PWR10BE-NEXT: xsadddp f11, f12, f11 ; PWR10BE-NEXT: xsadddp f11, f11, f10 ; PWR10BE-NEXT: xxswapd vs10, vs10 ; PWR10BE-NEXT: xsadddp f10, f11, f10 ; PWR10BE-NEXT: xsadddp f10, f10, f9 ; PWR10BE-NEXT: xxswapd vs9, vs9 ; PWR10BE-NEXT: xsadddp f9, f10, f9 ; PWR10BE-NEXT: xsadddp f9, f9, f8 ; PWR10BE-NEXT: xxswapd vs8, vs8 ; PWR10BE-NEXT: xsadddp f8, f9, f8 ; PWR10BE-NEXT: xsadddp f8, f8, f7 ; PWR10BE-NEXT: xxswapd vs7, vs7 ; PWR10BE-NEXT: xsadddp f7, f8, f7 ; PWR10BE-NEXT: xsadddp f7, f7, f6 ; PWR10BE-NEXT: xxswapd vs6, vs6 ; PWR10BE-NEXT: xsadddp f6, f7, f6 ; PWR10BE-NEXT: xsadddp f6, f6, f5 ; PWR10BE-NEXT: xxswapd vs5, vs5 ; PWR10BE-NEXT: xsadddp f5, f6, f5 ; PWR10BE-NEXT: xsadddp f5, f5, f4 ; PWR10BE-NEXT: xxswapd vs4, vs4 ; PWR10BE-NEXT: xsadddp f4, f5, f4 ; PWR10BE-NEXT: xsadddp f4, f4, f3 ; PWR10BE-NEXT: xxswapd vs3, vs3 ; PWR10BE-NEXT: xsadddp f3, f4, f3 ; PWR10BE-NEXT: xsadddp f3, f3, f2 ; PWR10BE-NEXT: xxswapd vs2, vs2 ; PWR10BE-NEXT: xsadddp f2, f3, f2 ; PWR10BE-NEXT: xsadddp f2, f2, f1 ; PWR10BE-NEXT: xxswapd vs1, vs1 ; PWR10BE-NEXT: xsadddp f1, f2, f1 ; PWR10BE-NEXT: xsadddp f1, f1, f0 ; PWR10BE-NEXT: xxswapd vs0, vs0 ; PWR10BE-NEXT: xsadddp f1, f1, f0 ; PWR10BE-NEXT: blr entry: %0 = call double @llvm.vector.reduce.fadd.v64f64(double -0.000000e+00, <64 x double> %a) ret double %0 } define dso_local double @v64f64_b(<64 x double> %a, double %b) local_unnamed_addr #0 { ; PWR9LE-LABEL: v64f64_b: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: xxswapd v19, v2 ; PWR9LE-NEXT: lxv v18, 224(r1) ; PWR9LE-NEXT: lxv v17, 240(r1) ; PWR9LE-NEXT: lxv v16, 256(r1) ; PWR9LE-NEXT: lxv v15, 272(r1) ; PWR9LE-NEXT: xsadddp f1, f1, v19 ; PWR9LE-NEXT: lxv v14, 288(r1) ; PWR9LE-NEXT: lxv v1, 304(r1) ; PWR9LE-NEXT: lxv v0, 320(r1) ; PWR9LE-NEXT: lxv vs13, 336(r1) ; PWR9LE-NEXT: lxv vs12, 352(r1) ; PWR9LE-NEXT: lxv vs11, 368(r1) ; PWR9LE-NEXT: lxv vs10, 384(r1) ; PWR9LE-NEXT: lxv vs9, 400(r1) ; PWR9LE-NEXT: lxv vs8, 416(r1) ; PWR9LE-NEXT: lxv vs7, 432(r1) ; PWR9LE-NEXT: lxv vs6, 448(r1) ; PWR9LE-NEXT: lxv vs5, 464(r1) ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v3 ; PWR9LE-NEXT: lxv vs4, 480(r1) ; PWR9LE-NEXT: lxv vs3, 496(r1) ; PWR9LE-NEXT: lxv vs2, 512(r1) ; PWR9LE-NEXT: lxv vs0, 528(r1) ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v4 ; PWR9LE-NEXT: xsadddp f1, f1, v3 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v5 ; PWR9LE-NEXT: xsadddp f1, f1, v4 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v6 ; PWR9LE-NEXT: xsadddp f1, f1, v5 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v7 ; PWR9LE-NEXT: xsadddp f1, f1, v6 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v8 ; PWR9LE-NEXT: xsadddp f1, f1, v7 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v9 ; PWR9LE-NEXT: xsadddp f1, f1, v8 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v10 ; PWR9LE-NEXT: xsadddp f1, f1, v9 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v11 ; PWR9LE-NEXT: xsadddp f1, f1, v10 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v12 ; PWR9LE-NEXT: xsadddp f1, f1, v11 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v13 ; PWR9LE-NEXT: xsadddp f1, f1, v12 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v18 ; PWR9LE-NEXT: xsadddp f1, f1, v13 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v17 ; PWR9LE-NEXT: xsadddp f1, f1, v18 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v16 ; PWR9LE-NEXT: xsadddp f1, f1, v17 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v15 ; PWR9LE-NEXT: xsadddp f1, f1, v16 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v14 ; PWR9LE-NEXT: xsadddp f1, f1, v15 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v1 ; PWR9LE-NEXT: xsadddp f1, f1, v14 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, v0 ; PWR9LE-NEXT: xsadddp f1, f1, v1 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xxswapd v2, vs13 ; PWR9LE-NEXT: xsadddp f1, f1, v0 ; PWR9LE-NEXT: xsadddp f1, f1, v2 ; PWR9LE-NEXT: xsadddp f1, f1, f13 ; PWR9LE-NEXT: xxswapd vs13, vs12 ; PWR9LE-NEXT: xsadddp f1, f1, f13 ; PWR9LE-NEXT: xsadddp f1, f1, f12 ; PWR9LE-NEXT: xxswapd vs12, vs11 ; PWR9LE-NEXT: xsadddp f1, f1, f12 ; PWR9LE-NEXT: xsadddp f1, f1, f11 ; PWR9LE-NEXT: xxswapd vs11, vs10 ; PWR9LE-NEXT: xsadddp f1, f1, f11 ; PWR9LE-NEXT: xsadddp f1, f1, f10 ; PWR9LE-NEXT: xxswapd vs10, vs9 ; PWR9LE-NEXT: xsadddp f1, f1, f10 ; PWR9LE-NEXT: xsadddp f1, f1, f9 ; PWR9LE-NEXT: xxswapd vs9, vs8 ; PWR9LE-NEXT: xsadddp f1, f1, f9 ; PWR9LE-NEXT: xsadddp f1, f1, f8 ; PWR9LE-NEXT: xxswapd vs8, vs7 ; PWR9LE-NEXT: xsadddp f1, f1, f8 ; PWR9LE-NEXT: xsadddp f1, f1, f7 ; PWR9LE-NEXT: xxswapd vs7, vs6 ; PWR9LE-NEXT: xsadddp f1, f1, f7 ; PWR9LE-NEXT: xsadddp f1, f1, f6 ; PWR9LE-NEXT: xxswapd vs6, vs5 ; PWR9LE-NEXT: xsadddp f1, f1, f6 ; PWR9LE-NEXT: xsadddp f1, f1, f5 ; PWR9LE-NEXT: xxswapd vs5, vs4 ; PWR9LE-NEXT: xsadddp f1, f1, f5 ; PWR9LE-NEXT: xsadddp f1, f1, f4 ; PWR9LE-NEXT: xxswapd vs4, vs3 ; PWR9LE-NEXT: xsadddp f1, f1, f4 ; PWR9LE-NEXT: xsadddp f1, f1, f3 ; PWR9LE-NEXT: xxswapd vs3, vs2 ; PWR9LE-NEXT: xsadddp f1, f1, f3 ; PWR9LE-NEXT: xsadddp f1, f1, f2 ; PWR9LE-NEXT: xxswapd vs2, vs0 ; PWR9LE-NEXT: xsadddp f1, f1, f2 ; PWR9LE-NEXT: xsadddp f1, f1, f0 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v64f64_b: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v2 ; PWR9BE-NEXT: lxv v18, 240(r1) ; PWR9BE-NEXT: lxv v17, 256(r1) ; PWR9BE-NEXT: lxv v16, 272(r1) ; PWR9BE-NEXT: lxv v15, 288(r1) ; PWR9BE-NEXT: lxv v14, 304(r1) ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v3 ; PWR9BE-NEXT: lxv v1, 320(r1) ; PWR9BE-NEXT: lxv v0, 336(r1) ; PWR9BE-NEXT: lxv vs13, 352(r1) ; PWR9BE-NEXT: lxv vs12, 368(r1) ; PWR9BE-NEXT: lxv vs11, 384(r1) ; PWR9BE-NEXT: lxv vs10, 400(r1) ; PWR9BE-NEXT: lxv vs9, 416(r1) ; PWR9BE-NEXT: lxv vs8, 432(r1) ; PWR9BE-NEXT: lxv vs7, 448(r1) ; PWR9BE-NEXT: lxv vs6, 464(r1) ; PWR9BE-NEXT: lxv vs5, 480(r1) ; PWR9BE-NEXT: lxv vs4, 496(r1) ; PWR9BE-NEXT: lxv vs3, 512(r1) ; PWR9BE-NEXT: lxv vs2, 528(r1) ; PWR9BE-NEXT: lxv vs0, 544(r1) ; PWR9BE-NEXT: xsadddp f1, f1, v3 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v4 ; PWR9BE-NEXT: xsadddp f1, f1, v4 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v5 ; PWR9BE-NEXT: xsadddp f1, f1, v5 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v6 ; PWR9BE-NEXT: xsadddp f1, f1, v6 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v7 ; PWR9BE-NEXT: xsadddp f1, f1, v7 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v8 ; PWR9BE-NEXT: xsadddp f1, f1, v8 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v9 ; PWR9BE-NEXT: xsadddp f1, f1, v9 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v10 ; PWR9BE-NEXT: xsadddp f1, f1, v10 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v11 ; PWR9BE-NEXT: xsadddp f1, f1, v11 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v12 ; PWR9BE-NEXT: xsadddp f1, f1, v12 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v13 ; PWR9BE-NEXT: xsadddp f1, f1, v13 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v18 ; PWR9BE-NEXT: xsadddp f1, f1, v18 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v17 ; PWR9BE-NEXT: xsadddp f1, f1, v17 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v16 ; PWR9BE-NEXT: xsadddp f1, f1, v16 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v15 ; PWR9BE-NEXT: xsadddp f1, f1, v15 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v14 ; PWR9BE-NEXT: xsadddp f1, f1, v14 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v1 ; PWR9BE-NEXT: xsadddp f1, f1, v1 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xxswapd v2, v0 ; PWR9BE-NEXT: xsadddp f1, f1, v0 ; PWR9BE-NEXT: xsadddp f1, f1, v2 ; PWR9BE-NEXT: xsadddp f1, f1, f13 ; PWR9BE-NEXT: xxswapd vs13, vs13 ; PWR9BE-NEXT: xsadddp f1, f1, f13 ; PWR9BE-NEXT: xsadddp f1, f1, f12 ; PWR9BE-NEXT: xxswapd vs12, vs12 ; PWR9BE-NEXT: xsadddp f1, f1, f12 ; PWR9BE-NEXT: xsadddp f1, f1, f11 ; PWR9BE-NEXT: xxswapd vs11, vs11 ; PWR9BE-NEXT: xsadddp f1, f1, f11 ; PWR9BE-NEXT: xsadddp f1, f1, f10 ; PWR9BE-NEXT: xxswapd vs10, vs10 ; PWR9BE-NEXT: xsadddp f1, f1, f10 ; PWR9BE-NEXT: xsadddp f1, f1, f9 ; PWR9BE-NEXT: xxswapd vs9, vs9 ; PWR9BE-NEXT: xsadddp f1, f1, f9 ; PWR9BE-NEXT: xsadddp f1, f1, f8 ; PWR9BE-NEXT: xxswapd vs8, vs8 ; PWR9BE-NEXT: xsadddp f1, f1, f8 ; PWR9BE-NEXT: xsadddp f1, f1, f7 ; PWR9BE-NEXT: xxswapd vs7, vs7 ; PWR9BE-NEXT: xsadddp f1, f1, f7 ; PWR9BE-NEXT: xsadddp f1, f1, f6 ; PWR9BE-NEXT: xxswapd vs6, vs6 ; PWR9BE-NEXT: xsadddp f1, f1, f6 ; PWR9BE-NEXT: xsadddp f1, f1, f5 ; PWR9BE-NEXT: xxswapd vs5, vs5 ; PWR9BE-NEXT: xsadddp f1, f1, f5 ; PWR9BE-NEXT: xsadddp f1, f1, f4 ; PWR9BE-NEXT: xxswapd vs4, vs4 ; PWR9BE-NEXT: xsadddp f1, f1, f4 ; PWR9BE-NEXT: xsadddp f1, f1, f3 ; PWR9BE-NEXT: xxswapd vs3, vs3 ; PWR9BE-NEXT: xsadddp f1, f1, f3 ; PWR9BE-NEXT: xsadddp f1, f1, f2 ; PWR9BE-NEXT: xxswapd vs2, vs2 ; PWR9BE-NEXT: xsadddp f1, f1, f2 ; PWR9BE-NEXT: xsadddp f1, f1, f0 ; PWR9BE-NEXT: xxswapd vs0, vs0 ; PWR9BE-NEXT: xsadddp f1, f1, f0 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v64f64_b: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: xxswapd v19, v2 ; PWR10LE-NEXT: lxv v18, 224(r1) ; PWR10LE-NEXT: lxv v17, 240(r1) ; PWR10LE-NEXT: xsadddp f1, f1, v19 ; PWR10LE-NEXT: lxv v16, 256(r1) ; PWR10LE-NEXT: lxv v15, 272(r1) ; PWR10LE-NEXT: lxv v14, 288(r1) ; PWR10LE-NEXT: lxv v1, 304(r1) ; PWR10LE-NEXT: lxv v0, 320(r1) ; PWR10LE-NEXT: lxv vs13, 336(r1) ; PWR10LE-NEXT: lxv vs12, 352(r1) ; PWR10LE-NEXT: lxv vs11, 368(r1) ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v3 ; PWR10LE-NEXT: lxv vs10, 384(r1) ; PWR10LE-NEXT: lxv vs9, 400(r1) ; PWR10LE-NEXT: lxv vs8, 416(r1) ; PWR10LE-NEXT: lxv vs7, 432(r1) ; PWR10LE-NEXT: lxv vs6, 448(r1) ; PWR10LE-NEXT: lxv vs5, 464(r1) ; PWR10LE-NEXT: lxv vs4, 480(r1) ; PWR10LE-NEXT: lxv vs3, 496(r1) ; PWR10LE-NEXT: lxv vs2, 512(r1) ; PWR10LE-NEXT: lxv vs0, 528(r1) ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v4 ; PWR10LE-NEXT: xsadddp f1, f1, v3 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v5 ; PWR10LE-NEXT: xsadddp f1, f1, v4 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v6 ; PWR10LE-NEXT: xsadddp f1, f1, v5 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v7 ; PWR10LE-NEXT: xsadddp f1, f1, v6 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v8 ; PWR10LE-NEXT: xsadddp f1, f1, v7 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v9 ; PWR10LE-NEXT: xsadddp f1, f1, v8 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v10 ; PWR10LE-NEXT: xsadddp f1, f1, v9 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v11 ; PWR10LE-NEXT: xsadddp f1, f1, v10 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v12 ; PWR10LE-NEXT: xsadddp f1, f1, v11 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v13 ; PWR10LE-NEXT: xsadddp f1, f1, v12 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v18 ; PWR10LE-NEXT: xsadddp f1, f1, v13 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v17 ; PWR10LE-NEXT: xsadddp f1, f1, v18 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v16 ; PWR10LE-NEXT: xsadddp f1, f1, v17 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v15 ; PWR10LE-NEXT: xsadddp f1, f1, v16 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v14 ; PWR10LE-NEXT: xsadddp f1, f1, v15 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v1 ; PWR10LE-NEXT: xsadddp f1, f1, v14 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, v0 ; PWR10LE-NEXT: xsadddp f1, f1, v1 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xxswapd v2, vs13 ; PWR10LE-NEXT: xsadddp f1, f1, v0 ; PWR10LE-NEXT: xsadddp f1, f1, v2 ; PWR10LE-NEXT: xsadddp f1, f1, f13 ; PWR10LE-NEXT: xxswapd vs13, vs12 ; PWR10LE-NEXT: xsadddp f1, f1, f13 ; PWR10LE-NEXT: xsadddp f1, f1, f12 ; PWR10LE-NEXT: xxswapd vs12, vs11 ; PWR10LE-NEXT: xsadddp f1, f1, f12 ; PWR10LE-NEXT: xsadddp f1, f1, f11 ; PWR10LE-NEXT: xxswapd vs11, vs10 ; PWR10LE-NEXT: xsadddp f1, f1, f11 ; PWR10LE-NEXT: xsadddp f1, f1, f10 ; PWR10LE-NEXT: xxswapd vs10, vs9 ; PWR10LE-NEXT: xsadddp f1, f1, f10 ; PWR10LE-NEXT: xsadddp f1, f1, f9 ; PWR10LE-NEXT: xxswapd vs9, vs8 ; PWR10LE-NEXT: xsadddp f1, f1, f9 ; PWR10LE-NEXT: xsadddp f1, f1, f8 ; PWR10LE-NEXT: xxswapd vs8, vs7 ; PWR10LE-NEXT: xsadddp f1, f1, f8 ; PWR10LE-NEXT: xsadddp f1, f1, f7 ; PWR10LE-NEXT: xxswapd vs7, vs6 ; PWR10LE-NEXT: xsadddp f1, f1, f7 ; PWR10LE-NEXT: xsadddp f1, f1, f6 ; PWR10LE-NEXT: xxswapd vs6, vs5 ; PWR10LE-NEXT: xsadddp f1, f1, f6 ; PWR10LE-NEXT: xsadddp f1, f1, f5 ; PWR10LE-NEXT: xxswapd vs5, vs4 ; PWR10LE-NEXT: xsadddp f1, f1, f5 ; PWR10LE-NEXT: xsadddp f1, f1, f4 ; PWR10LE-NEXT: xxswapd vs4, vs3 ; PWR10LE-NEXT: xsadddp f1, f1, f4 ; PWR10LE-NEXT: xsadddp f1, f1, f3 ; PWR10LE-NEXT: xxswapd vs3, vs2 ; PWR10LE-NEXT: xsadddp f1, f1, f3 ; PWR10LE-NEXT: xsadddp f1, f1, f2 ; PWR10LE-NEXT: xxswapd vs2, vs0 ; PWR10LE-NEXT: xsadddp f1, f1, f2 ; PWR10LE-NEXT: xsadddp f1, f1, f0 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v64f64_b: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v2 ; PWR10BE-NEXT: lxv v18, 240(r1) ; PWR10BE-NEXT: lxv v17, 256(r1) ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v3 ; PWR10BE-NEXT: lxv v16, 272(r1) ; PWR10BE-NEXT: lxv v15, 288(r1) ; PWR10BE-NEXT: lxv v14, 304(r1) ; PWR10BE-NEXT: lxv v1, 320(r1) ; PWR10BE-NEXT: lxv v0, 336(r1) ; PWR10BE-NEXT: lxv vs13, 352(r1) ; PWR10BE-NEXT: lxv vs12, 368(r1) ; PWR10BE-NEXT: lxv vs11, 384(r1) ; PWR10BE-NEXT: lxv vs10, 400(r1) ; PWR10BE-NEXT: lxv vs9, 416(r1) ; PWR10BE-NEXT: xsadddp f1, f1, v3 ; PWR10BE-NEXT: lxv vs8, 432(r1) ; PWR10BE-NEXT: lxv vs7, 448(r1) ; PWR10BE-NEXT: lxv vs6, 464(r1) ; PWR10BE-NEXT: lxv vs5, 480(r1) ; PWR10BE-NEXT: lxv vs4, 496(r1) ; PWR10BE-NEXT: lxv vs3, 512(r1) ; PWR10BE-NEXT: lxv vs2, 528(r1) ; PWR10BE-NEXT: lxv vs0, 544(r1) ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v4 ; PWR10BE-NEXT: xsadddp f1, f1, v4 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v5 ; PWR10BE-NEXT: xsadddp f1, f1, v5 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v6 ; PWR10BE-NEXT: xsadddp f1, f1, v6 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v7 ; PWR10BE-NEXT: xsadddp f1, f1, v7 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v8 ; PWR10BE-NEXT: xsadddp f1, f1, v8 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v9 ; PWR10BE-NEXT: xsadddp f1, f1, v9 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v10 ; PWR10BE-NEXT: xsadddp f1, f1, v10 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v11 ; PWR10BE-NEXT: xsadddp f1, f1, v11 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v12 ; PWR10BE-NEXT: xsadddp f1, f1, v12 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v13 ; PWR10BE-NEXT: xsadddp f1, f1, v13 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v18 ; PWR10BE-NEXT: xsadddp f1, f1, v18 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v17 ; PWR10BE-NEXT: xsadddp f1, f1, v17 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v16 ; PWR10BE-NEXT: xsadddp f1, f1, v16 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v15 ; PWR10BE-NEXT: xsadddp f1, f1, v15 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v14 ; PWR10BE-NEXT: xsadddp f1, f1, v14 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v1 ; PWR10BE-NEXT: xsadddp f1, f1, v1 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xxswapd v2, v0 ; PWR10BE-NEXT: xsadddp f1, f1, v0 ; PWR10BE-NEXT: xsadddp f1, f1, v2 ; PWR10BE-NEXT: xsadddp f1, f1, f13 ; PWR10BE-NEXT: xxswapd vs13, vs13 ; PWR10BE-NEXT: xsadddp f1, f1, f13 ; PWR10BE-NEXT: xsadddp f1, f1, f12 ; PWR10BE-NEXT: xxswapd vs12, vs12 ; PWR10BE-NEXT: xsadddp f1, f1, f12 ; PWR10BE-NEXT: xsadddp f1, f1, f11 ; PWR10BE-NEXT: xxswapd vs11, vs11 ; PWR10BE-NEXT: xsadddp f1, f1, f11 ; PWR10BE-NEXT: xsadddp f1, f1, f10 ; PWR10BE-NEXT: xxswapd vs10, vs10 ; PWR10BE-NEXT: xsadddp f1, f1, f10 ; PWR10BE-NEXT: xsadddp f1, f1, f9 ; PWR10BE-NEXT: xxswapd vs9, vs9 ; PWR10BE-NEXT: xsadddp f1, f1, f9 ; PWR10BE-NEXT: xsadddp f1, f1, f8 ; PWR10BE-NEXT: xxswapd vs8, vs8 ; PWR10BE-NEXT: xsadddp f1, f1, f8 ; PWR10BE-NEXT: xsadddp f1, f1, f7 ; PWR10BE-NEXT: xxswapd vs7, vs7 ; PWR10BE-NEXT: xsadddp f1, f1, f7 ; PWR10BE-NEXT: xsadddp f1, f1, f6 ; PWR10BE-NEXT: xxswapd vs6, vs6 ; PWR10BE-NEXT: xsadddp f1, f1, f6 ; PWR10BE-NEXT: xsadddp f1, f1, f5 ; PWR10BE-NEXT: xxswapd vs5, vs5 ; PWR10BE-NEXT: xsadddp f1, f1, f5 ; PWR10BE-NEXT: xsadddp f1, f1, f4 ; PWR10BE-NEXT: xxswapd vs4, vs4 ; PWR10BE-NEXT: xsadddp f1, f1, f4 ; PWR10BE-NEXT: xsadddp f1, f1, f3 ; PWR10BE-NEXT: xxswapd vs3, vs3 ; PWR10BE-NEXT: xsadddp f1, f1, f3 ; PWR10BE-NEXT: xsadddp f1, f1, f2 ; PWR10BE-NEXT: xxswapd vs2, vs2 ; PWR10BE-NEXT: xsadddp f1, f1, f2 ; PWR10BE-NEXT: xsadddp f1, f1, f0 ; PWR10BE-NEXT: xxswapd vs0, vs0 ; PWR10BE-NEXT: xsadddp f1, f1, f0 ; PWR10BE-NEXT: blr entry: %0 = call double @llvm.vector.reduce.fadd.v64f64(double %b, <64 x double> %a) ret double %0 } define dso_local double @v64f64_fast(<64 x double> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v64f64_fast: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: lxv vs0, 368(r1) ; PWR9LE-NEXT: lxv vs1, 496(r1) ; PWR9LE-NEXT: lxv vs2, 240(r1) ; PWR9LE-NEXT: lxv vs3, 304(r1) ; PWR9LE-NEXT: xvadddp vs3, v3, vs3 ; PWR9LE-NEXT: lxv vs4, 432(r1) ; PWR9LE-NEXT: lxv vs5, 400(r1) ; PWR9LE-NEXT: lxv vs6, 528(r1) ; PWR9LE-NEXT: lxv vs7, 272(r1) ; PWR9LE-NEXT: lxv vs8, 336(r1) ; PWR9LE-NEXT: lxv vs9, 464(r1) ; PWR9LE-NEXT: lxv vs10, 352(r1) ; PWR9LE-NEXT: lxv vs11, 480(r1) ; PWR9LE-NEXT: lxv vs12, 224(r1) ; PWR9LE-NEXT: lxv vs13, 288(r1) ; PWR9LE-NEXT: lxv v0, 416(r1) ; PWR9LE-NEXT: lxv v1, 384(r1) ; PWR9LE-NEXT: lxv v14, 512(r1) ; PWR9LE-NEXT: lxv v15, 256(r1) ; PWR9LE-NEXT: lxv v16, 320(r1) ; PWR9LE-NEXT: lxv v17, 448(r1) ; PWR9LE-NEXT: xvadddp v12, v12, v17 ; PWR9LE-NEXT: xvadddp v4, v4, v16 ; PWR9LE-NEXT: xvadddp v14, v15, v14 ; PWR9LE-NEXT: xvadddp v1, v8, v1 ; PWR9LE-NEXT: xvadddp v0, v10, v0 ; PWR9LE-NEXT: xvadddp vs13, v2, vs13 ; PWR9LE-NEXT: xvadddp vs11, vs12, vs11 ; PWR9LE-NEXT: xvadddp vs10, v6, vs10 ; PWR9LE-NEXT: xvadddp vs9, v13, vs9 ; PWR9LE-NEXT: xvadddp vs8, v5, vs8 ; PWR9LE-NEXT: xvadddp vs6, vs7, vs6 ; PWR9LE-NEXT: xvadddp vs5, v9, vs5 ; PWR9LE-NEXT: xvadddp vs4, v11, vs4 ; PWR9LE-NEXT: xvadddp vs1, vs2, vs1 ; PWR9LE-NEXT: xvadddp vs0, v7, vs0 ; PWR9LE-NEXT: xvadddp vs0, vs0, vs1 ; PWR9LE-NEXT: xvadddp vs1, vs3, vs4 ; PWR9LE-NEXT: xvadddp vs2, vs5, vs6 ; PWR9LE-NEXT: xvadddp vs3, vs8, vs9 ; PWR9LE-NEXT: xvadddp vs4, vs10, vs11 ; PWR9LE-NEXT: xvadddp vs5, vs13, v0 ; PWR9LE-NEXT: xvadddp vs6, v1, v14 ; PWR9LE-NEXT: xvadddp vs7, v4, v12 ; PWR9LE-NEXT: xvadddp vs6, vs7, vs6 ; PWR9LE-NEXT: xvadddp vs4, vs5, vs4 ; PWR9LE-NEXT: xvadddp vs2, vs3, vs2 ; PWR9LE-NEXT: xvadddp vs0, vs1, vs0 ; PWR9LE-NEXT: xvadddp vs0, vs0, vs2 ; PWR9LE-NEXT: xvadddp vs1, vs4, vs6 ; PWR9LE-NEXT: xvadddp vs0, vs1, vs0 ; PWR9LE-NEXT: xxswapd vs1, vs0 ; PWR9LE-NEXT: xvadddp vs0, vs0, vs1 ; PWR9LE-NEXT: xxswapd vs1, vs0 ; PWR9LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v64f64_fast: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: lxv vs0, 384(r1) ; PWR9BE-NEXT: lxv vs1, 512(r1) ; PWR9BE-NEXT: lxv vs2, 256(r1) ; PWR9BE-NEXT: lxv vs3, 320(r1) ; PWR9BE-NEXT: xvadddp vs3, v3, vs3 ; PWR9BE-NEXT: lxv vs4, 448(r1) ; PWR9BE-NEXT: lxv vs5, 416(r1) ; PWR9BE-NEXT: lxv vs6, 544(r1) ; PWR9BE-NEXT: lxv vs7, 288(r1) ; PWR9BE-NEXT: lxv vs8, 352(r1) ; PWR9BE-NEXT: lxv vs9, 480(r1) ; PWR9BE-NEXT: lxv vs10, 368(r1) ; PWR9BE-NEXT: lxv vs11, 496(r1) ; PWR9BE-NEXT: lxv vs12, 240(r1) ; PWR9BE-NEXT: lxv vs13, 304(r1) ; PWR9BE-NEXT: lxv v0, 432(r1) ; PWR9BE-NEXT: lxv v1, 400(r1) ; PWR9BE-NEXT: lxv v14, 528(r1) ; PWR9BE-NEXT: lxv v15, 272(r1) ; PWR9BE-NEXT: lxv v16, 336(r1) ; PWR9BE-NEXT: lxv v17, 464(r1) ; PWR9BE-NEXT: xvadddp v12, v12, v17 ; PWR9BE-NEXT: xvadddp v4, v4, v16 ; PWR9BE-NEXT: xvadddp v14, v15, v14 ; PWR9BE-NEXT: xvadddp v1, v8, v1 ; PWR9BE-NEXT: xvadddp v0, v10, v0 ; PWR9BE-NEXT: xvadddp vs13, v2, vs13 ; PWR9BE-NEXT: xvadddp vs11, vs12, vs11 ; PWR9BE-NEXT: xvadddp vs10, v6, vs10 ; PWR9BE-NEXT: xvadddp vs9, v13, vs9 ; PWR9BE-NEXT: xvadddp vs8, v5, vs8 ; PWR9BE-NEXT: xvadddp vs6, vs7, vs6 ; PWR9BE-NEXT: xvadddp vs5, v9, vs5 ; PWR9BE-NEXT: xvadddp vs4, v11, vs4 ; PWR9BE-NEXT: xvadddp vs1, vs2, vs1 ; PWR9BE-NEXT: xvadddp vs0, v7, vs0 ; PWR9BE-NEXT: xvadddp vs0, vs0, vs1 ; PWR9BE-NEXT: xvadddp vs1, vs3, vs4 ; PWR9BE-NEXT: xvadddp vs2, vs5, vs6 ; PWR9BE-NEXT: xvadddp vs3, vs8, vs9 ; PWR9BE-NEXT: xvadddp vs4, vs10, vs11 ; PWR9BE-NEXT: xvadddp vs5, vs13, v0 ; PWR9BE-NEXT: xvadddp vs6, v1, v14 ; PWR9BE-NEXT: xvadddp vs7, v4, v12 ; PWR9BE-NEXT: xvadddp vs6, vs7, vs6 ; PWR9BE-NEXT: xvadddp vs4, vs5, vs4 ; PWR9BE-NEXT: xvadddp vs2, vs3, vs2 ; PWR9BE-NEXT: xvadddp vs0, vs1, vs0 ; PWR9BE-NEXT: xvadddp vs0, vs0, vs2 ; PWR9BE-NEXT: xvadddp vs1, vs4, vs6 ; PWR9BE-NEXT: xvadddp vs0, vs1, vs0 ; PWR9BE-NEXT: xxswapd vs1, vs0 ; PWR9BE-NEXT: xvadddp vs1, vs0, vs1 ; PWR9BE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v64f64_fast: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: lxv vs0, 368(r1) ; PWR10LE-NEXT: lxv vs1, 496(r1) ; PWR10LE-NEXT: xvadddp vs0, v7, vs0 ; PWR10LE-NEXT: lxv vs2, 240(r1) ; PWR10LE-NEXT: lxv vs3, 304(r1) ; PWR10LE-NEXT: lxv vs4, 432(r1) ; PWR10LE-NEXT: lxv vs5, 400(r1) ; PWR10LE-NEXT: lxv vs6, 528(r1) ; PWR10LE-NEXT: lxv vs7, 272(r1) ; PWR10LE-NEXT: lxv vs8, 336(r1) ; PWR10LE-NEXT: lxv vs9, 464(r1) ; PWR10LE-NEXT: lxv vs10, 352(r1) ; PWR10LE-NEXT: lxv vs11, 480(r1) ; PWR10LE-NEXT: lxv vs12, 224(r1) ; PWR10LE-NEXT: lxv vs13, 288(r1) ; PWR10LE-NEXT: xvadddp vs13, v2, vs13 ; PWR10LE-NEXT: xvadddp vs11, vs12, vs11 ; PWR10LE-NEXT: xvadddp vs10, v6, vs10 ; PWR10LE-NEXT: xvadddp vs9, v13, vs9 ; PWR10LE-NEXT: xvadddp vs8, v5, vs8 ; PWR10LE-NEXT: xvadddp vs6, vs7, vs6 ; PWR10LE-NEXT: xvadddp vs5, v9, vs5 ; PWR10LE-NEXT: xvadddp vs4, v11, vs4 ; PWR10LE-NEXT: xvadddp vs3, v3, vs3 ; PWR10LE-NEXT: xvadddp vs1, vs2, vs1 ; PWR10LE-NEXT: xvadddp vs0, vs0, vs1 ; PWR10LE-NEXT: lxv v0, 416(r1) ; PWR10LE-NEXT: lxv v1, 384(r1) ; PWR10LE-NEXT: lxv v14, 512(r1) ; PWR10LE-NEXT: lxv v15, 256(r1) ; PWR10LE-NEXT: lxv v16, 320(r1) ; PWR10LE-NEXT: lxv v17, 448(r1) ; PWR10LE-NEXT: xvadddp v12, v12, v17 ; PWR10LE-NEXT: xvadddp v4, v4, v16 ; PWR10LE-NEXT: xvadddp v14, v15, v14 ; PWR10LE-NEXT: xvadddp v1, v8, v1 ; PWR10LE-NEXT: xvadddp v0, v10, v0 ; PWR10LE-NEXT: xvadddp vs1, vs3, vs4 ; PWR10LE-NEXT: xvadddp vs2, vs5, vs6 ; PWR10LE-NEXT: xvadddp vs3, vs8, vs9 ; PWR10LE-NEXT: xvadddp vs4, vs10, vs11 ; PWR10LE-NEXT: xvadddp vs5, vs13, v0 ; PWR10LE-NEXT: xvadddp vs6, v1, v14 ; PWR10LE-NEXT: xvadddp vs7, v4, v12 ; PWR10LE-NEXT: xvadddp vs6, vs7, vs6 ; PWR10LE-NEXT: xvadddp vs4, vs5, vs4 ; PWR10LE-NEXT: xvadddp vs2, vs3, vs2 ; PWR10LE-NEXT: xvadddp vs0, vs1, vs0 ; PWR10LE-NEXT: xvadddp vs0, vs0, vs2 ; PWR10LE-NEXT: xvadddp vs1, vs4, vs6 ; PWR10LE-NEXT: xvadddp vs0, vs1, vs0 ; PWR10LE-NEXT: xxswapd vs1, vs0 ; PWR10LE-NEXT: xvadddp vs0, vs0, vs1 ; PWR10LE-NEXT: xxswapd vs1, vs0 ; PWR10LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v64f64_fast: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: lxv vs0, 384(r1) ; PWR10BE-NEXT: lxv vs1, 512(r1) ; PWR10BE-NEXT: xvadddp vs0, v7, vs0 ; PWR10BE-NEXT: lxv vs2, 256(r1) ; PWR10BE-NEXT: lxv vs3, 320(r1) ; PWR10BE-NEXT: lxv vs4, 448(r1) ; PWR10BE-NEXT: lxv vs5, 416(r1) ; PWR10BE-NEXT: lxv vs6, 544(r1) ; PWR10BE-NEXT: lxv vs7, 288(r1) ; PWR10BE-NEXT: lxv vs8, 352(r1) ; PWR10BE-NEXT: lxv vs9, 480(r1) ; PWR10BE-NEXT: lxv vs10, 368(r1) ; PWR10BE-NEXT: lxv vs11, 496(r1) ; PWR10BE-NEXT: lxv vs12, 240(r1) ; PWR10BE-NEXT: lxv vs13, 304(r1) ; PWR10BE-NEXT: xvadddp vs13, v2, vs13 ; PWR10BE-NEXT: xvadddp vs11, vs12, vs11 ; PWR10BE-NEXT: xvadddp vs10, v6, vs10 ; PWR10BE-NEXT: xvadddp vs9, v13, vs9 ; PWR10BE-NEXT: xvadddp vs8, v5, vs8 ; PWR10BE-NEXT: xvadddp vs6, vs7, vs6 ; PWR10BE-NEXT: xvadddp vs5, v9, vs5 ; PWR10BE-NEXT: xvadddp vs4, v11, vs4 ; PWR10BE-NEXT: xvadddp vs3, v3, vs3 ; PWR10BE-NEXT: xvadddp vs1, vs2, vs1 ; PWR10BE-NEXT: xvadddp vs0, vs0, vs1 ; PWR10BE-NEXT: lxv v0, 432(r1) ; PWR10BE-NEXT: lxv v1, 400(r1) ; PWR10BE-NEXT: lxv v14, 528(r1) ; PWR10BE-NEXT: lxv v15, 272(r1) ; PWR10BE-NEXT: lxv v16, 336(r1) ; PWR10BE-NEXT: lxv v17, 464(r1) ; PWR10BE-NEXT: xvadddp v12, v12, v17 ; PWR10BE-NEXT: xvadddp v4, v4, v16 ; PWR10BE-NEXT: xvadddp v14, v15, v14 ; PWR10BE-NEXT: xvadddp v1, v8, v1 ; PWR10BE-NEXT: xvadddp v0, v10, v0 ; PWR10BE-NEXT: xvadddp vs1, vs3, vs4 ; PWR10BE-NEXT: xvadddp vs2, vs5, vs6 ; PWR10BE-NEXT: xvadddp vs3, vs8, vs9 ; PWR10BE-NEXT: xvadddp vs4, vs10, vs11 ; PWR10BE-NEXT: xvadddp vs5, vs13, v0 ; PWR10BE-NEXT: xvadddp vs6, v1, v14 ; PWR10BE-NEXT: xvadddp vs7, v4, v12 ; PWR10BE-NEXT: xvadddp vs6, vs7, vs6 ; PWR10BE-NEXT: xvadddp vs4, vs5, vs4 ; PWR10BE-NEXT: xvadddp vs2, vs3, vs2 ; PWR10BE-NEXT: xvadddp vs0, vs1, vs0 ; PWR10BE-NEXT: xvadddp vs0, vs0, vs2 ; PWR10BE-NEXT: xvadddp vs1, vs4, vs6 ; PWR10BE-NEXT: xvadddp vs0, vs1, vs0 ; PWR10BE-NEXT: xxswapd vs1, vs0 ; PWR10BE-NEXT: xvadddp vs1, vs0, vs1 ; PWR10BE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR10BE-NEXT: blr entry: %0 = call fast double @llvm.vector.reduce.fadd.v64f64(double -0.000000e+00, <64 x double> %a) ret double %0 } declare double @llvm.vector.reduce.fadd.v2f64(double, <2 x double>) #0 declare double @llvm.vector.reduce.fadd.v4f64(double, <4 x double>) #0 declare double @llvm.vector.reduce.fadd.v8f64(double, <8 x double>) #0 declare double @llvm.vector.reduce.fadd.v16f64(double, <16 x double>) #0 declare double @llvm.vector.reduce.fadd.v32f64(double, <32 x double>) #0 declare double @llvm.vector.reduce.fadd.v64f64(double, <64 x double>) #0 ;; ;; Vectors of ppc_fp128 ;; define dso_local ppc_fp128 @v2ppcf128(<2 x ppc_fp128> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v2ppcf128: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: mflr r0 ; PWR9LE-NEXT: std r0, 16(r1) ; PWR9LE-NEXT: stdu r1, -32(r1) ; PWR9LE-NEXT: bl __gcc_qadd ; PWR9LE-NEXT: nop ; PWR9LE-NEXT: addi r1, r1, 32 ; PWR9LE-NEXT: ld r0, 16(r1) ; PWR9LE-NEXT: mtlr r0 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v2ppcf128: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: mflr r0 ; PWR9BE-NEXT: std r0, 16(r1) ; PWR9BE-NEXT: stdu r1, -112(r1) ; PWR9BE-NEXT: bl __gcc_qadd ; PWR9BE-NEXT: nop ; PWR9BE-NEXT: addi r1, r1, 112 ; PWR9BE-NEXT: ld r0, 16(r1) ; PWR9BE-NEXT: mtlr r0 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v2ppcf128: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: mflr r0 ; PWR10LE-NEXT: std r0, 16(r1) ; PWR10LE-NEXT: stdu r1, -32(r1) ; PWR10LE-NEXT: bl __gcc_qadd@notoc ; PWR10LE-NEXT: addi r1, r1, 32 ; PWR10LE-NEXT: ld r0, 16(r1) ; PWR10LE-NEXT: mtlr r0 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v2ppcf128: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: mflr r0 ; PWR10BE-NEXT: std r0, 16(r1) ; PWR10BE-NEXT: stdu r1, -112(r1) ; PWR10BE-NEXT: bl __gcc_qadd ; PWR10BE-NEXT: nop ; PWR10BE-NEXT: addi r1, r1, 112 ; PWR10BE-NEXT: ld r0, 16(r1) ; PWR10BE-NEXT: mtlr r0 ; PWR10BE-NEXT: blr entry: %0 = call ppc_fp128 @llvm.vector.reduce.fadd.v2ppcf128(ppc_fp128 0xM80000000000000000000000000000000, <2 x ppc_fp128> %a) ret ppc_fp128 %0 } define dso_local ppc_fp128 @v2ppcf128_b(<2 x ppc_fp128> %a, ppc_fp128 %b) local_unnamed_addr #0 { ; PWR9LE-LABEL: v2ppcf128_b: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: mflr r0 ; PWR9LE-NEXT: stfd f30, -16(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: std r0, 16(r1) ; PWR9LE-NEXT: stdu r1, -48(r1) ; PWR9LE-NEXT: fmr f31, f4 ; PWR9LE-NEXT: fmr f30, f3 ; PWR9LE-NEXT: fmr f4, f2 ; PWR9LE-NEXT: fmr f3, f1 ; PWR9LE-NEXT: fmr f1, f5 ; PWR9LE-NEXT: fmr f2, f6 ; PWR9LE-NEXT: bl __gcc_qadd ; PWR9LE-NEXT: nop ; PWR9LE-NEXT: fmr f3, f30 ; PWR9LE-NEXT: fmr f4, f31 ; PWR9LE-NEXT: bl __gcc_qadd ; PWR9LE-NEXT: nop ; PWR9LE-NEXT: addi r1, r1, 48 ; PWR9LE-NEXT: ld r0, 16(r1) ; PWR9LE-NEXT: lfd f31, -8(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: lfd f30, -16(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: mtlr r0 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v2ppcf128_b: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: mflr r0 ; PWR9BE-NEXT: std r0, 16(r1) ; PWR9BE-NEXT: stdu r1, -128(r1) ; PWR9BE-NEXT: stfd f30, 112(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: stfd f31, 120(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: fmr f31, f4 ; PWR9BE-NEXT: fmr f30, f3 ; PWR9BE-NEXT: fmr f4, f2 ; PWR9BE-NEXT: fmr f3, f1 ; PWR9BE-NEXT: fmr f1, f5 ; PWR9BE-NEXT: fmr f2, f6 ; PWR9BE-NEXT: bl __gcc_qadd ; PWR9BE-NEXT: nop ; PWR9BE-NEXT: fmr f3, f30 ; PWR9BE-NEXT: fmr f4, f31 ; PWR9BE-NEXT: bl __gcc_qadd ; PWR9BE-NEXT: nop ; PWR9BE-NEXT: lfd f31, 120(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: lfd f30, 112(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: addi r1, r1, 128 ; PWR9BE-NEXT: ld r0, 16(r1) ; PWR9BE-NEXT: mtlr r0 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v2ppcf128_b: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: mflr r0 ; PWR10LE-NEXT: stfd f30, -16(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: std r0, 16(r1) ; PWR10LE-NEXT: stdu r1, -48(r1) ; PWR10LE-NEXT: fmr f31, f4 ; PWR10LE-NEXT: fmr f30, f3 ; PWR10LE-NEXT: fmr f4, f2 ; PWR10LE-NEXT: fmr f3, f1 ; PWR10LE-NEXT: fmr f1, f5 ; PWR10LE-NEXT: fmr f2, f6 ; PWR10LE-NEXT: bl __gcc_qadd@notoc ; PWR10LE-NEXT: fmr f3, f30 ; PWR10LE-NEXT: fmr f4, f31 ; PWR10LE-NEXT: bl __gcc_qadd@notoc ; PWR10LE-NEXT: addi r1, r1, 48 ; PWR10LE-NEXT: ld r0, 16(r1) ; PWR10LE-NEXT: lfd f31, -8(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: mtlr r0 ; PWR10LE-NEXT: lfd f30, -16(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v2ppcf128_b: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: mflr r0 ; PWR10BE-NEXT: std r0, 16(r1) ; PWR10BE-NEXT: stdu r1, -128(r1) ; PWR10BE-NEXT: stfd f30, 112(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: stfd f31, 120(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: fmr f31, f4 ; PWR10BE-NEXT: fmr f30, f3 ; PWR10BE-NEXT: fmr f4, f2 ; PWR10BE-NEXT: fmr f3, f1 ; PWR10BE-NEXT: fmr f1, f5 ; PWR10BE-NEXT: fmr f2, f6 ; PWR10BE-NEXT: bl __gcc_qadd ; PWR10BE-NEXT: nop ; PWR10BE-NEXT: fmr f3, f30 ; PWR10BE-NEXT: fmr f4, f31 ; PWR10BE-NEXT: bl __gcc_qadd ; PWR10BE-NEXT: nop ; PWR10BE-NEXT: lfd f31, 120(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: lfd f30, 112(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: addi r1, r1, 128 ; PWR10BE-NEXT: ld r0, 16(r1) ; PWR10BE-NEXT: mtlr r0 ; PWR10BE-NEXT: blr entry: %0 = call ppc_fp128 @llvm.vector.reduce.fadd.v2ppcf128(ppc_fp128 %b, <2 x ppc_fp128> %a) ret ppc_fp128 %0 } define dso_local ppc_fp128 @v2ppcf128_fast(<2 x ppc_fp128> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v2ppcf128_fast: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: mflr r0 ; PWR9LE-NEXT: std r0, 16(r1) ; PWR9LE-NEXT: stdu r1, -64(r1) ; PWR9LE-NEXT: bl __gcc_qadd ; PWR9LE-NEXT: nop ; PWR9LE-NEXT: stfd f2, 40(r1) ; PWR9LE-NEXT: stfd f1, 32(r1) ; PWR9LE-NEXT: lxv vs1, 32(r1) ; PWR9LE-NEXT: xxswapd vs2, vs1 ; PWR9LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR9LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 ; PWR9LE-NEXT: addi r1, r1, 64 ; PWR9LE-NEXT: ld r0, 16(r1) ; PWR9LE-NEXT: mtlr r0 ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v2ppcf128_fast: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: mflr r0 ; PWR9BE-NEXT: std r0, 16(r1) ; PWR9BE-NEXT: stdu r1, -144(r1) ; PWR9BE-NEXT: bl __gcc_qadd ; PWR9BE-NEXT: nop ; PWR9BE-NEXT: stfd f2, 120(r1) ; PWR9BE-NEXT: stfd f1, 112(r1) ; PWR9BE-NEXT: lxv vs1, 112(r1) ; PWR9BE-NEXT: xxswapd vs2, vs1 ; PWR9BE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR9BE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 ; PWR9BE-NEXT: addi r1, r1, 144 ; PWR9BE-NEXT: ld r0, 16(r1) ; PWR9BE-NEXT: mtlr r0 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v2ppcf128_fast: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: mflr r0 ; PWR10LE-NEXT: std r0, 16(r1) ; PWR10LE-NEXT: stdu r1, -64(r1) ; PWR10LE-NEXT: bl __gcc_qadd@notoc ; PWR10LE-NEXT: stfd f2, 40(r1) ; PWR10LE-NEXT: stfd f1, 32(r1) ; PWR10LE-NEXT: lxv vs1, 32(r1) ; PWR10LE-NEXT: xxswapd vs2, vs1 ; PWR10LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR10LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 ; PWR10LE-NEXT: addi r1, r1, 64 ; PWR10LE-NEXT: ld r0, 16(r1) ; PWR10LE-NEXT: mtlr r0 ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v2ppcf128_fast: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: mflr r0 ; PWR10BE-NEXT: std r0, 16(r1) ; PWR10BE-NEXT: stdu r1, -144(r1) ; PWR10BE-NEXT: bl __gcc_qadd ; PWR10BE-NEXT: nop ; PWR10BE-NEXT: stfd f2, 120(r1) ; PWR10BE-NEXT: stfd f1, 112(r1) ; PWR10BE-NEXT: lxv vs1, 112(r1) ; PWR10BE-NEXT: xxswapd vs2, vs1 ; PWR10BE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR10BE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 ; PWR10BE-NEXT: addi r1, r1, 144 ; PWR10BE-NEXT: ld r0, 16(r1) ; PWR10BE-NEXT: mtlr r0 ; PWR10BE-NEXT: blr entry: %0 = call fast ppc_fp128 @llvm.vector.reduce.fadd.v2ppcf128(ppc_fp128 0xM80000000000000000000000000000000, <2 x ppc_fp128> %a) ret ppc_fp128 %0 } define dso_local ppc_fp128 @v4ppcf128(<4 x ppc_fp128> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v4ppcf128: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: mflr r0 ; PWR9LE-NEXT: stfd f28, -32(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: stfd f29, -24(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: stfd f30, -16(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: std r0, 16(r1) ; PWR9LE-NEXT: stdu r1, -64(r1) ; PWR9LE-NEXT: fmr f31, f8 ; PWR9LE-NEXT: fmr f30, f7 ; PWR9LE-NEXT: fmr f29, f6 ; PWR9LE-NEXT: fmr f28, f5 ; PWR9LE-NEXT: bl __gcc_qadd ; PWR9LE-NEXT: nop ; PWR9LE-NEXT: fmr f3, f28 ; PWR9LE-NEXT: fmr f4, f29 ; PWR9LE-NEXT: bl __gcc_qadd ; PWR9LE-NEXT: nop ; PWR9LE-NEXT: fmr f3, f30 ; PWR9LE-NEXT: fmr f4, f31 ; PWR9LE-NEXT: bl __gcc_qadd ; PWR9LE-NEXT: nop ; PWR9LE-NEXT: addi r1, r1, 64 ; PWR9LE-NEXT: ld r0, 16(r1) ; PWR9LE-NEXT: lfd f31, -8(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: lfd f30, -16(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: mtlr r0 ; PWR9LE-NEXT: lfd f29, -24(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: lfd f28, -32(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v4ppcf128: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: mflr r0 ; PWR9BE-NEXT: std r0, 16(r1) ; PWR9BE-NEXT: stdu r1, -144(r1) ; PWR9BE-NEXT: stfd f28, 112(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: stfd f29, 120(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: stfd f30, 128(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: stfd f31, 136(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: fmr f31, f8 ; PWR9BE-NEXT: fmr f30, f7 ; PWR9BE-NEXT: fmr f29, f6 ; PWR9BE-NEXT: fmr f28, f5 ; PWR9BE-NEXT: bl __gcc_qadd ; PWR9BE-NEXT: nop ; PWR9BE-NEXT: fmr f3, f28 ; PWR9BE-NEXT: fmr f4, f29 ; PWR9BE-NEXT: bl __gcc_qadd ; PWR9BE-NEXT: nop ; PWR9BE-NEXT: fmr f3, f30 ; PWR9BE-NEXT: fmr f4, f31 ; PWR9BE-NEXT: bl __gcc_qadd ; PWR9BE-NEXT: nop ; PWR9BE-NEXT: lfd f31, 136(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: lfd f30, 128(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: lfd f29, 120(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: lfd f28, 112(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: addi r1, r1, 144 ; PWR9BE-NEXT: ld r0, 16(r1) ; PWR9BE-NEXT: mtlr r0 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v4ppcf128: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: mflr r0 ; PWR10LE-NEXT: stfd f28, -32(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: stfd f29, -24(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: stfd f30, -16(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: std r0, 16(r1) ; PWR10LE-NEXT: stdu r1, -64(r1) ; PWR10LE-NEXT: fmr f31, f8 ; PWR10LE-NEXT: fmr f30, f7 ; PWR10LE-NEXT: fmr f29, f6 ; PWR10LE-NEXT: fmr f28, f5 ; PWR10LE-NEXT: bl __gcc_qadd@notoc ; PWR10LE-NEXT: fmr f3, f28 ; PWR10LE-NEXT: fmr f4, f29 ; PWR10LE-NEXT: bl __gcc_qadd@notoc ; PWR10LE-NEXT: fmr f3, f30 ; PWR10LE-NEXT: fmr f4, f31 ; PWR10LE-NEXT: bl __gcc_qadd@notoc ; PWR10LE-NEXT: addi r1, r1, 64 ; PWR10LE-NEXT: ld r0, 16(r1) ; PWR10LE-NEXT: lfd f31, -8(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: mtlr r0 ; PWR10LE-NEXT: lfd f30, -16(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: lfd f29, -24(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: lfd f28, -32(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v4ppcf128: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: mflr r0 ; PWR10BE-NEXT: std r0, 16(r1) ; PWR10BE-NEXT: stdu r1, -144(r1) ; PWR10BE-NEXT: stfd f28, 112(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: stfd f29, 120(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: fmr f29, f6 ; PWR10BE-NEXT: fmr f28, f5 ; PWR10BE-NEXT: stfd f30, 128(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: stfd f31, 136(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: fmr f31, f8 ; PWR10BE-NEXT: fmr f30, f7 ; PWR10BE-NEXT: bl __gcc_qadd ; PWR10BE-NEXT: nop ; PWR10BE-NEXT: fmr f3, f28 ; PWR10BE-NEXT: fmr f4, f29 ; PWR10BE-NEXT: bl __gcc_qadd ; PWR10BE-NEXT: nop ; PWR10BE-NEXT: fmr f3, f30 ; PWR10BE-NEXT: fmr f4, f31 ; PWR10BE-NEXT: bl __gcc_qadd ; PWR10BE-NEXT: nop ; PWR10BE-NEXT: lfd f31, 136(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: lfd f30, 128(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: lfd f29, 120(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: lfd f28, 112(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: addi r1, r1, 144 ; PWR10BE-NEXT: ld r0, 16(r1) ; PWR10BE-NEXT: mtlr r0 ; PWR10BE-NEXT: blr entry: %0 = call ppc_fp128 @llvm.vector.reduce.fadd.v4ppcf128(ppc_fp128 0xM80000000000000000000000000000000, <4 x ppc_fp128> %a) ret ppc_fp128 %0 } define dso_local ppc_fp128 @v4ppcf128_b(<4 x ppc_fp128> %a, ppc_fp128 %b) local_unnamed_addr #0 { ; PWR9LE-LABEL: v4ppcf128_b: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: mflr r0 ; PWR9LE-NEXT: stfd f26, -48(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: stfd f27, -40(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: stfd f28, -32(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: stfd f29, -24(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: stfd f30, -16(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: std r0, 16(r1) ; PWR9LE-NEXT: stdu r1, -80(r1) ; PWR9LE-NEXT: fmr f27, f4 ; PWR9LE-NEXT: fmr f26, f3 ; PWR9LE-NEXT: fmr f4, f2 ; PWR9LE-NEXT: fmr f3, f1 ; PWR9LE-NEXT: fmr f1, f9 ; PWR9LE-NEXT: fmr f2, f10 ; PWR9LE-NEXT: fmr f31, f8 ; PWR9LE-NEXT: fmr f30, f7 ; PWR9LE-NEXT: fmr f29, f6 ; PWR9LE-NEXT: fmr f28, f5 ; PWR9LE-NEXT: bl __gcc_qadd ; PWR9LE-NEXT: nop ; PWR9LE-NEXT: fmr f3, f26 ; PWR9LE-NEXT: fmr f4, f27 ; PWR9LE-NEXT: bl __gcc_qadd ; PWR9LE-NEXT: nop ; PWR9LE-NEXT: fmr f3, f28 ; PWR9LE-NEXT: fmr f4, f29 ; PWR9LE-NEXT: bl __gcc_qadd ; PWR9LE-NEXT: nop ; PWR9LE-NEXT: fmr f3, f30 ; PWR9LE-NEXT: fmr f4, f31 ; PWR9LE-NEXT: bl __gcc_qadd ; PWR9LE-NEXT: nop ; PWR9LE-NEXT: addi r1, r1, 80 ; PWR9LE-NEXT: ld r0, 16(r1) ; PWR9LE-NEXT: lfd f31, -8(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: lfd f30, -16(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: mtlr r0 ; PWR9LE-NEXT: lfd f29, -24(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: lfd f28, -32(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: lfd f27, -40(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: lfd f26, -48(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v4ppcf128_b: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: mflr r0 ; PWR9BE-NEXT: std r0, 16(r1) ; PWR9BE-NEXT: stdu r1, -160(r1) ; PWR9BE-NEXT: stfd f26, 112(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: stfd f27, 120(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: fmr f27, f4 ; PWR9BE-NEXT: fmr f26, f3 ; PWR9BE-NEXT: fmr f4, f2 ; PWR9BE-NEXT: fmr f3, f1 ; PWR9BE-NEXT: fmr f1, f9 ; PWR9BE-NEXT: fmr f2, f10 ; PWR9BE-NEXT: stfd f28, 128(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: stfd f29, 136(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: stfd f30, 144(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: stfd f31, 152(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: fmr f31, f8 ; PWR9BE-NEXT: fmr f30, f7 ; PWR9BE-NEXT: fmr f29, f6 ; PWR9BE-NEXT: fmr f28, f5 ; PWR9BE-NEXT: bl __gcc_qadd ; PWR9BE-NEXT: nop ; PWR9BE-NEXT: fmr f3, f26 ; PWR9BE-NEXT: fmr f4, f27 ; PWR9BE-NEXT: bl __gcc_qadd ; PWR9BE-NEXT: nop ; PWR9BE-NEXT: fmr f3, f28 ; PWR9BE-NEXT: fmr f4, f29 ; PWR9BE-NEXT: bl __gcc_qadd ; PWR9BE-NEXT: nop ; PWR9BE-NEXT: fmr f3, f30 ; PWR9BE-NEXT: fmr f4, f31 ; PWR9BE-NEXT: bl __gcc_qadd ; PWR9BE-NEXT: nop ; PWR9BE-NEXT: lfd f31, 152(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: lfd f30, 144(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: lfd f29, 136(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: lfd f28, 128(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: lfd f27, 120(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: lfd f26, 112(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: addi r1, r1, 160 ; PWR9BE-NEXT: ld r0, 16(r1) ; PWR9BE-NEXT: mtlr r0 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v4ppcf128_b: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: mflr r0 ; PWR10LE-NEXT: stfd f26, -48(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: stfd f27, -40(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: stfd f28, -32(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: stfd f29, -24(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: stfd f30, -16(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: std r0, 16(r1) ; PWR10LE-NEXT: stdu r1, -80(r1) ; PWR10LE-NEXT: fmr f27, f4 ; PWR10LE-NEXT: fmr f26, f3 ; PWR10LE-NEXT: fmr f4, f2 ; PWR10LE-NEXT: fmr f3, f1 ; PWR10LE-NEXT: fmr f1, f9 ; PWR10LE-NEXT: fmr f2, f10 ; PWR10LE-NEXT: fmr f31, f8 ; PWR10LE-NEXT: fmr f30, f7 ; PWR10LE-NEXT: fmr f29, f6 ; PWR10LE-NEXT: fmr f28, f5 ; PWR10LE-NEXT: bl __gcc_qadd@notoc ; PWR10LE-NEXT: fmr f3, f26 ; PWR10LE-NEXT: fmr f4, f27 ; PWR10LE-NEXT: bl __gcc_qadd@notoc ; PWR10LE-NEXT: fmr f3, f28 ; PWR10LE-NEXT: fmr f4, f29 ; PWR10LE-NEXT: bl __gcc_qadd@notoc ; PWR10LE-NEXT: fmr f3, f30 ; PWR10LE-NEXT: fmr f4, f31 ; PWR10LE-NEXT: bl __gcc_qadd@notoc ; PWR10LE-NEXT: addi r1, r1, 80 ; PWR10LE-NEXT: ld r0, 16(r1) ; PWR10LE-NEXT: lfd f31, -8(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: mtlr r0 ; PWR10LE-NEXT: lfd f30, -16(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: lfd f29, -24(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: lfd f28, -32(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: lfd f27, -40(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: lfd f26, -48(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v4ppcf128_b: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: mflr r0 ; PWR10BE-NEXT: std r0, 16(r1) ; PWR10BE-NEXT: stdu r1, -160(r1) ; PWR10BE-NEXT: stfd f26, 112(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: stfd f27, 120(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: fmr f27, f4 ; PWR10BE-NEXT: fmr f26, f3 ; PWR10BE-NEXT: fmr f4, f2 ; PWR10BE-NEXT: fmr f3, f1 ; PWR10BE-NEXT: fmr f1, f9 ; PWR10BE-NEXT: stfd f28, 128(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: stfd f29, 136(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: fmr f2, f10 ; PWR10BE-NEXT: fmr f29, f6 ; PWR10BE-NEXT: fmr f28, f5 ; PWR10BE-NEXT: stfd f30, 144(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: stfd f31, 152(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: fmr f31, f8 ; PWR10BE-NEXT: fmr f30, f7 ; PWR10BE-NEXT: bl __gcc_qadd ; PWR10BE-NEXT: nop ; PWR10BE-NEXT: fmr f3, f26 ; PWR10BE-NEXT: fmr f4, f27 ; PWR10BE-NEXT: bl __gcc_qadd ; PWR10BE-NEXT: nop ; PWR10BE-NEXT: fmr f3, f28 ; PWR10BE-NEXT: fmr f4, f29 ; PWR10BE-NEXT: bl __gcc_qadd ; PWR10BE-NEXT: nop ; PWR10BE-NEXT: fmr f3, f30 ; PWR10BE-NEXT: fmr f4, f31 ; PWR10BE-NEXT: bl __gcc_qadd ; PWR10BE-NEXT: nop ; PWR10BE-NEXT: lfd f31, 152(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: lfd f30, 144(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: lfd f29, 136(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: lfd f28, 128(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: lfd f27, 120(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: lfd f26, 112(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: addi r1, r1, 160 ; PWR10BE-NEXT: ld r0, 16(r1) ; PWR10BE-NEXT: mtlr r0 ; PWR10BE-NEXT: blr entry: %0 = call ppc_fp128 @llvm.vector.reduce.fadd.v4ppcf128(ppc_fp128 %b, <4 x ppc_fp128> %a) ret ppc_fp128 %0 } define dso_local ppc_fp128 @v4ppcf128_fast(<4 x ppc_fp128> %a) local_unnamed_addr #0 { ; PWR9LE-LABEL: v4ppcf128_fast: ; PWR9LE: # %bb.0: # %entry ; PWR9LE-NEXT: mflr r0 ; PWR9LE-NEXT: stfd f26, -48(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: stfd f27, -40(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: stfd f28, -32(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: stfd f29, -24(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: stfd f30, -16(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill ; PWR9LE-NEXT: std r0, 16(r1) ; PWR9LE-NEXT: stdu r1, -96(r1) ; PWR9LE-NEXT: fmr f29, f4 ; PWR9LE-NEXT: fmr f28, f3 ; PWR9LE-NEXT: fmr f3, f5 ; PWR9LE-NEXT: fmr f4, f6 ; PWR9LE-NEXT: fmr f31, f8 ; PWR9LE-NEXT: fmr f30, f7 ; PWR9LE-NEXT: bl __gcc_qadd ; PWR9LE-NEXT: nop ; PWR9LE-NEXT: fmr f27, f1 ; PWR9LE-NEXT: fmr f26, f2 ; PWR9LE-NEXT: fmr f1, f28 ; PWR9LE-NEXT: fmr f2, f29 ; PWR9LE-NEXT: fmr f3, f30 ; PWR9LE-NEXT: fmr f4, f31 ; PWR9LE-NEXT: bl __gcc_qadd ; PWR9LE-NEXT: nop ; PWR9LE-NEXT: fmr f3, f1 ; PWR9LE-NEXT: fmr f4, f2 ; PWR9LE-NEXT: fmr f1, f27 ; PWR9LE-NEXT: fmr f2, f26 ; PWR9LE-NEXT: bl __gcc_qadd ; PWR9LE-NEXT: nop ; PWR9LE-NEXT: stfd f2, 40(r1) ; PWR9LE-NEXT: stfd f1, 32(r1) ; PWR9LE-NEXT: lxv vs1, 32(r1) ; PWR9LE-NEXT: xxswapd vs2, vs1 ; PWR9LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR9LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 ; PWR9LE-NEXT: addi r1, r1, 96 ; PWR9LE-NEXT: ld r0, 16(r1) ; PWR9LE-NEXT: lfd f31, -8(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: lfd f30, -16(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: mtlr r0 ; PWR9LE-NEXT: lfd f29, -24(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: lfd f28, -32(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: lfd f27, -40(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: lfd f26, -48(r1) # 8-byte Folded Reload ; PWR9LE-NEXT: blr ; ; PWR9BE-LABEL: v4ppcf128_fast: ; PWR9BE: # %bb.0: # %entry ; PWR9BE-NEXT: mflr r0 ; PWR9BE-NEXT: std r0, 16(r1) ; PWR9BE-NEXT: stdu r1, -176(r1) ; PWR9BE-NEXT: stfd f28, 144(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: stfd f29, 152(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: fmr f29, f4 ; PWR9BE-NEXT: fmr f28, f3 ; PWR9BE-NEXT: fmr f3, f5 ; PWR9BE-NEXT: fmr f4, f6 ; PWR9BE-NEXT: stfd f26, 128(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: stfd f27, 136(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: stfd f30, 160(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: stfd f31, 168(r1) # 8-byte Folded Spill ; PWR9BE-NEXT: fmr f31, f8 ; PWR9BE-NEXT: fmr f30, f7 ; PWR9BE-NEXT: bl __gcc_qadd ; PWR9BE-NEXT: nop ; PWR9BE-NEXT: fmr f27, f1 ; PWR9BE-NEXT: fmr f26, f2 ; PWR9BE-NEXT: fmr f1, f28 ; PWR9BE-NEXT: fmr f2, f29 ; PWR9BE-NEXT: fmr f3, f30 ; PWR9BE-NEXT: fmr f4, f31 ; PWR9BE-NEXT: bl __gcc_qadd ; PWR9BE-NEXT: nop ; PWR9BE-NEXT: fmr f3, f1 ; PWR9BE-NEXT: fmr f4, f2 ; PWR9BE-NEXT: fmr f1, f27 ; PWR9BE-NEXT: fmr f2, f26 ; PWR9BE-NEXT: bl __gcc_qadd ; PWR9BE-NEXT: nop ; PWR9BE-NEXT: stfd f2, 120(r1) ; PWR9BE-NEXT: stfd f1, 112(r1) ; PWR9BE-NEXT: lxv vs1, 112(r1) ; PWR9BE-NEXT: lfd f31, 168(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: lfd f30, 160(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: xxswapd vs2, vs1 ; PWR9BE-NEXT: lfd f29, 152(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: lfd f28, 144(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: lfd f27, 136(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: lfd f26, 128(r1) # 8-byte Folded Reload ; PWR9BE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR9BE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 ; PWR9BE-NEXT: addi r1, r1, 176 ; PWR9BE-NEXT: ld r0, 16(r1) ; PWR9BE-NEXT: mtlr r0 ; PWR9BE-NEXT: blr ; ; PWR10LE-LABEL: v4ppcf128_fast: ; PWR10LE: # %bb.0: # %entry ; PWR10LE-NEXT: mflr r0 ; PWR10LE-NEXT: stfd f26, -48(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: stfd f27, -40(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: stfd f28, -32(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: stfd f29, -24(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: stfd f30, -16(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: stfd f31, -8(r1) # 8-byte Folded Spill ; PWR10LE-NEXT: std r0, 16(r1) ; PWR10LE-NEXT: stdu r1, -96(r1) ; PWR10LE-NEXT: fmr f29, f4 ; PWR10LE-NEXT: fmr f28, f3 ; PWR10LE-NEXT: fmr f3, f5 ; PWR10LE-NEXT: fmr f4, f6 ; PWR10LE-NEXT: fmr f31, f8 ; PWR10LE-NEXT: fmr f30, f7 ; PWR10LE-NEXT: bl __gcc_qadd@notoc ; PWR10LE-NEXT: fmr f27, f1 ; PWR10LE-NEXT: fmr f26, f2 ; PWR10LE-NEXT: fmr f1, f28 ; PWR10LE-NEXT: fmr f2, f29 ; PWR10LE-NEXT: fmr f3, f30 ; PWR10LE-NEXT: fmr f4, f31 ; PWR10LE-NEXT: bl __gcc_qadd@notoc ; PWR10LE-NEXT: fmr f3, f1 ; PWR10LE-NEXT: fmr f4, f2 ; PWR10LE-NEXT: fmr f1, f27 ; PWR10LE-NEXT: fmr f2, f26 ; PWR10LE-NEXT: bl __gcc_qadd@notoc ; PWR10LE-NEXT: stfd f2, 40(r1) ; PWR10LE-NEXT: stfd f1, 32(r1) ; PWR10LE-NEXT: lxv vs1, 32(r1) ; PWR10LE-NEXT: xxswapd vs2, vs1 ; PWR10LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR10LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 ; PWR10LE-NEXT: addi r1, r1, 96 ; PWR10LE-NEXT: ld r0, 16(r1) ; PWR10LE-NEXT: lfd f31, -8(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: mtlr r0 ; PWR10LE-NEXT: lfd f30, -16(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: lfd f29, -24(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: lfd f28, -32(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: lfd f27, -40(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: lfd f26, -48(r1) # 8-byte Folded Reload ; PWR10LE-NEXT: blr ; ; PWR10BE-LABEL: v4ppcf128_fast: ; PWR10BE: # %bb.0: # %entry ; PWR10BE-NEXT: mflr r0 ; PWR10BE-NEXT: std r0, 16(r1) ; PWR10BE-NEXT: stdu r1, -176(r1) ; PWR10BE-NEXT: stfd f28, 144(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: stfd f29, 152(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: fmr f29, f4 ; PWR10BE-NEXT: fmr f28, f3 ; PWR10BE-NEXT: fmr f3, f5 ; PWR10BE-NEXT: fmr f4, f6 ; PWR10BE-NEXT: stfd f26, 128(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: stfd f27, 136(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: stfd f30, 160(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: stfd f31, 168(r1) # 8-byte Folded Spill ; PWR10BE-NEXT: fmr f31, f8 ; PWR10BE-NEXT: fmr f30, f7 ; PWR10BE-NEXT: bl __gcc_qadd ; PWR10BE-NEXT: nop ; PWR10BE-NEXT: fmr f27, f1 ; PWR10BE-NEXT: fmr f26, f2 ; PWR10BE-NEXT: fmr f1, f28 ; PWR10BE-NEXT: fmr f2, f29 ; PWR10BE-NEXT: fmr f3, f30 ; PWR10BE-NEXT: fmr f4, f31 ; PWR10BE-NEXT: bl __gcc_qadd ; PWR10BE-NEXT: nop ; PWR10BE-NEXT: fmr f3, f1 ; PWR10BE-NEXT: fmr f4, f2 ; PWR10BE-NEXT: fmr f1, f27 ; PWR10BE-NEXT: fmr f2, f26 ; PWR10BE-NEXT: bl __gcc_qadd ; PWR10BE-NEXT: nop ; PWR10BE-NEXT: stfd f2, 120(r1) ; PWR10BE-NEXT: stfd f1, 112(r1) ; PWR10BE-NEXT: lfd f31, 168(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: lfd f30, 160(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: lfd f29, 152(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: lfd f28, 144(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: lfd f27, 136(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: lfd f26, 128(r1) # 8-byte Folded Reload ; PWR10BE-NEXT: lxv vs1, 112(r1) ; PWR10BE-NEXT: xxswapd vs2, vs1 ; PWR10BE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 ; PWR10BE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 ; PWR10BE-NEXT: addi r1, r1, 176 ; PWR10BE-NEXT: ld r0, 16(r1) ; PWR10BE-NEXT: mtlr r0 ; PWR10BE-NEXT: blr entry: %0 = call fast ppc_fp128 @llvm.vector.reduce.fadd.v4ppcf128(ppc_fp128 0xM80000000000000000000000000000000, <4 x ppc_fp128> %a) ret ppc_fp128 %0 } declare ppc_fp128 @llvm.vector.reduce.fadd.v2ppcf128(ppc_fp128, <2 x ppc_fp128>) #0 declare ppc_fp128 @llvm.vector.reduce.fadd.v4ppcf128(ppc_fp128, <4 x ppc_fp128>) #0 attributes #0 = { nounwind }