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