[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / PowerPC / vector-reduce-fadd.ll
blobedd3fb7b1754ba247dc8bedada418607170eb3d5
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
14 ;; Vectors of f32
16 define 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
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
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
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
50 entry:
51   %0 = call float @llvm.vector.reduce.fadd.v2f32(float -0.000000e+00, <2 x float> %a)
52   ret float %0
55 define 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
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
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
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
93 entry:
94   %0 = call float @llvm.vector.reduce.fadd.v2f32(float %b, <2 x float> %a)
95   ret float %0
98 define 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
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
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
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
128 entry:
129   %0 = call fast float @llvm.vector.reduce.fadd.v2f32(float -0.000000e+00, <2 x float> %a)
130   ret float %0
133 define 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
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
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
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
189 entry:
190   %0 = call float @llvm.vector.reduce.fadd.v4f32(float -0.000000e+00, <4 x float> %a)
191   ret float %0
194 define 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
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
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
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
254 entry:
255   %0 = call float @llvm.vector.reduce.fadd.v4f32(float %b, <4 x float> %a)
256   ret float %0
259 define 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
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
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
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
297 entry:
298   %0 = call fast float @llvm.vector.reduce.fadd.v4f32(float -0.000000e+00, <4 x float> %a)
299   ret float %0
302 define 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
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
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
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
402 entry:
403   %0 = call float @llvm.vector.reduce.fadd.v8f32(float -0.000000e+00, <8 x float> %a)
404   ret float %0
407 define 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
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
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
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
511 entry:
512   %0 = call float @llvm.vector.reduce.fadd.v8f32(float %b, <8 x float> %a)
513   ret float %0
516 define 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
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
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
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
558 entry:
559   %0 = call fast float @llvm.vector.reduce.fadd.v8f32(float -0.000000e+00, <8 x float> %a)
560   ret float %0
563 define 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
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
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
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
751 entry:
752   %0 = call float @llvm.vector.reduce.fadd.v16f32(float -0.000000e+00, <16 x float> %a)
753   ret float %0
756 define 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
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
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
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
948 entry:
949   %0 = call float @llvm.vector.reduce.fadd.v16f32(float %b, <16 x float> %a)
950   ret float %0
953 define 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
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
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
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
1003 entry:
1004   %0 = call fast float @llvm.vector.reduce.fadd.v16f32(float -0.000000e+00, <16 x float> %a)
1005   ret float %0
1008 declare float @llvm.vector.reduce.fadd.v2f32(float, <2 x float>) #0
1009 declare float @llvm.vector.reduce.fadd.v4f32(float, <4 x float>) #0
1010 declare float @llvm.vector.reduce.fadd.v8f32(float, <8 x float>) #0
1011 declare float @llvm.vector.reduce.fadd.v16f32(float, <16 x float>) #0
1014 ;; Vectors of f64
1016 define 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
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
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
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
1040 entry:
1041   %0 = call double @llvm.vector.reduce.fadd.v2f64(double -0.000000e+00, <2 x double> %a)
1042   ret double %0
1045 define 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
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
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
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
1073 entry:
1074   %0 = call double @llvm.vector.reduce.fadd.v2f64(double %b, <2 x double> %a)
1075   ret double %0
1078 define 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:    # kill: def $f1 killed $f1 killed $vsl1
1085 ; PWR9LE-NEXT:    blr
1087 ; PWR9BE-LABEL: v2f64_fast:
1088 ; PWR9BE:       # %bb.0: # %entry
1089 ; PWR9BE-NEXT:    xxswapd vs0, v2
1090 ; PWR9BE-NEXT:    xvadddp vs1, v2, vs0
1091 ; PWR9BE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1092 ; PWR9BE-NEXT:    blr
1094 ; PWR10LE-LABEL: v2f64_fast:
1095 ; PWR10LE:       # %bb.0: # %entry
1096 ; PWR10LE-NEXT:    xxswapd vs0, v2
1097 ; PWR10LE-NEXT:    xvadddp vs0, v2, vs0
1098 ; PWR10LE-NEXT:    xxswapd vs1, vs0
1099 ; PWR10LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1100 ; PWR10LE-NEXT:    blr
1102 ; PWR10BE-LABEL: v2f64_fast:
1103 ; PWR10BE:       # %bb.0: # %entry
1104 ; PWR10BE-NEXT:    xxswapd vs0, v2
1105 ; PWR10BE-NEXT:    xvadddp vs1, v2, vs0
1106 ; PWR10BE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1107 ; PWR10BE-NEXT:    blr
1108 entry:
1109   %0 = call fast double @llvm.vector.reduce.fadd.v2f64(double -0.000000e+00, <2 x double> %a)
1110   ret double %0
1113 define dso_local double @v4f64(<4 x double> %a) local_unnamed_addr #0 {
1114 ; PWR9LE-LABEL: v4f64:
1115 ; PWR9LE:       # %bb.0: # %entry
1116 ; PWR9LE-NEXT:    xxswapd vs0, v2
1117 ; PWR9LE-NEXT:    xxswapd vs1, v3
1118 ; PWR9LE-NEXT:    xsadddp f0, f0, v2
1119 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1120 ; PWR9LE-NEXT:    xsadddp f1, f0, v3
1121 ; PWR9LE-NEXT:    blr
1123 ; PWR9BE-LABEL: v4f64:
1124 ; PWR9BE:       # %bb.0: # %entry
1125 ; PWR9BE-NEXT:    xxswapd vs0, v2
1126 ; PWR9BE-NEXT:    xxswapd vs1, v3
1127 ; PWR9BE-NEXT:    xsadddp f0, v2, f0
1128 ; PWR9BE-NEXT:    xsadddp f0, f0, v3
1129 ; PWR9BE-NEXT:    xsadddp f1, f0, f1
1130 ; PWR9BE-NEXT:    blr
1132 ; PWR10LE-LABEL: v4f64:
1133 ; PWR10LE:       # %bb.0: # %entry
1134 ; PWR10LE-NEXT:    xxswapd vs0, v2
1135 ; PWR10LE-NEXT:    xxswapd vs1, v3
1136 ; PWR10LE-NEXT:    xsadddp f0, f0, v2
1137 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1138 ; PWR10LE-NEXT:    xsadddp f1, f0, v3
1139 ; PWR10LE-NEXT:    blr
1141 ; PWR10BE-LABEL: v4f64:
1142 ; PWR10BE:       # %bb.0: # %entry
1143 ; PWR10BE-NEXT:    xxswapd vs0, v2
1144 ; PWR10BE-NEXT:    xxswapd vs1, v3
1145 ; PWR10BE-NEXT:    xsadddp f0, v2, f0
1146 ; PWR10BE-NEXT:    xsadddp f0, f0, v3
1147 ; PWR10BE-NEXT:    xsadddp f1, f0, f1
1148 ; PWR10BE-NEXT:    blr
1149 entry:
1150   %0 = call double @llvm.vector.reduce.fadd.v4f64(double -0.000000e+00, <4 x double> %a)
1151   ret double %0
1154 define dso_local double @v4f64_b(<4 x double> %a, double %b) local_unnamed_addr #0 {
1155 ; PWR9LE-LABEL: v4f64_b:
1156 ; PWR9LE:       # %bb.0: # %entry
1157 ; PWR9LE-NEXT:    xxswapd vs0, v2
1158 ; PWR9LE-NEXT:    xsadddp f0, f1, f0
1159 ; PWR9LE-NEXT:    xxswapd vs1, v3
1160 ; PWR9LE-NEXT:    xsadddp f0, f0, v2
1161 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1162 ; PWR9LE-NEXT:    xsadddp f1, f0, v3
1163 ; PWR9LE-NEXT:    blr
1165 ; PWR9BE-LABEL: v4f64_b:
1166 ; PWR9BE:       # %bb.0: # %entry
1167 ; PWR9BE-NEXT:    xsadddp f0, f1, v2
1168 ; PWR9BE-NEXT:    xxswapd vs1, v2
1169 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1170 ; PWR9BE-NEXT:    xxswapd vs1, v3
1171 ; PWR9BE-NEXT:    xsadddp f0, f0, v3
1172 ; PWR9BE-NEXT:    xsadddp f1, f0, f1
1173 ; PWR9BE-NEXT:    blr
1175 ; PWR10LE-LABEL: v4f64_b:
1176 ; PWR10LE:       # %bb.0: # %entry
1177 ; PWR10LE-NEXT:    xxswapd vs0, v2
1178 ; PWR10LE-NEXT:    xsadddp f0, f1, f0
1179 ; PWR10LE-NEXT:    xxswapd vs1, v3
1180 ; PWR10LE-NEXT:    xsadddp f0, f0, v2
1181 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1182 ; PWR10LE-NEXT:    xsadddp f1, f0, v3
1183 ; PWR10LE-NEXT:    blr
1185 ; PWR10BE-LABEL: v4f64_b:
1186 ; PWR10BE:       # %bb.0: # %entry
1187 ; PWR10BE-NEXT:    xsadddp f0, f1, v2
1188 ; PWR10BE-NEXT:    xxswapd vs1, v2
1189 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1190 ; PWR10BE-NEXT:    xxswapd vs1, v3
1191 ; PWR10BE-NEXT:    xsadddp f0, f0, v3
1192 ; PWR10BE-NEXT:    xsadddp f1, f0, f1
1193 ; PWR10BE-NEXT:    blr
1194 entry:
1195   %0 = call double @llvm.vector.reduce.fadd.v4f64(double %b, <4 x double> %a)
1196   ret double %0
1199 define dso_local double @v4f64_fast(<4 x double> %a) local_unnamed_addr #0 {
1200 ; PWR9LE-LABEL: v4f64_fast:
1201 ; PWR9LE:       # %bb.0: # %entry
1202 ; PWR9LE-NEXT:    xvadddp vs0, v2, v3
1203 ; PWR9LE-NEXT:    xxswapd vs1, vs0
1204 ; PWR9LE-NEXT:    xvadddp vs0, vs0, vs1
1205 ; PWR9LE-NEXT:    xxswapd vs1, vs0
1206 ; PWR9LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1207 ; PWR9LE-NEXT:    blr
1209 ; PWR9BE-LABEL: v4f64_fast:
1210 ; PWR9BE:       # %bb.0: # %entry
1211 ; PWR9BE-NEXT:    xvadddp vs0, v2, v3
1212 ; PWR9BE-NEXT:    xxswapd vs1, vs0
1213 ; PWR9BE-NEXT:    xvadddp vs1, vs0, vs1
1214 ; PWR9BE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1215 ; PWR9BE-NEXT:    blr
1217 ; PWR10LE-LABEL: v4f64_fast:
1218 ; PWR10LE:       # %bb.0: # %entry
1219 ; PWR10LE-NEXT:    xvadddp vs0, v2, v3
1220 ; PWR10LE-NEXT:    xxswapd vs1, vs0
1221 ; PWR10LE-NEXT:    xvadddp vs0, vs0, vs1
1222 ; PWR10LE-NEXT:    xxswapd vs1, vs0
1223 ; PWR10LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1224 ; PWR10LE-NEXT:    blr
1226 ; PWR10BE-LABEL: v4f64_fast:
1227 ; PWR10BE:       # %bb.0: # %entry
1228 ; PWR10BE-NEXT:    xvadddp vs0, v2, v3
1229 ; PWR10BE-NEXT:    xxswapd vs1, vs0
1230 ; PWR10BE-NEXT:    xvadddp vs1, vs0, vs1
1231 ; PWR10BE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1232 ; PWR10BE-NEXT:    blr
1233 entry:
1234   %0 = call fast double @llvm.vector.reduce.fadd.v4f64(double -0.000000e+00, <4 x double> %a)
1235   ret double %0
1238 define dso_local double @v8f64(<8 x double> %a) local_unnamed_addr #0 {
1239 ; PWR9LE-LABEL: v8f64:
1240 ; PWR9LE:       # %bb.0: # %entry
1241 ; PWR9LE-NEXT:    xxswapd vs0, v2
1242 ; PWR9LE-NEXT:    xxswapd vs1, v3
1243 ; PWR9LE-NEXT:    xsadddp f0, f0, v2
1244 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1245 ; PWR9LE-NEXT:    xxswapd vs1, v4
1246 ; PWR9LE-NEXT:    xsadddp f0, f0, v3
1247 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1248 ; PWR9LE-NEXT:    xxswapd vs1, v5
1249 ; PWR9LE-NEXT:    xsadddp f0, f0, v4
1250 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1251 ; PWR9LE-NEXT:    xsadddp f1, f0, v5
1252 ; PWR9LE-NEXT:    blr
1254 ; PWR9BE-LABEL: v8f64:
1255 ; PWR9BE:       # %bb.0: # %entry
1256 ; PWR9BE-NEXT:    xxswapd vs0, v2
1257 ; PWR9BE-NEXT:    xxswapd vs1, v3
1258 ; PWR9BE-NEXT:    xsadddp f0, v2, f0
1259 ; PWR9BE-NEXT:    xsadddp f0, f0, v3
1260 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1261 ; PWR9BE-NEXT:    xxswapd vs1, v4
1262 ; PWR9BE-NEXT:    xsadddp f0, f0, v4
1263 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1264 ; PWR9BE-NEXT:    xxswapd vs1, v5
1265 ; PWR9BE-NEXT:    xsadddp f0, f0, v5
1266 ; PWR9BE-NEXT:    xsadddp f1, f0, f1
1267 ; PWR9BE-NEXT:    blr
1269 ; PWR10LE-LABEL: v8f64:
1270 ; PWR10LE:       # %bb.0: # %entry
1271 ; PWR10LE-NEXT:    xxswapd vs0, v2
1272 ; PWR10LE-NEXT:    xxswapd vs1, v3
1273 ; PWR10LE-NEXT:    xsadddp f0, f0, v2
1274 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1275 ; PWR10LE-NEXT:    xxswapd vs1, v4
1276 ; PWR10LE-NEXT:    xsadddp f0, f0, v3
1277 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1278 ; PWR10LE-NEXT:    xxswapd vs1, v5
1279 ; PWR10LE-NEXT:    xsadddp f0, f0, v4
1280 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1281 ; PWR10LE-NEXT:    xsadddp f1, f0, v5
1282 ; PWR10LE-NEXT:    blr
1284 ; PWR10BE-LABEL: v8f64:
1285 ; PWR10BE:       # %bb.0: # %entry
1286 ; PWR10BE-NEXT:    xxswapd vs0, v2
1287 ; PWR10BE-NEXT:    xxswapd vs1, v3
1288 ; PWR10BE-NEXT:    xsadddp f0, v2, f0
1289 ; PWR10BE-NEXT:    xsadddp f0, f0, v3
1290 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1291 ; PWR10BE-NEXT:    xxswapd vs1, v4
1292 ; PWR10BE-NEXT:    xsadddp f0, f0, v4
1293 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1294 ; PWR10BE-NEXT:    xxswapd vs1, v5
1295 ; PWR10BE-NEXT:    xsadddp f0, f0, v5
1296 ; PWR10BE-NEXT:    xsadddp f1, f0, f1
1297 ; PWR10BE-NEXT:    blr
1298 entry:
1299   %0 = call double @llvm.vector.reduce.fadd.v8f64(double -0.000000e+00, <8 x double> %a)
1300   ret double %0
1303 define dso_local double @v8f64_b(<8 x double> %a, double %b) local_unnamed_addr #0 {
1304 ; PWR9LE-LABEL: v8f64_b:
1305 ; PWR9LE:       # %bb.0: # %entry
1306 ; PWR9LE-NEXT:    xxswapd vs0, v2
1307 ; PWR9LE-NEXT:    xsadddp f0, f1, f0
1308 ; PWR9LE-NEXT:    xxswapd vs1, v3
1309 ; PWR9LE-NEXT:    xsadddp f0, f0, v2
1310 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1311 ; PWR9LE-NEXT:    xxswapd vs1, v4
1312 ; PWR9LE-NEXT:    xsadddp f0, f0, v3
1313 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1314 ; PWR9LE-NEXT:    xxswapd vs1, v5
1315 ; PWR9LE-NEXT:    xsadddp f0, f0, v4
1316 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1317 ; PWR9LE-NEXT:    xsadddp f1, f0, v5
1318 ; PWR9LE-NEXT:    blr
1320 ; PWR9BE-LABEL: v8f64_b:
1321 ; PWR9BE:       # %bb.0: # %entry
1322 ; PWR9BE-NEXT:    xsadddp f0, f1, v2
1323 ; PWR9BE-NEXT:    xxswapd vs1, v2
1324 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1325 ; PWR9BE-NEXT:    xxswapd vs1, v3
1326 ; PWR9BE-NEXT:    xsadddp f0, f0, v3
1327 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1328 ; PWR9BE-NEXT:    xxswapd vs1, v4
1329 ; PWR9BE-NEXT:    xsadddp f0, f0, v4
1330 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1331 ; PWR9BE-NEXT:    xxswapd vs1, v5
1332 ; PWR9BE-NEXT:    xsadddp f0, f0, v5
1333 ; PWR9BE-NEXT:    xsadddp f1, f0, f1
1334 ; PWR9BE-NEXT:    blr
1336 ; PWR10LE-LABEL: v8f64_b:
1337 ; PWR10LE:       # %bb.0: # %entry
1338 ; PWR10LE-NEXT:    xxswapd vs0, v2
1339 ; PWR10LE-NEXT:    xsadddp f0, f1, f0
1340 ; PWR10LE-NEXT:    xxswapd vs1, v3
1341 ; PWR10LE-NEXT:    xsadddp f0, f0, v2
1342 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1343 ; PWR10LE-NEXT:    xxswapd vs1, v4
1344 ; PWR10LE-NEXT:    xsadddp f0, f0, v3
1345 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1346 ; PWR10LE-NEXT:    xxswapd vs1, v5
1347 ; PWR10LE-NEXT:    xsadddp f0, f0, v4
1348 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1349 ; PWR10LE-NEXT:    xsadddp f1, f0, v5
1350 ; PWR10LE-NEXT:    blr
1352 ; PWR10BE-LABEL: v8f64_b:
1353 ; PWR10BE:       # %bb.0: # %entry
1354 ; PWR10BE-NEXT:    xsadddp f0, f1, v2
1355 ; PWR10BE-NEXT:    xxswapd vs1, v2
1356 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1357 ; PWR10BE-NEXT:    xxswapd vs1, v3
1358 ; PWR10BE-NEXT:    xsadddp f0, f0, v3
1359 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1360 ; PWR10BE-NEXT:    xxswapd vs1, v4
1361 ; PWR10BE-NEXT:    xsadddp f0, f0, v4
1362 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1363 ; PWR10BE-NEXT:    xxswapd vs1, v5
1364 ; PWR10BE-NEXT:    xsadddp f0, f0, v5
1365 ; PWR10BE-NEXT:    xsadddp f1, f0, f1
1366 ; PWR10BE-NEXT:    blr
1367 entry:
1368   %0 = call double @llvm.vector.reduce.fadd.v8f64(double %b, <8 x double> %a)
1369   ret double %0
1372 define dso_local double @v8f64_fast(<8 x double> %a) local_unnamed_addr #0 {
1373 ; PWR9LE-LABEL: v8f64_fast:
1374 ; PWR9LE:       # %bb.0: # %entry
1375 ; PWR9LE-NEXT:    xvadddp vs0, v3, v5
1376 ; PWR9LE-NEXT:    xvadddp vs1, v2, v4
1377 ; PWR9LE-NEXT:    xvadddp vs0, vs1, vs0
1378 ; PWR9LE-NEXT:    xxswapd vs1, vs0
1379 ; PWR9LE-NEXT:    xvadddp vs0, vs0, vs1
1380 ; PWR9LE-NEXT:    xxswapd vs1, vs0
1381 ; PWR9LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1382 ; PWR9LE-NEXT:    blr
1384 ; PWR9BE-LABEL: v8f64_fast:
1385 ; PWR9BE:       # %bb.0: # %entry
1386 ; PWR9BE-NEXT:    xvadddp vs0, v3, v5
1387 ; PWR9BE-NEXT:    xvadddp vs1, v2, v4
1388 ; PWR9BE-NEXT:    xvadddp vs0, vs1, vs0
1389 ; PWR9BE-NEXT:    xxswapd vs1, vs0
1390 ; PWR9BE-NEXT:    xvadddp vs1, vs0, vs1
1391 ; PWR9BE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1392 ; PWR9BE-NEXT:    blr
1394 ; PWR10LE-LABEL: v8f64_fast:
1395 ; PWR10LE:       # %bb.0: # %entry
1396 ; PWR10LE-NEXT:    xvadddp vs0, v3, v5
1397 ; PWR10LE-NEXT:    xvadddp vs1, v2, v4
1398 ; PWR10LE-NEXT:    xvadddp vs0, vs1, vs0
1399 ; PWR10LE-NEXT:    xxswapd vs1, vs0
1400 ; PWR10LE-NEXT:    xvadddp vs0, vs0, vs1
1401 ; PWR10LE-NEXT:    xxswapd vs1, vs0
1402 ; PWR10LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1403 ; PWR10LE-NEXT:    blr
1405 ; PWR10BE-LABEL: v8f64_fast:
1406 ; PWR10BE:       # %bb.0: # %entry
1407 ; PWR10BE-NEXT:    xvadddp vs0, v3, v5
1408 ; PWR10BE-NEXT:    xvadddp vs1, v2, v4
1409 ; PWR10BE-NEXT:    xvadddp vs0, vs1, vs0
1410 ; PWR10BE-NEXT:    xxswapd vs1, vs0
1411 ; PWR10BE-NEXT:    xvadddp vs1, vs0, vs1
1412 ; PWR10BE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1413 ; PWR10BE-NEXT:    blr
1414 entry:
1415   %0 = call fast double @llvm.vector.reduce.fadd.v8f64(double -0.000000e+00, <8 x double> %a)
1416   ret double %0
1419 define dso_local double @v16f64(<16 x double> %a) local_unnamed_addr #0 {
1420 ; PWR9LE-LABEL: v16f64:
1421 ; PWR9LE:       # %bb.0: # %entry
1422 ; PWR9LE-NEXT:    xxswapd vs0, v2
1423 ; PWR9LE-NEXT:    xxswapd vs1, v3
1424 ; PWR9LE-NEXT:    xsadddp f0, f0, v2
1425 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1426 ; PWR9LE-NEXT:    xxswapd vs1, v4
1427 ; PWR9LE-NEXT:    xsadddp f0, f0, v3
1428 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1429 ; PWR9LE-NEXT:    xxswapd vs1, v5
1430 ; PWR9LE-NEXT:    xsadddp f0, f0, v4
1431 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1432 ; PWR9LE-NEXT:    xxswapd vs1, v6
1433 ; PWR9LE-NEXT:    xsadddp f0, f0, v5
1434 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1435 ; PWR9LE-NEXT:    xxswapd vs1, v7
1436 ; PWR9LE-NEXT:    xsadddp f0, f0, v6
1437 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1438 ; PWR9LE-NEXT:    xxswapd vs1, v8
1439 ; PWR9LE-NEXT:    xsadddp f0, f0, v7
1440 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1441 ; PWR9LE-NEXT:    xxswapd vs1, v9
1442 ; PWR9LE-NEXT:    xsadddp f0, f0, v8
1443 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1444 ; PWR9LE-NEXT:    xsadddp f1, f0, v9
1445 ; PWR9LE-NEXT:    blr
1447 ; PWR9BE-LABEL: v16f64:
1448 ; PWR9BE:       # %bb.0: # %entry
1449 ; PWR9BE-NEXT:    xxswapd vs0, v2
1450 ; PWR9BE-NEXT:    xxswapd vs1, v3
1451 ; PWR9BE-NEXT:    xsadddp f0, v2, f0
1452 ; PWR9BE-NEXT:    xsadddp f0, f0, v3
1453 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1454 ; PWR9BE-NEXT:    xxswapd vs1, v4
1455 ; PWR9BE-NEXT:    xsadddp f0, f0, v4
1456 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1457 ; PWR9BE-NEXT:    xxswapd vs1, v5
1458 ; PWR9BE-NEXT:    xsadddp f0, f0, v5
1459 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1460 ; PWR9BE-NEXT:    xxswapd vs1, v6
1461 ; PWR9BE-NEXT:    xsadddp f0, f0, v6
1462 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1463 ; PWR9BE-NEXT:    xxswapd vs1, v7
1464 ; PWR9BE-NEXT:    xsadddp f0, f0, v7
1465 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1466 ; PWR9BE-NEXT:    xxswapd vs1, v8
1467 ; PWR9BE-NEXT:    xsadddp f0, f0, v8
1468 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1469 ; PWR9BE-NEXT:    xxswapd vs1, v9
1470 ; PWR9BE-NEXT:    xsadddp f0, f0, v9
1471 ; PWR9BE-NEXT:    xsadddp f1, f0, f1
1472 ; PWR9BE-NEXT:    blr
1474 ; PWR10LE-LABEL: v16f64:
1475 ; PWR10LE:       # %bb.0: # %entry
1476 ; PWR10LE-NEXT:    xxswapd vs0, v2
1477 ; PWR10LE-NEXT:    xxswapd vs1, v3
1478 ; PWR10LE-NEXT:    xsadddp f0, f0, v2
1479 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1480 ; PWR10LE-NEXT:    xxswapd vs1, v4
1481 ; PWR10LE-NEXT:    xsadddp f0, f0, v3
1482 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1483 ; PWR10LE-NEXT:    xxswapd vs1, v5
1484 ; PWR10LE-NEXT:    xsadddp f0, f0, v4
1485 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1486 ; PWR10LE-NEXT:    xxswapd vs1, v6
1487 ; PWR10LE-NEXT:    xsadddp f0, f0, v5
1488 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1489 ; PWR10LE-NEXT:    xxswapd vs1, v7
1490 ; PWR10LE-NEXT:    xsadddp f0, f0, v6
1491 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1492 ; PWR10LE-NEXT:    xxswapd vs1, v8
1493 ; PWR10LE-NEXT:    xsadddp f0, f0, v7
1494 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1495 ; PWR10LE-NEXT:    xxswapd vs1, v9
1496 ; PWR10LE-NEXT:    xsadddp f0, f0, v8
1497 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1498 ; PWR10LE-NEXT:    xsadddp f1, f0, v9
1499 ; PWR10LE-NEXT:    blr
1501 ; PWR10BE-LABEL: v16f64:
1502 ; PWR10BE:       # %bb.0: # %entry
1503 ; PWR10BE-NEXT:    xxswapd vs0, v2
1504 ; PWR10BE-NEXT:    xxswapd vs1, v3
1505 ; PWR10BE-NEXT:    xsadddp f0, v2, f0
1506 ; PWR10BE-NEXT:    xsadddp f0, f0, v3
1507 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1508 ; PWR10BE-NEXT:    xxswapd vs1, v4
1509 ; PWR10BE-NEXT:    xsadddp f0, f0, v4
1510 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1511 ; PWR10BE-NEXT:    xxswapd vs1, v5
1512 ; PWR10BE-NEXT:    xsadddp f0, f0, v5
1513 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1514 ; PWR10BE-NEXT:    xxswapd vs1, v6
1515 ; PWR10BE-NEXT:    xsadddp f0, f0, v6
1516 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1517 ; PWR10BE-NEXT:    xxswapd vs1, v7
1518 ; PWR10BE-NEXT:    xsadddp f0, f0, v7
1519 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1520 ; PWR10BE-NEXT:    xxswapd vs1, v8
1521 ; PWR10BE-NEXT:    xsadddp f0, f0, v8
1522 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1523 ; PWR10BE-NEXT:    xxswapd vs1, v9
1524 ; PWR10BE-NEXT:    xsadddp f0, f0, v9
1525 ; PWR10BE-NEXT:    xsadddp f1, f0, f1
1526 ; PWR10BE-NEXT:    blr
1527 entry:
1528   %0 = call double @llvm.vector.reduce.fadd.v16f64(double -0.000000e+00, <16 x double> %a)
1529   ret double %0
1532 define dso_local double @v16f64_b(<16 x double> %a, double %b) local_unnamed_addr #0 {
1533 ; PWR9LE-LABEL: v16f64_b:
1534 ; PWR9LE:       # %bb.0: # %entry
1535 ; PWR9LE-NEXT:    xxswapd vs0, v2
1536 ; PWR9LE-NEXT:    xsadddp f0, f1, f0
1537 ; PWR9LE-NEXT:    xxswapd vs1, v3
1538 ; PWR9LE-NEXT:    xsadddp f0, f0, v2
1539 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1540 ; PWR9LE-NEXT:    xxswapd vs1, v4
1541 ; PWR9LE-NEXT:    xsadddp f0, f0, v3
1542 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1543 ; PWR9LE-NEXT:    xxswapd vs1, v5
1544 ; PWR9LE-NEXT:    xsadddp f0, f0, v4
1545 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1546 ; PWR9LE-NEXT:    xxswapd vs1, v6
1547 ; PWR9LE-NEXT:    xsadddp f0, f0, v5
1548 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1549 ; PWR9LE-NEXT:    xxswapd vs1, v7
1550 ; PWR9LE-NEXT:    xsadddp f0, f0, v6
1551 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1552 ; PWR9LE-NEXT:    xxswapd vs1, v8
1553 ; PWR9LE-NEXT:    xsadddp f0, f0, v7
1554 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1555 ; PWR9LE-NEXT:    xxswapd vs1, v9
1556 ; PWR9LE-NEXT:    xsadddp f0, f0, v8
1557 ; PWR9LE-NEXT:    xsadddp f0, f0, f1
1558 ; PWR9LE-NEXT:    xsadddp f1, f0, v9
1559 ; PWR9LE-NEXT:    blr
1561 ; PWR9BE-LABEL: v16f64_b:
1562 ; PWR9BE:       # %bb.0: # %entry
1563 ; PWR9BE-NEXT:    xsadddp f0, f1, v2
1564 ; PWR9BE-NEXT:    xxswapd vs1, v2
1565 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1566 ; PWR9BE-NEXT:    xxswapd vs1, v3
1567 ; PWR9BE-NEXT:    xsadddp f0, f0, v3
1568 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1569 ; PWR9BE-NEXT:    xxswapd vs1, v4
1570 ; PWR9BE-NEXT:    xsadddp f0, f0, v4
1571 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1572 ; PWR9BE-NEXT:    xxswapd vs1, v5
1573 ; PWR9BE-NEXT:    xsadddp f0, f0, v5
1574 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1575 ; PWR9BE-NEXT:    xxswapd vs1, v6
1576 ; PWR9BE-NEXT:    xsadddp f0, f0, v6
1577 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1578 ; PWR9BE-NEXT:    xxswapd vs1, v7
1579 ; PWR9BE-NEXT:    xsadddp f0, f0, v7
1580 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1581 ; PWR9BE-NEXT:    xxswapd vs1, v8
1582 ; PWR9BE-NEXT:    xsadddp f0, f0, v8
1583 ; PWR9BE-NEXT:    xsadddp f0, f0, f1
1584 ; PWR9BE-NEXT:    xxswapd vs1, v9
1585 ; PWR9BE-NEXT:    xsadddp f0, f0, v9
1586 ; PWR9BE-NEXT:    xsadddp f1, f0, f1
1587 ; PWR9BE-NEXT:    blr
1589 ; PWR10LE-LABEL: v16f64_b:
1590 ; PWR10LE:       # %bb.0: # %entry
1591 ; PWR10LE-NEXT:    xxswapd vs0, v2
1592 ; PWR10LE-NEXT:    xsadddp f0, f1, f0
1593 ; PWR10LE-NEXT:    xxswapd vs1, v3
1594 ; PWR10LE-NEXT:    xsadddp f0, f0, v2
1595 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1596 ; PWR10LE-NEXT:    xxswapd vs1, v4
1597 ; PWR10LE-NEXT:    xsadddp f0, f0, v3
1598 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1599 ; PWR10LE-NEXT:    xxswapd vs1, v5
1600 ; PWR10LE-NEXT:    xsadddp f0, f0, v4
1601 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1602 ; PWR10LE-NEXT:    xxswapd vs1, v6
1603 ; PWR10LE-NEXT:    xsadddp f0, f0, v5
1604 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1605 ; PWR10LE-NEXT:    xxswapd vs1, v7
1606 ; PWR10LE-NEXT:    xsadddp f0, f0, v6
1607 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1608 ; PWR10LE-NEXT:    xxswapd vs1, v8
1609 ; PWR10LE-NEXT:    xsadddp f0, f0, v7
1610 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1611 ; PWR10LE-NEXT:    xxswapd vs1, v9
1612 ; PWR10LE-NEXT:    xsadddp f0, f0, v8
1613 ; PWR10LE-NEXT:    xsadddp f0, f0, f1
1614 ; PWR10LE-NEXT:    xsadddp f1, f0, v9
1615 ; PWR10LE-NEXT:    blr
1617 ; PWR10BE-LABEL: v16f64_b:
1618 ; PWR10BE:       # %bb.0: # %entry
1619 ; PWR10BE-NEXT:    xsadddp f0, f1, v2
1620 ; PWR10BE-NEXT:    xxswapd vs1, v2
1621 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1622 ; PWR10BE-NEXT:    xxswapd vs1, v3
1623 ; PWR10BE-NEXT:    xsadddp f0, f0, v3
1624 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1625 ; PWR10BE-NEXT:    xxswapd vs1, v4
1626 ; PWR10BE-NEXT:    xsadddp f0, f0, v4
1627 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1628 ; PWR10BE-NEXT:    xxswapd vs1, v5
1629 ; PWR10BE-NEXT:    xsadddp f0, f0, v5
1630 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1631 ; PWR10BE-NEXT:    xxswapd vs1, v6
1632 ; PWR10BE-NEXT:    xsadddp f0, f0, v6
1633 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1634 ; PWR10BE-NEXT:    xxswapd vs1, v7
1635 ; PWR10BE-NEXT:    xsadddp f0, f0, v7
1636 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1637 ; PWR10BE-NEXT:    xxswapd vs1, v8
1638 ; PWR10BE-NEXT:    xsadddp f0, f0, v8
1639 ; PWR10BE-NEXT:    xsadddp f0, f0, f1
1640 ; PWR10BE-NEXT:    xxswapd vs1, v9
1641 ; PWR10BE-NEXT:    xsadddp f0, f0, v9
1642 ; PWR10BE-NEXT:    xsadddp f1, f0, f1
1643 ; PWR10BE-NEXT:    blr
1644 entry:
1645   %0 = call double @llvm.vector.reduce.fadd.v16f64(double %b, <16 x double> %a)
1646   ret double %0
1649 define dso_local double @v16f64_fast(<16 x double> %a) local_unnamed_addr #0 {
1650 ; PWR9LE-LABEL: v16f64_fast:
1651 ; PWR9LE:       # %bb.0: # %entry
1652 ; PWR9LE-NEXT:    xvadddp vs0, v4, v8
1653 ; PWR9LE-NEXT:    xvadddp vs1, v2, v6
1654 ; PWR9LE-NEXT:    xvadddp vs2, v5, v9
1655 ; PWR9LE-NEXT:    xvadddp vs3, v3, v7
1656 ; PWR9LE-NEXT:    xvadddp vs2, vs3, vs2
1657 ; PWR9LE-NEXT:    xvadddp vs0, vs1, vs0
1658 ; PWR9LE-NEXT:    xvadddp vs0, vs0, vs2
1659 ; PWR9LE-NEXT:    xxswapd vs1, vs0
1660 ; PWR9LE-NEXT:    xvadddp vs0, vs0, vs1
1661 ; PWR9LE-NEXT:    xxswapd vs1, vs0
1662 ; PWR9LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1663 ; PWR9LE-NEXT:    blr
1665 ; PWR9BE-LABEL: v16f64_fast:
1666 ; PWR9BE:       # %bb.0: # %entry
1667 ; PWR9BE-NEXT:    xvadddp vs0, v4, v8
1668 ; PWR9BE-NEXT:    xvadddp vs1, v2, v6
1669 ; PWR9BE-NEXT:    xvadddp vs2, v5, v9
1670 ; PWR9BE-NEXT:    xvadddp vs3, v3, v7
1671 ; PWR9BE-NEXT:    xvadddp vs2, vs3, vs2
1672 ; PWR9BE-NEXT:    xvadddp vs0, vs1, vs0
1673 ; PWR9BE-NEXT:    xvadddp vs0, vs0, vs2
1674 ; PWR9BE-NEXT:    xxswapd vs1, vs0
1675 ; PWR9BE-NEXT:    xvadddp vs1, vs0, vs1
1676 ; PWR9BE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1677 ; PWR9BE-NEXT:    blr
1679 ; PWR10LE-LABEL: v16f64_fast:
1680 ; PWR10LE:       # %bb.0: # %entry
1681 ; PWR10LE-NEXT:    xvadddp vs0, v4, v8
1682 ; PWR10LE-NEXT:    xvadddp vs1, v2, v6
1683 ; PWR10LE-NEXT:    xvadddp vs2, v5, v9
1684 ; PWR10LE-NEXT:    xvadddp vs3, v3, v7
1685 ; PWR10LE-NEXT:    xvadddp vs2, vs3, vs2
1686 ; PWR10LE-NEXT:    xvadddp vs0, vs1, vs0
1687 ; PWR10LE-NEXT:    xvadddp vs0, vs0, vs2
1688 ; PWR10LE-NEXT:    xxswapd vs1, vs0
1689 ; PWR10LE-NEXT:    xvadddp vs0, vs0, vs1
1690 ; PWR10LE-NEXT:    xxswapd vs1, vs0
1691 ; PWR10LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1692 ; PWR10LE-NEXT:    blr
1694 ; PWR10BE-LABEL: v16f64_fast:
1695 ; PWR10BE:       # %bb.0: # %entry
1696 ; PWR10BE-NEXT:    xvadddp vs0, v4, v8
1697 ; PWR10BE-NEXT:    xvadddp vs1, v2, v6
1698 ; PWR10BE-NEXT:    xvadddp vs2, v5, v9
1699 ; PWR10BE-NEXT:    xvadddp vs3, v3, v7
1700 ; PWR10BE-NEXT:    xvadddp vs2, vs3, vs2
1701 ; PWR10BE-NEXT:    xvadddp vs0, vs1, vs0
1702 ; PWR10BE-NEXT:    xvadddp vs0, vs0, vs2
1703 ; PWR10BE-NEXT:    xxswapd vs1, vs0
1704 ; PWR10BE-NEXT:    xvadddp vs1, vs0, vs1
1705 ; PWR10BE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1706 ; PWR10BE-NEXT:    blr
1707 entry:
1708   %0 = call fast double @llvm.vector.reduce.fadd.v16f64(double -0.000000e+00, <16 x double> %a)
1709   ret double %0
1712 define dso_local double @v32f64(<32 x double> %a) local_unnamed_addr #0 {
1713 ; PWR9LE-LABEL: v32f64:
1714 ; PWR9LE:       # %bb.0: # %entry
1715 ; PWR9LE-NEXT:    xxswapd vs4, v2
1716 ; PWR9LE-NEXT:    xxswapd vs5, v3
1717 ; PWR9LE-NEXT:    lxv vs3, 224(r1)
1718 ; PWR9LE-NEXT:    lxv vs2, 240(r1)
1719 ; PWR9LE-NEXT:    lxv vs1, 256(r1)
1720 ; PWR9LE-NEXT:    lxv vs0, 272(r1)
1721 ; PWR9LE-NEXT:    xsadddp f4, f4, v2
1722 ; PWR9LE-NEXT:    xsadddp f4, f4, f5
1723 ; PWR9LE-NEXT:    xxswapd vs5, v4
1724 ; PWR9LE-NEXT:    xsadddp f4, f4, v3
1725 ; PWR9LE-NEXT:    xsadddp f4, f4, f5
1726 ; PWR9LE-NEXT:    xxswapd vs5, v5
1727 ; PWR9LE-NEXT:    xsadddp f4, f4, v4
1728 ; PWR9LE-NEXT:    xsadddp f4, f4, f5
1729 ; PWR9LE-NEXT:    xxswapd vs5, v6
1730 ; PWR9LE-NEXT:    xsadddp f4, f4, v5
1731 ; PWR9LE-NEXT:    xsadddp f4, f4, f5
1732 ; PWR9LE-NEXT:    xxswapd vs5, v7
1733 ; PWR9LE-NEXT:    xsadddp f4, f4, v6
1734 ; PWR9LE-NEXT:    xsadddp f4, f4, f5
1735 ; PWR9LE-NEXT:    xxswapd vs5, v8
1736 ; PWR9LE-NEXT:    xsadddp f4, f4, v7
1737 ; PWR9LE-NEXT:    xsadddp f4, f4, f5
1738 ; PWR9LE-NEXT:    xxswapd vs5, v9
1739 ; PWR9LE-NEXT:    xsadddp f4, f4, v8
1740 ; PWR9LE-NEXT:    xsadddp f4, f4, f5
1741 ; PWR9LE-NEXT:    xxswapd vs5, v10
1742 ; PWR9LE-NEXT:    xsadddp f4, f4, v9
1743 ; PWR9LE-NEXT:    xsadddp f4, f4, f5
1744 ; PWR9LE-NEXT:    xxswapd vs5, v11
1745 ; PWR9LE-NEXT:    xsadddp f4, f4, v10
1746 ; PWR9LE-NEXT:    xsadddp f4, f4, f5
1747 ; PWR9LE-NEXT:    xxswapd vs5, v12
1748 ; PWR9LE-NEXT:    xsadddp f4, f4, v11
1749 ; PWR9LE-NEXT:    xsadddp f4, f4, f5
1750 ; PWR9LE-NEXT:    xxswapd vs5, v13
1751 ; PWR9LE-NEXT:    xsadddp f4, f4, v12
1752 ; PWR9LE-NEXT:    xsadddp f4, f4, f5
1753 ; PWR9LE-NEXT:    xxswapd vs5, vs3
1754 ; PWR9LE-NEXT:    xsadddp f4, f4, v13
1755 ; PWR9LE-NEXT:    xsadddp f4, f4, f5
1756 ; PWR9LE-NEXT:    xsadddp f3, f4, f3
1757 ; PWR9LE-NEXT:    xxswapd vs4, vs2
1758 ; PWR9LE-NEXT:    xsadddp f3, f3, f4
1759 ; PWR9LE-NEXT:    xsadddp f2, f3, f2
1760 ; PWR9LE-NEXT:    xxswapd vs3, vs1
1761 ; PWR9LE-NEXT:    xsadddp f2, f2, f3
1762 ; PWR9LE-NEXT:    xsadddp f1, f2, f1
1763 ; PWR9LE-NEXT:    xxswapd vs2, vs0
1764 ; PWR9LE-NEXT:    xsadddp f1, f1, f2
1765 ; PWR9LE-NEXT:    xsadddp f1, f1, f0
1766 ; PWR9LE-NEXT:    blr
1768 ; PWR9BE-LABEL: v32f64:
1769 ; PWR9BE:       # %bb.0: # %entry
1770 ; PWR9BE-NEXT:    xxswapd vs4, v2
1771 ; PWR9BE-NEXT:    xxswapd vs5, v3
1772 ; PWR9BE-NEXT:    lxv vs3, 240(r1)
1773 ; PWR9BE-NEXT:    lxv vs2, 256(r1)
1774 ; PWR9BE-NEXT:    lxv vs1, 272(r1)
1775 ; PWR9BE-NEXT:    lxv vs0, 288(r1)
1776 ; PWR9BE-NEXT:    xsadddp f4, v2, f4
1777 ; PWR9BE-NEXT:    xsadddp f4, f4, v3
1778 ; PWR9BE-NEXT:    xsadddp f4, f4, f5
1779 ; PWR9BE-NEXT:    xxswapd vs5, v4
1780 ; PWR9BE-NEXT:    xsadddp f4, f4, v4
1781 ; PWR9BE-NEXT:    xsadddp f4, f4, f5
1782 ; PWR9BE-NEXT:    xxswapd vs5, v5
1783 ; PWR9BE-NEXT:    xsadddp f4, f4, v5
1784 ; PWR9BE-NEXT:    xsadddp f4, f4, f5
1785 ; PWR9BE-NEXT:    xxswapd vs5, v6
1786 ; PWR9BE-NEXT:    xsadddp f4, f4, v6
1787 ; PWR9BE-NEXT:    xsadddp f4, f4, f5
1788 ; PWR9BE-NEXT:    xxswapd vs5, v7
1789 ; PWR9BE-NEXT:    xsadddp f4, f4, v7
1790 ; PWR9BE-NEXT:    xsadddp f4, f4, f5
1791 ; PWR9BE-NEXT:    xxswapd vs5, v8
1792 ; PWR9BE-NEXT:    xsadddp f4, f4, v8
1793 ; PWR9BE-NEXT:    xsadddp f4, f4, f5
1794 ; PWR9BE-NEXT:    xxswapd vs5, v9
1795 ; PWR9BE-NEXT:    xsadddp f4, f4, v9
1796 ; PWR9BE-NEXT:    xsadddp f4, f4, f5
1797 ; PWR9BE-NEXT:    xxswapd vs5, v10
1798 ; PWR9BE-NEXT:    xsadddp f4, f4, v10
1799 ; PWR9BE-NEXT:    xsadddp f4, f4, f5
1800 ; PWR9BE-NEXT:    xxswapd vs5, v11
1801 ; PWR9BE-NEXT:    xsadddp f4, f4, v11
1802 ; PWR9BE-NEXT:    xsadddp f4, f4, f5
1803 ; PWR9BE-NEXT:    xxswapd vs5, v12
1804 ; PWR9BE-NEXT:    xsadddp f4, f4, v12
1805 ; PWR9BE-NEXT:    xsadddp f4, f4, f5
1806 ; PWR9BE-NEXT:    xxswapd vs5, v13
1807 ; PWR9BE-NEXT:    xsadddp f4, f4, v13
1808 ; PWR9BE-NEXT:    xsadddp f4, f4, f5
1809 ; PWR9BE-NEXT:    xsadddp f4, f4, f3
1810 ; PWR9BE-NEXT:    xxswapd vs3, vs3
1811 ; PWR9BE-NEXT:    xsadddp f3, f4, f3
1812 ; PWR9BE-NEXT:    xsadddp f3, f3, f2
1813 ; PWR9BE-NEXT:    xxswapd vs2, vs2
1814 ; PWR9BE-NEXT:    xsadddp f2, f3, f2
1815 ; PWR9BE-NEXT:    xsadddp f2, f2, f1
1816 ; PWR9BE-NEXT:    xxswapd vs1, vs1
1817 ; PWR9BE-NEXT:    xsadddp f1, f2, f1
1818 ; PWR9BE-NEXT:    xsadddp f1, f1, f0
1819 ; PWR9BE-NEXT:    xxswapd vs0, vs0
1820 ; PWR9BE-NEXT:    xsadddp f1, f1, f0
1821 ; PWR9BE-NEXT:    blr
1823 ; PWR10LE-LABEL: v32f64:
1824 ; PWR10LE:       # %bb.0: # %entry
1825 ; PWR10LE-NEXT:    xxswapd vs4, v2
1826 ; PWR10LE-NEXT:    xxswapd vs5, v3
1827 ; PWR10LE-NEXT:    lxv vs3, 224(r1)
1828 ; PWR10LE-NEXT:    lxv vs2, 240(r1)
1829 ; PWR10LE-NEXT:    xsadddp f4, f4, v2
1830 ; PWR10LE-NEXT:    lxv vs1, 256(r1)
1831 ; PWR10LE-NEXT:    lxv vs0, 272(r1)
1832 ; PWR10LE-NEXT:    xsadddp f4, f4, f5
1833 ; PWR10LE-NEXT:    xxswapd vs5, v4
1834 ; PWR10LE-NEXT:    xsadddp f4, f4, v3
1835 ; PWR10LE-NEXT:    xsadddp f4, f4, f5
1836 ; PWR10LE-NEXT:    xxswapd vs5, v5
1837 ; PWR10LE-NEXT:    xsadddp f4, f4, v4
1838 ; PWR10LE-NEXT:    xsadddp f4, f4, f5
1839 ; PWR10LE-NEXT:    xxswapd vs5, v6
1840 ; PWR10LE-NEXT:    xsadddp f4, f4, v5
1841 ; PWR10LE-NEXT:    xsadddp f4, f4, f5
1842 ; PWR10LE-NEXT:    xxswapd vs5, v7
1843 ; PWR10LE-NEXT:    xsadddp f4, f4, v6
1844 ; PWR10LE-NEXT:    xsadddp f4, f4, f5
1845 ; PWR10LE-NEXT:    xxswapd vs5, v8
1846 ; PWR10LE-NEXT:    xsadddp f4, f4, v7
1847 ; PWR10LE-NEXT:    xsadddp f4, f4, f5
1848 ; PWR10LE-NEXT:    xxswapd vs5, v9
1849 ; PWR10LE-NEXT:    xsadddp f4, f4, v8
1850 ; PWR10LE-NEXT:    xsadddp f4, f4, f5
1851 ; PWR10LE-NEXT:    xxswapd vs5, v10
1852 ; PWR10LE-NEXT:    xsadddp f4, f4, v9
1853 ; PWR10LE-NEXT:    xsadddp f4, f4, f5
1854 ; PWR10LE-NEXT:    xxswapd vs5, v11
1855 ; PWR10LE-NEXT:    xsadddp f4, f4, v10
1856 ; PWR10LE-NEXT:    xsadddp f4, f4, f5
1857 ; PWR10LE-NEXT:    xxswapd vs5, v12
1858 ; PWR10LE-NEXT:    xsadddp f4, f4, v11
1859 ; PWR10LE-NEXT:    xsadddp f4, f4, f5
1860 ; PWR10LE-NEXT:    xxswapd vs5, v13
1861 ; PWR10LE-NEXT:    xsadddp f4, f4, v12
1862 ; PWR10LE-NEXT:    xsadddp f4, f4, f5
1863 ; PWR10LE-NEXT:    xxswapd vs5, vs3
1864 ; PWR10LE-NEXT:    xsadddp f4, f4, v13
1865 ; PWR10LE-NEXT:    xsadddp f4, f4, f5
1866 ; PWR10LE-NEXT:    xsadddp f3, f4, f3
1867 ; PWR10LE-NEXT:    xxswapd vs4, vs2
1868 ; PWR10LE-NEXT:    xsadddp f3, f3, f4
1869 ; PWR10LE-NEXT:    xsadddp f2, f3, f2
1870 ; PWR10LE-NEXT:    xxswapd vs3, vs1
1871 ; PWR10LE-NEXT:    xsadddp f2, f2, f3
1872 ; PWR10LE-NEXT:    xsadddp f1, f2, f1
1873 ; PWR10LE-NEXT:    xxswapd vs2, vs0
1874 ; PWR10LE-NEXT:    xsadddp f1, f1, f2
1875 ; PWR10LE-NEXT:    xsadddp f1, f1, f0
1876 ; PWR10LE-NEXT:    blr
1878 ; PWR10BE-LABEL: v32f64:
1879 ; PWR10BE:       # %bb.0: # %entry
1880 ; PWR10BE-NEXT:    xxswapd vs4, v2
1881 ; PWR10BE-NEXT:    xxswapd vs5, v3
1882 ; PWR10BE-NEXT:    lxv vs3, 240(r1)
1883 ; PWR10BE-NEXT:    lxv vs2, 256(r1)
1884 ; PWR10BE-NEXT:    xsadddp f4, v2, f4
1885 ; PWR10BE-NEXT:    lxv vs1, 272(r1)
1886 ; PWR10BE-NEXT:    lxv vs0, 288(r1)
1887 ; PWR10BE-NEXT:    xsadddp f4, f4, v3
1888 ; PWR10BE-NEXT:    xsadddp f4, f4, f5
1889 ; PWR10BE-NEXT:    xxswapd vs5, v4
1890 ; PWR10BE-NEXT:    xsadddp f4, f4, v4
1891 ; PWR10BE-NEXT:    xsadddp f4, f4, f5
1892 ; PWR10BE-NEXT:    xxswapd vs5, v5
1893 ; PWR10BE-NEXT:    xsadddp f4, f4, v5
1894 ; PWR10BE-NEXT:    xsadddp f4, f4, f5
1895 ; PWR10BE-NEXT:    xxswapd vs5, v6
1896 ; PWR10BE-NEXT:    xsadddp f4, f4, v6
1897 ; PWR10BE-NEXT:    xsadddp f4, f4, f5
1898 ; PWR10BE-NEXT:    xxswapd vs5, v7
1899 ; PWR10BE-NEXT:    xsadddp f4, f4, v7
1900 ; PWR10BE-NEXT:    xsadddp f4, f4, f5
1901 ; PWR10BE-NEXT:    xxswapd vs5, v8
1902 ; PWR10BE-NEXT:    xsadddp f4, f4, v8
1903 ; PWR10BE-NEXT:    xsadddp f4, f4, f5
1904 ; PWR10BE-NEXT:    xxswapd vs5, v9
1905 ; PWR10BE-NEXT:    xsadddp f4, f4, v9
1906 ; PWR10BE-NEXT:    xsadddp f4, f4, f5
1907 ; PWR10BE-NEXT:    xxswapd vs5, v10
1908 ; PWR10BE-NEXT:    xsadddp f4, f4, v10
1909 ; PWR10BE-NEXT:    xsadddp f4, f4, f5
1910 ; PWR10BE-NEXT:    xxswapd vs5, v11
1911 ; PWR10BE-NEXT:    xsadddp f4, f4, v11
1912 ; PWR10BE-NEXT:    xsadddp f4, f4, f5
1913 ; PWR10BE-NEXT:    xxswapd vs5, v12
1914 ; PWR10BE-NEXT:    xsadddp f4, f4, v12
1915 ; PWR10BE-NEXT:    xsadddp f4, f4, f5
1916 ; PWR10BE-NEXT:    xxswapd vs5, v13
1917 ; PWR10BE-NEXT:    xsadddp f4, f4, v13
1918 ; PWR10BE-NEXT:    xsadddp f4, f4, f5
1919 ; PWR10BE-NEXT:    xsadddp f4, f4, f3
1920 ; PWR10BE-NEXT:    xxswapd vs3, vs3
1921 ; PWR10BE-NEXT:    xsadddp f3, f4, f3
1922 ; PWR10BE-NEXT:    xsadddp f3, f3, f2
1923 ; PWR10BE-NEXT:    xxswapd vs2, vs2
1924 ; PWR10BE-NEXT:    xsadddp f2, f3, f2
1925 ; PWR10BE-NEXT:    xsadddp f2, f2, f1
1926 ; PWR10BE-NEXT:    xxswapd vs1, vs1
1927 ; PWR10BE-NEXT:    xsadddp f1, f2, f1
1928 ; PWR10BE-NEXT:    xsadddp f1, f1, f0
1929 ; PWR10BE-NEXT:    xxswapd vs0, vs0
1930 ; PWR10BE-NEXT:    xsadddp f1, f1, f0
1931 ; PWR10BE-NEXT:    blr
1932 entry:
1933   %0 = call double @llvm.vector.reduce.fadd.v32f64(double -0.000000e+00, <32 x double> %a)
1934   ret double %0
1937 define dso_local double @v32f64_b(<32 x double> %a, double %b) local_unnamed_addr #0 {
1938 ; PWR9LE-LABEL: v32f64_b:
1939 ; PWR9LE:       # %bb.0: # %entry
1940 ; PWR9LE-NEXT:    xxswapd vs5, v2
1941 ; PWR9LE-NEXT:    lxv vs4, 224(r1)
1942 ; PWR9LE-NEXT:    lxv vs3, 240(r1)
1943 ; PWR9LE-NEXT:    lxv vs2, 256(r1)
1944 ; PWR9LE-NEXT:    lxv vs0, 272(r1)
1945 ; PWR9LE-NEXT:    xsadddp f1, f1, f5
1946 ; PWR9LE-NEXT:    xxswapd vs5, v3
1947 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
1948 ; PWR9LE-NEXT:    xsadddp f1, f1, f5
1949 ; PWR9LE-NEXT:    xxswapd vs5, v4
1950 ; PWR9LE-NEXT:    xsadddp f1, f1, v3
1951 ; PWR9LE-NEXT:    xsadddp f1, f1, f5
1952 ; PWR9LE-NEXT:    xxswapd vs5, v5
1953 ; PWR9LE-NEXT:    xsadddp f1, f1, v4
1954 ; PWR9LE-NEXT:    xsadddp f1, f1, f5
1955 ; PWR9LE-NEXT:    xxswapd vs5, v6
1956 ; PWR9LE-NEXT:    xsadddp f1, f1, v5
1957 ; PWR9LE-NEXT:    xsadddp f1, f1, f5
1958 ; PWR9LE-NEXT:    xxswapd vs5, v7
1959 ; PWR9LE-NEXT:    xsadddp f1, f1, v6
1960 ; PWR9LE-NEXT:    xsadddp f1, f1, f5
1961 ; PWR9LE-NEXT:    xxswapd vs5, v8
1962 ; PWR9LE-NEXT:    xsadddp f1, f1, v7
1963 ; PWR9LE-NEXT:    xsadddp f1, f1, f5
1964 ; PWR9LE-NEXT:    xxswapd vs5, v9
1965 ; PWR9LE-NEXT:    xsadddp f1, f1, v8
1966 ; PWR9LE-NEXT:    xsadddp f1, f1, f5
1967 ; PWR9LE-NEXT:    xxswapd vs5, v10
1968 ; PWR9LE-NEXT:    xsadddp f1, f1, v9
1969 ; PWR9LE-NEXT:    xsadddp f1, f1, f5
1970 ; PWR9LE-NEXT:    xxswapd vs5, v11
1971 ; PWR9LE-NEXT:    xsadddp f1, f1, v10
1972 ; PWR9LE-NEXT:    xsadddp f1, f1, f5
1973 ; PWR9LE-NEXT:    xxswapd vs5, v12
1974 ; PWR9LE-NEXT:    xsadddp f1, f1, v11
1975 ; PWR9LE-NEXT:    xsadddp f1, f1, f5
1976 ; PWR9LE-NEXT:    xxswapd vs5, v13
1977 ; PWR9LE-NEXT:    xsadddp f1, f1, v12
1978 ; PWR9LE-NEXT:    xsadddp f1, f1, f5
1979 ; PWR9LE-NEXT:    xxswapd vs5, vs4
1980 ; PWR9LE-NEXT:    xsadddp f1, f1, v13
1981 ; PWR9LE-NEXT:    xsadddp f1, f1, f5
1982 ; PWR9LE-NEXT:    xsadddp f1, f1, f4
1983 ; PWR9LE-NEXT:    xxswapd vs4, vs3
1984 ; PWR9LE-NEXT:    xsadddp f1, f1, f4
1985 ; PWR9LE-NEXT:    xsadddp f1, f1, f3
1986 ; PWR9LE-NEXT:    xxswapd vs3, vs2
1987 ; PWR9LE-NEXT:    xsadddp f1, f1, f3
1988 ; PWR9LE-NEXT:    xsadddp f1, f1, f2
1989 ; PWR9LE-NEXT:    xxswapd vs2, vs0
1990 ; PWR9LE-NEXT:    xsadddp f1, f1, f2
1991 ; PWR9LE-NEXT:    xsadddp f1, f1, f0
1992 ; PWR9LE-NEXT:    blr
1994 ; PWR9BE-LABEL: v32f64_b:
1995 ; PWR9BE:       # %bb.0: # %entry
1996 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
1997 ; PWR9BE-NEXT:    xxswapd vs5, v2
1998 ; PWR9BE-NEXT:    lxv vs4, 240(r1)
1999 ; PWR9BE-NEXT:    lxv vs3, 256(r1)
2000 ; PWR9BE-NEXT:    lxv vs2, 272(r1)
2001 ; PWR9BE-NEXT:    lxv vs0, 288(r1)
2002 ; PWR9BE-NEXT:    xsadddp f1, f1, f5
2003 ; PWR9BE-NEXT:    xxswapd vs5, v3
2004 ; PWR9BE-NEXT:    xsadddp f1, f1, v3
2005 ; PWR9BE-NEXT:    xsadddp f1, f1, f5
2006 ; PWR9BE-NEXT:    xxswapd vs5, v4
2007 ; PWR9BE-NEXT:    xsadddp f1, f1, v4
2008 ; PWR9BE-NEXT:    xsadddp f1, f1, f5
2009 ; PWR9BE-NEXT:    xxswapd vs5, v5
2010 ; PWR9BE-NEXT:    xsadddp f1, f1, v5
2011 ; PWR9BE-NEXT:    xsadddp f1, f1, f5
2012 ; PWR9BE-NEXT:    xxswapd vs5, v6
2013 ; PWR9BE-NEXT:    xsadddp f1, f1, v6
2014 ; PWR9BE-NEXT:    xsadddp f1, f1, f5
2015 ; PWR9BE-NEXT:    xxswapd vs5, v7
2016 ; PWR9BE-NEXT:    xsadddp f1, f1, v7
2017 ; PWR9BE-NEXT:    xsadddp f1, f1, f5
2018 ; PWR9BE-NEXT:    xxswapd vs5, v8
2019 ; PWR9BE-NEXT:    xsadddp f1, f1, v8
2020 ; PWR9BE-NEXT:    xsadddp f1, f1, f5
2021 ; PWR9BE-NEXT:    xxswapd vs5, v9
2022 ; PWR9BE-NEXT:    xsadddp f1, f1, v9
2023 ; PWR9BE-NEXT:    xsadddp f1, f1, f5
2024 ; PWR9BE-NEXT:    xxswapd vs5, v10
2025 ; PWR9BE-NEXT:    xsadddp f1, f1, v10
2026 ; PWR9BE-NEXT:    xsadddp f1, f1, f5
2027 ; PWR9BE-NEXT:    xxswapd vs5, v11
2028 ; PWR9BE-NEXT:    xsadddp f1, f1, v11
2029 ; PWR9BE-NEXT:    xsadddp f1, f1, f5
2030 ; PWR9BE-NEXT:    xxswapd vs5, v12
2031 ; PWR9BE-NEXT:    xsadddp f1, f1, v12
2032 ; PWR9BE-NEXT:    xsadddp f1, f1, f5
2033 ; PWR9BE-NEXT:    xxswapd vs5, v13
2034 ; PWR9BE-NEXT:    xsadddp f1, f1, v13
2035 ; PWR9BE-NEXT:    xsadddp f1, f1, f5
2036 ; PWR9BE-NEXT:    xsadddp f1, f1, f4
2037 ; PWR9BE-NEXT:    xxswapd vs4, vs4
2038 ; PWR9BE-NEXT:    xsadddp f1, f1, f4
2039 ; PWR9BE-NEXT:    xsadddp f1, f1, f3
2040 ; PWR9BE-NEXT:    xxswapd vs3, vs3
2041 ; PWR9BE-NEXT:    xsadddp f1, f1, f3
2042 ; PWR9BE-NEXT:    xsadddp f1, f1, f2
2043 ; PWR9BE-NEXT:    xxswapd vs2, vs2
2044 ; PWR9BE-NEXT:    xsadddp f1, f1, f2
2045 ; PWR9BE-NEXT:    xsadddp f1, f1, f0
2046 ; PWR9BE-NEXT:    xxswapd vs0, vs0
2047 ; PWR9BE-NEXT:    xsadddp f1, f1, f0
2048 ; PWR9BE-NEXT:    blr
2050 ; PWR10LE-LABEL: v32f64_b:
2051 ; PWR10LE:       # %bb.0: # %entry
2052 ; PWR10LE-NEXT:    xxswapd vs5, v2
2053 ; PWR10LE-NEXT:    lxv vs4, 224(r1)
2054 ; PWR10LE-NEXT:    lxv vs3, 240(r1)
2055 ; PWR10LE-NEXT:    xsadddp f1, f1, f5
2056 ; PWR10LE-NEXT:    xxswapd vs5, v3
2057 ; PWR10LE-NEXT:    lxv vs2, 256(r1)
2058 ; PWR10LE-NEXT:    lxv vs0, 272(r1)
2059 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
2060 ; PWR10LE-NEXT:    xsadddp f1, f1, f5
2061 ; PWR10LE-NEXT:    xxswapd vs5, v4
2062 ; PWR10LE-NEXT:    xsadddp f1, f1, v3
2063 ; PWR10LE-NEXT:    xsadddp f1, f1, f5
2064 ; PWR10LE-NEXT:    xxswapd vs5, v5
2065 ; PWR10LE-NEXT:    xsadddp f1, f1, v4
2066 ; PWR10LE-NEXT:    xsadddp f1, f1, f5
2067 ; PWR10LE-NEXT:    xxswapd vs5, v6
2068 ; PWR10LE-NEXT:    xsadddp f1, f1, v5
2069 ; PWR10LE-NEXT:    xsadddp f1, f1, f5
2070 ; PWR10LE-NEXT:    xxswapd vs5, v7
2071 ; PWR10LE-NEXT:    xsadddp f1, f1, v6
2072 ; PWR10LE-NEXT:    xsadddp f1, f1, f5
2073 ; PWR10LE-NEXT:    xxswapd vs5, v8
2074 ; PWR10LE-NEXT:    xsadddp f1, f1, v7
2075 ; PWR10LE-NEXT:    xsadddp f1, f1, f5
2076 ; PWR10LE-NEXT:    xxswapd vs5, v9
2077 ; PWR10LE-NEXT:    xsadddp f1, f1, v8
2078 ; PWR10LE-NEXT:    xsadddp f1, f1, f5
2079 ; PWR10LE-NEXT:    xxswapd vs5, v10
2080 ; PWR10LE-NEXT:    xsadddp f1, f1, v9
2081 ; PWR10LE-NEXT:    xsadddp f1, f1, f5
2082 ; PWR10LE-NEXT:    xxswapd vs5, v11
2083 ; PWR10LE-NEXT:    xsadddp f1, f1, v10
2084 ; PWR10LE-NEXT:    xsadddp f1, f1, f5
2085 ; PWR10LE-NEXT:    xxswapd vs5, v12
2086 ; PWR10LE-NEXT:    xsadddp f1, f1, v11
2087 ; PWR10LE-NEXT:    xsadddp f1, f1, f5
2088 ; PWR10LE-NEXT:    xxswapd vs5, v13
2089 ; PWR10LE-NEXT:    xsadddp f1, f1, v12
2090 ; PWR10LE-NEXT:    xsadddp f1, f1, f5
2091 ; PWR10LE-NEXT:    xxswapd vs5, vs4
2092 ; PWR10LE-NEXT:    xsadddp f1, f1, v13
2093 ; PWR10LE-NEXT:    xsadddp f1, f1, f5
2094 ; PWR10LE-NEXT:    xsadddp f1, f1, f4
2095 ; PWR10LE-NEXT:    xxswapd vs4, vs3
2096 ; PWR10LE-NEXT:    xsadddp f1, f1, f4
2097 ; PWR10LE-NEXT:    xsadddp f1, f1, f3
2098 ; PWR10LE-NEXT:    xxswapd vs3, vs2
2099 ; PWR10LE-NEXT:    xsadddp f1, f1, f3
2100 ; PWR10LE-NEXT:    xsadddp f1, f1, f2
2101 ; PWR10LE-NEXT:    xxswapd vs2, vs0
2102 ; PWR10LE-NEXT:    xsadddp f1, f1, f2
2103 ; PWR10LE-NEXT:    xsadddp f1, f1, f0
2104 ; PWR10LE-NEXT:    blr
2106 ; PWR10BE-LABEL: v32f64_b:
2107 ; PWR10BE:       # %bb.0: # %entry
2108 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
2109 ; PWR10BE-NEXT:    xxswapd vs5, v2
2110 ; PWR10BE-NEXT:    lxv vs4, 240(r1)
2111 ; PWR10BE-NEXT:    lxv vs3, 256(r1)
2112 ; PWR10BE-NEXT:    xsadddp f1, f1, f5
2113 ; PWR10BE-NEXT:    xxswapd vs5, v3
2114 ; PWR10BE-NEXT:    lxv vs2, 272(r1)
2115 ; PWR10BE-NEXT:    lxv vs0, 288(r1)
2116 ; PWR10BE-NEXT:    xsadddp f1, f1, v3
2117 ; PWR10BE-NEXT:    xsadddp f1, f1, f5
2118 ; PWR10BE-NEXT:    xxswapd vs5, v4
2119 ; PWR10BE-NEXT:    xsadddp f1, f1, v4
2120 ; PWR10BE-NEXT:    xsadddp f1, f1, f5
2121 ; PWR10BE-NEXT:    xxswapd vs5, v5
2122 ; PWR10BE-NEXT:    xsadddp f1, f1, v5
2123 ; PWR10BE-NEXT:    xsadddp f1, f1, f5
2124 ; PWR10BE-NEXT:    xxswapd vs5, v6
2125 ; PWR10BE-NEXT:    xsadddp f1, f1, v6
2126 ; PWR10BE-NEXT:    xsadddp f1, f1, f5
2127 ; PWR10BE-NEXT:    xxswapd vs5, v7
2128 ; PWR10BE-NEXT:    xsadddp f1, f1, v7
2129 ; PWR10BE-NEXT:    xsadddp f1, f1, f5
2130 ; PWR10BE-NEXT:    xxswapd vs5, v8
2131 ; PWR10BE-NEXT:    xsadddp f1, f1, v8
2132 ; PWR10BE-NEXT:    xsadddp f1, f1, f5
2133 ; PWR10BE-NEXT:    xxswapd vs5, v9
2134 ; PWR10BE-NEXT:    xsadddp f1, f1, v9
2135 ; PWR10BE-NEXT:    xsadddp f1, f1, f5
2136 ; PWR10BE-NEXT:    xxswapd vs5, v10
2137 ; PWR10BE-NEXT:    xsadddp f1, f1, v10
2138 ; PWR10BE-NEXT:    xsadddp f1, f1, f5
2139 ; PWR10BE-NEXT:    xxswapd vs5, v11
2140 ; PWR10BE-NEXT:    xsadddp f1, f1, v11
2141 ; PWR10BE-NEXT:    xsadddp f1, f1, f5
2142 ; PWR10BE-NEXT:    xxswapd vs5, v12
2143 ; PWR10BE-NEXT:    xsadddp f1, f1, v12
2144 ; PWR10BE-NEXT:    xsadddp f1, f1, f5
2145 ; PWR10BE-NEXT:    xxswapd vs5, v13
2146 ; PWR10BE-NEXT:    xsadddp f1, f1, v13
2147 ; PWR10BE-NEXT:    xsadddp f1, f1, f5
2148 ; PWR10BE-NEXT:    xsadddp f1, f1, f4
2149 ; PWR10BE-NEXT:    xxswapd vs4, vs4
2150 ; PWR10BE-NEXT:    xsadddp f1, f1, f4
2151 ; PWR10BE-NEXT:    xsadddp f1, f1, f3
2152 ; PWR10BE-NEXT:    xxswapd vs3, vs3
2153 ; PWR10BE-NEXT:    xsadddp f1, f1, f3
2154 ; PWR10BE-NEXT:    xsadddp f1, f1, f2
2155 ; PWR10BE-NEXT:    xxswapd vs2, vs2
2156 ; PWR10BE-NEXT:    xsadddp f1, f1, f2
2157 ; PWR10BE-NEXT:    xsadddp f1, f1, f0
2158 ; PWR10BE-NEXT:    xxswapd vs0, vs0
2159 ; PWR10BE-NEXT:    xsadddp f1, f1, f0
2160 ; PWR10BE-NEXT:    blr
2161 entry:
2162   %0 = call double @llvm.vector.reduce.fadd.v32f64(double %b, <32 x double> %a)
2163   ret double %0
2166 define dso_local double @v32f64_fast(<32 x double> %a) local_unnamed_addr #0 {
2167 ; PWR9LE-LABEL: v32f64_fast:
2168 ; PWR9LE:       # %bb.0: # %entry
2169 ; PWR9LE-NEXT:    lxv vs0, 256(r1)
2170 ; PWR9LE-NEXT:    lxv vs1, 224(r1)
2171 ; PWR9LE-NEXT:    lxv vs2, 272(r1)
2172 ; PWR9LE-NEXT:    lxv vs3, 240(r1)
2173 ; PWR9LE-NEXT:    xvadddp vs4, v3, v11
2174 ; PWR9LE-NEXT:    xvadddp vs5, v5, v13
2175 ; PWR9LE-NEXT:    xvadddp vs6, v2, v10
2176 ; PWR9LE-NEXT:    xvadddp vs7, v4, v12
2177 ; PWR9LE-NEXT:    xvadddp vs3, v7, vs3
2178 ; PWR9LE-NEXT:    xvadddp vs2, v9, vs2
2179 ; PWR9LE-NEXT:    xvadddp vs1, v6, vs1
2180 ; PWR9LE-NEXT:    xvadddp vs0, v8, vs0
2181 ; PWR9LE-NEXT:    xvadddp vs0, vs7, vs0
2182 ; PWR9LE-NEXT:    xvadddp vs1, vs6, vs1
2183 ; PWR9LE-NEXT:    xvadddp vs2, vs5, vs2
2184 ; PWR9LE-NEXT:    xvadddp vs3, vs4, vs3
2185 ; PWR9LE-NEXT:    xvadddp vs2, vs3, vs2
2186 ; PWR9LE-NEXT:    xvadddp vs0, vs1, vs0
2187 ; PWR9LE-NEXT:    xvadddp vs0, vs0, vs2
2188 ; PWR9LE-NEXT:    xxswapd vs1, vs0
2189 ; PWR9LE-NEXT:    xvadddp vs0, vs0, vs1
2190 ; PWR9LE-NEXT:    xxswapd vs1, vs0
2191 ; PWR9LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
2192 ; PWR9LE-NEXT:    blr
2194 ; PWR9BE-LABEL: v32f64_fast:
2195 ; PWR9BE:       # %bb.0: # %entry
2196 ; PWR9BE-NEXT:    lxv vs0, 272(r1)
2197 ; PWR9BE-NEXT:    lxv vs1, 240(r1)
2198 ; PWR9BE-NEXT:    lxv vs2, 288(r1)
2199 ; PWR9BE-NEXT:    lxv vs3, 256(r1)
2200 ; PWR9BE-NEXT:    xvadddp vs4, v3, v11
2201 ; PWR9BE-NEXT:    xvadddp vs5, v5, v13
2202 ; PWR9BE-NEXT:    xvadddp vs6, v2, v10
2203 ; PWR9BE-NEXT:    xvadddp vs7, v4, v12
2204 ; PWR9BE-NEXT:    xvadddp vs3, v7, vs3
2205 ; PWR9BE-NEXT:    xvadddp vs2, v9, vs2
2206 ; PWR9BE-NEXT:    xvadddp vs1, v6, vs1
2207 ; PWR9BE-NEXT:    xvadddp vs0, v8, vs0
2208 ; PWR9BE-NEXT:    xvadddp vs0, vs7, vs0
2209 ; PWR9BE-NEXT:    xvadddp vs1, vs6, vs1
2210 ; PWR9BE-NEXT:    xvadddp vs2, vs5, vs2
2211 ; PWR9BE-NEXT:    xvadddp vs3, vs4, vs3
2212 ; PWR9BE-NEXT:    xvadddp vs2, vs3, vs2
2213 ; PWR9BE-NEXT:    xvadddp vs0, vs1, vs0
2214 ; PWR9BE-NEXT:    xvadddp vs0, vs0, vs2
2215 ; PWR9BE-NEXT:    xxswapd vs1, vs0
2216 ; PWR9BE-NEXT:    xvadddp vs1, vs0, vs1
2217 ; PWR9BE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
2218 ; PWR9BE-NEXT:    blr
2220 ; PWR10LE-LABEL: v32f64_fast:
2221 ; PWR10LE:       # %bb.0: # %entry
2222 ; PWR10LE-NEXT:    lxv vs0, 256(r1)
2223 ; PWR10LE-NEXT:    lxv vs1, 224(r1)
2224 ; PWR10LE-NEXT:    xvadddp vs4, v3, v11
2225 ; PWR10LE-NEXT:    xvadddp vs5, v5, v13
2226 ; PWR10LE-NEXT:    xvadddp vs6, v2, v10
2227 ; PWR10LE-NEXT:    xvadddp vs7, v4, v12
2228 ; PWR10LE-NEXT:    xvadddp vs1, v6, vs1
2229 ; PWR10LE-NEXT:    lxv vs2, 272(r1)
2230 ; PWR10LE-NEXT:    lxv vs3, 240(r1)
2231 ; PWR10LE-NEXT:    xvadddp vs3, v7, vs3
2232 ; PWR10LE-NEXT:    xvadddp vs2, v9, vs2
2233 ; PWR10LE-NEXT:    xvadddp vs0, v8, vs0
2234 ; PWR10LE-NEXT:    xvadddp vs0, vs7, vs0
2235 ; PWR10LE-NEXT:    xvadddp vs1, vs6, vs1
2236 ; PWR10LE-NEXT:    xvadddp vs2, vs5, vs2
2237 ; PWR10LE-NEXT:    xvadddp vs3, vs4, vs3
2238 ; PWR10LE-NEXT:    xvadddp vs2, vs3, vs2
2239 ; PWR10LE-NEXT:    xvadddp vs0, vs1, vs0
2240 ; PWR10LE-NEXT:    xvadddp vs0, vs0, vs2
2241 ; PWR10LE-NEXT:    xxswapd vs1, vs0
2242 ; PWR10LE-NEXT:    xvadddp vs0, vs0, vs1
2243 ; PWR10LE-NEXT:    xxswapd vs1, vs0
2244 ; PWR10LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
2245 ; PWR10LE-NEXT:    blr
2247 ; PWR10BE-LABEL: v32f64_fast:
2248 ; PWR10BE:       # %bb.0: # %entry
2249 ; PWR10BE-NEXT:    lxv vs0, 272(r1)
2250 ; PWR10BE-NEXT:    lxv vs1, 240(r1)
2251 ; PWR10BE-NEXT:    xvadddp vs4, v3, v11
2252 ; PWR10BE-NEXT:    xvadddp vs5, v5, v13
2253 ; PWR10BE-NEXT:    xvadddp vs6, v2, v10
2254 ; PWR10BE-NEXT:    xvadddp vs7, v4, v12
2255 ; PWR10BE-NEXT:    xvadddp vs1, v6, vs1
2256 ; PWR10BE-NEXT:    lxv vs2, 288(r1)
2257 ; PWR10BE-NEXT:    lxv vs3, 256(r1)
2258 ; PWR10BE-NEXT:    xvadddp vs3, v7, vs3
2259 ; PWR10BE-NEXT:    xvadddp vs2, v9, vs2
2260 ; PWR10BE-NEXT:    xvadddp vs0, v8, vs0
2261 ; PWR10BE-NEXT:    xvadddp vs0, vs7, vs0
2262 ; PWR10BE-NEXT:    xvadddp vs1, vs6, vs1
2263 ; PWR10BE-NEXT:    xvadddp vs2, vs5, vs2
2264 ; PWR10BE-NEXT:    xvadddp vs3, vs4, vs3
2265 ; PWR10BE-NEXT:    xvadddp vs2, vs3, vs2
2266 ; PWR10BE-NEXT:    xvadddp vs0, vs1, vs0
2267 ; PWR10BE-NEXT:    xvadddp vs0, vs0, vs2
2268 ; PWR10BE-NEXT:    xxswapd vs1, vs0
2269 ; PWR10BE-NEXT:    xvadddp vs1, vs0, vs1
2270 ; PWR10BE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
2271 ; PWR10BE-NEXT:    blr
2272 entry:
2273   %0 = call fast double @llvm.vector.reduce.fadd.v32f64(double -0.000000e+00, <32 x double> %a)
2274   ret double %0
2277 define dso_local double @v64f64(<64 x double> %a) local_unnamed_addr #0 {
2278 ; PWR9LE-LABEL: v64f64:
2279 ; PWR9LE:       # %bb.0: # %entry
2280 ; PWR9LE-NEXT:    xxswapd v18, v2
2281 ; PWR9LE-NEXT:    lxv v17, 224(r1)
2282 ; PWR9LE-NEXT:    lxv v16, 240(r1)
2283 ; PWR9LE-NEXT:    lxv v15, 256(r1)
2284 ; PWR9LE-NEXT:    lxv v14, 272(r1)
2285 ; PWR9LE-NEXT:    xsadddp v2, v18, v2
2286 ; PWR9LE-NEXT:    xxswapd v18, v3
2287 ; PWR9LE-NEXT:    lxv v1, 288(r1)
2288 ; PWR9LE-NEXT:    lxv v0, 304(r1)
2289 ; PWR9LE-NEXT:    lxv vs13, 320(r1)
2290 ; PWR9LE-NEXT:    lxv vs12, 336(r1)
2291 ; PWR9LE-NEXT:    lxv vs11, 352(r1)
2292 ; PWR9LE-NEXT:    lxv vs10, 368(r1)
2293 ; PWR9LE-NEXT:    lxv vs9, 384(r1)
2294 ; PWR9LE-NEXT:    lxv vs8, 400(r1)
2295 ; PWR9LE-NEXT:    lxv vs7, 416(r1)
2296 ; PWR9LE-NEXT:    lxv vs6, 432(r1)
2297 ; PWR9LE-NEXT:    lxv vs5, 448(r1)
2298 ; PWR9LE-NEXT:    lxv vs4, 464(r1)
2299 ; PWR9LE-NEXT:    xsadddp v2, v2, v18
2300 ; PWR9LE-NEXT:    lxv vs3, 480(r1)
2301 ; PWR9LE-NEXT:    lxv vs2, 496(r1)
2302 ; PWR9LE-NEXT:    lxv vs1, 512(r1)
2303 ; PWR9LE-NEXT:    lxv vs0, 528(r1)
2304 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2305 ; PWR9LE-NEXT:    xxswapd v3, v4
2306 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2307 ; PWR9LE-NEXT:    xxswapd v3, v5
2308 ; PWR9LE-NEXT:    xsadddp v2, v2, v4
2309 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2310 ; PWR9LE-NEXT:    xxswapd v3, v6
2311 ; PWR9LE-NEXT:    xsadddp v2, v2, v5
2312 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2313 ; PWR9LE-NEXT:    xxswapd v3, v7
2314 ; PWR9LE-NEXT:    xsadddp v2, v2, v6
2315 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2316 ; PWR9LE-NEXT:    xxswapd v3, v8
2317 ; PWR9LE-NEXT:    xsadddp v2, v2, v7
2318 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2319 ; PWR9LE-NEXT:    xxswapd v3, v9
2320 ; PWR9LE-NEXT:    xsadddp v2, v2, v8
2321 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2322 ; PWR9LE-NEXT:    xxswapd v3, v10
2323 ; PWR9LE-NEXT:    xsadddp v2, v2, v9
2324 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2325 ; PWR9LE-NEXT:    xxswapd v3, v11
2326 ; PWR9LE-NEXT:    xsadddp v2, v2, v10
2327 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2328 ; PWR9LE-NEXT:    xxswapd v3, v12
2329 ; PWR9LE-NEXT:    xsadddp v2, v2, v11
2330 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2331 ; PWR9LE-NEXT:    xxswapd v3, v13
2332 ; PWR9LE-NEXT:    xsadddp v2, v2, v12
2333 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2334 ; PWR9LE-NEXT:    xxswapd v3, v17
2335 ; PWR9LE-NEXT:    xsadddp v2, v2, v13
2336 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2337 ; PWR9LE-NEXT:    xxswapd v3, v16
2338 ; PWR9LE-NEXT:    xsadddp v2, v2, v17
2339 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2340 ; PWR9LE-NEXT:    xxswapd v3, v15
2341 ; PWR9LE-NEXT:    xsadddp v2, v2, v16
2342 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2343 ; PWR9LE-NEXT:    xxswapd v3, v14
2344 ; PWR9LE-NEXT:    xsadddp v2, v2, v15
2345 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2346 ; PWR9LE-NEXT:    xxswapd v3, v1
2347 ; PWR9LE-NEXT:    xsadddp v2, v2, v14
2348 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2349 ; PWR9LE-NEXT:    xxswapd v3, v0
2350 ; PWR9LE-NEXT:    xsadddp v2, v2, v1
2351 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2352 ; PWR9LE-NEXT:    xxswapd v3, vs13
2353 ; PWR9LE-NEXT:    xsadddp v2, v2, v0
2354 ; PWR9LE-NEXT:    xsadddp v2, v2, v3
2355 ; PWR9LE-NEXT:    xsadddp f13, v2, f13
2356 ; PWR9LE-NEXT:    xxswapd v2, vs12
2357 ; PWR9LE-NEXT:    xsadddp f13, f13, v2
2358 ; PWR9LE-NEXT:    xsadddp f12, f13, f12
2359 ; PWR9LE-NEXT:    xxswapd vs13, vs11
2360 ; PWR9LE-NEXT:    xsadddp f12, f12, f13
2361 ; PWR9LE-NEXT:    xsadddp f11, f12, f11
2362 ; PWR9LE-NEXT:    xxswapd vs12, vs10
2363 ; PWR9LE-NEXT:    xsadddp f11, f11, f12
2364 ; PWR9LE-NEXT:    xsadddp f10, f11, f10
2365 ; PWR9LE-NEXT:    xxswapd vs11, vs9
2366 ; PWR9LE-NEXT:    xsadddp f10, f10, f11
2367 ; PWR9LE-NEXT:    xsadddp f9, f10, f9
2368 ; PWR9LE-NEXT:    xxswapd vs10, vs8
2369 ; PWR9LE-NEXT:    xsadddp f9, f9, f10
2370 ; PWR9LE-NEXT:    xsadddp f8, f9, f8
2371 ; PWR9LE-NEXT:    xxswapd vs9, vs7
2372 ; PWR9LE-NEXT:    xsadddp f8, f8, f9
2373 ; PWR9LE-NEXT:    xsadddp f7, f8, f7
2374 ; PWR9LE-NEXT:    xxswapd vs8, vs6
2375 ; PWR9LE-NEXT:    xsadddp f7, f7, f8
2376 ; PWR9LE-NEXT:    xsadddp f6, f7, f6
2377 ; PWR9LE-NEXT:    xxswapd vs7, vs5
2378 ; PWR9LE-NEXT:    xsadddp f6, f6, f7
2379 ; PWR9LE-NEXT:    xsadddp f5, f6, f5
2380 ; PWR9LE-NEXT:    xxswapd vs6, vs4
2381 ; PWR9LE-NEXT:    xsadddp f5, f5, f6
2382 ; PWR9LE-NEXT:    xsadddp f4, f5, f4
2383 ; PWR9LE-NEXT:    xxswapd vs5, vs3
2384 ; PWR9LE-NEXT:    xsadddp f4, f4, f5
2385 ; PWR9LE-NEXT:    xsadddp f3, f4, f3
2386 ; PWR9LE-NEXT:    xxswapd vs4, vs2
2387 ; PWR9LE-NEXT:    xsadddp f3, f3, f4
2388 ; PWR9LE-NEXT:    xsadddp f2, f3, f2
2389 ; PWR9LE-NEXT:    xxswapd vs3, vs1
2390 ; PWR9LE-NEXT:    xsadddp f2, f2, f3
2391 ; PWR9LE-NEXT:    xsadddp f1, f2, f1
2392 ; PWR9LE-NEXT:    xxswapd vs2, vs0
2393 ; PWR9LE-NEXT:    xsadddp f1, f1, f2
2394 ; PWR9LE-NEXT:    xsadddp f1, f1, f0
2395 ; PWR9LE-NEXT:    blr
2397 ; PWR9BE-LABEL: v64f64:
2398 ; PWR9BE:       # %bb.0: # %entry
2399 ; PWR9BE-NEXT:    xxswapd v18, v2
2400 ; PWR9BE-NEXT:    lxv v17, 240(r1)
2401 ; PWR9BE-NEXT:    lxv v16, 256(r1)
2402 ; PWR9BE-NEXT:    lxv v15, 272(r1)
2403 ; PWR9BE-NEXT:    lxv v14, 288(r1)
2404 ; PWR9BE-NEXT:    xsadddp v2, v2, v18
2405 ; PWR9BE-NEXT:    lxv v1, 304(r1)
2406 ; PWR9BE-NEXT:    lxv v0, 320(r1)
2407 ; PWR9BE-NEXT:    lxv vs13, 336(r1)
2408 ; PWR9BE-NEXT:    lxv vs12, 352(r1)
2409 ; PWR9BE-NEXT:    lxv vs11, 368(r1)
2410 ; PWR9BE-NEXT:    lxv vs10, 384(r1)
2411 ; PWR9BE-NEXT:    lxv vs9, 400(r1)
2412 ; PWR9BE-NEXT:    lxv vs8, 416(r1)
2413 ; PWR9BE-NEXT:    lxv vs7, 432(r1)
2414 ; PWR9BE-NEXT:    lxv vs6, 448(r1)
2415 ; PWR9BE-NEXT:    lxv vs5, 464(r1)
2416 ; PWR9BE-NEXT:    lxv vs4, 480(r1)
2417 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2418 ; PWR9BE-NEXT:    xxswapd v3, v3
2419 ; PWR9BE-NEXT:    lxv vs3, 496(r1)
2420 ; PWR9BE-NEXT:    lxv vs2, 512(r1)
2421 ; PWR9BE-NEXT:    lxv vs1, 528(r1)
2422 ; PWR9BE-NEXT:    lxv vs0, 544(r1)
2423 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2424 ; PWR9BE-NEXT:    xxswapd v3, v4
2425 ; PWR9BE-NEXT:    xsadddp v2, v2, v4
2426 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2427 ; PWR9BE-NEXT:    xxswapd v3, v5
2428 ; PWR9BE-NEXT:    xsadddp v2, v2, v5
2429 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2430 ; PWR9BE-NEXT:    xxswapd v3, v6
2431 ; PWR9BE-NEXT:    xsadddp v2, v2, v6
2432 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2433 ; PWR9BE-NEXT:    xxswapd v3, v7
2434 ; PWR9BE-NEXT:    xsadddp v2, v2, v7
2435 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2436 ; PWR9BE-NEXT:    xxswapd v3, v8
2437 ; PWR9BE-NEXT:    xsadddp v2, v2, v8
2438 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2439 ; PWR9BE-NEXT:    xxswapd v3, v9
2440 ; PWR9BE-NEXT:    xsadddp v2, v2, v9
2441 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2442 ; PWR9BE-NEXT:    xxswapd v3, v10
2443 ; PWR9BE-NEXT:    xsadddp v2, v2, v10
2444 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2445 ; PWR9BE-NEXT:    xxswapd v3, v11
2446 ; PWR9BE-NEXT:    xsadddp v2, v2, v11
2447 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2448 ; PWR9BE-NEXT:    xxswapd v3, v12
2449 ; PWR9BE-NEXT:    xsadddp v2, v2, v12
2450 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2451 ; PWR9BE-NEXT:    xxswapd v3, v13
2452 ; PWR9BE-NEXT:    xsadddp v2, v2, v13
2453 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2454 ; PWR9BE-NEXT:    xxswapd v3, v17
2455 ; PWR9BE-NEXT:    xsadddp v2, v2, v17
2456 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2457 ; PWR9BE-NEXT:    xxswapd v3, v16
2458 ; PWR9BE-NEXT:    xsadddp v2, v2, v16
2459 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2460 ; PWR9BE-NEXT:    xxswapd v3, v15
2461 ; PWR9BE-NEXT:    xsadddp v2, v2, v15
2462 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2463 ; PWR9BE-NEXT:    xxswapd v3, v14
2464 ; PWR9BE-NEXT:    xsadddp v2, v2, v14
2465 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2466 ; PWR9BE-NEXT:    xxswapd v3, v1
2467 ; PWR9BE-NEXT:    xsadddp v2, v2, v1
2468 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2469 ; PWR9BE-NEXT:    xxswapd v3, v0
2470 ; PWR9BE-NEXT:    xsadddp v2, v2, v0
2471 ; PWR9BE-NEXT:    xsadddp v2, v2, v3
2472 ; PWR9BE-NEXT:    xsadddp v2, v2, f13
2473 ; PWR9BE-NEXT:    xxswapd vs13, vs13
2474 ; PWR9BE-NEXT:    xsadddp f13, v2, f13
2475 ; PWR9BE-NEXT:    xsadddp f13, f13, f12
2476 ; PWR9BE-NEXT:    xxswapd vs12, vs12
2477 ; PWR9BE-NEXT:    xsadddp f12, f13, f12
2478 ; PWR9BE-NEXT:    xsadddp f12, f12, f11
2479 ; PWR9BE-NEXT:    xxswapd vs11, vs11
2480 ; PWR9BE-NEXT:    xsadddp f11, f12, f11
2481 ; PWR9BE-NEXT:    xsadddp f11, f11, f10
2482 ; PWR9BE-NEXT:    xxswapd vs10, vs10
2483 ; PWR9BE-NEXT:    xsadddp f10, f11, f10
2484 ; PWR9BE-NEXT:    xsadddp f10, f10, f9
2485 ; PWR9BE-NEXT:    xxswapd vs9, vs9
2486 ; PWR9BE-NEXT:    xsadddp f9, f10, f9
2487 ; PWR9BE-NEXT:    xsadddp f9, f9, f8
2488 ; PWR9BE-NEXT:    xxswapd vs8, vs8
2489 ; PWR9BE-NEXT:    xsadddp f8, f9, f8
2490 ; PWR9BE-NEXT:    xsadddp f8, f8, f7
2491 ; PWR9BE-NEXT:    xxswapd vs7, vs7
2492 ; PWR9BE-NEXT:    xsadddp f7, f8, f7
2493 ; PWR9BE-NEXT:    xsadddp f7, f7, f6
2494 ; PWR9BE-NEXT:    xxswapd vs6, vs6
2495 ; PWR9BE-NEXT:    xsadddp f6, f7, f6
2496 ; PWR9BE-NEXT:    xsadddp f6, f6, f5
2497 ; PWR9BE-NEXT:    xxswapd vs5, vs5
2498 ; PWR9BE-NEXT:    xsadddp f5, f6, f5
2499 ; PWR9BE-NEXT:    xsadddp f5, f5, f4
2500 ; PWR9BE-NEXT:    xxswapd vs4, vs4
2501 ; PWR9BE-NEXT:    xsadddp f4, f5, f4
2502 ; PWR9BE-NEXT:    xsadddp f4, f4, f3
2503 ; PWR9BE-NEXT:    xxswapd vs3, vs3
2504 ; PWR9BE-NEXT:    xsadddp f3, f4, f3
2505 ; PWR9BE-NEXT:    xsadddp f3, f3, f2
2506 ; PWR9BE-NEXT:    xxswapd vs2, vs2
2507 ; PWR9BE-NEXT:    xsadddp f2, f3, f2
2508 ; PWR9BE-NEXT:    xsadddp f2, f2, f1
2509 ; PWR9BE-NEXT:    xxswapd vs1, vs1
2510 ; PWR9BE-NEXT:    xsadddp f1, f2, f1
2511 ; PWR9BE-NEXT:    xsadddp f1, f1, f0
2512 ; PWR9BE-NEXT:    xxswapd vs0, vs0
2513 ; PWR9BE-NEXT:    xsadddp f1, f1, f0
2514 ; PWR9BE-NEXT:    blr
2516 ; PWR10LE-LABEL: v64f64:
2517 ; PWR10LE:       # %bb.0: # %entry
2518 ; PWR10LE-NEXT:    xxswapd v18, v2
2519 ; PWR10LE-NEXT:    lxv v17, 224(r1)
2520 ; PWR10LE-NEXT:    lxv v16, 240(r1)
2521 ; PWR10LE-NEXT:    xsadddp v2, v18, v2
2522 ; PWR10LE-NEXT:    xxswapd v18, v3
2523 ; PWR10LE-NEXT:    lxv v15, 256(r1)
2524 ; PWR10LE-NEXT:    lxv v14, 272(r1)
2525 ; PWR10LE-NEXT:    lxv v1, 288(r1)
2526 ; PWR10LE-NEXT:    lxv v0, 304(r1)
2527 ; PWR10LE-NEXT:    lxv vs13, 320(r1)
2528 ; PWR10LE-NEXT:    lxv vs12, 336(r1)
2529 ; PWR10LE-NEXT:    lxv vs11, 352(r1)
2530 ; PWR10LE-NEXT:    lxv vs10, 368(r1)
2531 ; PWR10LE-NEXT:    xsadddp v2, v2, v18
2532 ; PWR10LE-NEXT:    lxv vs9, 384(r1)
2533 ; PWR10LE-NEXT:    lxv vs8, 400(r1)
2534 ; PWR10LE-NEXT:    lxv vs7, 416(r1)
2535 ; PWR10LE-NEXT:    lxv vs6, 432(r1)
2536 ; PWR10LE-NEXT:    lxv vs5, 448(r1)
2537 ; PWR10LE-NEXT:    lxv vs4, 464(r1)
2538 ; PWR10LE-NEXT:    lxv vs3, 480(r1)
2539 ; PWR10LE-NEXT:    lxv vs2, 496(r1)
2540 ; PWR10LE-NEXT:    lxv vs1, 512(r1)
2541 ; PWR10LE-NEXT:    lxv vs0, 528(r1)
2542 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2543 ; PWR10LE-NEXT:    xxswapd v3, v4
2544 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2545 ; PWR10LE-NEXT:    xxswapd v3, v5
2546 ; PWR10LE-NEXT:    xsadddp v2, v2, v4
2547 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2548 ; PWR10LE-NEXT:    xxswapd v3, v6
2549 ; PWR10LE-NEXT:    xsadddp v2, v2, v5
2550 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2551 ; PWR10LE-NEXT:    xxswapd v3, v7
2552 ; PWR10LE-NEXT:    xsadddp v2, v2, v6
2553 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2554 ; PWR10LE-NEXT:    xxswapd v3, v8
2555 ; PWR10LE-NEXT:    xsadddp v2, v2, v7
2556 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2557 ; PWR10LE-NEXT:    xxswapd v3, v9
2558 ; PWR10LE-NEXT:    xsadddp v2, v2, v8
2559 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2560 ; PWR10LE-NEXT:    xxswapd v3, v10
2561 ; PWR10LE-NEXT:    xsadddp v2, v2, v9
2562 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2563 ; PWR10LE-NEXT:    xxswapd v3, v11
2564 ; PWR10LE-NEXT:    xsadddp v2, v2, v10
2565 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2566 ; PWR10LE-NEXT:    xxswapd v3, v12
2567 ; PWR10LE-NEXT:    xsadddp v2, v2, v11
2568 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2569 ; PWR10LE-NEXT:    xxswapd v3, v13
2570 ; PWR10LE-NEXT:    xsadddp v2, v2, v12
2571 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2572 ; PWR10LE-NEXT:    xxswapd v3, v17
2573 ; PWR10LE-NEXT:    xsadddp v2, v2, v13
2574 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2575 ; PWR10LE-NEXT:    xxswapd v3, v16
2576 ; PWR10LE-NEXT:    xsadddp v2, v2, v17
2577 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2578 ; PWR10LE-NEXT:    xxswapd v3, v15
2579 ; PWR10LE-NEXT:    xsadddp v2, v2, v16
2580 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2581 ; PWR10LE-NEXT:    xxswapd v3, v14
2582 ; PWR10LE-NEXT:    xsadddp v2, v2, v15
2583 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2584 ; PWR10LE-NEXT:    xxswapd v3, v1
2585 ; PWR10LE-NEXT:    xsadddp v2, v2, v14
2586 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2587 ; PWR10LE-NEXT:    xxswapd v3, v0
2588 ; PWR10LE-NEXT:    xsadddp v2, v2, v1
2589 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2590 ; PWR10LE-NEXT:    xxswapd v3, vs13
2591 ; PWR10LE-NEXT:    xsadddp v2, v2, v0
2592 ; PWR10LE-NEXT:    xsadddp v2, v2, v3
2593 ; PWR10LE-NEXT:    xsadddp f13, v2, f13
2594 ; PWR10LE-NEXT:    xxswapd v2, vs12
2595 ; PWR10LE-NEXT:    xsadddp f13, f13, v2
2596 ; PWR10LE-NEXT:    xsadddp f12, f13, f12
2597 ; PWR10LE-NEXT:    xxswapd vs13, vs11
2598 ; PWR10LE-NEXT:    xsadddp f12, f12, f13
2599 ; PWR10LE-NEXT:    xsadddp f11, f12, f11
2600 ; PWR10LE-NEXT:    xxswapd vs12, vs10
2601 ; PWR10LE-NEXT:    xsadddp f11, f11, f12
2602 ; PWR10LE-NEXT:    xsadddp f10, f11, f10
2603 ; PWR10LE-NEXT:    xxswapd vs11, vs9
2604 ; PWR10LE-NEXT:    xsadddp f10, f10, f11
2605 ; PWR10LE-NEXT:    xsadddp f9, f10, f9
2606 ; PWR10LE-NEXT:    xxswapd vs10, vs8
2607 ; PWR10LE-NEXT:    xsadddp f9, f9, f10
2608 ; PWR10LE-NEXT:    xsadddp f8, f9, f8
2609 ; PWR10LE-NEXT:    xxswapd vs9, vs7
2610 ; PWR10LE-NEXT:    xsadddp f8, f8, f9
2611 ; PWR10LE-NEXT:    xsadddp f7, f8, f7
2612 ; PWR10LE-NEXT:    xxswapd vs8, vs6
2613 ; PWR10LE-NEXT:    xsadddp f7, f7, f8
2614 ; PWR10LE-NEXT:    xsadddp f6, f7, f6
2615 ; PWR10LE-NEXT:    xxswapd vs7, vs5
2616 ; PWR10LE-NEXT:    xsadddp f6, f6, f7
2617 ; PWR10LE-NEXT:    xsadddp f5, f6, f5
2618 ; PWR10LE-NEXT:    xxswapd vs6, vs4
2619 ; PWR10LE-NEXT:    xsadddp f5, f5, f6
2620 ; PWR10LE-NEXT:    xsadddp f4, f5, f4
2621 ; PWR10LE-NEXT:    xxswapd vs5, vs3
2622 ; PWR10LE-NEXT:    xsadddp f4, f4, f5
2623 ; PWR10LE-NEXT:    xsadddp f3, f4, f3
2624 ; PWR10LE-NEXT:    xxswapd vs4, vs2
2625 ; PWR10LE-NEXT:    xsadddp f3, f3, f4
2626 ; PWR10LE-NEXT:    xsadddp f2, f3, f2
2627 ; PWR10LE-NEXT:    xxswapd vs3, vs1
2628 ; PWR10LE-NEXT:    xsadddp f2, f2, f3
2629 ; PWR10LE-NEXT:    xsadddp f1, f2, f1
2630 ; PWR10LE-NEXT:    xxswapd vs2, vs0
2631 ; PWR10LE-NEXT:    xsadddp f1, f1, f2
2632 ; PWR10LE-NEXT:    xsadddp f1, f1, f0
2633 ; PWR10LE-NEXT:    blr
2635 ; PWR10BE-LABEL: v64f64:
2636 ; PWR10BE:       # %bb.0: # %entry
2637 ; PWR10BE-NEXT:    xxswapd v18, v2
2638 ; PWR10BE-NEXT:    lxv v17, 240(r1)
2639 ; PWR10BE-NEXT:    lxv v16, 256(r1)
2640 ; PWR10BE-NEXT:    xsadddp v2, v2, v18
2641 ; PWR10BE-NEXT:    lxv v15, 272(r1)
2642 ; PWR10BE-NEXT:    lxv v14, 288(r1)
2643 ; PWR10BE-NEXT:    lxv v1, 304(r1)
2644 ; PWR10BE-NEXT:    lxv v0, 320(r1)
2645 ; PWR10BE-NEXT:    lxv vs13, 336(r1)
2646 ; PWR10BE-NEXT:    lxv vs12, 352(r1)
2647 ; PWR10BE-NEXT:    lxv vs11, 368(r1)
2648 ; PWR10BE-NEXT:    lxv vs10, 384(r1)
2649 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2650 ; PWR10BE-NEXT:    xxswapd v3, v3
2651 ; PWR10BE-NEXT:    lxv vs9, 400(r1)
2652 ; PWR10BE-NEXT:    lxv vs8, 416(r1)
2653 ; PWR10BE-NEXT:    lxv vs7, 432(r1)
2654 ; PWR10BE-NEXT:    lxv vs6, 448(r1)
2655 ; PWR10BE-NEXT:    lxv vs5, 464(r1)
2656 ; PWR10BE-NEXT:    lxv vs4, 480(r1)
2657 ; PWR10BE-NEXT:    lxv vs3, 496(r1)
2658 ; PWR10BE-NEXT:    lxv vs2, 512(r1)
2659 ; PWR10BE-NEXT:    lxv vs1, 528(r1)
2660 ; PWR10BE-NEXT:    lxv vs0, 544(r1)
2661 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2662 ; PWR10BE-NEXT:    xxswapd v3, v4
2663 ; PWR10BE-NEXT:    xsadddp v2, v2, v4
2664 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2665 ; PWR10BE-NEXT:    xxswapd v3, v5
2666 ; PWR10BE-NEXT:    xsadddp v2, v2, v5
2667 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2668 ; PWR10BE-NEXT:    xxswapd v3, v6
2669 ; PWR10BE-NEXT:    xsadddp v2, v2, v6
2670 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2671 ; PWR10BE-NEXT:    xxswapd v3, v7
2672 ; PWR10BE-NEXT:    xsadddp v2, v2, v7
2673 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2674 ; PWR10BE-NEXT:    xxswapd v3, v8
2675 ; PWR10BE-NEXT:    xsadddp v2, v2, v8
2676 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2677 ; PWR10BE-NEXT:    xxswapd v3, v9
2678 ; PWR10BE-NEXT:    xsadddp v2, v2, v9
2679 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2680 ; PWR10BE-NEXT:    xxswapd v3, v10
2681 ; PWR10BE-NEXT:    xsadddp v2, v2, v10
2682 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2683 ; PWR10BE-NEXT:    xxswapd v3, v11
2684 ; PWR10BE-NEXT:    xsadddp v2, v2, v11
2685 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2686 ; PWR10BE-NEXT:    xxswapd v3, v12
2687 ; PWR10BE-NEXT:    xsadddp v2, v2, v12
2688 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2689 ; PWR10BE-NEXT:    xxswapd v3, v13
2690 ; PWR10BE-NEXT:    xsadddp v2, v2, v13
2691 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2692 ; PWR10BE-NEXT:    xxswapd v3, v17
2693 ; PWR10BE-NEXT:    xsadddp v2, v2, v17
2694 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2695 ; PWR10BE-NEXT:    xxswapd v3, v16
2696 ; PWR10BE-NEXT:    xsadddp v2, v2, v16
2697 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2698 ; PWR10BE-NEXT:    xxswapd v3, v15
2699 ; PWR10BE-NEXT:    xsadddp v2, v2, v15
2700 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2701 ; PWR10BE-NEXT:    xxswapd v3, v14
2702 ; PWR10BE-NEXT:    xsadddp v2, v2, v14
2703 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2704 ; PWR10BE-NEXT:    xxswapd v3, v1
2705 ; PWR10BE-NEXT:    xsadddp v2, v2, v1
2706 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2707 ; PWR10BE-NEXT:    xxswapd v3, v0
2708 ; PWR10BE-NEXT:    xsadddp v2, v2, v0
2709 ; PWR10BE-NEXT:    xsadddp v2, v2, v3
2710 ; PWR10BE-NEXT:    xsadddp v2, v2, f13
2711 ; PWR10BE-NEXT:    xxswapd vs13, vs13
2712 ; PWR10BE-NEXT:    xsadddp f13, v2, f13
2713 ; PWR10BE-NEXT:    xsadddp f13, f13, f12
2714 ; PWR10BE-NEXT:    xxswapd vs12, vs12
2715 ; PWR10BE-NEXT:    xsadddp f12, f13, f12
2716 ; PWR10BE-NEXT:    xsadddp f12, f12, f11
2717 ; PWR10BE-NEXT:    xxswapd vs11, vs11
2718 ; PWR10BE-NEXT:    xsadddp f11, f12, f11
2719 ; PWR10BE-NEXT:    xsadddp f11, f11, f10
2720 ; PWR10BE-NEXT:    xxswapd vs10, vs10
2721 ; PWR10BE-NEXT:    xsadddp f10, f11, f10
2722 ; PWR10BE-NEXT:    xsadddp f10, f10, f9
2723 ; PWR10BE-NEXT:    xxswapd vs9, vs9
2724 ; PWR10BE-NEXT:    xsadddp f9, f10, f9
2725 ; PWR10BE-NEXT:    xsadddp f9, f9, f8
2726 ; PWR10BE-NEXT:    xxswapd vs8, vs8
2727 ; PWR10BE-NEXT:    xsadddp f8, f9, f8
2728 ; PWR10BE-NEXT:    xsadddp f8, f8, f7
2729 ; PWR10BE-NEXT:    xxswapd vs7, vs7
2730 ; PWR10BE-NEXT:    xsadddp f7, f8, f7
2731 ; PWR10BE-NEXT:    xsadddp f7, f7, f6
2732 ; PWR10BE-NEXT:    xxswapd vs6, vs6
2733 ; PWR10BE-NEXT:    xsadddp f6, f7, f6
2734 ; PWR10BE-NEXT:    xsadddp f6, f6, f5
2735 ; PWR10BE-NEXT:    xxswapd vs5, vs5
2736 ; PWR10BE-NEXT:    xsadddp f5, f6, f5
2737 ; PWR10BE-NEXT:    xsadddp f5, f5, f4
2738 ; PWR10BE-NEXT:    xxswapd vs4, vs4
2739 ; PWR10BE-NEXT:    xsadddp f4, f5, f4
2740 ; PWR10BE-NEXT:    xsadddp f4, f4, f3
2741 ; PWR10BE-NEXT:    xxswapd vs3, vs3
2742 ; PWR10BE-NEXT:    xsadddp f3, f4, f3
2743 ; PWR10BE-NEXT:    xsadddp f3, f3, f2
2744 ; PWR10BE-NEXT:    xxswapd vs2, vs2
2745 ; PWR10BE-NEXT:    xsadddp f2, f3, f2
2746 ; PWR10BE-NEXT:    xsadddp f2, f2, f1
2747 ; PWR10BE-NEXT:    xxswapd vs1, vs1
2748 ; PWR10BE-NEXT:    xsadddp f1, f2, f1
2749 ; PWR10BE-NEXT:    xsadddp f1, f1, f0
2750 ; PWR10BE-NEXT:    xxswapd vs0, vs0
2751 ; PWR10BE-NEXT:    xsadddp f1, f1, f0
2752 ; PWR10BE-NEXT:    blr
2753 entry:
2754   %0 = call double @llvm.vector.reduce.fadd.v64f64(double -0.000000e+00, <64 x double> %a)
2755   ret double %0
2758 define dso_local double @v64f64_b(<64 x double> %a, double %b) local_unnamed_addr #0 {
2759 ; PWR9LE-LABEL: v64f64_b:
2760 ; PWR9LE:       # %bb.0: # %entry
2761 ; PWR9LE-NEXT:    xxswapd v19, v2
2762 ; PWR9LE-NEXT:    lxv v18, 224(r1)
2763 ; PWR9LE-NEXT:    lxv v17, 240(r1)
2764 ; PWR9LE-NEXT:    lxv v16, 256(r1)
2765 ; PWR9LE-NEXT:    lxv v15, 272(r1)
2766 ; PWR9LE-NEXT:    xsadddp f1, f1, v19
2767 ; PWR9LE-NEXT:    lxv v14, 288(r1)
2768 ; PWR9LE-NEXT:    lxv v1, 304(r1)
2769 ; PWR9LE-NEXT:    lxv v0, 320(r1)
2770 ; PWR9LE-NEXT:    lxv vs13, 336(r1)
2771 ; PWR9LE-NEXT:    lxv vs12, 352(r1)
2772 ; PWR9LE-NEXT:    lxv vs11, 368(r1)
2773 ; PWR9LE-NEXT:    lxv vs10, 384(r1)
2774 ; PWR9LE-NEXT:    lxv vs9, 400(r1)
2775 ; PWR9LE-NEXT:    lxv vs8, 416(r1)
2776 ; PWR9LE-NEXT:    lxv vs7, 432(r1)
2777 ; PWR9LE-NEXT:    lxv vs6, 448(r1)
2778 ; PWR9LE-NEXT:    lxv vs5, 464(r1)
2779 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2780 ; PWR9LE-NEXT:    xxswapd v2, v3
2781 ; PWR9LE-NEXT:    lxv vs4, 480(r1)
2782 ; PWR9LE-NEXT:    lxv vs3, 496(r1)
2783 ; PWR9LE-NEXT:    lxv vs2, 512(r1)
2784 ; PWR9LE-NEXT:    lxv vs0, 528(r1)
2785 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2786 ; PWR9LE-NEXT:    xxswapd v2, v4
2787 ; PWR9LE-NEXT:    xsadddp f1, f1, v3
2788 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2789 ; PWR9LE-NEXT:    xxswapd v2, v5
2790 ; PWR9LE-NEXT:    xsadddp f1, f1, v4
2791 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2792 ; PWR9LE-NEXT:    xxswapd v2, v6
2793 ; PWR9LE-NEXT:    xsadddp f1, f1, v5
2794 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2795 ; PWR9LE-NEXT:    xxswapd v2, v7
2796 ; PWR9LE-NEXT:    xsadddp f1, f1, v6
2797 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2798 ; PWR9LE-NEXT:    xxswapd v2, v8
2799 ; PWR9LE-NEXT:    xsadddp f1, f1, v7
2800 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2801 ; PWR9LE-NEXT:    xxswapd v2, v9
2802 ; PWR9LE-NEXT:    xsadddp f1, f1, v8
2803 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2804 ; PWR9LE-NEXT:    xxswapd v2, v10
2805 ; PWR9LE-NEXT:    xsadddp f1, f1, v9
2806 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2807 ; PWR9LE-NEXT:    xxswapd v2, v11
2808 ; PWR9LE-NEXT:    xsadddp f1, f1, v10
2809 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2810 ; PWR9LE-NEXT:    xxswapd v2, v12
2811 ; PWR9LE-NEXT:    xsadddp f1, f1, v11
2812 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2813 ; PWR9LE-NEXT:    xxswapd v2, v13
2814 ; PWR9LE-NEXT:    xsadddp f1, f1, v12
2815 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2816 ; PWR9LE-NEXT:    xxswapd v2, v18
2817 ; PWR9LE-NEXT:    xsadddp f1, f1, v13
2818 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2819 ; PWR9LE-NEXT:    xxswapd v2, v17
2820 ; PWR9LE-NEXT:    xsadddp f1, f1, v18
2821 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2822 ; PWR9LE-NEXT:    xxswapd v2, v16
2823 ; PWR9LE-NEXT:    xsadddp f1, f1, v17
2824 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2825 ; PWR9LE-NEXT:    xxswapd v2, v15
2826 ; PWR9LE-NEXT:    xsadddp f1, f1, v16
2827 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2828 ; PWR9LE-NEXT:    xxswapd v2, v14
2829 ; PWR9LE-NEXT:    xsadddp f1, f1, v15
2830 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2831 ; PWR9LE-NEXT:    xxswapd v2, v1
2832 ; PWR9LE-NEXT:    xsadddp f1, f1, v14
2833 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2834 ; PWR9LE-NEXT:    xxswapd v2, v0
2835 ; PWR9LE-NEXT:    xsadddp f1, f1, v1
2836 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2837 ; PWR9LE-NEXT:    xxswapd v2, vs13
2838 ; PWR9LE-NEXT:    xsadddp f1, f1, v0
2839 ; PWR9LE-NEXT:    xsadddp f1, f1, v2
2840 ; PWR9LE-NEXT:    xsadddp f1, f1, f13
2841 ; PWR9LE-NEXT:    xxswapd vs13, vs12
2842 ; PWR9LE-NEXT:    xsadddp f1, f1, f13
2843 ; PWR9LE-NEXT:    xsadddp f1, f1, f12
2844 ; PWR9LE-NEXT:    xxswapd vs12, vs11
2845 ; PWR9LE-NEXT:    xsadddp f1, f1, f12
2846 ; PWR9LE-NEXT:    xsadddp f1, f1, f11
2847 ; PWR9LE-NEXT:    xxswapd vs11, vs10
2848 ; PWR9LE-NEXT:    xsadddp f1, f1, f11
2849 ; PWR9LE-NEXT:    xsadddp f1, f1, f10
2850 ; PWR9LE-NEXT:    xxswapd vs10, vs9
2851 ; PWR9LE-NEXT:    xsadddp f1, f1, f10
2852 ; PWR9LE-NEXT:    xsadddp f1, f1, f9
2853 ; PWR9LE-NEXT:    xxswapd vs9, vs8
2854 ; PWR9LE-NEXT:    xsadddp f1, f1, f9
2855 ; PWR9LE-NEXT:    xsadddp f1, f1, f8
2856 ; PWR9LE-NEXT:    xxswapd vs8, vs7
2857 ; PWR9LE-NEXT:    xsadddp f1, f1, f8
2858 ; PWR9LE-NEXT:    xsadddp f1, f1, f7
2859 ; PWR9LE-NEXT:    xxswapd vs7, vs6
2860 ; PWR9LE-NEXT:    xsadddp f1, f1, f7
2861 ; PWR9LE-NEXT:    xsadddp f1, f1, f6
2862 ; PWR9LE-NEXT:    xxswapd vs6, vs5
2863 ; PWR9LE-NEXT:    xsadddp f1, f1, f6
2864 ; PWR9LE-NEXT:    xsadddp f1, f1, f5
2865 ; PWR9LE-NEXT:    xxswapd vs5, vs4
2866 ; PWR9LE-NEXT:    xsadddp f1, f1, f5
2867 ; PWR9LE-NEXT:    xsadddp f1, f1, f4
2868 ; PWR9LE-NEXT:    xxswapd vs4, vs3
2869 ; PWR9LE-NEXT:    xsadddp f1, f1, f4
2870 ; PWR9LE-NEXT:    xsadddp f1, f1, f3
2871 ; PWR9LE-NEXT:    xxswapd vs3, vs2
2872 ; PWR9LE-NEXT:    xsadddp f1, f1, f3
2873 ; PWR9LE-NEXT:    xsadddp f1, f1, f2
2874 ; PWR9LE-NEXT:    xxswapd vs2, vs0
2875 ; PWR9LE-NEXT:    xsadddp f1, f1, f2
2876 ; PWR9LE-NEXT:    xsadddp f1, f1, f0
2877 ; PWR9LE-NEXT:    blr
2879 ; PWR9BE-LABEL: v64f64_b:
2880 ; PWR9BE:       # %bb.0: # %entry
2881 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2882 ; PWR9BE-NEXT:    xxswapd v2, v2
2883 ; PWR9BE-NEXT:    lxv v18, 240(r1)
2884 ; PWR9BE-NEXT:    lxv v17, 256(r1)
2885 ; PWR9BE-NEXT:    lxv v16, 272(r1)
2886 ; PWR9BE-NEXT:    lxv v15, 288(r1)
2887 ; PWR9BE-NEXT:    lxv v14, 304(r1)
2888 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2889 ; PWR9BE-NEXT:    xxswapd v2, v3
2890 ; PWR9BE-NEXT:    lxv v1, 320(r1)
2891 ; PWR9BE-NEXT:    lxv v0, 336(r1)
2892 ; PWR9BE-NEXT:    lxv vs13, 352(r1)
2893 ; PWR9BE-NEXT:    lxv vs12, 368(r1)
2894 ; PWR9BE-NEXT:    lxv vs11, 384(r1)
2895 ; PWR9BE-NEXT:    lxv vs10, 400(r1)
2896 ; PWR9BE-NEXT:    lxv vs9, 416(r1)
2897 ; PWR9BE-NEXT:    lxv vs8, 432(r1)
2898 ; PWR9BE-NEXT:    lxv vs7, 448(r1)
2899 ; PWR9BE-NEXT:    lxv vs6, 464(r1)
2900 ; PWR9BE-NEXT:    lxv vs5, 480(r1)
2901 ; PWR9BE-NEXT:    lxv vs4, 496(r1)
2902 ; PWR9BE-NEXT:    lxv vs3, 512(r1)
2903 ; PWR9BE-NEXT:    lxv vs2, 528(r1)
2904 ; PWR9BE-NEXT:    lxv vs0, 544(r1)
2905 ; PWR9BE-NEXT:    xsadddp f1, f1, v3
2906 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2907 ; PWR9BE-NEXT:    xxswapd v2, v4
2908 ; PWR9BE-NEXT:    xsadddp f1, f1, v4
2909 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2910 ; PWR9BE-NEXT:    xxswapd v2, v5
2911 ; PWR9BE-NEXT:    xsadddp f1, f1, v5
2912 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2913 ; PWR9BE-NEXT:    xxswapd v2, v6
2914 ; PWR9BE-NEXT:    xsadddp f1, f1, v6
2915 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2916 ; PWR9BE-NEXT:    xxswapd v2, v7
2917 ; PWR9BE-NEXT:    xsadddp f1, f1, v7
2918 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2919 ; PWR9BE-NEXT:    xxswapd v2, v8
2920 ; PWR9BE-NEXT:    xsadddp f1, f1, v8
2921 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2922 ; PWR9BE-NEXT:    xxswapd v2, v9
2923 ; PWR9BE-NEXT:    xsadddp f1, f1, v9
2924 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2925 ; PWR9BE-NEXT:    xxswapd v2, v10
2926 ; PWR9BE-NEXT:    xsadddp f1, f1, v10
2927 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2928 ; PWR9BE-NEXT:    xxswapd v2, v11
2929 ; PWR9BE-NEXT:    xsadddp f1, f1, v11
2930 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2931 ; PWR9BE-NEXT:    xxswapd v2, v12
2932 ; PWR9BE-NEXT:    xsadddp f1, f1, v12
2933 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2934 ; PWR9BE-NEXT:    xxswapd v2, v13
2935 ; PWR9BE-NEXT:    xsadddp f1, f1, v13
2936 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2937 ; PWR9BE-NEXT:    xxswapd v2, v18
2938 ; PWR9BE-NEXT:    xsadddp f1, f1, v18
2939 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2940 ; PWR9BE-NEXT:    xxswapd v2, v17
2941 ; PWR9BE-NEXT:    xsadddp f1, f1, v17
2942 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2943 ; PWR9BE-NEXT:    xxswapd v2, v16
2944 ; PWR9BE-NEXT:    xsadddp f1, f1, v16
2945 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2946 ; PWR9BE-NEXT:    xxswapd v2, v15
2947 ; PWR9BE-NEXT:    xsadddp f1, f1, v15
2948 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2949 ; PWR9BE-NEXT:    xxswapd v2, v14
2950 ; PWR9BE-NEXT:    xsadddp f1, f1, v14
2951 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2952 ; PWR9BE-NEXT:    xxswapd v2, v1
2953 ; PWR9BE-NEXT:    xsadddp f1, f1, v1
2954 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2955 ; PWR9BE-NEXT:    xxswapd v2, v0
2956 ; PWR9BE-NEXT:    xsadddp f1, f1, v0
2957 ; PWR9BE-NEXT:    xsadddp f1, f1, v2
2958 ; PWR9BE-NEXT:    xsadddp f1, f1, f13
2959 ; PWR9BE-NEXT:    xxswapd vs13, vs13
2960 ; PWR9BE-NEXT:    xsadddp f1, f1, f13
2961 ; PWR9BE-NEXT:    xsadddp f1, f1, f12
2962 ; PWR9BE-NEXT:    xxswapd vs12, vs12
2963 ; PWR9BE-NEXT:    xsadddp f1, f1, f12
2964 ; PWR9BE-NEXT:    xsadddp f1, f1, f11
2965 ; PWR9BE-NEXT:    xxswapd vs11, vs11
2966 ; PWR9BE-NEXT:    xsadddp f1, f1, f11
2967 ; PWR9BE-NEXT:    xsadddp f1, f1, f10
2968 ; PWR9BE-NEXT:    xxswapd vs10, vs10
2969 ; PWR9BE-NEXT:    xsadddp f1, f1, f10
2970 ; PWR9BE-NEXT:    xsadddp f1, f1, f9
2971 ; PWR9BE-NEXT:    xxswapd vs9, vs9
2972 ; PWR9BE-NEXT:    xsadddp f1, f1, f9
2973 ; PWR9BE-NEXT:    xsadddp f1, f1, f8
2974 ; PWR9BE-NEXT:    xxswapd vs8, vs8
2975 ; PWR9BE-NEXT:    xsadddp f1, f1, f8
2976 ; PWR9BE-NEXT:    xsadddp f1, f1, f7
2977 ; PWR9BE-NEXT:    xxswapd vs7, vs7
2978 ; PWR9BE-NEXT:    xsadddp f1, f1, f7
2979 ; PWR9BE-NEXT:    xsadddp f1, f1, f6
2980 ; PWR9BE-NEXT:    xxswapd vs6, vs6
2981 ; PWR9BE-NEXT:    xsadddp f1, f1, f6
2982 ; PWR9BE-NEXT:    xsadddp f1, f1, f5
2983 ; PWR9BE-NEXT:    xxswapd vs5, vs5
2984 ; PWR9BE-NEXT:    xsadddp f1, f1, f5
2985 ; PWR9BE-NEXT:    xsadddp f1, f1, f4
2986 ; PWR9BE-NEXT:    xxswapd vs4, vs4
2987 ; PWR9BE-NEXT:    xsadddp f1, f1, f4
2988 ; PWR9BE-NEXT:    xsadddp f1, f1, f3
2989 ; PWR9BE-NEXT:    xxswapd vs3, vs3
2990 ; PWR9BE-NEXT:    xsadddp f1, f1, f3
2991 ; PWR9BE-NEXT:    xsadddp f1, f1, f2
2992 ; PWR9BE-NEXT:    xxswapd vs2, vs2
2993 ; PWR9BE-NEXT:    xsadddp f1, f1, f2
2994 ; PWR9BE-NEXT:    xsadddp f1, f1, f0
2995 ; PWR9BE-NEXT:    xxswapd vs0, vs0
2996 ; PWR9BE-NEXT:    xsadddp f1, f1, f0
2997 ; PWR9BE-NEXT:    blr
2999 ; PWR10LE-LABEL: v64f64_b:
3000 ; PWR10LE:       # %bb.0: # %entry
3001 ; PWR10LE-NEXT:    xxswapd v19, v2
3002 ; PWR10LE-NEXT:    lxv v18, 224(r1)
3003 ; PWR10LE-NEXT:    lxv v17, 240(r1)
3004 ; PWR10LE-NEXT:    xsadddp f1, f1, v19
3005 ; PWR10LE-NEXT:    lxv v16, 256(r1)
3006 ; PWR10LE-NEXT:    lxv v15, 272(r1)
3007 ; PWR10LE-NEXT:    lxv v14, 288(r1)
3008 ; PWR10LE-NEXT:    lxv v1, 304(r1)
3009 ; PWR10LE-NEXT:    lxv v0, 320(r1)
3010 ; PWR10LE-NEXT:    lxv vs13, 336(r1)
3011 ; PWR10LE-NEXT:    lxv vs12, 352(r1)
3012 ; PWR10LE-NEXT:    lxv vs11, 368(r1)
3013 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3014 ; PWR10LE-NEXT:    xxswapd v2, v3
3015 ; PWR10LE-NEXT:    lxv vs10, 384(r1)
3016 ; PWR10LE-NEXT:    lxv vs9, 400(r1)
3017 ; PWR10LE-NEXT:    lxv vs8, 416(r1)
3018 ; PWR10LE-NEXT:    lxv vs7, 432(r1)
3019 ; PWR10LE-NEXT:    lxv vs6, 448(r1)
3020 ; PWR10LE-NEXT:    lxv vs5, 464(r1)
3021 ; PWR10LE-NEXT:    lxv vs4, 480(r1)
3022 ; PWR10LE-NEXT:    lxv vs3, 496(r1)
3023 ; PWR10LE-NEXT:    lxv vs2, 512(r1)
3024 ; PWR10LE-NEXT:    lxv vs0, 528(r1)
3025 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3026 ; PWR10LE-NEXT:    xxswapd v2, v4
3027 ; PWR10LE-NEXT:    xsadddp f1, f1, v3
3028 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3029 ; PWR10LE-NEXT:    xxswapd v2, v5
3030 ; PWR10LE-NEXT:    xsadddp f1, f1, v4
3031 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3032 ; PWR10LE-NEXT:    xxswapd v2, v6
3033 ; PWR10LE-NEXT:    xsadddp f1, f1, v5
3034 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3035 ; PWR10LE-NEXT:    xxswapd v2, v7
3036 ; PWR10LE-NEXT:    xsadddp f1, f1, v6
3037 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3038 ; PWR10LE-NEXT:    xxswapd v2, v8
3039 ; PWR10LE-NEXT:    xsadddp f1, f1, v7
3040 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3041 ; PWR10LE-NEXT:    xxswapd v2, v9
3042 ; PWR10LE-NEXT:    xsadddp f1, f1, v8
3043 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3044 ; PWR10LE-NEXT:    xxswapd v2, v10
3045 ; PWR10LE-NEXT:    xsadddp f1, f1, v9
3046 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3047 ; PWR10LE-NEXT:    xxswapd v2, v11
3048 ; PWR10LE-NEXT:    xsadddp f1, f1, v10
3049 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3050 ; PWR10LE-NEXT:    xxswapd v2, v12
3051 ; PWR10LE-NEXT:    xsadddp f1, f1, v11
3052 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3053 ; PWR10LE-NEXT:    xxswapd v2, v13
3054 ; PWR10LE-NEXT:    xsadddp f1, f1, v12
3055 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3056 ; PWR10LE-NEXT:    xxswapd v2, v18
3057 ; PWR10LE-NEXT:    xsadddp f1, f1, v13
3058 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3059 ; PWR10LE-NEXT:    xxswapd v2, v17
3060 ; PWR10LE-NEXT:    xsadddp f1, f1, v18
3061 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3062 ; PWR10LE-NEXT:    xxswapd v2, v16
3063 ; PWR10LE-NEXT:    xsadddp f1, f1, v17
3064 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3065 ; PWR10LE-NEXT:    xxswapd v2, v15
3066 ; PWR10LE-NEXT:    xsadddp f1, f1, v16
3067 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3068 ; PWR10LE-NEXT:    xxswapd v2, v14
3069 ; PWR10LE-NEXT:    xsadddp f1, f1, v15
3070 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3071 ; PWR10LE-NEXT:    xxswapd v2, v1
3072 ; PWR10LE-NEXT:    xsadddp f1, f1, v14
3073 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3074 ; PWR10LE-NEXT:    xxswapd v2, v0
3075 ; PWR10LE-NEXT:    xsadddp f1, f1, v1
3076 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3077 ; PWR10LE-NEXT:    xxswapd v2, vs13
3078 ; PWR10LE-NEXT:    xsadddp f1, f1, v0
3079 ; PWR10LE-NEXT:    xsadddp f1, f1, v2
3080 ; PWR10LE-NEXT:    xsadddp f1, f1, f13
3081 ; PWR10LE-NEXT:    xxswapd vs13, vs12
3082 ; PWR10LE-NEXT:    xsadddp f1, f1, f13
3083 ; PWR10LE-NEXT:    xsadddp f1, f1, f12
3084 ; PWR10LE-NEXT:    xxswapd vs12, vs11
3085 ; PWR10LE-NEXT:    xsadddp f1, f1, f12
3086 ; PWR10LE-NEXT:    xsadddp f1, f1, f11
3087 ; PWR10LE-NEXT:    xxswapd vs11, vs10
3088 ; PWR10LE-NEXT:    xsadddp f1, f1, f11
3089 ; PWR10LE-NEXT:    xsadddp f1, f1, f10
3090 ; PWR10LE-NEXT:    xxswapd vs10, vs9
3091 ; PWR10LE-NEXT:    xsadddp f1, f1, f10
3092 ; PWR10LE-NEXT:    xsadddp f1, f1, f9
3093 ; PWR10LE-NEXT:    xxswapd vs9, vs8
3094 ; PWR10LE-NEXT:    xsadddp f1, f1, f9
3095 ; PWR10LE-NEXT:    xsadddp f1, f1, f8
3096 ; PWR10LE-NEXT:    xxswapd vs8, vs7
3097 ; PWR10LE-NEXT:    xsadddp f1, f1, f8
3098 ; PWR10LE-NEXT:    xsadddp f1, f1, f7
3099 ; PWR10LE-NEXT:    xxswapd vs7, vs6
3100 ; PWR10LE-NEXT:    xsadddp f1, f1, f7
3101 ; PWR10LE-NEXT:    xsadddp f1, f1, f6
3102 ; PWR10LE-NEXT:    xxswapd vs6, vs5
3103 ; PWR10LE-NEXT:    xsadddp f1, f1, f6
3104 ; PWR10LE-NEXT:    xsadddp f1, f1, f5
3105 ; PWR10LE-NEXT:    xxswapd vs5, vs4
3106 ; PWR10LE-NEXT:    xsadddp f1, f1, f5
3107 ; PWR10LE-NEXT:    xsadddp f1, f1, f4
3108 ; PWR10LE-NEXT:    xxswapd vs4, vs3
3109 ; PWR10LE-NEXT:    xsadddp f1, f1, f4
3110 ; PWR10LE-NEXT:    xsadddp f1, f1, f3
3111 ; PWR10LE-NEXT:    xxswapd vs3, vs2
3112 ; PWR10LE-NEXT:    xsadddp f1, f1, f3
3113 ; PWR10LE-NEXT:    xsadddp f1, f1, f2
3114 ; PWR10LE-NEXT:    xxswapd vs2, vs0
3115 ; PWR10LE-NEXT:    xsadddp f1, f1, f2
3116 ; PWR10LE-NEXT:    xsadddp f1, f1, f0
3117 ; PWR10LE-NEXT:    blr
3119 ; PWR10BE-LABEL: v64f64_b:
3120 ; PWR10BE:       # %bb.0: # %entry
3121 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3122 ; PWR10BE-NEXT:    xxswapd v2, v2
3123 ; PWR10BE-NEXT:    lxv v18, 240(r1)
3124 ; PWR10BE-NEXT:    lxv v17, 256(r1)
3125 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3126 ; PWR10BE-NEXT:    xxswapd v2, v3
3127 ; PWR10BE-NEXT:    lxv v16, 272(r1)
3128 ; PWR10BE-NEXT:    lxv v15, 288(r1)
3129 ; PWR10BE-NEXT:    lxv v14, 304(r1)
3130 ; PWR10BE-NEXT:    lxv v1, 320(r1)
3131 ; PWR10BE-NEXT:    lxv v0, 336(r1)
3132 ; PWR10BE-NEXT:    lxv vs13, 352(r1)
3133 ; PWR10BE-NEXT:    lxv vs12, 368(r1)
3134 ; PWR10BE-NEXT:    lxv vs11, 384(r1)
3135 ; PWR10BE-NEXT:    lxv vs10, 400(r1)
3136 ; PWR10BE-NEXT:    lxv vs9, 416(r1)
3137 ; PWR10BE-NEXT:    xsadddp f1, f1, v3
3138 ; PWR10BE-NEXT:    lxv vs8, 432(r1)
3139 ; PWR10BE-NEXT:    lxv vs7, 448(r1)
3140 ; PWR10BE-NEXT:    lxv vs6, 464(r1)
3141 ; PWR10BE-NEXT:    lxv vs5, 480(r1)
3142 ; PWR10BE-NEXT:    lxv vs4, 496(r1)
3143 ; PWR10BE-NEXT:    lxv vs3, 512(r1)
3144 ; PWR10BE-NEXT:    lxv vs2, 528(r1)
3145 ; PWR10BE-NEXT:    lxv vs0, 544(r1)
3146 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3147 ; PWR10BE-NEXT:    xxswapd v2, v4
3148 ; PWR10BE-NEXT:    xsadddp f1, f1, v4
3149 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3150 ; PWR10BE-NEXT:    xxswapd v2, v5
3151 ; PWR10BE-NEXT:    xsadddp f1, f1, v5
3152 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3153 ; PWR10BE-NEXT:    xxswapd v2, v6
3154 ; PWR10BE-NEXT:    xsadddp f1, f1, v6
3155 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3156 ; PWR10BE-NEXT:    xxswapd v2, v7
3157 ; PWR10BE-NEXT:    xsadddp f1, f1, v7
3158 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3159 ; PWR10BE-NEXT:    xxswapd v2, v8
3160 ; PWR10BE-NEXT:    xsadddp f1, f1, v8
3161 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3162 ; PWR10BE-NEXT:    xxswapd v2, v9
3163 ; PWR10BE-NEXT:    xsadddp f1, f1, v9
3164 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3165 ; PWR10BE-NEXT:    xxswapd v2, v10
3166 ; PWR10BE-NEXT:    xsadddp f1, f1, v10
3167 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3168 ; PWR10BE-NEXT:    xxswapd v2, v11
3169 ; PWR10BE-NEXT:    xsadddp f1, f1, v11
3170 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3171 ; PWR10BE-NEXT:    xxswapd v2, v12
3172 ; PWR10BE-NEXT:    xsadddp f1, f1, v12
3173 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3174 ; PWR10BE-NEXT:    xxswapd v2, v13
3175 ; PWR10BE-NEXT:    xsadddp f1, f1, v13
3176 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3177 ; PWR10BE-NEXT:    xxswapd v2, v18
3178 ; PWR10BE-NEXT:    xsadddp f1, f1, v18
3179 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3180 ; PWR10BE-NEXT:    xxswapd v2, v17
3181 ; PWR10BE-NEXT:    xsadddp f1, f1, v17
3182 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3183 ; PWR10BE-NEXT:    xxswapd v2, v16
3184 ; PWR10BE-NEXT:    xsadddp f1, f1, v16
3185 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3186 ; PWR10BE-NEXT:    xxswapd v2, v15
3187 ; PWR10BE-NEXT:    xsadddp f1, f1, v15
3188 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3189 ; PWR10BE-NEXT:    xxswapd v2, v14
3190 ; PWR10BE-NEXT:    xsadddp f1, f1, v14
3191 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3192 ; PWR10BE-NEXT:    xxswapd v2, v1
3193 ; PWR10BE-NEXT:    xsadddp f1, f1, v1
3194 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3195 ; PWR10BE-NEXT:    xxswapd v2, v0
3196 ; PWR10BE-NEXT:    xsadddp f1, f1, v0
3197 ; PWR10BE-NEXT:    xsadddp f1, f1, v2
3198 ; PWR10BE-NEXT:    xsadddp f1, f1, f13
3199 ; PWR10BE-NEXT:    xxswapd vs13, vs13
3200 ; PWR10BE-NEXT:    xsadddp f1, f1, f13
3201 ; PWR10BE-NEXT:    xsadddp f1, f1, f12
3202 ; PWR10BE-NEXT:    xxswapd vs12, vs12
3203 ; PWR10BE-NEXT:    xsadddp f1, f1, f12
3204 ; PWR10BE-NEXT:    xsadddp f1, f1, f11
3205 ; PWR10BE-NEXT:    xxswapd vs11, vs11
3206 ; PWR10BE-NEXT:    xsadddp f1, f1, f11
3207 ; PWR10BE-NEXT:    xsadddp f1, f1, f10
3208 ; PWR10BE-NEXT:    xxswapd vs10, vs10
3209 ; PWR10BE-NEXT:    xsadddp f1, f1, f10
3210 ; PWR10BE-NEXT:    xsadddp f1, f1, f9
3211 ; PWR10BE-NEXT:    xxswapd vs9, vs9
3212 ; PWR10BE-NEXT:    xsadddp f1, f1, f9
3213 ; PWR10BE-NEXT:    xsadddp f1, f1, f8
3214 ; PWR10BE-NEXT:    xxswapd vs8, vs8
3215 ; PWR10BE-NEXT:    xsadddp f1, f1, f8
3216 ; PWR10BE-NEXT:    xsadddp f1, f1, f7
3217 ; PWR10BE-NEXT:    xxswapd vs7, vs7
3218 ; PWR10BE-NEXT:    xsadddp f1, f1, f7
3219 ; PWR10BE-NEXT:    xsadddp f1, f1, f6
3220 ; PWR10BE-NEXT:    xxswapd vs6, vs6
3221 ; PWR10BE-NEXT:    xsadddp f1, f1, f6
3222 ; PWR10BE-NEXT:    xsadddp f1, f1, f5
3223 ; PWR10BE-NEXT:    xxswapd vs5, vs5
3224 ; PWR10BE-NEXT:    xsadddp f1, f1, f5
3225 ; PWR10BE-NEXT:    xsadddp f1, f1, f4
3226 ; PWR10BE-NEXT:    xxswapd vs4, vs4
3227 ; PWR10BE-NEXT:    xsadddp f1, f1, f4
3228 ; PWR10BE-NEXT:    xsadddp f1, f1, f3
3229 ; PWR10BE-NEXT:    xxswapd vs3, vs3
3230 ; PWR10BE-NEXT:    xsadddp f1, f1, f3
3231 ; PWR10BE-NEXT:    xsadddp f1, f1, f2
3232 ; PWR10BE-NEXT:    xxswapd vs2, vs2
3233 ; PWR10BE-NEXT:    xsadddp f1, f1, f2
3234 ; PWR10BE-NEXT:    xsadddp f1, f1, f0
3235 ; PWR10BE-NEXT:    xxswapd vs0, vs0
3236 ; PWR10BE-NEXT:    xsadddp f1, f1, f0
3237 ; PWR10BE-NEXT:    blr
3238 entry:
3239   %0 = call double @llvm.vector.reduce.fadd.v64f64(double %b, <64 x double> %a)
3240   ret double %0
3243 define dso_local double @v64f64_fast(<64 x double> %a) local_unnamed_addr #0 {
3244 ; PWR9LE-LABEL: v64f64_fast:
3245 ; PWR9LE:       # %bb.0: # %entry
3246 ; PWR9LE-NEXT:    lxv vs0, 368(r1)
3247 ; PWR9LE-NEXT:    lxv vs1, 496(r1)
3248 ; PWR9LE-NEXT:    lxv vs2, 240(r1)
3249 ; PWR9LE-NEXT:    lxv vs3, 304(r1)
3250 ; PWR9LE-NEXT:    xvadddp vs3, v3, vs3
3251 ; PWR9LE-NEXT:    lxv vs4, 432(r1)
3252 ; PWR9LE-NEXT:    lxv vs5, 400(r1)
3253 ; PWR9LE-NEXT:    lxv vs6, 528(r1)
3254 ; PWR9LE-NEXT:    lxv vs7, 272(r1)
3255 ; PWR9LE-NEXT:    lxv vs8, 336(r1)
3256 ; PWR9LE-NEXT:    lxv vs9, 464(r1)
3257 ; PWR9LE-NEXT:    lxv vs10, 352(r1)
3258 ; PWR9LE-NEXT:    lxv vs11, 480(r1)
3259 ; PWR9LE-NEXT:    lxv vs12, 224(r1)
3260 ; PWR9LE-NEXT:    lxv vs13, 288(r1)
3261 ; PWR9LE-NEXT:    lxv v0, 416(r1)
3262 ; PWR9LE-NEXT:    lxv v1, 384(r1)
3263 ; PWR9LE-NEXT:    lxv v14, 512(r1)
3264 ; PWR9LE-NEXT:    lxv v15, 256(r1)
3265 ; PWR9LE-NEXT:    lxv v16, 320(r1)
3266 ; PWR9LE-NEXT:    lxv v17, 448(r1)
3267 ; PWR9LE-NEXT:    xvadddp v12, v12, v17
3268 ; PWR9LE-NEXT:    xvadddp v4, v4, v16
3269 ; PWR9LE-NEXT:    xvadddp v14, v15, v14
3270 ; PWR9LE-NEXT:    xvadddp v1, v8, v1
3271 ; PWR9LE-NEXT:    xvadddp v0, v10, v0
3272 ; PWR9LE-NEXT:    xvadddp vs13, v2, vs13
3273 ; PWR9LE-NEXT:    xvadddp vs11, vs12, vs11
3274 ; PWR9LE-NEXT:    xvadddp vs10, v6, vs10
3275 ; PWR9LE-NEXT:    xvadddp vs9, v13, vs9
3276 ; PWR9LE-NEXT:    xvadddp vs8, v5, vs8
3277 ; PWR9LE-NEXT:    xvadddp vs6, vs7, vs6
3278 ; PWR9LE-NEXT:    xvadddp vs5, v9, vs5
3279 ; PWR9LE-NEXT:    xvadddp vs4, v11, vs4
3280 ; PWR9LE-NEXT:    xvadddp vs1, vs2, vs1
3281 ; PWR9LE-NEXT:    xvadddp vs0, v7, vs0
3282 ; PWR9LE-NEXT:    xvadddp vs0, vs0, vs1
3283 ; PWR9LE-NEXT:    xvadddp vs1, vs3, vs4
3284 ; PWR9LE-NEXT:    xvadddp vs2, vs5, vs6
3285 ; PWR9LE-NEXT:    xvadddp vs3, vs8, vs9
3286 ; PWR9LE-NEXT:    xvadddp vs4, vs10, vs11
3287 ; PWR9LE-NEXT:    xvadddp vs5, vs13, v0
3288 ; PWR9LE-NEXT:    xvadddp vs6, v1, v14
3289 ; PWR9LE-NEXT:    xvadddp vs7, v4, v12
3290 ; PWR9LE-NEXT:    xvadddp vs6, vs7, vs6
3291 ; PWR9LE-NEXT:    xvadddp vs4, vs5, vs4
3292 ; PWR9LE-NEXT:    xvadddp vs2, vs3, vs2
3293 ; PWR9LE-NEXT:    xvadddp vs0, vs1, vs0
3294 ; PWR9LE-NEXT:    xvadddp vs0, vs0, vs2
3295 ; PWR9LE-NEXT:    xvadddp vs1, vs4, vs6
3296 ; PWR9LE-NEXT:    xvadddp vs0, vs1, vs0
3297 ; PWR9LE-NEXT:    xxswapd vs1, vs0
3298 ; PWR9LE-NEXT:    xvadddp vs0, vs0, vs1
3299 ; PWR9LE-NEXT:    xxswapd vs1, vs0
3300 ; PWR9LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
3301 ; PWR9LE-NEXT:    blr
3303 ; PWR9BE-LABEL: v64f64_fast:
3304 ; PWR9BE:       # %bb.0: # %entry
3305 ; PWR9BE-NEXT:    lxv vs0, 384(r1)
3306 ; PWR9BE-NEXT:    lxv vs1, 512(r1)
3307 ; PWR9BE-NEXT:    lxv vs2, 256(r1)
3308 ; PWR9BE-NEXT:    lxv vs3, 320(r1)
3309 ; PWR9BE-NEXT:    xvadddp vs3, v3, vs3
3310 ; PWR9BE-NEXT:    lxv vs4, 448(r1)
3311 ; PWR9BE-NEXT:    lxv vs5, 416(r1)
3312 ; PWR9BE-NEXT:    lxv vs6, 544(r1)
3313 ; PWR9BE-NEXT:    lxv vs7, 288(r1)
3314 ; PWR9BE-NEXT:    lxv vs8, 352(r1)
3315 ; PWR9BE-NEXT:    lxv vs9, 480(r1)
3316 ; PWR9BE-NEXT:    lxv vs10, 368(r1)
3317 ; PWR9BE-NEXT:    lxv vs11, 496(r1)
3318 ; PWR9BE-NEXT:    lxv vs12, 240(r1)
3319 ; PWR9BE-NEXT:    lxv vs13, 304(r1)
3320 ; PWR9BE-NEXT:    lxv v0, 432(r1)
3321 ; PWR9BE-NEXT:    lxv v1, 400(r1)
3322 ; PWR9BE-NEXT:    lxv v14, 528(r1)
3323 ; PWR9BE-NEXT:    lxv v15, 272(r1)
3324 ; PWR9BE-NEXT:    lxv v16, 336(r1)
3325 ; PWR9BE-NEXT:    lxv v17, 464(r1)
3326 ; PWR9BE-NEXT:    xvadddp v12, v12, v17
3327 ; PWR9BE-NEXT:    xvadddp v4, v4, v16
3328 ; PWR9BE-NEXT:    xvadddp v14, v15, v14
3329 ; PWR9BE-NEXT:    xvadddp v1, v8, v1
3330 ; PWR9BE-NEXT:    xvadddp v0, v10, v0
3331 ; PWR9BE-NEXT:    xvadddp vs13, v2, vs13
3332 ; PWR9BE-NEXT:    xvadddp vs11, vs12, vs11
3333 ; PWR9BE-NEXT:    xvadddp vs10, v6, vs10
3334 ; PWR9BE-NEXT:    xvadddp vs9, v13, vs9
3335 ; PWR9BE-NEXT:    xvadddp vs8, v5, vs8
3336 ; PWR9BE-NEXT:    xvadddp vs6, vs7, vs6
3337 ; PWR9BE-NEXT:    xvadddp vs5, v9, vs5
3338 ; PWR9BE-NEXT:    xvadddp vs4, v11, vs4
3339 ; PWR9BE-NEXT:    xvadddp vs1, vs2, vs1
3340 ; PWR9BE-NEXT:    xvadddp vs0, v7, vs0
3341 ; PWR9BE-NEXT:    xvadddp vs0, vs0, vs1
3342 ; PWR9BE-NEXT:    xvadddp vs1, vs3, vs4
3343 ; PWR9BE-NEXT:    xvadddp vs2, vs5, vs6
3344 ; PWR9BE-NEXT:    xvadddp vs3, vs8, vs9
3345 ; PWR9BE-NEXT:    xvadddp vs4, vs10, vs11
3346 ; PWR9BE-NEXT:    xvadddp vs5, vs13, v0
3347 ; PWR9BE-NEXT:    xvadddp vs6, v1, v14
3348 ; PWR9BE-NEXT:    xvadddp vs7, v4, v12
3349 ; PWR9BE-NEXT:    xvadddp vs6, vs7, vs6
3350 ; PWR9BE-NEXT:    xvadddp vs4, vs5, vs4
3351 ; PWR9BE-NEXT:    xvadddp vs2, vs3, vs2
3352 ; PWR9BE-NEXT:    xvadddp vs0, vs1, vs0
3353 ; PWR9BE-NEXT:    xvadddp vs0, vs0, vs2
3354 ; PWR9BE-NEXT:    xvadddp vs1, vs4, vs6
3355 ; PWR9BE-NEXT:    xvadddp vs0, vs1, vs0
3356 ; PWR9BE-NEXT:    xxswapd vs1, vs0
3357 ; PWR9BE-NEXT:    xvadddp vs1, vs0, vs1
3358 ; PWR9BE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
3359 ; PWR9BE-NEXT:    blr
3361 ; PWR10LE-LABEL: v64f64_fast:
3362 ; PWR10LE:       # %bb.0: # %entry
3363 ; PWR10LE-NEXT:    lxv vs0, 368(r1)
3364 ; PWR10LE-NEXT:    lxv vs1, 496(r1)
3365 ; PWR10LE-NEXT:    xvadddp vs0, v7, vs0
3366 ; PWR10LE-NEXT:    lxv vs2, 240(r1)
3367 ; PWR10LE-NEXT:    lxv vs3, 304(r1)
3368 ; PWR10LE-NEXT:    lxv vs4, 432(r1)
3369 ; PWR10LE-NEXT:    lxv vs5, 400(r1)
3370 ; PWR10LE-NEXT:    lxv vs6, 528(r1)
3371 ; PWR10LE-NEXT:    lxv vs7, 272(r1)
3372 ; PWR10LE-NEXT:    lxv vs8, 336(r1)
3373 ; PWR10LE-NEXT:    lxv vs9, 464(r1)
3374 ; PWR10LE-NEXT:    lxv vs10, 352(r1)
3375 ; PWR10LE-NEXT:    lxv vs11, 480(r1)
3376 ; PWR10LE-NEXT:    lxv vs12, 224(r1)
3377 ; PWR10LE-NEXT:    lxv vs13, 288(r1)
3378 ; PWR10LE-NEXT:    xvadddp vs13, v2, vs13
3379 ; PWR10LE-NEXT:    xvadddp vs11, vs12, vs11
3380 ; PWR10LE-NEXT:    xvadddp vs10, v6, vs10
3381 ; PWR10LE-NEXT:    xvadddp vs9, v13, vs9
3382 ; PWR10LE-NEXT:    xvadddp vs8, v5, vs8
3383 ; PWR10LE-NEXT:    xvadddp vs6, vs7, vs6
3384 ; PWR10LE-NEXT:    xvadddp vs5, v9, vs5
3385 ; PWR10LE-NEXT:    xvadddp vs4, v11, vs4
3386 ; PWR10LE-NEXT:    xvadddp vs3, v3, vs3
3387 ; PWR10LE-NEXT:    xvadddp vs1, vs2, vs1
3388 ; PWR10LE-NEXT:    xvadddp vs0, vs0, vs1
3389 ; PWR10LE-NEXT:    lxv v0, 416(r1)
3390 ; PWR10LE-NEXT:    lxv v1, 384(r1)
3391 ; PWR10LE-NEXT:    lxv v14, 512(r1)
3392 ; PWR10LE-NEXT:    lxv v15, 256(r1)
3393 ; PWR10LE-NEXT:    lxv v16, 320(r1)
3394 ; PWR10LE-NEXT:    lxv v17, 448(r1)
3395 ; PWR10LE-NEXT:    xvadddp v12, v12, v17
3396 ; PWR10LE-NEXT:    xvadddp v4, v4, v16
3397 ; PWR10LE-NEXT:    xvadddp v14, v15, v14
3398 ; PWR10LE-NEXT:    xvadddp v1, v8, v1
3399 ; PWR10LE-NEXT:    xvadddp v0, v10, v0
3400 ; PWR10LE-NEXT:    xvadddp vs1, vs3, vs4
3401 ; PWR10LE-NEXT:    xvadddp vs2, vs5, vs6
3402 ; PWR10LE-NEXT:    xvadddp vs3, vs8, vs9
3403 ; PWR10LE-NEXT:    xvadddp vs4, vs10, vs11
3404 ; PWR10LE-NEXT:    xvadddp vs5, vs13, v0
3405 ; PWR10LE-NEXT:    xvadddp vs6, v1, v14
3406 ; PWR10LE-NEXT:    xvadddp vs7, v4, v12
3407 ; PWR10LE-NEXT:    xvadddp vs6, vs7, vs6
3408 ; PWR10LE-NEXT:    xvadddp vs4, vs5, vs4
3409 ; PWR10LE-NEXT:    xvadddp vs2, vs3, vs2
3410 ; PWR10LE-NEXT:    xvadddp vs0, vs1, vs0
3411 ; PWR10LE-NEXT:    xvadddp vs0, vs0, vs2
3412 ; PWR10LE-NEXT:    xvadddp vs1, vs4, vs6
3413 ; PWR10LE-NEXT:    xvadddp vs0, vs1, vs0
3414 ; PWR10LE-NEXT:    xxswapd vs1, vs0
3415 ; PWR10LE-NEXT:    xvadddp vs0, vs0, vs1
3416 ; PWR10LE-NEXT:    xxswapd vs1, vs0
3417 ; PWR10LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
3418 ; PWR10LE-NEXT:    blr
3420 ; PWR10BE-LABEL: v64f64_fast:
3421 ; PWR10BE:       # %bb.0: # %entry
3422 ; PWR10BE-NEXT:    lxv vs0, 384(r1)
3423 ; PWR10BE-NEXT:    lxv vs1, 512(r1)
3424 ; PWR10BE-NEXT:    xvadddp vs0, v7, vs0
3425 ; PWR10BE-NEXT:    lxv vs2, 256(r1)
3426 ; PWR10BE-NEXT:    lxv vs3, 320(r1)
3427 ; PWR10BE-NEXT:    lxv vs4, 448(r1)
3428 ; PWR10BE-NEXT:    lxv vs5, 416(r1)
3429 ; PWR10BE-NEXT:    lxv vs6, 544(r1)
3430 ; PWR10BE-NEXT:    lxv vs7, 288(r1)
3431 ; PWR10BE-NEXT:    lxv vs8, 352(r1)
3432 ; PWR10BE-NEXT:    lxv vs9, 480(r1)
3433 ; PWR10BE-NEXT:    lxv vs10, 368(r1)
3434 ; PWR10BE-NEXT:    lxv vs11, 496(r1)
3435 ; PWR10BE-NEXT:    lxv vs12, 240(r1)
3436 ; PWR10BE-NEXT:    lxv vs13, 304(r1)
3437 ; PWR10BE-NEXT:    xvadddp vs13, v2, vs13
3438 ; PWR10BE-NEXT:    xvadddp vs11, vs12, vs11
3439 ; PWR10BE-NEXT:    xvadddp vs10, v6, vs10
3440 ; PWR10BE-NEXT:    xvadddp vs9, v13, vs9
3441 ; PWR10BE-NEXT:    xvadddp vs8, v5, vs8
3442 ; PWR10BE-NEXT:    xvadddp vs6, vs7, vs6
3443 ; PWR10BE-NEXT:    xvadddp vs5, v9, vs5
3444 ; PWR10BE-NEXT:    xvadddp vs4, v11, vs4
3445 ; PWR10BE-NEXT:    xvadddp vs3, v3, vs3
3446 ; PWR10BE-NEXT:    xvadddp vs1, vs2, vs1
3447 ; PWR10BE-NEXT:    xvadddp vs0, vs0, vs1
3448 ; PWR10BE-NEXT:    lxv v0, 432(r1)
3449 ; PWR10BE-NEXT:    lxv v1, 400(r1)
3450 ; PWR10BE-NEXT:    lxv v14, 528(r1)
3451 ; PWR10BE-NEXT:    lxv v15, 272(r1)
3452 ; PWR10BE-NEXT:    lxv v16, 336(r1)
3453 ; PWR10BE-NEXT:    lxv v17, 464(r1)
3454 ; PWR10BE-NEXT:    xvadddp v12, v12, v17
3455 ; PWR10BE-NEXT:    xvadddp v4, v4, v16
3456 ; PWR10BE-NEXT:    xvadddp v14, v15, v14
3457 ; PWR10BE-NEXT:    xvadddp v1, v8, v1
3458 ; PWR10BE-NEXT:    xvadddp v0, v10, v0
3459 ; PWR10BE-NEXT:    xvadddp vs1, vs3, vs4
3460 ; PWR10BE-NEXT:    xvadddp vs2, vs5, vs6
3461 ; PWR10BE-NEXT:    xvadddp vs3, vs8, vs9
3462 ; PWR10BE-NEXT:    xvadddp vs4, vs10, vs11
3463 ; PWR10BE-NEXT:    xvadddp vs5, vs13, v0
3464 ; PWR10BE-NEXT:    xvadddp vs6, v1, v14
3465 ; PWR10BE-NEXT:    xvadddp vs7, v4, v12
3466 ; PWR10BE-NEXT:    xvadddp vs6, vs7, vs6
3467 ; PWR10BE-NEXT:    xvadddp vs4, vs5, vs4
3468 ; PWR10BE-NEXT:    xvadddp vs2, vs3, vs2
3469 ; PWR10BE-NEXT:    xvadddp vs0, vs1, vs0
3470 ; PWR10BE-NEXT:    xvadddp vs0, vs0, vs2
3471 ; PWR10BE-NEXT:    xvadddp vs1, vs4, vs6
3472 ; PWR10BE-NEXT:    xvadddp vs0, vs1, vs0
3473 ; PWR10BE-NEXT:    xxswapd vs1, vs0
3474 ; PWR10BE-NEXT:    xvadddp vs1, vs0, vs1
3475 ; PWR10BE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
3476 ; PWR10BE-NEXT:    blr
3477 entry:
3478   %0 = call fast double @llvm.vector.reduce.fadd.v64f64(double -0.000000e+00, <64 x double> %a)
3479   ret double %0
3482 declare double @llvm.vector.reduce.fadd.v2f64(double, <2 x double>) #0
3483 declare double @llvm.vector.reduce.fadd.v4f64(double, <4 x double>) #0
3484 declare double @llvm.vector.reduce.fadd.v8f64(double, <8 x double>) #0
3485 declare double @llvm.vector.reduce.fadd.v16f64(double, <16 x double>) #0
3486 declare double @llvm.vector.reduce.fadd.v32f64(double, <32 x double>) #0
3487 declare double @llvm.vector.reduce.fadd.v64f64(double, <64 x double>) #0
3490 ;; Vectors of ppc_fp128
3492 define dso_local ppc_fp128 @v2ppcf128(<2 x ppc_fp128> %a) local_unnamed_addr #0 {
3493 ; PWR9LE-LABEL: v2ppcf128:
3494 ; PWR9LE:       # %bb.0: # %entry
3495 ; PWR9LE-NEXT:    mflr r0
3496 ; PWR9LE-NEXT:    stdu r1, -32(r1)
3497 ; PWR9LE-NEXT:    std r0, 48(r1)
3498 ; PWR9LE-NEXT:    bl __gcc_qadd
3499 ; PWR9LE-NEXT:    nop
3500 ; PWR9LE-NEXT:    addi r1, r1, 32
3501 ; PWR9LE-NEXT:    ld r0, 16(r1)
3502 ; PWR9LE-NEXT:    mtlr r0
3503 ; PWR9LE-NEXT:    blr
3505 ; PWR9BE-LABEL: v2ppcf128:
3506 ; PWR9BE:       # %bb.0: # %entry
3507 ; PWR9BE-NEXT:    mflr r0
3508 ; PWR9BE-NEXT:    stdu r1, -112(r1)
3509 ; PWR9BE-NEXT:    std r0, 128(r1)
3510 ; PWR9BE-NEXT:    bl __gcc_qadd
3511 ; PWR9BE-NEXT:    nop
3512 ; PWR9BE-NEXT:    addi r1, r1, 112
3513 ; PWR9BE-NEXT:    ld r0, 16(r1)
3514 ; PWR9BE-NEXT:    mtlr r0
3515 ; PWR9BE-NEXT:    blr
3517 ; PWR10LE-LABEL: v2ppcf128:
3518 ; PWR10LE:       # %bb.0: # %entry
3519 ; PWR10LE-NEXT:    mflr r0
3520 ; PWR10LE-NEXT:    std r0, 16(r1)
3521 ; PWR10LE-NEXT:    stdu r1, -32(r1)
3522 ; PWR10LE-NEXT:    bl __gcc_qadd@notoc
3523 ; PWR10LE-NEXT:    addi r1, r1, 32
3524 ; PWR10LE-NEXT:    ld r0, 16(r1)
3525 ; PWR10LE-NEXT:    mtlr r0
3526 ; PWR10LE-NEXT:    blr
3528 ; PWR10BE-LABEL: v2ppcf128:
3529 ; PWR10BE:       # %bb.0: # %entry
3530 ; PWR10BE-NEXT:    mflr r0
3531 ; PWR10BE-NEXT:    std r0, 16(r1)
3532 ; PWR10BE-NEXT:    stdu r1, -112(r1)
3533 ; PWR10BE-NEXT:    bl __gcc_qadd
3534 ; PWR10BE-NEXT:    nop
3535 ; PWR10BE-NEXT:    addi r1, r1, 112
3536 ; PWR10BE-NEXT:    ld r0, 16(r1)
3537 ; PWR10BE-NEXT:    mtlr r0
3538 ; PWR10BE-NEXT:    blr
3539 entry:
3540   %0 = call ppc_fp128 @llvm.vector.reduce.fadd.v2ppcf128(ppc_fp128 0xM80000000000000000000000000000000, <2 x ppc_fp128> %a)
3541   ret ppc_fp128 %0
3544 define dso_local ppc_fp128 @v2ppcf128_b(<2 x ppc_fp128> %a, ppc_fp128 %b) local_unnamed_addr #0 {
3545 ; PWR9LE-LABEL: v2ppcf128_b:
3546 ; PWR9LE:       # %bb.0: # %entry
3547 ; PWR9LE-NEXT:    mflr r0
3548 ; PWR9LE-NEXT:    stfd f30, -16(r1) # 8-byte Folded Spill
3549 ; PWR9LE-NEXT:    stfd f31, -8(r1) # 8-byte Folded Spill
3550 ; PWR9LE-NEXT:    stdu r1, -48(r1)
3551 ; PWR9LE-NEXT:    fmr f31, f4
3552 ; PWR9LE-NEXT:    fmr f30, f3
3553 ; PWR9LE-NEXT:    fmr f4, f2
3554 ; PWR9LE-NEXT:    fmr f3, f1
3555 ; PWR9LE-NEXT:    fmr f1, f5
3556 ; PWR9LE-NEXT:    fmr f2, f6
3557 ; PWR9LE-NEXT:    std r0, 64(r1)
3558 ; PWR9LE-NEXT:    bl __gcc_qadd
3559 ; PWR9LE-NEXT:    nop
3560 ; PWR9LE-NEXT:    fmr f3, f30
3561 ; PWR9LE-NEXT:    fmr f4, f31
3562 ; PWR9LE-NEXT:    bl __gcc_qadd
3563 ; PWR9LE-NEXT:    nop
3564 ; PWR9LE-NEXT:    addi r1, r1, 48
3565 ; PWR9LE-NEXT:    ld r0, 16(r1)
3566 ; PWR9LE-NEXT:    lfd f31, -8(r1) # 8-byte Folded Reload
3567 ; PWR9LE-NEXT:    lfd f30, -16(r1) # 8-byte Folded Reload
3568 ; PWR9LE-NEXT:    mtlr r0
3569 ; PWR9LE-NEXT:    blr
3571 ; PWR9BE-LABEL: v2ppcf128_b:
3572 ; PWR9BE:       # %bb.0: # %entry
3573 ; PWR9BE-NEXT:    mflr r0
3574 ; PWR9BE-NEXT:    stdu r1, -128(r1)
3575 ; PWR9BE-NEXT:    std r0, 144(r1)
3576 ; PWR9BE-NEXT:    stfd f30, 112(r1) # 8-byte Folded Spill
3577 ; PWR9BE-NEXT:    stfd f31, 120(r1) # 8-byte Folded Spill
3578 ; PWR9BE-NEXT:    fmr f31, f4
3579 ; PWR9BE-NEXT:    fmr f30, f3
3580 ; PWR9BE-NEXT:    fmr f4, f2
3581 ; PWR9BE-NEXT:    fmr f3, f1
3582 ; PWR9BE-NEXT:    fmr f1, f5
3583 ; PWR9BE-NEXT:    fmr f2, f6
3584 ; PWR9BE-NEXT:    bl __gcc_qadd
3585 ; PWR9BE-NEXT:    nop
3586 ; PWR9BE-NEXT:    fmr f3, f30
3587 ; PWR9BE-NEXT:    fmr f4, f31
3588 ; PWR9BE-NEXT:    bl __gcc_qadd
3589 ; PWR9BE-NEXT:    nop
3590 ; PWR9BE-NEXT:    lfd f31, 120(r1) # 8-byte Folded Reload
3591 ; PWR9BE-NEXT:    lfd f30, 112(r1) # 8-byte Folded Reload
3592 ; PWR9BE-NEXT:    addi r1, r1, 128
3593 ; PWR9BE-NEXT:    ld r0, 16(r1)
3594 ; PWR9BE-NEXT:    mtlr r0
3595 ; PWR9BE-NEXT:    blr
3597 ; PWR10LE-LABEL: v2ppcf128_b:
3598 ; PWR10LE:       # %bb.0: # %entry
3599 ; PWR10LE-NEXT:    mflr r0
3600 ; PWR10LE-NEXT:    stfd f30, -16(r1) # 8-byte Folded Spill
3601 ; PWR10LE-NEXT:    stfd f31, -8(r1) # 8-byte Folded Spill
3602 ; PWR10LE-NEXT:    std r0, 16(r1)
3603 ; PWR10LE-NEXT:    stdu r1, -48(r1)
3604 ; PWR10LE-NEXT:    fmr f31, f4
3605 ; PWR10LE-NEXT:    fmr f30, f3
3606 ; PWR10LE-NEXT:    fmr f4, f2
3607 ; PWR10LE-NEXT:    fmr f3, f1
3608 ; PWR10LE-NEXT:    fmr f1, f5
3609 ; PWR10LE-NEXT:    fmr f2, f6
3610 ; PWR10LE-NEXT:    bl __gcc_qadd@notoc
3611 ; PWR10LE-NEXT:    fmr f3, f30
3612 ; PWR10LE-NEXT:    fmr f4, f31
3613 ; PWR10LE-NEXT:    bl __gcc_qadd@notoc
3614 ; PWR10LE-NEXT:    addi r1, r1, 48
3615 ; PWR10LE-NEXT:    ld r0, 16(r1)
3616 ; PWR10LE-NEXT:    lfd f31, -8(r1) # 8-byte Folded Reload
3617 ; PWR10LE-NEXT:    mtlr r0
3618 ; PWR10LE-NEXT:    lfd f30, -16(r1) # 8-byte Folded Reload
3619 ; PWR10LE-NEXT:    blr
3621 ; PWR10BE-LABEL: v2ppcf128_b:
3622 ; PWR10BE:       # %bb.0: # %entry
3623 ; PWR10BE-NEXT:    mflr r0
3624 ; PWR10BE-NEXT:    std r0, 16(r1)
3625 ; PWR10BE-NEXT:    stdu r1, -128(r1)
3626 ; PWR10BE-NEXT:    stfd f30, 112(r1) # 8-byte Folded Spill
3627 ; PWR10BE-NEXT:    stfd f31, 120(r1) # 8-byte Folded Spill
3628 ; PWR10BE-NEXT:    fmr f31, f4
3629 ; PWR10BE-NEXT:    fmr f30, f3
3630 ; PWR10BE-NEXT:    fmr f4, f2
3631 ; PWR10BE-NEXT:    fmr f3, f1
3632 ; PWR10BE-NEXT:    fmr f1, f5
3633 ; PWR10BE-NEXT:    fmr f2, f6
3634 ; PWR10BE-NEXT:    bl __gcc_qadd
3635 ; PWR10BE-NEXT:    nop
3636 ; PWR10BE-NEXT:    fmr f3, f30
3637 ; PWR10BE-NEXT:    fmr f4, f31
3638 ; PWR10BE-NEXT:    bl __gcc_qadd
3639 ; PWR10BE-NEXT:    nop
3640 ; PWR10BE-NEXT:    lfd f31, 120(r1) # 8-byte Folded Reload
3641 ; PWR10BE-NEXT:    lfd f30, 112(r1) # 8-byte Folded Reload
3642 ; PWR10BE-NEXT:    addi r1, r1, 128
3643 ; PWR10BE-NEXT:    ld r0, 16(r1)
3644 ; PWR10BE-NEXT:    mtlr r0
3645 ; PWR10BE-NEXT:    blr
3646 entry:
3647   %0 = call ppc_fp128 @llvm.vector.reduce.fadd.v2ppcf128(ppc_fp128 %b, <2 x ppc_fp128> %a)
3648   ret ppc_fp128 %0
3651 define dso_local ppc_fp128 @v2ppcf128_fast(<2 x ppc_fp128> %a) local_unnamed_addr #0 {
3652 ; PWR9LE-LABEL: v2ppcf128_fast:
3653 ; PWR9LE:       # %bb.0: # %entry
3654 ; PWR9LE-NEXT:    mflr r0
3655 ; PWR9LE-NEXT:    stdu r1, -64(r1)
3656 ; PWR9LE-NEXT:    std r0, 80(r1)
3657 ; PWR9LE-NEXT:    bl __gcc_qadd
3658 ; PWR9LE-NEXT:    nop
3659 ; PWR9LE-NEXT:    stfd f2, 40(r1)
3660 ; PWR9LE-NEXT:    stfd f1, 32(r1)
3661 ; PWR9LE-NEXT:    lxv vs1, 32(r1)
3662 ; PWR9LE-NEXT:    xxswapd vs2, vs1
3663 ; PWR9LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
3664 ; PWR9LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
3665 ; PWR9LE-NEXT:    addi r1, r1, 64
3666 ; PWR9LE-NEXT:    ld r0, 16(r1)
3667 ; PWR9LE-NEXT:    mtlr r0
3668 ; PWR9LE-NEXT:    blr
3670 ; PWR9BE-LABEL: v2ppcf128_fast:
3671 ; PWR9BE:       # %bb.0: # %entry
3672 ; PWR9BE-NEXT:    mflr r0
3673 ; PWR9BE-NEXT:    stdu r1, -144(r1)
3674 ; PWR9BE-NEXT:    std r0, 160(r1)
3675 ; PWR9BE-NEXT:    bl __gcc_qadd
3676 ; PWR9BE-NEXT:    nop
3677 ; PWR9BE-NEXT:    stfd f2, 120(r1)
3678 ; PWR9BE-NEXT:    stfd f1, 112(r1)
3679 ; PWR9BE-NEXT:    lxv vs1, 112(r1)
3680 ; PWR9BE-NEXT:    xxswapd vs2, vs1
3681 ; PWR9BE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
3682 ; PWR9BE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
3683 ; PWR9BE-NEXT:    addi r1, r1, 144
3684 ; PWR9BE-NEXT:    ld r0, 16(r1)
3685 ; PWR9BE-NEXT:    mtlr r0
3686 ; PWR9BE-NEXT:    blr
3688 ; PWR10LE-LABEL: v2ppcf128_fast:
3689 ; PWR10LE:       # %bb.0: # %entry
3690 ; PWR10LE-NEXT:    mflr r0
3691 ; PWR10LE-NEXT:    std r0, 16(r1)
3692 ; PWR10LE-NEXT:    stdu r1, -64(r1)
3693 ; PWR10LE-NEXT:    bl __gcc_qadd@notoc
3694 ; PWR10LE-NEXT:    stfd f2, 40(r1)
3695 ; PWR10LE-NEXT:    stfd f1, 32(r1)
3696 ; PWR10LE-NEXT:    lxv vs1, 32(r1)
3697 ; PWR10LE-NEXT:    xxswapd vs2, vs1
3698 ; PWR10LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
3699 ; PWR10LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
3700 ; PWR10LE-NEXT:    addi r1, r1, 64
3701 ; PWR10LE-NEXT:    ld r0, 16(r1)
3702 ; PWR10LE-NEXT:    mtlr r0
3703 ; PWR10LE-NEXT:    blr
3705 ; PWR10BE-LABEL: v2ppcf128_fast:
3706 ; PWR10BE:       # %bb.0: # %entry
3707 ; PWR10BE-NEXT:    mflr r0
3708 ; PWR10BE-NEXT:    std r0, 16(r1)
3709 ; PWR10BE-NEXT:    stdu r1, -144(r1)
3710 ; PWR10BE-NEXT:    bl __gcc_qadd
3711 ; PWR10BE-NEXT:    nop
3712 ; PWR10BE-NEXT:    stfd f2, 120(r1)
3713 ; PWR10BE-NEXT:    stfd f1, 112(r1)
3714 ; PWR10BE-NEXT:    lxv vs1, 112(r1)
3715 ; PWR10BE-NEXT:    xxswapd vs2, vs1
3716 ; PWR10BE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
3717 ; PWR10BE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
3718 ; PWR10BE-NEXT:    addi r1, r1, 144
3719 ; PWR10BE-NEXT:    ld r0, 16(r1)
3720 ; PWR10BE-NEXT:    mtlr r0
3721 ; PWR10BE-NEXT:    blr
3722 entry:
3723   %0 = call fast ppc_fp128 @llvm.vector.reduce.fadd.v2ppcf128(ppc_fp128 0xM80000000000000000000000000000000, <2 x ppc_fp128> %a)
3724   ret ppc_fp128 %0
3727 define dso_local ppc_fp128 @v4ppcf128(<4 x ppc_fp128> %a) local_unnamed_addr #0 {
3728 ; PWR9LE-LABEL: v4ppcf128:
3729 ; PWR9LE:       # %bb.0: # %entry
3730 ; PWR9LE-NEXT:    mflr r0
3731 ; PWR9LE-NEXT:    stfd f28, -32(r1) # 8-byte Folded Spill
3732 ; PWR9LE-NEXT:    stfd f29, -24(r1) # 8-byte Folded Spill
3733 ; PWR9LE-NEXT:    stfd f30, -16(r1) # 8-byte Folded Spill
3734 ; PWR9LE-NEXT:    stfd f31, -8(r1) # 8-byte Folded Spill
3735 ; PWR9LE-NEXT:    stdu r1, -64(r1)
3736 ; PWR9LE-NEXT:    std r0, 80(r1)
3737 ; PWR9LE-NEXT:    fmr f31, f8
3738 ; PWR9LE-NEXT:    fmr f30, f7
3739 ; PWR9LE-NEXT:    fmr f29, f6
3740 ; PWR9LE-NEXT:    fmr f28, f5
3741 ; PWR9LE-NEXT:    bl __gcc_qadd
3742 ; PWR9LE-NEXT:    nop
3743 ; PWR9LE-NEXT:    fmr f3, f28
3744 ; PWR9LE-NEXT:    fmr f4, f29
3745 ; PWR9LE-NEXT:    bl __gcc_qadd
3746 ; PWR9LE-NEXT:    nop
3747 ; PWR9LE-NEXT:    fmr f3, f30
3748 ; PWR9LE-NEXT:    fmr f4, f31
3749 ; PWR9LE-NEXT:    bl __gcc_qadd
3750 ; PWR9LE-NEXT:    nop
3751 ; PWR9LE-NEXT:    addi r1, r1, 64
3752 ; PWR9LE-NEXT:    ld r0, 16(r1)
3753 ; PWR9LE-NEXT:    lfd f31, -8(r1) # 8-byte Folded Reload
3754 ; PWR9LE-NEXT:    lfd f30, -16(r1) # 8-byte Folded Reload
3755 ; PWR9LE-NEXT:    mtlr r0
3756 ; PWR9LE-NEXT:    lfd f29, -24(r1) # 8-byte Folded Reload
3757 ; PWR9LE-NEXT:    lfd f28, -32(r1) # 8-byte Folded Reload
3758 ; PWR9LE-NEXT:    blr
3760 ; PWR9BE-LABEL: v4ppcf128:
3761 ; PWR9BE:       # %bb.0: # %entry
3762 ; PWR9BE-NEXT:    mflr r0
3763 ; PWR9BE-NEXT:    stdu r1, -144(r1)
3764 ; PWR9BE-NEXT:    std r0, 160(r1)
3765 ; PWR9BE-NEXT:    stfd f28, 112(r1) # 8-byte Folded Spill
3766 ; PWR9BE-NEXT:    stfd f29, 120(r1) # 8-byte Folded Spill
3767 ; PWR9BE-NEXT:    stfd f30, 128(r1) # 8-byte Folded Spill
3768 ; PWR9BE-NEXT:    stfd f31, 136(r1) # 8-byte Folded Spill
3769 ; PWR9BE-NEXT:    fmr f31, f8
3770 ; PWR9BE-NEXT:    fmr f30, f7
3771 ; PWR9BE-NEXT:    fmr f29, f6
3772 ; PWR9BE-NEXT:    fmr f28, f5
3773 ; PWR9BE-NEXT:    bl __gcc_qadd
3774 ; PWR9BE-NEXT:    nop
3775 ; PWR9BE-NEXT:    fmr f3, f28
3776 ; PWR9BE-NEXT:    fmr f4, f29
3777 ; PWR9BE-NEXT:    bl __gcc_qadd
3778 ; PWR9BE-NEXT:    nop
3779 ; PWR9BE-NEXT:    fmr f3, f30
3780 ; PWR9BE-NEXT:    fmr f4, f31
3781 ; PWR9BE-NEXT:    bl __gcc_qadd
3782 ; PWR9BE-NEXT:    nop
3783 ; PWR9BE-NEXT:    lfd f31, 136(r1) # 8-byte Folded Reload
3784 ; PWR9BE-NEXT:    lfd f30, 128(r1) # 8-byte Folded Reload
3785 ; PWR9BE-NEXT:    lfd f29, 120(r1) # 8-byte Folded Reload
3786 ; PWR9BE-NEXT:    lfd f28, 112(r1) # 8-byte Folded Reload
3787 ; PWR9BE-NEXT:    addi r1, r1, 144
3788 ; PWR9BE-NEXT:    ld r0, 16(r1)
3789 ; PWR9BE-NEXT:    mtlr r0
3790 ; PWR9BE-NEXT:    blr
3792 ; PWR10LE-LABEL: v4ppcf128:
3793 ; PWR10LE:       # %bb.0: # %entry
3794 ; PWR10LE-NEXT:    mflr r0
3795 ; PWR10LE-NEXT:    stfd f28, -32(r1) # 8-byte Folded Spill
3796 ; PWR10LE-NEXT:    stfd f29, -24(r1) # 8-byte Folded Spill
3797 ; PWR10LE-NEXT:    stfd f30, -16(r1) # 8-byte Folded Spill
3798 ; PWR10LE-NEXT:    stfd f31, -8(r1) # 8-byte Folded Spill
3799 ; PWR10LE-NEXT:    std r0, 16(r1)
3800 ; PWR10LE-NEXT:    stdu r1, -64(r1)
3801 ; PWR10LE-NEXT:    fmr f31, f8
3802 ; PWR10LE-NEXT:    fmr f30, f7
3803 ; PWR10LE-NEXT:    fmr f29, f6
3804 ; PWR10LE-NEXT:    fmr f28, f5
3805 ; PWR10LE-NEXT:    bl __gcc_qadd@notoc
3806 ; PWR10LE-NEXT:    fmr f3, f28
3807 ; PWR10LE-NEXT:    fmr f4, f29
3808 ; PWR10LE-NEXT:    bl __gcc_qadd@notoc
3809 ; PWR10LE-NEXT:    fmr f3, f30
3810 ; PWR10LE-NEXT:    fmr f4, f31
3811 ; PWR10LE-NEXT:    bl __gcc_qadd@notoc
3812 ; PWR10LE-NEXT:    addi r1, r1, 64
3813 ; PWR10LE-NEXT:    ld r0, 16(r1)
3814 ; PWR10LE-NEXT:    lfd f31, -8(r1) # 8-byte Folded Reload
3815 ; PWR10LE-NEXT:    mtlr r0
3816 ; PWR10LE-NEXT:    lfd f30, -16(r1) # 8-byte Folded Reload
3817 ; PWR10LE-NEXT:    lfd f29, -24(r1) # 8-byte Folded Reload
3818 ; PWR10LE-NEXT:    lfd f28, -32(r1) # 8-byte Folded Reload
3819 ; PWR10LE-NEXT:    blr
3821 ; PWR10BE-LABEL: v4ppcf128:
3822 ; PWR10BE:       # %bb.0: # %entry
3823 ; PWR10BE-NEXT:    mflr r0
3824 ; PWR10BE-NEXT:    std r0, 16(r1)
3825 ; PWR10BE-NEXT:    stdu r1, -144(r1)
3826 ; PWR10BE-NEXT:    stfd f28, 112(r1) # 8-byte Folded Spill
3827 ; PWR10BE-NEXT:    stfd f29, 120(r1) # 8-byte Folded Spill
3828 ; PWR10BE-NEXT:    fmr f29, f6
3829 ; PWR10BE-NEXT:    fmr f28, f5
3830 ; PWR10BE-NEXT:    stfd f30, 128(r1) # 8-byte Folded Spill
3831 ; PWR10BE-NEXT:    stfd f31, 136(r1) # 8-byte Folded Spill
3832 ; PWR10BE-NEXT:    fmr f31, f8
3833 ; PWR10BE-NEXT:    fmr f30, f7
3834 ; PWR10BE-NEXT:    bl __gcc_qadd
3835 ; PWR10BE-NEXT:    nop
3836 ; PWR10BE-NEXT:    fmr f3, f28
3837 ; PWR10BE-NEXT:    fmr f4, f29
3838 ; PWR10BE-NEXT:    bl __gcc_qadd
3839 ; PWR10BE-NEXT:    nop
3840 ; PWR10BE-NEXT:    fmr f3, f30
3841 ; PWR10BE-NEXT:    fmr f4, f31
3842 ; PWR10BE-NEXT:    bl __gcc_qadd
3843 ; PWR10BE-NEXT:    nop
3844 ; PWR10BE-NEXT:    lfd f31, 136(r1) # 8-byte Folded Reload
3845 ; PWR10BE-NEXT:    lfd f30, 128(r1) # 8-byte Folded Reload
3846 ; PWR10BE-NEXT:    lfd f29, 120(r1) # 8-byte Folded Reload
3847 ; PWR10BE-NEXT:    lfd f28, 112(r1) # 8-byte Folded Reload
3848 ; PWR10BE-NEXT:    addi r1, r1, 144
3849 ; PWR10BE-NEXT:    ld r0, 16(r1)
3850 ; PWR10BE-NEXT:    mtlr r0
3851 ; PWR10BE-NEXT:    blr
3852 entry:
3853   %0 = call ppc_fp128 @llvm.vector.reduce.fadd.v4ppcf128(ppc_fp128 0xM80000000000000000000000000000000, <4 x ppc_fp128> %a)
3854   ret ppc_fp128 %0
3857 define dso_local ppc_fp128 @v4ppcf128_b(<4 x ppc_fp128> %a, ppc_fp128 %b) local_unnamed_addr #0 {
3858 ; PWR9LE-LABEL: v4ppcf128_b:
3859 ; PWR9LE:       # %bb.0: # %entry
3860 ; PWR9LE-NEXT:    mflr r0
3861 ; PWR9LE-NEXT:    stfd f26, -48(r1) # 8-byte Folded Spill
3862 ; PWR9LE-NEXT:    stfd f27, -40(r1) # 8-byte Folded Spill
3863 ; PWR9LE-NEXT:    stfd f28, -32(r1) # 8-byte Folded Spill
3864 ; PWR9LE-NEXT:    stfd f29, -24(r1) # 8-byte Folded Spill
3865 ; PWR9LE-NEXT:    stfd f30, -16(r1) # 8-byte Folded Spill
3866 ; PWR9LE-NEXT:    stfd f31, -8(r1) # 8-byte Folded Spill
3867 ; PWR9LE-NEXT:    stdu r1, -80(r1)
3868 ; PWR9LE-NEXT:    fmr f27, f4
3869 ; PWR9LE-NEXT:    fmr f26, f3
3870 ; PWR9LE-NEXT:    fmr f4, f2
3871 ; PWR9LE-NEXT:    fmr f3, f1
3872 ; PWR9LE-NEXT:    fmr f1, f9
3873 ; PWR9LE-NEXT:    fmr f2, f10
3874 ; PWR9LE-NEXT:    std r0, 96(r1)
3875 ; PWR9LE-NEXT:    fmr f31, f8
3876 ; PWR9LE-NEXT:    fmr f30, f7
3877 ; PWR9LE-NEXT:    fmr f29, f6
3878 ; PWR9LE-NEXT:    fmr f28, f5
3879 ; PWR9LE-NEXT:    bl __gcc_qadd
3880 ; PWR9LE-NEXT:    nop
3881 ; PWR9LE-NEXT:    fmr f3, f26
3882 ; PWR9LE-NEXT:    fmr f4, f27
3883 ; PWR9LE-NEXT:    bl __gcc_qadd
3884 ; PWR9LE-NEXT:    nop
3885 ; PWR9LE-NEXT:    fmr f3, f28
3886 ; PWR9LE-NEXT:    fmr f4, f29
3887 ; PWR9LE-NEXT:    bl __gcc_qadd
3888 ; PWR9LE-NEXT:    nop
3889 ; PWR9LE-NEXT:    fmr f3, f30
3890 ; PWR9LE-NEXT:    fmr f4, f31
3891 ; PWR9LE-NEXT:    bl __gcc_qadd
3892 ; PWR9LE-NEXT:    nop
3893 ; PWR9LE-NEXT:    addi r1, r1, 80
3894 ; PWR9LE-NEXT:    ld r0, 16(r1)
3895 ; PWR9LE-NEXT:    lfd f31, -8(r1) # 8-byte Folded Reload
3896 ; PWR9LE-NEXT:    lfd f30, -16(r1) # 8-byte Folded Reload
3897 ; PWR9LE-NEXT:    mtlr r0
3898 ; PWR9LE-NEXT:    lfd f29, -24(r1) # 8-byte Folded Reload
3899 ; PWR9LE-NEXT:    lfd f28, -32(r1) # 8-byte Folded Reload
3900 ; PWR9LE-NEXT:    lfd f27, -40(r1) # 8-byte Folded Reload
3901 ; PWR9LE-NEXT:    lfd f26, -48(r1) # 8-byte Folded Reload
3902 ; PWR9LE-NEXT:    blr
3904 ; PWR9BE-LABEL: v4ppcf128_b:
3905 ; PWR9BE:       # %bb.0: # %entry
3906 ; PWR9BE-NEXT:    mflr r0
3907 ; PWR9BE-NEXT:    stdu r1, -160(r1)
3908 ; PWR9BE-NEXT:    std r0, 176(r1)
3909 ; PWR9BE-NEXT:    stfd f26, 112(r1) # 8-byte Folded Spill
3910 ; PWR9BE-NEXT:    stfd f27, 120(r1) # 8-byte Folded Spill
3911 ; PWR9BE-NEXT:    fmr f27, f4
3912 ; PWR9BE-NEXT:    fmr f26, f3
3913 ; PWR9BE-NEXT:    fmr f4, f2
3914 ; PWR9BE-NEXT:    fmr f3, f1
3915 ; PWR9BE-NEXT:    fmr f1, f9
3916 ; PWR9BE-NEXT:    fmr f2, f10
3917 ; PWR9BE-NEXT:    stfd f28, 128(r1) # 8-byte Folded Spill
3918 ; PWR9BE-NEXT:    stfd f29, 136(r1) # 8-byte Folded Spill
3919 ; PWR9BE-NEXT:    stfd f30, 144(r1) # 8-byte Folded Spill
3920 ; PWR9BE-NEXT:    stfd f31, 152(r1) # 8-byte Folded Spill
3921 ; PWR9BE-NEXT:    fmr f31, f8
3922 ; PWR9BE-NEXT:    fmr f30, f7
3923 ; PWR9BE-NEXT:    fmr f29, f6
3924 ; PWR9BE-NEXT:    fmr f28, f5
3925 ; PWR9BE-NEXT:    bl __gcc_qadd
3926 ; PWR9BE-NEXT:    nop
3927 ; PWR9BE-NEXT:    fmr f3, f26
3928 ; PWR9BE-NEXT:    fmr f4, f27
3929 ; PWR9BE-NEXT:    bl __gcc_qadd
3930 ; PWR9BE-NEXT:    nop
3931 ; PWR9BE-NEXT:    fmr f3, f28
3932 ; PWR9BE-NEXT:    fmr f4, f29
3933 ; PWR9BE-NEXT:    bl __gcc_qadd
3934 ; PWR9BE-NEXT:    nop
3935 ; PWR9BE-NEXT:    fmr f3, f30
3936 ; PWR9BE-NEXT:    fmr f4, f31
3937 ; PWR9BE-NEXT:    bl __gcc_qadd
3938 ; PWR9BE-NEXT:    nop
3939 ; PWR9BE-NEXT:    lfd f31, 152(r1) # 8-byte Folded Reload
3940 ; PWR9BE-NEXT:    lfd f30, 144(r1) # 8-byte Folded Reload
3941 ; PWR9BE-NEXT:    lfd f29, 136(r1) # 8-byte Folded Reload
3942 ; PWR9BE-NEXT:    lfd f28, 128(r1) # 8-byte Folded Reload
3943 ; PWR9BE-NEXT:    lfd f27, 120(r1) # 8-byte Folded Reload
3944 ; PWR9BE-NEXT:    lfd f26, 112(r1) # 8-byte Folded Reload
3945 ; PWR9BE-NEXT:    addi r1, r1, 160
3946 ; PWR9BE-NEXT:    ld r0, 16(r1)
3947 ; PWR9BE-NEXT:    mtlr r0
3948 ; PWR9BE-NEXT:    blr
3950 ; PWR10LE-LABEL: v4ppcf128_b:
3951 ; PWR10LE:       # %bb.0: # %entry
3952 ; PWR10LE-NEXT:    mflr r0
3953 ; PWR10LE-NEXT:    stfd f26, -48(r1) # 8-byte Folded Spill
3954 ; PWR10LE-NEXT:    stfd f27, -40(r1) # 8-byte Folded Spill
3955 ; PWR10LE-NEXT:    stfd f28, -32(r1) # 8-byte Folded Spill
3956 ; PWR10LE-NEXT:    stfd f29, -24(r1) # 8-byte Folded Spill
3957 ; PWR10LE-NEXT:    stfd f30, -16(r1) # 8-byte Folded Spill
3958 ; PWR10LE-NEXT:    stfd f31, -8(r1) # 8-byte Folded Spill
3959 ; PWR10LE-NEXT:    std r0, 16(r1)
3960 ; PWR10LE-NEXT:    stdu r1, -80(r1)
3961 ; PWR10LE-NEXT:    fmr f27, f4
3962 ; PWR10LE-NEXT:    fmr f26, f3
3963 ; PWR10LE-NEXT:    fmr f4, f2
3964 ; PWR10LE-NEXT:    fmr f3, f1
3965 ; PWR10LE-NEXT:    fmr f1, f9
3966 ; PWR10LE-NEXT:    fmr f2, f10
3967 ; PWR10LE-NEXT:    fmr f31, f8
3968 ; PWR10LE-NEXT:    fmr f30, f7
3969 ; PWR10LE-NEXT:    fmr f29, f6
3970 ; PWR10LE-NEXT:    fmr f28, f5
3971 ; PWR10LE-NEXT:    bl __gcc_qadd@notoc
3972 ; PWR10LE-NEXT:    fmr f3, f26
3973 ; PWR10LE-NEXT:    fmr f4, f27
3974 ; PWR10LE-NEXT:    bl __gcc_qadd@notoc
3975 ; PWR10LE-NEXT:    fmr f3, f28
3976 ; PWR10LE-NEXT:    fmr f4, f29
3977 ; PWR10LE-NEXT:    bl __gcc_qadd@notoc
3978 ; PWR10LE-NEXT:    fmr f3, f30
3979 ; PWR10LE-NEXT:    fmr f4, f31
3980 ; PWR10LE-NEXT:    bl __gcc_qadd@notoc
3981 ; PWR10LE-NEXT:    addi r1, r1, 80
3982 ; PWR10LE-NEXT:    ld r0, 16(r1)
3983 ; PWR10LE-NEXT:    lfd f31, -8(r1) # 8-byte Folded Reload
3984 ; PWR10LE-NEXT:    mtlr r0
3985 ; PWR10LE-NEXT:    lfd f30, -16(r1) # 8-byte Folded Reload
3986 ; PWR10LE-NEXT:    lfd f29, -24(r1) # 8-byte Folded Reload
3987 ; PWR10LE-NEXT:    lfd f28, -32(r1) # 8-byte Folded Reload
3988 ; PWR10LE-NEXT:    lfd f27, -40(r1) # 8-byte Folded Reload
3989 ; PWR10LE-NEXT:    lfd f26, -48(r1) # 8-byte Folded Reload
3990 ; PWR10LE-NEXT:    blr
3992 ; PWR10BE-LABEL: v4ppcf128_b:
3993 ; PWR10BE:       # %bb.0: # %entry
3994 ; PWR10BE-NEXT:    mflr r0
3995 ; PWR10BE-NEXT:    std r0, 16(r1)
3996 ; PWR10BE-NEXT:    stdu r1, -160(r1)
3997 ; PWR10BE-NEXT:    stfd f26, 112(r1) # 8-byte Folded Spill
3998 ; PWR10BE-NEXT:    stfd f27, 120(r1) # 8-byte Folded Spill
3999 ; PWR10BE-NEXT:    fmr f27, f4
4000 ; PWR10BE-NEXT:    fmr f26, f3
4001 ; PWR10BE-NEXT:    fmr f4, f2
4002 ; PWR10BE-NEXT:    fmr f3, f1
4003 ; PWR10BE-NEXT:    fmr f1, f9
4004 ; PWR10BE-NEXT:    stfd f28, 128(r1) # 8-byte Folded Spill
4005 ; PWR10BE-NEXT:    stfd f29, 136(r1) # 8-byte Folded Spill
4006 ; PWR10BE-NEXT:    fmr f2, f10
4007 ; PWR10BE-NEXT:    fmr f29, f6
4008 ; PWR10BE-NEXT:    fmr f28, f5
4009 ; PWR10BE-NEXT:    stfd f30, 144(r1) # 8-byte Folded Spill
4010 ; PWR10BE-NEXT:    stfd f31, 152(r1) # 8-byte Folded Spill
4011 ; PWR10BE-NEXT:    fmr f31, f8
4012 ; PWR10BE-NEXT:    fmr f30, f7
4013 ; PWR10BE-NEXT:    bl __gcc_qadd
4014 ; PWR10BE-NEXT:    nop
4015 ; PWR10BE-NEXT:    fmr f3, f26
4016 ; PWR10BE-NEXT:    fmr f4, f27
4017 ; PWR10BE-NEXT:    bl __gcc_qadd
4018 ; PWR10BE-NEXT:    nop
4019 ; PWR10BE-NEXT:    fmr f3, f28
4020 ; PWR10BE-NEXT:    fmr f4, f29
4021 ; PWR10BE-NEXT:    bl __gcc_qadd
4022 ; PWR10BE-NEXT:    nop
4023 ; PWR10BE-NEXT:    fmr f3, f30
4024 ; PWR10BE-NEXT:    fmr f4, f31
4025 ; PWR10BE-NEXT:    bl __gcc_qadd
4026 ; PWR10BE-NEXT:    nop
4027 ; PWR10BE-NEXT:    lfd f31, 152(r1) # 8-byte Folded Reload
4028 ; PWR10BE-NEXT:    lfd f30, 144(r1) # 8-byte Folded Reload
4029 ; PWR10BE-NEXT:    lfd f29, 136(r1) # 8-byte Folded Reload
4030 ; PWR10BE-NEXT:    lfd f28, 128(r1) # 8-byte Folded Reload
4031 ; PWR10BE-NEXT:    lfd f27, 120(r1) # 8-byte Folded Reload
4032 ; PWR10BE-NEXT:    lfd f26, 112(r1) # 8-byte Folded Reload
4033 ; PWR10BE-NEXT:    addi r1, r1, 160
4034 ; PWR10BE-NEXT:    ld r0, 16(r1)
4035 ; PWR10BE-NEXT:    mtlr r0
4036 ; PWR10BE-NEXT:    blr
4037 entry:
4038   %0 = call ppc_fp128 @llvm.vector.reduce.fadd.v4ppcf128(ppc_fp128 %b, <4 x ppc_fp128> %a)
4039   ret ppc_fp128 %0
4042 define dso_local ppc_fp128 @v4ppcf128_fast(<4 x ppc_fp128> %a) local_unnamed_addr #0 {
4043 ; PWR9LE-LABEL: v4ppcf128_fast:
4044 ; PWR9LE:       # %bb.0: # %entry
4045 ; PWR9LE-NEXT:    mflr r0
4046 ; PWR9LE-NEXT:    stfd f26, -48(r1) # 8-byte Folded Spill
4047 ; PWR9LE-NEXT:    stfd f27, -40(r1) # 8-byte Folded Spill
4048 ; PWR9LE-NEXT:    stfd f28, -32(r1) # 8-byte Folded Spill
4049 ; PWR9LE-NEXT:    stfd f29, -24(r1) # 8-byte Folded Spill
4050 ; PWR9LE-NEXT:    stfd f30, -16(r1) # 8-byte Folded Spill
4051 ; PWR9LE-NEXT:    stfd f31, -8(r1) # 8-byte Folded Spill
4052 ; PWR9LE-NEXT:    stdu r1, -96(r1)
4053 ; PWR9LE-NEXT:    fmr f29, f4
4054 ; PWR9LE-NEXT:    fmr f28, f3
4055 ; PWR9LE-NEXT:    fmr f3, f5
4056 ; PWR9LE-NEXT:    fmr f4, f6
4057 ; PWR9LE-NEXT:    std r0, 112(r1)
4058 ; PWR9LE-NEXT:    fmr f31, f8
4059 ; PWR9LE-NEXT:    fmr f30, f7
4060 ; PWR9LE-NEXT:    bl __gcc_qadd
4061 ; PWR9LE-NEXT:    nop
4062 ; PWR9LE-NEXT:    fmr f27, f1
4063 ; PWR9LE-NEXT:    fmr f26, f2
4064 ; PWR9LE-NEXT:    fmr f1, f28
4065 ; PWR9LE-NEXT:    fmr f2, f29
4066 ; PWR9LE-NEXT:    fmr f3, f30
4067 ; PWR9LE-NEXT:    fmr f4, f31
4068 ; PWR9LE-NEXT:    bl __gcc_qadd
4069 ; PWR9LE-NEXT:    nop
4070 ; PWR9LE-NEXT:    fmr f3, f1
4071 ; PWR9LE-NEXT:    fmr f4, f2
4072 ; PWR9LE-NEXT:    fmr f1, f27
4073 ; PWR9LE-NEXT:    fmr f2, f26
4074 ; PWR9LE-NEXT:    bl __gcc_qadd
4075 ; PWR9LE-NEXT:    nop
4076 ; PWR9LE-NEXT:    stfd f2, 40(r1)
4077 ; PWR9LE-NEXT:    stfd f1, 32(r1)
4078 ; PWR9LE-NEXT:    lxv vs1, 32(r1)
4079 ; PWR9LE-NEXT:    xxswapd vs2, vs1
4080 ; PWR9LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
4081 ; PWR9LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
4082 ; PWR9LE-NEXT:    addi r1, r1, 96
4083 ; PWR9LE-NEXT:    ld r0, 16(r1)
4084 ; PWR9LE-NEXT:    lfd f31, -8(r1) # 8-byte Folded Reload
4085 ; PWR9LE-NEXT:    lfd f30, -16(r1) # 8-byte Folded Reload
4086 ; PWR9LE-NEXT:    mtlr r0
4087 ; PWR9LE-NEXT:    lfd f29, -24(r1) # 8-byte Folded Reload
4088 ; PWR9LE-NEXT:    lfd f28, -32(r1) # 8-byte Folded Reload
4089 ; PWR9LE-NEXT:    lfd f27, -40(r1) # 8-byte Folded Reload
4090 ; PWR9LE-NEXT:    lfd f26, -48(r1) # 8-byte Folded Reload
4091 ; PWR9LE-NEXT:    blr
4093 ; PWR9BE-LABEL: v4ppcf128_fast:
4094 ; PWR9BE:       # %bb.0: # %entry
4095 ; PWR9BE-NEXT:    mflr r0
4096 ; PWR9BE-NEXT:    stdu r1, -176(r1)
4097 ; PWR9BE-NEXT:    std r0, 192(r1)
4098 ; PWR9BE-NEXT:    stfd f28, 144(r1) # 8-byte Folded Spill
4099 ; PWR9BE-NEXT:    stfd f29, 152(r1) # 8-byte Folded Spill
4100 ; PWR9BE-NEXT:    fmr f29, f4
4101 ; PWR9BE-NEXT:    fmr f28, f3
4102 ; PWR9BE-NEXT:    fmr f3, f5
4103 ; PWR9BE-NEXT:    fmr f4, f6
4104 ; PWR9BE-NEXT:    stfd f26, 128(r1) # 8-byte Folded Spill
4105 ; PWR9BE-NEXT:    stfd f27, 136(r1) # 8-byte Folded Spill
4106 ; PWR9BE-NEXT:    stfd f30, 160(r1) # 8-byte Folded Spill
4107 ; PWR9BE-NEXT:    stfd f31, 168(r1) # 8-byte Folded Spill
4108 ; PWR9BE-NEXT:    fmr f31, f8
4109 ; PWR9BE-NEXT:    fmr f30, f7
4110 ; PWR9BE-NEXT:    bl __gcc_qadd
4111 ; PWR9BE-NEXT:    nop
4112 ; PWR9BE-NEXT:    fmr f27, f1
4113 ; PWR9BE-NEXT:    fmr f26, f2
4114 ; PWR9BE-NEXT:    fmr f1, f28
4115 ; PWR9BE-NEXT:    fmr f2, f29
4116 ; PWR9BE-NEXT:    fmr f3, f30
4117 ; PWR9BE-NEXT:    fmr f4, f31
4118 ; PWR9BE-NEXT:    bl __gcc_qadd
4119 ; PWR9BE-NEXT:    nop
4120 ; PWR9BE-NEXT:    fmr f3, f1
4121 ; PWR9BE-NEXT:    fmr f4, f2
4122 ; PWR9BE-NEXT:    fmr f1, f27
4123 ; PWR9BE-NEXT:    fmr f2, f26
4124 ; PWR9BE-NEXT:    bl __gcc_qadd
4125 ; PWR9BE-NEXT:    nop
4126 ; PWR9BE-NEXT:    stfd f2, 120(r1)
4127 ; PWR9BE-NEXT:    stfd f1, 112(r1)
4128 ; PWR9BE-NEXT:    lxv vs1, 112(r1)
4129 ; PWR9BE-NEXT:    lfd f31, 168(r1) # 8-byte Folded Reload
4130 ; PWR9BE-NEXT:    lfd f30, 160(r1) # 8-byte Folded Reload
4131 ; PWR9BE-NEXT:    xxswapd vs2, vs1
4132 ; PWR9BE-NEXT:    lfd f29, 152(r1) # 8-byte Folded Reload
4133 ; PWR9BE-NEXT:    lfd f28, 144(r1) # 8-byte Folded Reload
4134 ; PWR9BE-NEXT:    lfd f27, 136(r1) # 8-byte Folded Reload
4135 ; PWR9BE-NEXT:    lfd f26, 128(r1) # 8-byte Folded Reload
4136 ; PWR9BE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
4137 ; PWR9BE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
4138 ; PWR9BE-NEXT:    addi r1, r1, 176
4139 ; PWR9BE-NEXT:    ld r0, 16(r1)
4140 ; PWR9BE-NEXT:    mtlr r0
4141 ; PWR9BE-NEXT:    blr
4143 ; PWR10LE-LABEL: v4ppcf128_fast:
4144 ; PWR10LE:       # %bb.0: # %entry
4145 ; PWR10LE-NEXT:    mflr r0
4146 ; PWR10LE-NEXT:    stfd f26, -48(r1) # 8-byte Folded Spill
4147 ; PWR10LE-NEXT:    stfd f27, -40(r1) # 8-byte Folded Spill
4148 ; PWR10LE-NEXT:    stfd f28, -32(r1) # 8-byte Folded Spill
4149 ; PWR10LE-NEXT:    stfd f29, -24(r1) # 8-byte Folded Spill
4150 ; PWR10LE-NEXT:    stfd f30, -16(r1) # 8-byte Folded Spill
4151 ; PWR10LE-NEXT:    stfd f31, -8(r1) # 8-byte Folded Spill
4152 ; PWR10LE-NEXT:    std r0, 16(r1)
4153 ; PWR10LE-NEXT:    stdu r1, -96(r1)
4154 ; PWR10LE-NEXT:    fmr f29, f4
4155 ; PWR10LE-NEXT:    fmr f28, f3
4156 ; PWR10LE-NEXT:    fmr f3, f5
4157 ; PWR10LE-NEXT:    fmr f4, f6
4158 ; PWR10LE-NEXT:    fmr f31, f8
4159 ; PWR10LE-NEXT:    fmr f30, f7
4160 ; PWR10LE-NEXT:    bl __gcc_qadd@notoc
4161 ; PWR10LE-NEXT:    fmr f27, f1
4162 ; PWR10LE-NEXT:    fmr f26, f2
4163 ; PWR10LE-NEXT:    fmr f1, f28
4164 ; PWR10LE-NEXT:    fmr f2, f29
4165 ; PWR10LE-NEXT:    fmr f3, f30
4166 ; PWR10LE-NEXT:    fmr f4, f31
4167 ; PWR10LE-NEXT:    bl __gcc_qadd@notoc
4168 ; PWR10LE-NEXT:    fmr f3, f1
4169 ; PWR10LE-NEXT:    fmr f4, f2
4170 ; PWR10LE-NEXT:    fmr f1, f27
4171 ; PWR10LE-NEXT:    fmr f2, f26
4172 ; PWR10LE-NEXT:    bl __gcc_qadd@notoc
4173 ; PWR10LE-NEXT:    stfd f2, 40(r1)
4174 ; PWR10LE-NEXT:    stfd f1, 32(r1)
4175 ; PWR10LE-NEXT:    lxv vs1, 32(r1)
4176 ; PWR10LE-NEXT:    xxswapd vs2, vs1
4177 ; PWR10LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
4178 ; PWR10LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
4179 ; PWR10LE-NEXT:    addi r1, r1, 96
4180 ; PWR10LE-NEXT:    ld r0, 16(r1)
4181 ; PWR10LE-NEXT:    lfd f31, -8(r1) # 8-byte Folded Reload
4182 ; PWR10LE-NEXT:    mtlr r0
4183 ; PWR10LE-NEXT:    lfd f30, -16(r1) # 8-byte Folded Reload
4184 ; PWR10LE-NEXT:    lfd f29, -24(r1) # 8-byte Folded Reload
4185 ; PWR10LE-NEXT:    lfd f28, -32(r1) # 8-byte Folded Reload
4186 ; PWR10LE-NEXT:    lfd f27, -40(r1) # 8-byte Folded Reload
4187 ; PWR10LE-NEXT:    lfd f26, -48(r1) # 8-byte Folded Reload
4188 ; PWR10LE-NEXT:    blr
4190 ; PWR10BE-LABEL: v4ppcf128_fast:
4191 ; PWR10BE:       # %bb.0: # %entry
4192 ; PWR10BE-NEXT:    mflr r0
4193 ; PWR10BE-NEXT:    std r0, 16(r1)
4194 ; PWR10BE-NEXT:    stdu r1, -176(r1)
4195 ; PWR10BE-NEXT:    stfd f28, 144(r1) # 8-byte Folded Spill
4196 ; PWR10BE-NEXT:    stfd f29, 152(r1) # 8-byte Folded Spill
4197 ; PWR10BE-NEXT:    fmr f29, f4
4198 ; PWR10BE-NEXT:    fmr f28, f3
4199 ; PWR10BE-NEXT:    fmr f3, f5
4200 ; PWR10BE-NEXT:    fmr f4, f6
4201 ; PWR10BE-NEXT:    stfd f26, 128(r1) # 8-byte Folded Spill
4202 ; PWR10BE-NEXT:    stfd f27, 136(r1) # 8-byte Folded Spill
4203 ; PWR10BE-NEXT:    stfd f30, 160(r1) # 8-byte Folded Spill
4204 ; PWR10BE-NEXT:    stfd f31, 168(r1) # 8-byte Folded Spill
4205 ; PWR10BE-NEXT:    fmr f31, f8
4206 ; PWR10BE-NEXT:    fmr f30, f7
4207 ; PWR10BE-NEXT:    bl __gcc_qadd
4208 ; PWR10BE-NEXT:    nop
4209 ; PWR10BE-NEXT:    fmr f27, f1
4210 ; PWR10BE-NEXT:    fmr f26, f2
4211 ; PWR10BE-NEXT:    fmr f1, f28
4212 ; PWR10BE-NEXT:    fmr f2, f29
4213 ; PWR10BE-NEXT:    fmr f3, f30
4214 ; PWR10BE-NEXT:    fmr f4, f31
4215 ; PWR10BE-NEXT:    bl __gcc_qadd
4216 ; PWR10BE-NEXT:    nop
4217 ; PWR10BE-NEXT:    fmr f3, f1
4218 ; PWR10BE-NEXT:    fmr f4, f2
4219 ; PWR10BE-NEXT:    fmr f1, f27
4220 ; PWR10BE-NEXT:    fmr f2, f26
4221 ; PWR10BE-NEXT:    bl __gcc_qadd
4222 ; PWR10BE-NEXT:    nop
4223 ; PWR10BE-NEXT:    stfd f2, 120(r1)
4224 ; PWR10BE-NEXT:    stfd f1, 112(r1)
4225 ; PWR10BE-NEXT:    lfd f31, 168(r1) # 8-byte Folded Reload
4226 ; PWR10BE-NEXT:    lfd f30, 160(r1) # 8-byte Folded Reload
4227 ; PWR10BE-NEXT:    lfd f29, 152(r1) # 8-byte Folded Reload
4228 ; PWR10BE-NEXT:    lfd f28, 144(r1) # 8-byte Folded Reload
4229 ; PWR10BE-NEXT:    lfd f27, 136(r1) # 8-byte Folded Reload
4230 ; PWR10BE-NEXT:    lfd f26, 128(r1) # 8-byte Folded Reload
4231 ; PWR10BE-NEXT:    lxv vs1, 112(r1)
4232 ; PWR10BE-NEXT:    xxswapd vs2, vs1
4233 ; PWR10BE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
4234 ; PWR10BE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
4235 ; PWR10BE-NEXT:    addi r1, r1, 176
4236 ; PWR10BE-NEXT:    ld r0, 16(r1)
4237 ; PWR10BE-NEXT:    mtlr r0
4238 ; PWR10BE-NEXT:    blr
4239 entry:
4240   %0 = call fast ppc_fp128 @llvm.vector.reduce.fadd.v4ppcf128(ppc_fp128 0xM80000000000000000000000000000000, <4 x ppc_fp128> %a)
4241   ret ppc_fp128 %0
4244 declare ppc_fp128 @llvm.vector.reduce.fadd.v2ppcf128(ppc_fp128, <2 x ppc_fp128>) #0
4245 declare ppc_fp128 @llvm.vector.reduce.fadd.v4ppcf128(ppc_fp128, <4 x ppc_fp128>) #0
4247 attributes #0 = { nounwind }