Revert rGe6ccb57bb3f6b761f2310e97fd6ca99eff42f73e "[SLP] Add cost model for `llvm...
[llvm-project.git] / llvm / test / CodeGen / PowerPC / load-shuffle-and-shuffle-store.ll
blob8a04ca4ce3de85f745c713853da3efa099f0fdd7
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr -verify-machineinstrs -mcpu=pwr8 -mattr=+vsx \
3 ; RUN:   -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s --check-prefix=CHECK-P8
5 ; RUN: llc -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr -verify-machineinstrs -mcpu=pwr9 -mattr=+vsx \
6 ; RUN:   -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s --check-prefix=CHECK-P9
8 ; RUN: llc -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr -verify-machineinstrs -mcpu=pwr8 -mattr=+vsx \
9 ; RUN:   -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=CHECK-P8-BE
11 ; RUN: llc -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr -verify-machineinstrs -mcpu=pwr9 -mattr=+vsx \
12 ; RUN:   -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=CHECK-P9-BE
14 define <2 x i64> @load_swap00(<2 x i64>* %vp1, <2 x i64>* %vp2) {
15 ; CHECK-P8-LABEL: load_swap00:
16 ; CHECK-P8:       # %bb.0:
17 ; CHECK-P8-NEXT:    lxvd2x v2, 0, r3
18 ; CHECK-P8-NEXT:    blr
20 ; CHECK-P9-LABEL: load_swap00:
21 ; CHECK-P9:       # %bb.0:
22 ; CHECK-P9-NEXT:    lxvd2x v2, 0, r3
23 ; CHECK-P9-NEXT:    blr
25 ; CHECK-P8-BE-LABEL: load_swap00:
26 ; CHECK-P8-BE:       # %bb.0:
27 ; CHECK-P8-BE-NEXT:    lxvd2x v2, 0, r3
28 ; CHECK-P8-BE-NEXT:    xxswapd v2, v2
29 ; CHECK-P8-BE-NEXT:    blr
31 ; CHECK-P9-BE-LABEL: load_swap00:
32 ; CHECK-P9-BE:       # %bb.0:
33 ; CHECK-P9-BE-NEXT:    lxv v2, 0(r3)
34 ; CHECK-P9-BE-NEXT:    xxswapd v2, v2
35 ; CHECK-P9-BE-NEXT:    blr
36   %v1 = load <2 x i64>, <2 x i64>* %vp1
37   %v2 = load <2 x i64>, <2 x i64>* %vp2
38   %v3 = shufflevector <2 x i64> %v1, <2 x i64> %v2, <2 x i32> <i32 1, i32 0>
39   ret <2 x i64> %v3
42 define <2 x i64> @load_swap01(<2 x i64>* %vp1, <2 x i64>* %vp2) {
43 ; CHECK-P8-LABEL: load_swap01:
44 ; CHECK-P8:       # %bb.0:
45 ; CHECK-P8-NEXT:    lxvd2x v2, 0, r4
46 ; CHECK-P8-NEXT:    blr
48 ; CHECK-P9-LABEL: load_swap01:
49 ; CHECK-P9:       # %bb.0:
50 ; CHECK-P9-NEXT:    lxvd2x v2, 0, r4
51 ; CHECK-P9-NEXT:    blr
53 ; CHECK-P8-BE-LABEL: load_swap01:
54 ; CHECK-P8-BE:       # %bb.0:
55 ; CHECK-P8-BE-NEXT:    lxvd2x v2, 0, r4
56 ; CHECK-P8-BE-NEXT:    xxswapd v2, v2
57 ; CHECK-P8-BE-NEXT:    blr
59 ; CHECK-P9-BE-LABEL: load_swap01:
60 ; CHECK-P9-BE:       # %bb.0:
61 ; CHECK-P9-BE-NEXT:    lxv v2, 0(r4)
62 ; CHECK-P9-BE-NEXT:    xxswapd v2, v2
63 ; CHECK-P9-BE-NEXT:    blr
64   %v1 = load <2 x i64>, <2 x i64>* %vp1
65   %v2 = load <2 x i64>, <2 x i64>* %vp2
66   %v3 = shufflevector <2 x i64> %v1, <2 x i64> %v2, <2 x i32> <i32 3, i32 2>
67   ret <2 x i64> %v3
70 define <4 x i32> @load_swap10(<4 x i32>* %vp1, <4 x i32>* %vp2) {
71 ; CHECK-P8-LABEL: load_swap10:
72 ; CHECK-P8:       # %bb.0:
73 ; CHECK-P8-NEXT:    addis r4, r2, .LCPI2_0@toc@ha
74 ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3
75 ; CHECK-P8-NEXT:    addi r4, r4, .LCPI2_0@toc@l
76 ; CHECK-P8-NEXT:    lxvd2x vs1, 0, r4
77 ; CHECK-P8-NEXT:    xxswapd v2, vs0
78 ; CHECK-P8-NEXT:    xxswapd v3, vs1
79 ; CHECK-P8-NEXT:    vperm v2, v2, v2, v3
80 ; CHECK-P8-NEXT:    blr
82 ; CHECK-P9-LABEL: load_swap10:
83 ; CHECK-P9:       # %bb.0:
84 ; CHECK-P9-NEXT:    lxvw4x v2, 0, r3
85 ; CHECK-P9-NEXT:    blr
87 ; CHECK-P8-BE-LABEL: load_swap10:
88 ; CHECK-P8-BE:       # %bb.0:
89 ; CHECK-P8-BE-NEXT:    addis r4, r2, .LCPI2_0@toc@ha
90 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
91 ; CHECK-P8-BE-NEXT:    addi r4, r4, .LCPI2_0@toc@l
92 ; CHECK-P8-BE-NEXT:    lxvw4x v3, 0, r4
93 ; CHECK-P8-BE-NEXT:    vperm v2, v2, v2, v3
94 ; CHECK-P8-BE-NEXT:    blr
96 ; CHECK-P9-BE-LABEL: load_swap10:
97 ; CHECK-P9-BE:       # %bb.0:
98 ; CHECK-P9-BE-NEXT:    lxv v2, 0(r3)
99 ; CHECK-P9-BE-NEXT:    addis r3, r2, .LCPI2_0@toc@ha
100 ; CHECK-P9-BE-NEXT:    addi r3, r3, .LCPI2_0@toc@l
101 ; CHECK-P9-BE-NEXT:    lxv v3, 0(r3)
102 ; CHECK-P9-BE-NEXT:    vperm v2, v2, v2, v3
103 ; CHECK-P9-BE-NEXT:    blr
104   %v1 = load <4 x i32>, <4 x i32>* %vp1
105   %v2 = load <4 x i32>, <4 x i32>* %vp2
106   %v3 = shufflevector <4 x i32> %v1, <4 x i32> %v2, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
107   ret <4 x i32> %v3
110 define <4 x i32> @load_swap11(<4 x i32>* %vp1, <4 x i32>* %vp2) {
111 ; CHECK-P8-LABEL: load_swap11:
112 ; CHECK-P8:       # %bb.0:
113 ; CHECK-P8-NEXT:    addis r3, r2, .LCPI3_0@toc@ha
114 ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r4
115 ; CHECK-P8-NEXT:    addi r3, r3, .LCPI3_0@toc@l
116 ; CHECK-P8-NEXT:    lxvd2x vs1, 0, r3
117 ; CHECK-P8-NEXT:    xxswapd v2, vs0
118 ; CHECK-P8-NEXT:    xxswapd v3, vs1
119 ; CHECK-P8-NEXT:    vperm v2, v2, v2, v3
120 ; CHECK-P8-NEXT:    blr
122 ; CHECK-P9-LABEL: load_swap11:
123 ; CHECK-P9:       # %bb.0:
124 ; CHECK-P9-NEXT:    lxvw4x v2, 0, r4
125 ; CHECK-P9-NEXT:    blr
127 ; CHECK-P8-BE-LABEL: load_swap11:
128 ; CHECK-P8-BE:       # %bb.0:
129 ; CHECK-P8-BE-NEXT:    addis r3, r2, .LCPI3_0@toc@ha
130 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r4
131 ; CHECK-P8-BE-NEXT:    addi r3, r3, .LCPI3_0@toc@l
132 ; CHECK-P8-BE-NEXT:    lxvw4x v3, 0, r3
133 ; CHECK-P8-BE-NEXT:    vperm v2, v2, v2, v3
134 ; CHECK-P8-BE-NEXT:    blr
136 ; CHECK-P9-BE-LABEL: load_swap11:
137 ; CHECK-P9-BE:       # %bb.0:
138 ; CHECK-P9-BE-NEXT:    addis r3, r2, .LCPI3_0@toc@ha
139 ; CHECK-P9-BE-NEXT:    lxv v2, 0(r4)
140 ; CHECK-P9-BE-NEXT:    addi r3, r3, .LCPI3_0@toc@l
141 ; CHECK-P9-BE-NEXT:    lxv v3, 0(r3)
142 ; CHECK-P9-BE-NEXT:    vperm v2, v2, v2, v3
143 ; CHECK-P9-BE-NEXT:    blr
144   %v1 = load <4 x i32>, <4 x i32>* %vp1
145   %v2 = load <4 x i32>, <4 x i32>* %vp2
146   %v3 = shufflevector <4 x i32> %v1, <4 x i32> %v2, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
147   ret <4 x i32> %v3
150 define <8 x i16> @load_swap20(<8 x i16>* %vp1, <8 x i16>* %vp2){
151 ; CHECK-P8-LABEL: load_swap20:
152 ; CHECK-P8:       # %bb.0:
153 ; CHECK-P8-NEXT:    addis r4, r2, .LCPI4_0@toc@ha
154 ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3
155 ; CHECK-P8-NEXT:    addi r4, r4, .LCPI4_0@toc@l
156 ; CHECK-P8-NEXT:    lxvd2x vs1, 0, r4
157 ; CHECK-P8-NEXT:    xxswapd v2, vs0
158 ; CHECK-P8-NEXT:    xxswapd v3, vs1
159 ; CHECK-P8-NEXT:    vperm v2, v2, v2, v3
160 ; CHECK-P8-NEXT:    blr
162 ; CHECK-P9-LABEL: load_swap20:
163 ; CHECK-P9:       # %bb.0:
164 ; CHECK-P9-NEXT:    lxvh8x v2, 0, r3
165 ; CHECK-P9-NEXT:    blr
167 ; CHECK-P8-BE-LABEL: load_swap20:
168 ; CHECK-P8-BE:       # %bb.0:
169 ; CHECK-P8-BE-NEXT:    addis r4, r2, .LCPI4_0@toc@ha
170 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
171 ; CHECK-P8-BE-NEXT:    addi r4, r4, .LCPI4_0@toc@l
172 ; CHECK-P8-BE-NEXT:    lxvw4x v3, 0, r4
173 ; CHECK-P8-BE-NEXT:    vperm v2, v2, v2, v3
174 ; CHECK-P8-BE-NEXT:    blr
176 ; CHECK-P9-BE-LABEL: load_swap20:
177 ; CHECK-P9-BE:       # %bb.0:
178 ; CHECK-P9-BE-NEXT:    lxv v2, 0(r3)
179 ; CHECK-P9-BE-NEXT:    addis r3, r2, .LCPI4_0@toc@ha
180 ; CHECK-P9-BE-NEXT:    addi r3, r3, .LCPI4_0@toc@l
181 ; CHECK-P9-BE-NEXT:    lxv v3, 0(r3)
182 ; CHECK-P9-BE-NEXT:    vperm v2, v2, v2, v3
183 ; CHECK-P9-BE-NEXT:    blr
184   %v1 = load <8 x i16>, <8 x i16>* %vp1
185   %v2 = load <8 x i16>, <8 x i16>* %vp2
186   %v3 = shufflevector <8 x i16> %v1, <8 x i16> %v2, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
187   ret <8 x i16> %v3
190 define <8 x i16> @load_swap21(<8 x i16>* %vp1, <8 x i16>* %vp2){
191 ; CHECK-P8-LABEL: load_swap21:
192 ; CHECK-P8:       # %bb.0:
193 ; CHECK-P8-NEXT:    addis r3, r2, .LCPI5_0@toc@ha
194 ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r4
195 ; CHECK-P8-NEXT:    addi r3, r3, .LCPI5_0@toc@l
196 ; CHECK-P8-NEXT:    lxvd2x vs1, 0, r3
197 ; CHECK-P8-NEXT:    xxswapd v2, vs0
198 ; CHECK-P8-NEXT:    xxswapd v3, vs1
199 ; CHECK-P8-NEXT:    vperm v2, v2, v2, v3
200 ; CHECK-P8-NEXT:    blr
202 ; CHECK-P9-LABEL: load_swap21:
203 ; CHECK-P9:       # %bb.0:
204 ; CHECK-P9-NEXT:    lxvh8x v2, 0, r4
205 ; CHECK-P9-NEXT:    blr
207 ; CHECK-P8-BE-LABEL: load_swap21:
208 ; CHECK-P8-BE:       # %bb.0:
209 ; CHECK-P8-BE-NEXT:    addis r3, r2, .LCPI5_0@toc@ha
210 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r4
211 ; CHECK-P8-BE-NEXT:    addi r3, r3, .LCPI5_0@toc@l
212 ; CHECK-P8-BE-NEXT:    lxvw4x v3, 0, r3
213 ; CHECK-P8-BE-NEXT:    vperm v2, v2, v2, v3
214 ; CHECK-P8-BE-NEXT:    blr
216 ; CHECK-P9-BE-LABEL: load_swap21:
217 ; CHECK-P9-BE:       # %bb.0:
218 ; CHECK-P9-BE-NEXT:    addis r3, r2, .LCPI5_0@toc@ha
219 ; CHECK-P9-BE-NEXT:    lxv v2, 0(r4)
220 ; CHECK-P9-BE-NEXT:    addi r3, r3, .LCPI5_0@toc@l
221 ; CHECK-P9-BE-NEXT:    lxv v3, 0(r3)
222 ; CHECK-P9-BE-NEXT:    vperm v2, v2, v2, v3
223 ; CHECK-P9-BE-NEXT:    blr
224   %v1 = load <8 x i16>, <8 x i16>* %vp1
225   %v2 = load <8 x i16>, <8 x i16>* %vp2
226   %v3 = shufflevector <8 x i16> %v1, <8 x i16> %v2, <8 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>
227   ret <8 x i16> %v3
230 define <16 x i8> @load_swap30(<16 x i8>* %vp1, <16 x i8>* %vp2){
231 ; CHECK-P8-LABEL: load_swap30:
232 ; CHECK-P8:       # %bb.0:
233 ; CHECK-P8-NEXT:    addis r4, r2, .LCPI6_0@toc@ha
234 ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3
235 ; CHECK-P8-NEXT:    addi r4, r4, .LCPI6_0@toc@l
236 ; CHECK-P8-NEXT:    lxvd2x vs1, 0, r4
237 ; CHECK-P8-NEXT:    xxswapd v2, vs0
238 ; CHECK-P8-NEXT:    xxswapd v3, vs1
239 ; CHECK-P8-NEXT:    vperm v2, v2, v2, v3
240 ; CHECK-P8-NEXT:    blr
242 ; CHECK-P9-LABEL: load_swap30:
243 ; CHECK-P9:       # %bb.0:
244 ; CHECK-P9-NEXT:    lxvb16x v2, 0, r3
245 ; CHECK-P9-NEXT:    blr
247 ; CHECK-P8-BE-LABEL: load_swap30:
248 ; CHECK-P8-BE:       # %bb.0:
249 ; CHECK-P8-BE-NEXT:    addis r4, r2, .LCPI6_0@toc@ha
250 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
251 ; CHECK-P8-BE-NEXT:    addi r4, r4, .LCPI6_0@toc@l
252 ; CHECK-P8-BE-NEXT:    lxvw4x v3, 0, r4
253 ; CHECK-P8-BE-NEXT:    vperm v2, v2, v2, v3
254 ; CHECK-P8-BE-NEXT:    blr
256 ; CHECK-P9-BE-LABEL: load_swap30:
257 ; CHECK-P9-BE:       # %bb.0:
258 ; CHECK-P9-BE-NEXT:    lxv vs0, 0(r3)
259 ; CHECK-P9-BE-NEXT:    xxbrq v2, vs0
260 ; CHECK-P9-BE-NEXT:    blr
261   %v1 = load <16 x i8>, <16 x i8>* %vp1
262   %v2 = load <16 x i8>, <16 x i8>* %vp2
263   %v3 = shufflevector <16 x i8> %v1, <16 x i8> %v2, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
264   ret <16 x i8> %v3
267 define <16 x i8> @load_swap31(<16 x i8>* %vp1, <16 x i8>* %vp2){
268 ; CHECK-P8-LABEL: load_swap31:
269 ; CHECK-P8:       # %bb.0:
270 ; CHECK-P8-NEXT:    addis r3, r2, .LCPI7_0@toc@ha
271 ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r4
272 ; CHECK-P8-NEXT:    addi r3, r3, .LCPI7_0@toc@l
273 ; CHECK-P8-NEXT:    lxvd2x vs1, 0, r3
274 ; CHECK-P8-NEXT:    xxswapd v2, vs0
275 ; CHECK-P8-NEXT:    xxswapd v3, vs1
276 ; CHECK-P8-NEXT:    vperm v2, v2, v2, v3
277 ; CHECK-P8-NEXT:    blr
279 ; CHECK-P9-LABEL: load_swap31:
280 ; CHECK-P9:       # %bb.0:
281 ; CHECK-P9-NEXT:    lxvb16x v2, 0, r4
282 ; CHECK-P9-NEXT:    blr
284 ; CHECK-P8-BE-LABEL: load_swap31:
285 ; CHECK-P8-BE:       # %bb.0:
286 ; CHECK-P8-BE-NEXT:    addis r3, r2, .LCPI7_0@toc@ha
287 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r4
288 ; CHECK-P8-BE-NEXT:    addi r3, r3, .LCPI7_0@toc@l
289 ; CHECK-P8-BE-NEXT:    lxvw4x v3, 0, r3
290 ; CHECK-P8-BE-NEXT:    vperm v2, v2, v2, v3
291 ; CHECK-P8-BE-NEXT:    blr
293 ; CHECK-P9-BE-LABEL: load_swap31:
294 ; CHECK-P9-BE:       # %bb.0:
295 ; CHECK-P9-BE-NEXT:    lxv vs0, 0(r4)
296 ; CHECK-P9-BE-NEXT:    xxbrq v2, vs0
297 ; CHECK-P9-BE-NEXT:    blr
298   %v1 = load <16 x i8>, <16 x i8>* %vp1
299   %v2 = load <16 x i8>, <16 x i8>* %vp2
300   %v3 = shufflevector <16 x i8> %v1, <16 x i8> %v2, <16 x i32> <i32 31, i32 30, i32 29, i32 28, i32 27, i32 26, i32 25, i32 24, i32 23, i32 22, i32 21, i32 20, i32 19, i32 18, i32 17, i32 16>
301   ret <16 x i8> %v3
304 define <2 x double> @load_swap40(<2 x double>* %vp1, <2 x double>* %vp2) {
305 ; CHECK-P8-LABEL: load_swap40:
306 ; CHECK-P8:       # %bb.0:
307 ; CHECK-P8-NEXT:    lxvd2x v2, 0, r4
308 ; CHECK-P8-NEXT:    blr
310 ; CHECK-P9-LABEL: load_swap40:
311 ; CHECK-P9:       # %bb.0:
312 ; CHECK-P9-NEXT:    lxvd2x v2, 0, r4
313 ; CHECK-P9-NEXT:    blr
315 ; CHECK-P8-BE-LABEL: load_swap40:
316 ; CHECK-P8-BE:       # %bb.0:
317 ; CHECK-P8-BE-NEXT:    lxvd2x vs0, 0, r4
318 ; CHECK-P8-BE-NEXT:    xxswapd v2, vs0
319 ; CHECK-P8-BE-NEXT:    blr
321 ; CHECK-P9-BE-LABEL: load_swap40:
322 ; CHECK-P9-BE:       # %bb.0:
323 ; CHECK-P9-BE-NEXT:    lxv vs0, 0(r4)
324 ; CHECK-P9-BE-NEXT:    xxswapd v2, vs0
325 ; CHECK-P9-BE-NEXT:    blr
326   %v1 = load <2 x double>, <2 x double>* %vp1
327   %v2 = load <2 x double>, <2 x double>* %vp2
328   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> <i32 3, i32 2>
329   ret <2 x double> %v3
332 define <4 x float> @load_swap50(<4 x float>* %vp1, <4 x float>* %vp2) {
333 ; CHECK-P8-LABEL: load_swap50:
334 ; CHECK-P8:       # %bb.0:
335 ; CHECK-P8-NEXT:    addis r4, r2, .LCPI9_0@toc@ha
336 ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3
337 ; CHECK-P8-NEXT:    addi r4, r4, .LCPI9_0@toc@l
338 ; CHECK-P8-NEXT:    lxvd2x vs1, 0, r4
339 ; CHECK-P8-NEXT:    xxswapd v2, vs0
340 ; CHECK-P8-NEXT:    xxswapd v3, vs1
341 ; CHECK-P8-NEXT:    vperm v2, v2, v2, v3
342 ; CHECK-P8-NEXT:    blr
344 ; CHECK-P9-LABEL: load_swap50:
345 ; CHECK-P9:       # %bb.0:
346 ; CHECK-P9-NEXT:    lxvw4x v2, 0, r3
347 ; CHECK-P9-NEXT:    blr
349 ; CHECK-P8-BE-LABEL: load_swap50:
350 ; CHECK-P8-BE:       # %bb.0:
351 ; CHECK-P8-BE-NEXT:    addis r4, r2, .LCPI9_0@toc@ha
352 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
353 ; CHECK-P8-BE-NEXT:    addi r4, r4, .LCPI9_0@toc@l
354 ; CHECK-P8-BE-NEXT:    lxvw4x v3, 0, r4
355 ; CHECK-P8-BE-NEXT:    vperm v2, v2, v2, v3
356 ; CHECK-P8-BE-NEXT:    blr
358 ; CHECK-P9-BE-LABEL: load_swap50:
359 ; CHECK-P9-BE:       # %bb.0:
360 ; CHECK-P9-BE-NEXT:    lxv v2, 0(r3)
361 ; CHECK-P9-BE-NEXT:    addis r3, r2, .LCPI9_0@toc@ha
362 ; CHECK-P9-BE-NEXT:    addi r3, r3, .LCPI9_0@toc@l
363 ; CHECK-P9-BE-NEXT:    lxv v3, 0(r3)
364 ; CHECK-P9-BE-NEXT:    vperm v2, v2, v2, v3
365 ; CHECK-P9-BE-NEXT:    blr
366   %v1 = load <4 x float>, <4 x float>* %vp1
367   %v2 = load <4 x float>, <4 x float>* %vp2
368   %v3 = shufflevector <4 x float> %v1, <4 x float> %v2, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
369   ret <4 x float> %v3
372 define <4 x float> @load_swap51(<4 x float>* %vp1, <4 x float>* %vp2) {
373 ; CHECK-P8-LABEL: load_swap51:
374 ; CHECK-P8:       # %bb.0:
375 ; CHECK-P8-NEXT:    addis r3, r2, .LCPI10_0@toc@ha
376 ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r4
377 ; CHECK-P8-NEXT:    addi r3, r3, .LCPI10_0@toc@l
378 ; CHECK-P8-NEXT:    lxvd2x vs1, 0, r3
379 ; CHECK-P8-NEXT:    xxswapd v2, vs0
380 ; CHECK-P8-NEXT:    xxswapd v3, vs1
381 ; CHECK-P8-NEXT:    vperm v2, v2, v2, v3
382 ; CHECK-P8-NEXT:    blr
384 ; CHECK-P9-LABEL: load_swap51:
385 ; CHECK-P9:       # %bb.0:
386 ; CHECK-P9-NEXT:    lxvw4x v2, 0, r4
387 ; CHECK-P9-NEXT:    blr
389 ; CHECK-P8-BE-LABEL: load_swap51:
390 ; CHECK-P8-BE:       # %bb.0:
391 ; CHECK-P8-BE-NEXT:    addis r3, r2, .LCPI10_0@toc@ha
392 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r4
393 ; CHECK-P8-BE-NEXT:    addi r3, r3, .LCPI10_0@toc@l
394 ; CHECK-P8-BE-NEXT:    lxvw4x v3, 0, r3
395 ; CHECK-P8-BE-NEXT:    vperm v2, v2, v2, v3
396 ; CHECK-P8-BE-NEXT:    blr
398 ; CHECK-P9-BE-LABEL: load_swap51:
399 ; CHECK-P9-BE:       # %bb.0:
400 ; CHECK-P9-BE-NEXT:    addis r3, r2, .LCPI10_0@toc@ha
401 ; CHECK-P9-BE-NEXT:    lxv v2, 0(r4)
402 ; CHECK-P9-BE-NEXT:    addi r3, r3, .LCPI10_0@toc@l
403 ; CHECK-P9-BE-NEXT:    lxv v3, 0(r3)
404 ; CHECK-P9-BE-NEXT:    vperm v2, v2, v2, v3
405 ; CHECK-P9-BE-NEXT:    blr
406   %v1 = load <4 x float>, <4 x float>* %vp1
407   %v2 = load <4 x float>, <4 x float>* %vp2
408   %v3 = shufflevector <4 x float> %v1, <4 x float> %v2, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
409   ret <4 x float> %v3
412 define void @swap_store00(<2 x i64> %v1, <2 x i64> %v2, <2 x i64>* %vp) {
413 ; CHECK-P8-LABEL: swap_store00:
414 ; CHECK-P8:       # %bb.0:
415 ; CHECK-P8-NEXT:    stxvd2x v2, 0, r7
416 ; CHECK-P8-NEXT:    blr
418 ; CHECK-P9-LABEL: swap_store00:
419 ; CHECK-P9:       # %bb.0:
420 ; CHECK-P9-NEXT:    stxvd2x v2, 0, r7
421 ; CHECK-P9-NEXT:    blr
423 ; CHECK-P8-BE-LABEL: swap_store00:
424 ; CHECK-P8-BE:       # %bb.0:
425 ; CHECK-P8-BE-NEXT:    xxswapd vs0, v2
426 ; CHECK-P8-BE-NEXT:    stxvd2x vs0, 0, r7
427 ; CHECK-P8-BE-NEXT:    blr
429 ; CHECK-P9-BE-LABEL: swap_store00:
430 ; CHECK-P9-BE:       # %bb.0:
431 ; CHECK-P9-BE-NEXT:    xxswapd vs0, v2
432 ; CHECK-P9-BE-NEXT:    stxv vs0, 0(r7)
433 ; CHECK-P9-BE-NEXT:    blr
434   %v3 = shufflevector <2 x i64> %v1, <2 x i64> %v2, <2 x i32> <i32 1, i32 0>
435   store <2 x i64> %v3, <2 x i64>* %vp
436   ret void
439 define void @swap_store01(<2 x i64> %v1, <2 x i64> %v2, <2 x i64>* %vp) {
440 ; CHECK-P8-LABEL: swap_store01:
441 ; CHECK-P8:       # %bb.0:
442 ; CHECK-P8-NEXT:    stxvd2x v3, 0, r7
443 ; CHECK-P8-NEXT:    blr
445 ; CHECK-P9-LABEL: swap_store01:
446 ; CHECK-P9:       # %bb.0:
447 ; CHECK-P9-NEXT:    stxvd2x v3, 0, r7
448 ; CHECK-P9-NEXT:    blr
450 ; CHECK-P8-BE-LABEL: swap_store01:
451 ; CHECK-P8-BE:       # %bb.0:
452 ; CHECK-P8-BE-NEXT:    xxswapd vs0, v3
453 ; CHECK-P8-BE-NEXT:    stxvd2x vs0, 0, r7
454 ; CHECK-P8-BE-NEXT:    blr
456 ; CHECK-P9-BE-LABEL: swap_store01:
457 ; CHECK-P9-BE:       # %bb.0:
458 ; CHECK-P9-BE-NEXT:    xxswapd vs0, v3
459 ; CHECK-P9-BE-NEXT:    stxv vs0, 0(r7)
460 ; CHECK-P9-BE-NEXT:    blr
461   %v3 = shufflevector <2 x i64> %v1, <2 x i64> %v2, <2 x i32> <i32 3, i32 2>
462   store <2 x i64> %v3, <2 x i64>* %vp
463   ret void
466 define void @swap_store10(<4 x i32> %v1, <4 x i32> %v2, <4 x i32>* %vp) {
467 ; CHECK-P8-LABEL: swap_store10:
468 ; CHECK-P8:       # %bb.0:
469 ; CHECK-P8-NEXT:    addis r3, r2, .LCPI13_0@toc@ha
470 ; CHECK-P8-NEXT:    addi r3, r3, .LCPI13_0@toc@l
471 ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3
472 ; CHECK-P8-NEXT:    xxswapd v3, vs0
473 ; CHECK-P8-NEXT:    vperm v2, v2, v2, v3
474 ; CHECK-P8-NEXT:    xxswapd vs0, v2
475 ; CHECK-P8-NEXT:    stxvd2x vs0, 0, r7
476 ; CHECK-P8-NEXT:    blr
478 ; CHECK-P9-LABEL: swap_store10:
479 ; CHECK-P9:       # %bb.0:
480 ; CHECK-P9-NEXT:    stxvw4x v2, 0, r7
481 ; CHECK-P9-NEXT:    blr
483 ; CHECK-P8-BE-LABEL: swap_store10:
484 ; CHECK-P8-BE:       # %bb.0:
485 ; CHECK-P8-BE-NEXT:    addis r3, r2, .LCPI13_0@toc@ha
486 ; CHECK-P8-BE-NEXT:    addi r3, r3, .LCPI13_0@toc@l
487 ; CHECK-P8-BE-NEXT:    lxvw4x v3, 0, r3
488 ; CHECK-P8-BE-NEXT:    vperm v2, v2, v2, v3
489 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r7
490 ; CHECK-P8-BE-NEXT:    blr
492 ; CHECK-P9-BE-LABEL: swap_store10:
493 ; CHECK-P9-BE:       # %bb.0:
494 ; CHECK-P9-BE-NEXT:    addis r3, r2, .LCPI13_0@toc@ha
495 ; CHECK-P9-BE-NEXT:    addi r3, r3, .LCPI13_0@toc@l
496 ; CHECK-P9-BE-NEXT:    lxv v3, 0(r3)
497 ; CHECK-P9-BE-NEXT:    vperm v2, v2, v2, v3
498 ; CHECK-P9-BE-NEXT:    stxv v2, 0(r7)
499 ; CHECK-P9-BE-NEXT:    blr
500   %v3 = shufflevector <4 x i32> %v1, <4 x i32> %v2, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
501   store <4 x i32> %v3, <4 x i32>* %vp
502   ret void
505 define void @swap_store11(<4 x i32> %v1, <4 x i32> %v2, <4 x i32>* %vp) {
506 ; CHECK-P8-LABEL: swap_store11:
507 ; CHECK-P8:       # %bb.0:
508 ; CHECK-P8-NEXT:    addis r3, r2, .LCPI14_0@toc@ha
509 ; CHECK-P8-NEXT:    addi r3, r3, .LCPI14_0@toc@l
510 ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3
511 ; CHECK-P8-NEXT:    xxswapd v2, vs0
512 ; CHECK-P8-NEXT:    vperm v2, v3, v3, v2
513 ; CHECK-P8-NEXT:    xxswapd vs0, v2
514 ; CHECK-P8-NEXT:    stxvd2x vs0, 0, r7
515 ; CHECK-P8-NEXT:    blr
517 ; CHECK-P9-LABEL: swap_store11:
518 ; CHECK-P9:       # %bb.0:
519 ; CHECK-P9-NEXT:    stxvw4x v3, 0, r7
520 ; CHECK-P9-NEXT:    blr
522 ; CHECK-P8-BE-LABEL: swap_store11:
523 ; CHECK-P8-BE:       # %bb.0:
524 ; CHECK-P8-BE-NEXT:    addis r3, r2, .LCPI14_0@toc@ha
525 ; CHECK-P8-BE-NEXT:    addi r3, r3, .LCPI14_0@toc@l
526 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
527 ; CHECK-P8-BE-NEXT:    vperm v2, v3, v3, v2
528 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r7
529 ; CHECK-P8-BE-NEXT:    blr
531 ; CHECK-P9-BE-LABEL: swap_store11:
532 ; CHECK-P9-BE:       # %bb.0:
533 ; CHECK-P9-BE-NEXT:    addis r3, r2, .LCPI14_0@toc@ha
534 ; CHECK-P9-BE-NEXT:    addi r3, r3, .LCPI14_0@toc@l
535 ; CHECK-P9-BE-NEXT:    lxv v2, 0(r3)
536 ; CHECK-P9-BE-NEXT:    vperm v2, v3, v3, v2
537 ; CHECK-P9-BE-NEXT:    stxv v2, 0(r7)
538 ; CHECK-P9-BE-NEXT:    blr
539   %v3 = shufflevector <4 x i32> %v1, <4 x i32> %v2, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
540   store <4 x i32> %v3, <4 x i32>* %vp
541   ret void
544 define void @swap_store20(<8 x i16> %v1, <8 x i16> %v2, <8 x i16>* %vp) {
545 ; CHECK-P8-LABEL: swap_store20:
546 ; CHECK-P8:       # %bb.0:
547 ; CHECK-P8-NEXT:    addis r3, r2, .LCPI15_0@toc@ha
548 ; CHECK-P8-NEXT:    addi r3, r3, .LCPI15_0@toc@l
549 ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3
550 ; CHECK-P8-NEXT:    xxswapd v3, vs0
551 ; CHECK-P8-NEXT:    vperm v2, v2, v2, v3
552 ; CHECK-P8-NEXT:    xxswapd vs0, v2
553 ; CHECK-P8-NEXT:    stxvd2x vs0, 0, r7
554 ; CHECK-P8-NEXT:    blr
556 ; CHECK-P9-LABEL: swap_store20:
557 ; CHECK-P9:       # %bb.0:
558 ; CHECK-P9-NEXT:    stxvh8x v2, 0, r7
559 ; CHECK-P9-NEXT:    blr
561 ; CHECK-P8-BE-LABEL: swap_store20:
562 ; CHECK-P8-BE:       # %bb.0:
563 ; CHECK-P8-BE-NEXT:    addis r3, r2, .LCPI15_0@toc@ha
564 ; CHECK-P8-BE-NEXT:    addi r3, r3, .LCPI15_0@toc@l
565 ; CHECK-P8-BE-NEXT:    lxvw4x v3, 0, r3
566 ; CHECK-P8-BE-NEXT:    vperm v2, v2, v2, v3
567 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r7
568 ; CHECK-P8-BE-NEXT:    blr
570 ; CHECK-P9-BE-LABEL: swap_store20:
571 ; CHECK-P9-BE:       # %bb.0:
572 ; CHECK-P9-BE-NEXT:    addis r3, r2, .LCPI15_0@toc@ha
573 ; CHECK-P9-BE-NEXT:    addi r3, r3, .LCPI15_0@toc@l
574 ; CHECK-P9-BE-NEXT:    lxv v3, 0(r3)
575 ; CHECK-P9-BE-NEXT:    vperm v2, v2, v2, v3
576 ; CHECK-P9-BE-NEXT:    stxv v2, 0(r7)
577 ; CHECK-P9-BE-NEXT:    blr
578   %v3 = shufflevector <8 x i16> %v1, <8 x i16> %v2, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
579   store <8 x i16> %v3, <8 x i16>* %vp
580   ret void
583 define void @swap_store21(<8 x i16> %v1, <8 x i16> %v2, <8 x i16>* %vp) {
584 ; CHECK-P8-LABEL: swap_store21:
585 ; CHECK-P8:       # %bb.0:
586 ; CHECK-P8-NEXT:    addis r3, r2, .LCPI16_0@toc@ha
587 ; CHECK-P8-NEXT:    addi r3, r3, .LCPI16_0@toc@l
588 ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3
589 ; CHECK-P8-NEXT:    xxswapd v2, vs0
590 ; CHECK-P8-NEXT:    vperm v2, v3, v3, v2
591 ; CHECK-P8-NEXT:    xxswapd vs0, v2
592 ; CHECK-P8-NEXT:    stxvd2x vs0, 0, r7
593 ; CHECK-P8-NEXT:    blr
595 ; CHECK-P9-LABEL: swap_store21:
596 ; CHECK-P9:       # %bb.0:
597 ; CHECK-P9-NEXT:    stxvh8x v3, 0, r7
598 ; CHECK-P9-NEXT:    blr
600 ; CHECK-P8-BE-LABEL: swap_store21:
601 ; CHECK-P8-BE:       # %bb.0:
602 ; CHECK-P8-BE-NEXT:    addis r3, r2, .LCPI16_0@toc@ha
603 ; CHECK-P8-BE-NEXT:    addi r3, r3, .LCPI16_0@toc@l
604 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
605 ; CHECK-P8-BE-NEXT:    vperm v2, v3, v3, v2
606 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r7
607 ; CHECK-P8-BE-NEXT:    blr
609 ; CHECK-P9-BE-LABEL: swap_store21:
610 ; CHECK-P9-BE:       # %bb.0:
611 ; CHECK-P9-BE-NEXT:    addis r3, r2, .LCPI16_0@toc@ha
612 ; CHECK-P9-BE-NEXT:    addi r3, r3, .LCPI16_0@toc@l
613 ; CHECK-P9-BE-NEXT:    lxv v2, 0(r3)
614 ; CHECK-P9-BE-NEXT:    vperm v2, v3, v3, v2
615 ; CHECK-P9-BE-NEXT:    stxv v2, 0(r7)
616 ; CHECK-P9-BE-NEXT:    blr
617   %v3 = shufflevector <8 x i16> %v1, <8 x i16> %v2, <8 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>
618   store <8 x i16> %v3, <8 x i16>* %vp
619   ret void
622 define void @swap_store30(<16 x i8> %v1, <16 x i8> %v2, <16 x i8>* %vp) {
623 ; CHECK-P8-LABEL: swap_store30:
624 ; CHECK-P8:       # %bb.0:
625 ; CHECK-P8-NEXT:    addis r3, r2, .LCPI17_0@toc@ha
626 ; CHECK-P8-NEXT:    addi r3, r3, .LCPI17_0@toc@l
627 ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3
628 ; CHECK-P8-NEXT:    xxswapd v3, vs0
629 ; CHECK-P8-NEXT:    vperm v2, v2, v2, v3
630 ; CHECK-P8-NEXT:    xxswapd vs0, v2
631 ; CHECK-P8-NEXT:    stxvd2x vs0, 0, r7
632 ; CHECK-P8-NEXT:    blr
634 ; CHECK-P9-LABEL: swap_store30:
635 ; CHECK-P9:       # %bb.0:
636 ; CHECK-P9-NEXT:    stxvb16x v2, 0, r7
637 ; CHECK-P9-NEXT:    blr
639 ; CHECK-P8-BE-LABEL: swap_store30:
640 ; CHECK-P8-BE:       # %bb.0:
641 ; CHECK-P8-BE-NEXT:    addis r3, r2, .LCPI17_0@toc@ha
642 ; CHECK-P8-BE-NEXT:    addi r3, r3, .LCPI17_0@toc@l
643 ; CHECK-P8-BE-NEXT:    lxvw4x v3, 0, r3
644 ; CHECK-P8-BE-NEXT:    vperm v2, v2, v2, v3
645 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r7
646 ; CHECK-P8-BE-NEXT:    blr
648 ; CHECK-P9-BE-LABEL: swap_store30:
649 ; CHECK-P9-BE:       # %bb.0:
650 ; CHECK-P9-BE-NEXT:    xxbrq vs0, v2
651 ; CHECK-P9-BE-NEXT:    stxv vs0, 0(r7)
652 ; CHECK-P9-BE-NEXT:    blr
653   %v3 = shufflevector <16 x i8> %v1, <16 x i8> %v2, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
654   store <16 x i8> %v3, <16 x i8>* %vp
655   ret void
658 define void @swap_store31(<16 x i8> %v1, <16 x i8> %v2, <16 x i8>* %vp) {
659 ; CHECK-P8-LABEL: swap_store31:
660 ; CHECK-P8:       # %bb.0:
661 ; CHECK-P8-NEXT:    addis r3, r2, .LCPI18_0@toc@ha
662 ; CHECK-P8-NEXT:    addi r3, r3, .LCPI18_0@toc@l
663 ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3
664 ; CHECK-P8-NEXT:    xxswapd v2, vs0
665 ; CHECK-P8-NEXT:    vperm v2, v3, v3, v2
666 ; CHECK-P8-NEXT:    xxswapd vs0, v2
667 ; CHECK-P8-NEXT:    stxvd2x vs0, 0, r7
668 ; CHECK-P8-NEXT:    blr
670 ; CHECK-P9-LABEL: swap_store31:
671 ; CHECK-P9:       # %bb.0:
672 ; CHECK-P9-NEXT:    stxvb16x v3, 0, r7
673 ; CHECK-P9-NEXT:    blr
675 ; CHECK-P8-BE-LABEL: swap_store31:
676 ; CHECK-P8-BE:       # %bb.0:
677 ; CHECK-P8-BE-NEXT:    addis r3, r2, .LCPI18_0@toc@ha
678 ; CHECK-P8-BE-NEXT:    addi r3, r3, .LCPI18_0@toc@l
679 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
680 ; CHECK-P8-BE-NEXT:    vperm v2, v3, v3, v2
681 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r7
682 ; CHECK-P8-BE-NEXT:    blr
684 ; CHECK-P9-BE-LABEL: swap_store31:
685 ; CHECK-P9-BE:       # %bb.0:
686 ; CHECK-P9-BE-NEXT:    xxbrq vs0, v3
687 ; CHECK-P9-BE-NEXT:    stxv vs0, 0(r7)
688 ; CHECK-P9-BE-NEXT:    blr
689   %v3 = shufflevector <16 x i8> %v1, <16 x i8> %v2, <16 x i32> <i32 31, i32 30, i32 29, i32 28, i32 27, i32 26, i32 25, i32 24, i32 23, i32 22, i32 21, i32 20, i32 19, i32 18, i32 17, i32 16>
690   store <16 x i8> %v3, <16 x i8>* %vp
691   ret void
694 define void @swap_store40(<2 x double> %v1, <2 x double> %v2, <2 x double>* %vp) {
695 ; CHECK-P8-LABEL: swap_store40:
696 ; CHECK-P8:       # %bb.0:
697 ; CHECK-P8-NEXT:    stxvd2x v2, 0, r7
698 ; CHECK-P8-NEXT:    blr
700 ; CHECK-P9-LABEL: swap_store40:
701 ; CHECK-P9:       # %bb.0:
702 ; CHECK-P9-NEXT:    stxvd2x v2, 0, r7
703 ; CHECK-P9-NEXT:    blr
705 ; CHECK-P8-BE-LABEL: swap_store40:
706 ; CHECK-P8-BE:       # %bb.0:
707 ; CHECK-P8-BE-NEXT:    xxswapd vs0, v2
708 ; CHECK-P8-BE-NEXT:    stxvd2x vs0, 0, r7
709 ; CHECK-P8-BE-NEXT:    blr
711 ; CHECK-P9-BE-LABEL: swap_store40:
712 ; CHECK-P9-BE:       # %bb.0:
713 ; CHECK-P9-BE-NEXT:    xxswapd vs0, v2
714 ; CHECK-P9-BE-NEXT:    stxv vs0, 0(r7)
715 ; CHECK-P9-BE-NEXT:    blr
716   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> <i32 1, i32 0>
717   store <2 x double> %v3, <2 x double>* %vp
718   ret void
721 define void @swap_store41(<2 x double> %v1, <2 x double> %v2, <2 x double>* %vp) {
722 ; CHECK-P8-LABEL: swap_store41:
723 ; CHECK-P8:       # %bb.0:
724 ; CHECK-P8-NEXT:    stxvd2x v3, 0, r7
725 ; CHECK-P8-NEXT:    blr
727 ; CHECK-P9-LABEL: swap_store41:
728 ; CHECK-P9:       # %bb.0:
729 ; CHECK-P9-NEXT:    stxvd2x v3, 0, r7
730 ; CHECK-P9-NEXT:    blr
732 ; CHECK-P8-BE-LABEL: swap_store41:
733 ; CHECK-P8-BE:       # %bb.0:
734 ; CHECK-P8-BE-NEXT:    xxswapd vs0, v3
735 ; CHECK-P8-BE-NEXT:    stxvd2x vs0, 0, r7
736 ; CHECK-P8-BE-NEXT:    blr
738 ; CHECK-P9-BE-LABEL: swap_store41:
739 ; CHECK-P9-BE:       # %bb.0:
740 ; CHECK-P9-BE-NEXT:    xxswapd vs0, v3
741 ; CHECK-P9-BE-NEXT:    stxv vs0, 0(r7)
742 ; CHECK-P9-BE-NEXT:    blr
743   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> <i32 3, i32 2>
744   store <2 x double> %v3, <2 x double>* %vp
745   ret void
748 define void @swap_store50(<4 x float> %v1, <4 x float> %v2, <4 x float>* %vp) {
749 ; CHECK-P8-LABEL: swap_store50:
750 ; CHECK-P8:       # %bb.0:
751 ; CHECK-P8-NEXT:    addis r3, r2, .LCPI21_0@toc@ha
752 ; CHECK-P8-NEXT:    addi r3, r3, .LCPI21_0@toc@l
753 ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3
754 ; CHECK-P8-NEXT:    xxswapd v3, vs0
755 ; CHECK-P8-NEXT:    vperm v2, v2, v2, v3
756 ; CHECK-P8-NEXT:    xxswapd vs0, v2
757 ; CHECK-P8-NEXT:    stxvd2x vs0, 0, r7
758 ; CHECK-P8-NEXT:    blr
760 ; CHECK-P9-LABEL: swap_store50:
761 ; CHECK-P9:       # %bb.0:
762 ; CHECK-P9-NEXT:    stxvw4x v2, 0, r7
763 ; CHECK-P9-NEXT:    blr
765 ; CHECK-P8-BE-LABEL: swap_store50:
766 ; CHECK-P8-BE:       # %bb.0:
767 ; CHECK-P8-BE-NEXT:    addis r3, r2, .LCPI21_0@toc@ha
768 ; CHECK-P8-BE-NEXT:    addi r3, r3, .LCPI21_0@toc@l
769 ; CHECK-P8-BE-NEXT:    lxvw4x v3, 0, r3
770 ; CHECK-P8-BE-NEXT:    vperm v2, v2, v2, v3
771 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r7
772 ; CHECK-P8-BE-NEXT:    blr
774 ; CHECK-P9-BE-LABEL: swap_store50:
775 ; CHECK-P9-BE:       # %bb.0:
776 ; CHECK-P9-BE-NEXT:    addis r3, r2, .LCPI21_0@toc@ha
777 ; CHECK-P9-BE-NEXT:    addi r3, r3, .LCPI21_0@toc@l
778 ; CHECK-P9-BE-NEXT:    lxv v3, 0(r3)
779 ; CHECK-P9-BE-NEXT:    vperm v2, v2, v2, v3
780 ; CHECK-P9-BE-NEXT:    stxv v2, 0(r7)
781 ; CHECK-P9-BE-NEXT:    blr
782   %v3 = shufflevector <4 x float> %v1, <4 x float> %v2, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
783   store <4 x float> %v3, <4 x float>* %vp
784   ret void
787 define void @swap_store51(<4 x float> %v1, <4 x float> %v2, <4 x float>* %vp) {
788 ; CHECK-P8-LABEL: swap_store51:
789 ; CHECK-P8:       # %bb.0:
790 ; CHECK-P8-NEXT:    addis r3, r2, .LCPI22_0@toc@ha
791 ; CHECK-P8-NEXT:    addi r3, r3, .LCPI22_0@toc@l
792 ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3
793 ; CHECK-P8-NEXT:    xxswapd v2, vs0
794 ; CHECK-P8-NEXT:    vperm v2, v3, v3, v2
795 ; CHECK-P8-NEXT:    xxswapd vs0, v2
796 ; CHECK-P8-NEXT:    stxvd2x vs0, 0, r7
797 ; CHECK-P8-NEXT:    blr
799 ; CHECK-P9-LABEL: swap_store51:
800 ; CHECK-P9:       # %bb.0:
801 ; CHECK-P9-NEXT:    stxvw4x v3, 0, r7
802 ; CHECK-P9-NEXT:    blr
804 ; CHECK-P8-BE-LABEL: swap_store51:
805 ; CHECK-P8-BE:       # %bb.0:
806 ; CHECK-P8-BE-NEXT:    addis r3, r2, .LCPI22_0@toc@ha
807 ; CHECK-P8-BE-NEXT:    addi r3, r3, .LCPI22_0@toc@l
808 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
809 ; CHECK-P8-BE-NEXT:    vperm v2, v3, v3, v2
810 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r7
811 ; CHECK-P8-BE-NEXT:    blr
813 ; CHECK-P9-BE-LABEL: swap_store51:
814 ; CHECK-P9-BE:       # %bb.0:
815 ; CHECK-P9-BE-NEXT:    addis r3, r2, .LCPI22_0@toc@ha
816 ; CHECK-P9-BE-NEXT:    addi r3, r3, .LCPI22_0@toc@l
817 ; CHECK-P9-BE-NEXT:    lxv v2, 0(r3)
818 ; CHECK-P9-BE-NEXT:    vperm v2, v3, v3, v2
819 ; CHECK-P9-BE-NEXT:    stxv v2, 0(r7)
820 ; CHECK-P9-BE-NEXT:    blr
821   %v3 = shufflevector <4 x float> %v1, <4 x float> %v2, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
822   store <4 x float> %v3, <4 x float>* %vp
823   ret void