[PowerPC][NFC] Add test for D60506 to show differences in code-gen
[llvm-core.git] / test / CodeGen / PowerPC / extract-and-store.ll
blob474ba86395ada2ede67c66213c6163c864d805c7
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unkknown-unknown \
3 ; RUN:   -ppc-asm-full-reg-names -verify-machineinstrs -O2 < %s | FileCheck %s
4 ; RUN: llc -mcpu=pwr8 -mtriple=powerpc64-unkknown-unknown \
5 ; RUN:   -ppc-asm-full-reg-names -verify-machineinstrs -O2 < %s | FileCheck %s \
6 ; RUN:   --check-prefix=CHECK-BE
7 ; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unkknown-unknown \
8 ; RUN:   -ppc-asm-full-reg-names -verify-machineinstrs -O2 < %s | FileCheck %s \
9 ; RUN:   --check-prefix=CHECK-P9
10 ; RUN: llc -mcpu=pwr9 -mtriple=powerpc64-unkknown-unknown \
11 ; RUN:   -ppc-asm-full-reg-names -verify-machineinstrs -O2 < %s | FileCheck %s \
12 ; RUN:   --check-prefix=CHECK-P9-BE
14 define <2 x i64> @testllv(<2 x i64> returned %a, <2 x i64> %b, i64* nocapture %ap, i64 %Idx) local_unnamed_addr #0 {
15 ; CHECK-LABEL: testllv:
16 ; CHECK:       # %bb.0: # %entry
17 ; CHECK-NEXT:    xxswapd vs0, vs34
18 ; CHECK-NEXT:    sldi r3, r8, 3
19 ; CHECK-NEXT:    stfdx f0, r7, r3
20 ; CHECK-NEXT:    blr
22 ; CHECK-BE-LABEL: testllv:
23 ; CHECK-BE:       # %bb.0: # %entry
24 ; CHECK-BE-NEXT:    sldi r3, r8, 3
25 ; CHECK-BE-NEXT:    stxsdx vs34, r7, r3
26 ; CHECK-BE-NEXT:    blr
28 ; CHECK-P9-LABEL: testllv:
29 ; CHECK-P9:       # %bb.0: # %entry
30 ; CHECK-P9-NEXT:    xxswapd vs0, vs34
31 ; CHECK-P9-NEXT:    sldi r3, r8, 3
32 ; CHECK-P9-NEXT:    stfdx f0, r7, r3
33 ; CHECK-P9-NEXT:    blr
35 ; CHECK-P9-BE-LABEL: testllv:
36 ; CHECK-P9-BE:       # %bb.0: # %entry
37 ; CHECK-P9-BE-NEXT:    sldi r3, r8, 3
38 ; CHECK-P9-BE-NEXT:    stxsdx vs34, r7, r3
39 ; CHECK-P9-BE-NEXT:    blr
40 entry:
41   %vecext = extractelement <2 x i64> %a, i32 0
42   %arrayidx = getelementptr inbounds i64, i64* %ap, i64 %Idx
43   store i64 %vecext, i64* %arrayidx, align 8
44   ret <2 x i64> %a
47 define <2 x i64> @testll0(<2 x i64> returned %a, <2 x i64> %b, i64* nocapture %ap) local_unnamed_addr #0 {
48 ; CHECK-LABEL: testll0:
49 ; CHECK:       # %bb.0: # %entry
50 ; CHECK-NEXT:    xxswapd vs0, vs34
51 ; CHECK-NEXT:    stfd f0, 24(r7)
52 ; CHECK-NEXT:    blr
54 ; CHECK-BE-LABEL: testll0:
55 ; CHECK-BE:       # %bb.0: # %entry
56 ; CHECK-BE-NEXT:    addi r3, r7, 24
57 ; CHECK-BE-NEXT:    stxsdx vs34, 0, r3
58 ; CHECK-BE-NEXT:    blr
60 ; CHECK-P9-LABEL: testll0:
61 ; CHECK-P9:       # %bb.0: # %entry
62 ; CHECK-P9-NEXT:    xxswapd vs0, vs34
63 ; CHECK-P9-NEXT:    stfd f0, 24(r7)
64 ; CHECK-P9-NEXT:    blr
66 ; CHECK-P9-BE-LABEL: testll0:
67 ; CHECK-P9-BE:       # %bb.0: # %entry
68 ; CHECK-P9-BE-NEXT:    stxsd v2, 24(r7)
69 ; CHECK-P9-BE-NEXT:    blr
70 entry:
71   %vecext = extractelement <2 x i64> %a, i32 0
72   %arrayidx = getelementptr inbounds i64, i64* %ap, i64 3
73   store i64 %vecext, i64* %arrayidx, align 8
74   ret <2 x i64> %a
77 ; Function Attrs: norecurse nounwind writeonly
78 define <2 x i64> @testll1(<2 x i64> returned %a, i64 %b, i64* nocapture %ap) local_unnamed_addr #0 {
79 ; CHECK-LABEL: testll1:
80 ; CHECK:       # %bb.0: # %entry
81 ; CHECK-NEXT:    addi r3, r6, 24
82 ; CHECK-NEXT:    stxsdx vs34, 0, r3
83 ; CHECK-NEXT:    blr
85 ; CHECK-BE-LABEL: testll1:
86 ; CHECK-BE:       # %bb.0: # %entry
87 ; CHECK-BE-NEXT:    xxswapd vs0, vs34
88 ; CHECK-BE-NEXT:    stfd f0, 24(r6)
89 ; CHECK-BE-NEXT:    blr
91 ; CHECK-P9-LABEL: testll1:
92 ; CHECK-P9:       # %bb.0: # %entry
93 ; CHECK-P9-NEXT:    stxsd v2, 24(r6)
94 ; CHECK-P9-NEXT:    blr
96 ; CHECK-P9-BE-LABEL: testll1:
97 ; CHECK-P9-BE:       # %bb.0: # %entry
98 ; CHECK-P9-BE-NEXT:    xxswapd vs0, vs34
99 ; CHECK-P9-BE-NEXT:    stfd f0, 24(r6)
100 ; CHECK-P9-BE-NEXT:    blr
101 entry:
102   %vecext = extractelement <2 x i64> %a, i32 1
103   %arrayidx = getelementptr inbounds i64, i64* %ap, i64 3
104   store i64 %vecext, i64* %arrayidx, align 8
105   ret <2 x i64> %a
108 define <2 x double> @testdv(<2 x double> returned %a, <2 x double> %b, double* nocapture %ap, i64 %Idx) local_unnamed_addr #0 {
109 ; CHECK-LABEL: testdv:
110 ; CHECK:       # %bb.0: # %entry
111 ; CHECK-NEXT:    xxswapd vs0, vs34
112 ; CHECK-NEXT:    sldi r3, r8, 3
113 ; CHECK-NEXT:    stfdx f0, r7, r3
114 ; CHECK-NEXT:    blr
116 ; CHECK-BE-LABEL: testdv:
117 ; CHECK-BE:       # %bb.0: # %entry
118 ; CHECK-BE-NEXT:    sldi r3, r8, 3
119 ; CHECK-BE-NEXT:    stxsdx vs34, r7, r3
120 ; CHECK-BE-NEXT:    blr
122 ; CHECK-P9-LABEL: testdv:
123 ; CHECK-P9:       # %bb.0: # %entry
124 ; CHECK-P9-NEXT:    xxswapd vs0, vs34
125 ; CHECK-P9-NEXT:    sldi r3, r8, 3
126 ; CHECK-P9-NEXT:    stfdx f0, r7, r3
127 ; CHECK-P9-NEXT:    blr
129 ; CHECK-P9-BE-LABEL: testdv:
130 ; CHECK-P9-BE:       # %bb.0: # %entry
131 ; CHECK-P9-BE-NEXT:    sldi r3, r8, 3
132 ; CHECK-P9-BE-NEXT:    stxsdx vs34, r7, r3
133 ; CHECK-P9-BE-NEXT:    blr
134 entry:
135   %vecext = extractelement <2 x double> %a, i32 0
136   %arrayidx = getelementptr inbounds double, double* %ap, i64 %Idx
137   store double %vecext, double* %arrayidx, align 8
138   ret <2 x double> %a
141 define <2 x double> @testd0(<2 x double> returned %a, <2 x double> %b, double* nocapture %ap) local_unnamed_addr #0 {
142 ; CHECK-LABEL: testd0:
143 ; CHECK:       # %bb.0: # %entry
144 ; CHECK-NEXT:    xxswapd vs0, vs34
145 ; CHECK-NEXT:    stfd f0, 24(r7)
146 ; CHECK-NEXT:    blr
148 ; CHECK-BE-LABEL: testd0:
149 ; CHECK-BE:       # %bb.0: # %entry
150 ; CHECK-BE-NEXT:    addi r3, r7, 24
151 ; CHECK-BE-NEXT:    stxsdx vs34, 0, r3
152 ; CHECK-BE-NEXT:    blr
154 ; CHECK-P9-LABEL: testd0:
155 ; CHECK-P9:       # %bb.0: # %entry
156 ; CHECK-P9-NEXT:    xxswapd vs0, vs34
157 ; CHECK-P9-NEXT:    stfd f0, 24(r7)
158 ; CHECK-P9-NEXT:    blr
160 ; CHECK-P9-BE-LABEL: testd0:
161 ; CHECK-P9-BE:       # %bb.0: # %entry
162 ; CHECK-P9-BE-NEXT:    stxsd v2, 24(r7)
163 ; CHECK-P9-BE-NEXT:    blr
164 entry:
165   %vecext = extractelement <2 x double> %a, i32 0
166   %arrayidx = getelementptr inbounds double, double* %ap, i64 3
167   store double %vecext, double* %arrayidx, align 8
168   ret <2 x double> %a
171 ; Function Attrs: norecurse nounwind writeonly
172 define <2 x double> @testd1(<2 x double> returned %a, <2 x double> %b, double* nocapture %ap) local_unnamed_addr #0 {
173 ; CHECK-LABEL: testd1:
174 ; CHECK:       # %bb.0: # %entry
175 ; CHECK-NEXT:    addi r3, r7, 24
176 ; CHECK-NEXT:    stxsdx vs34, 0, r3
177 ; CHECK-NEXT:    blr
179 ; CHECK-BE-LABEL: testd1:
180 ; CHECK-BE:       # %bb.0: # %entry
181 ; CHECK-BE-NEXT:    xxswapd vs0, vs34
182 ; CHECK-BE-NEXT:    stfd f0, 24(r7)
183 ; CHECK-BE-NEXT:    blr
185 ; CHECK-P9-LABEL: testd1:
186 ; CHECK-P9:       # %bb.0: # %entry
187 ; CHECK-P9-NEXT:    stxsd v2, 24(r7)
188 ; CHECK-P9-NEXT:    blr
190 ; CHECK-P9-BE-LABEL: testd1:
191 ; CHECK-P9-BE:       # %bb.0: # %entry
192 ; CHECK-P9-BE-NEXT:    xxswapd vs0, vs34
193 ; CHECK-P9-BE-NEXT:    stfd f0, 24(r7)
194 ; CHECK-P9-BE-NEXT:    blr
195 entry:
196   %vecext = extractelement <2 x double> %a, i32 1
197   %arrayidx = getelementptr inbounds double, double* %ap, i64 3
198   store double %vecext, double* %arrayidx, align 8
199   ret <2 x double> %a
202 ; Function Attrs: norecurse nounwind writeonly
203 define <4 x float> @testf0(<4 x float> returned %a, <4 x float> %b, float* nocapture %ap) local_unnamed_addr #0 {
204 ; CHECK-LABEL: testf0:
205 ; CHECK:       # %bb.0: # %entry
206 ; CHECK-NEXT:    xxsldwi vs0, vs34, vs34, 2
207 ; CHECK-NEXT:    addi r3, r7, 12
208 ; CHECK-NEXT:    stfiwx f0, 0, r3
209 ; CHECK-NEXT:    blr
211 ; CHECK-BE-LABEL: testf0:
212 ; CHECK-BE:       # %bb.0: # %entry
213 ; CHECK-BE-NEXT:    xxsldwi vs0, vs34, vs34, 3
214 ; CHECK-BE-NEXT:    addi r3, r7, 12
215 ; CHECK-BE-NEXT:    stfiwx f0, 0, r3
216 ; CHECK-BE-NEXT:    blr
218 ; CHECK-P9-LABEL: testf0:
219 ; CHECK-P9:       # %bb.0: # %entry
220 ; CHECK-P9-NEXT:    xxsldwi vs0, vs34, vs34, 2
221 ; CHECK-P9-NEXT:    addi r3, r7, 12
222 ; CHECK-P9-NEXT:    stfiwx f0, 0, r3
223 ; CHECK-P9-NEXT:    blr
225 ; CHECK-P9-BE-LABEL: testf0:
226 ; CHECK-P9-BE:       # %bb.0: # %entry
227 ; CHECK-P9-BE-NEXT:    xxsldwi vs0, vs34, vs34, 3
228 ; CHECK-P9-BE-NEXT:    addi r3, r7, 12
229 ; CHECK-P9-BE-NEXT:    stfiwx f0, 0, r3
230 ; CHECK-P9-BE-NEXT:    blr
231 entry:
232   %vecext = extractelement <4 x float> %a, i32 0
233   %arrayidx = getelementptr inbounds float, float* %ap, i64 3
234   store float %vecext, float* %arrayidx, align 4
235   ret <4 x float> %a
238 ; Function Attrs: norecurse nounwind writeonly
239 define <4 x float> @testf1(<4 x float> returned %a, <4 x float> %b, float* nocapture %ap) local_unnamed_addr #0 {
240 ; CHECK-LABEL: testf1:
241 ; CHECK:       # %bb.0: # %entry
242 ; CHECK-NEXT:    xxsldwi vs0, vs34, vs34, 1
243 ; CHECK-NEXT:    addi r3, r7, 12
244 ; CHECK-NEXT:    stfiwx f0, 0, r3
245 ; CHECK-NEXT:    blr
247 ; CHECK-BE-LABEL: testf1:
248 ; CHECK-BE:       # %bb.0: # %entry
249 ; CHECK-BE-NEXT:    addi r3, r7, 12
250 ; CHECK-BE-NEXT:    stxsiwx vs34, 0, r3
251 ; CHECK-BE-NEXT:    blr
253 ; CHECK-P9-LABEL: testf1:
254 ; CHECK-P9:       # %bb.0: # %entry
255 ; CHECK-P9-NEXT:    xxsldwi vs0, vs34, vs34, 1
256 ; CHECK-P9-NEXT:    addi r3, r7, 12
257 ; CHECK-P9-NEXT:    stfiwx f0, 0, r3
258 ; CHECK-P9-NEXT:    blr
260 ; CHECK-P9-BE-LABEL: testf1:
261 ; CHECK-P9-BE:       # %bb.0: # %entry
262 ; CHECK-P9-BE-NEXT:    addi r3, r7, 12
263 ; CHECK-P9-BE-NEXT:    stxsiwx vs34, 0, r3
264 ; CHECK-P9-BE-NEXT:    blr
265 entry:
266   %vecext = extractelement <4 x float> %a, i32 1
267   %arrayidx = getelementptr inbounds float, float* %ap, i64 3
268   store float %vecext, float* %arrayidx, align 4
269   ret <4 x float> %a
272 ; Function Attrs: norecurse nounwind writeonly
273 define <4 x float> @testf2(<4 x float> returned %a, <4 x float> %b, float* nocapture %ap) local_unnamed_addr #0 {
274 ; CHECK-LABEL: testf2:
275 ; CHECK:       # %bb.0: # %entry
276 ; CHECK-NEXT:    addi r3, r7, 12
277 ; CHECK-NEXT:    stxsiwx vs34, 0, r3
278 ; CHECK-NEXT:    blr
280 ; CHECK-BE-LABEL: testf2:
281 ; CHECK-BE:       # %bb.0: # %entry
282 ; CHECK-BE-NEXT:    xxsldwi vs0, vs34, vs34, 1
283 ; CHECK-BE-NEXT:    addi r3, r7, 12
284 ; CHECK-BE-NEXT:    stfiwx f0, 0, r3
285 ; CHECK-BE-NEXT:    blr
287 ; CHECK-P9-LABEL: testf2:
288 ; CHECK-P9:       # %bb.0: # %entry
289 ; CHECK-P9-NEXT:    addi r3, r7, 12
290 ; CHECK-P9-NEXT:    stxsiwx vs34, 0, r3
291 ; CHECK-P9-NEXT:    blr
293 ; CHECK-P9-BE-LABEL: testf2:
294 ; CHECK-P9-BE:       # %bb.0: # %entry
295 ; CHECK-P9-BE-NEXT:    xxsldwi vs0, vs34, vs34, 1
296 ; CHECK-P9-BE-NEXT:    addi r3, r7, 12
297 ; CHECK-P9-BE-NEXT:    stfiwx f0, 0, r3
298 ; CHECK-P9-BE-NEXT:    blr
299 entry:
300   %vecext = extractelement <4 x float> %a, i32 2
301   %arrayidx = getelementptr inbounds float, float* %ap, i64 3
302   store float %vecext, float* %arrayidx, align 4
303   ret <4 x float> %a
306 ; Function Attrs: norecurse nounwind writeonly
307 define <4 x float> @testf3(<4 x float> returned %a, <4 x float> %b, float* nocapture %ap) local_unnamed_addr #0 {
308 ; CHECK-LABEL: testf3:
309 ; CHECK:       # %bb.0: # %entry
310 ; CHECK-NEXT:    xxsldwi vs0, vs34, vs34, 3
311 ; CHECK-NEXT:    addi r3, r7, 12
312 ; CHECK-NEXT:    stfiwx f0, 0, r3
313 ; CHECK-NEXT:    blr
315 ; CHECK-BE-LABEL: testf3:
316 ; CHECK-BE:       # %bb.0: # %entry
317 ; CHECK-BE-NEXT:    xxsldwi vs0, vs34, vs34, 2
318 ; CHECK-BE-NEXT:    addi r3, r7, 12
319 ; CHECK-BE-NEXT:    stfiwx f0, 0, r3
320 ; CHECK-BE-NEXT:    blr
322 ; CHECK-P9-LABEL: testf3:
323 ; CHECK-P9:       # %bb.0: # %entry
324 ; CHECK-P9-NEXT:    xxsldwi vs0, vs34, vs34, 3
325 ; CHECK-P9-NEXT:    addi r3, r7, 12
326 ; CHECK-P9-NEXT:    stfiwx f0, 0, r3
327 ; CHECK-P9-NEXT:    blr
329 ; CHECK-P9-BE-LABEL: testf3:
330 ; CHECK-P9-BE:       # %bb.0: # %entry
331 ; CHECK-P9-BE-NEXT:    xxsldwi vs0, vs34, vs34, 2
332 ; CHECK-P9-BE-NEXT:    addi r3, r7, 12
333 ; CHECK-P9-BE-NEXT:    stfiwx f0, 0, r3
334 ; CHECK-P9-BE-NEXT:    blr
335 entry:
336   %vecext = extractelement <4 x float> %a, i32 3
337   %arrayidx = getelementptr inbounds float, float* %ap, i64 3
338   store float %vecext, float* %arrayidx, align 4
339   ret <4 x float> %a
342 ; Function Attrs: norecurse nounwind writeonly
343 define <4 x i32> @testi0(<4 x i32> returned %a, <4 x i32> %b, i32* nocapture %ap) local_unnamed_addr #0 {
344 ; CHECK-LABEL: testi0:
345 ; CHECK:       # %bb.0: # %entry
346 ; CHECK-NEXT:    xxsldwi vs0, vs34, vs34, 2
347 ; CHECK-NEXT:    addi r3, r7, 12
348 ; CHECK-NEXT:    stfiwx f0, 0, r3
349 ; CHECK-NEXT:    blr
351 ; CHECK-BE-LABEL: testi0:
352 ; CHECK-BE:       # %bb.0: # %entry
353 ; CHECK-BE-NEXT:    xxsldwi vs0, vs34, vs34, 3
354 ; CHECK-BE-NEXT:    addi r3, r7, 12
355 ; CHECK-BE-NEXT:    stfiwx f0, 0, r3
356 ; CHECK-BE-NEXT:    blr
358 ; CHECK-P9-LABEL: testi0:
359 ; CHECK-P9:       # %bb.0: # %entry
360 ; CHECK-P9-NEXT:    xxsldwi vs0, vs34, vs34, 2
361 ; CHECK-P9-NEXT:    addi r3, r7, 12
362 ; CHECK-P9-NEXT:    stfiwx f0, 0, r3
363 ; CHECK-P9-NEXT:    blr
365 ; CHECK-P9-BE-LABEL: testi0:
366 ; CHECK-P9-BE:       # %bb.0: # %entry
367 ; CHECK-P9-BE-NEXT:    xxsldwi vs0, vs34, vs34, 3
368 ; CHECK-P9-BE-NEXT:    addi r3, r7, 12
369 ; CHECK-P9-BE-NEXT:    stfiwx f0, 0, r3
370 ; CHECK-P9-BE-NEXT:    blr
371 entry:
372   %vecext = extractelement <4 x i32> %a, i32 0
373   %arrayidx = getelementptr inbounds i32, i32* %ap, i64 3
374   store i32 %vecext, i32* %arrayidx, align 4
375   ret <4 x i32> %a
378 ; Function Attrs: norecurse nounwind writeonly
379 define <4 x i32> @testi1(<4 x i32> returned %a, <4 x i32> %b, i32* nocapture %ap) local_unnamed_addr #0 {
380 ; CHECK-LABEL: testi1:
381 ; CHECK:       # %bb.0: # %entry
382 ; CHECK-NEXT:    xxsldwi vs0, vs34, vs34, 1
383 ; CHECK-NEXT:    addi r3, r7, 12
384 ; CHECK-NEXT:    stfiwx f0, 0, r3
385 ; CHECK-NEXT:    blr
387 ; CHECK-BE-LABEL: testi1:
388 ; CHECK-BE:       # %bb.0: # %entry
389 ; CHECK-BE-NEXT:    addi r3, r7, 12
390 ; CHECK-BE-NEXT:    stxsiwx vs34, 0, r3
391 ; CHECK-BE-NEXT:    blr
393 ; CHECK-P9-LABEL: testi1:
394 ; CHECK-P9:       # %bb.0: # %entry
395 ; CHECK-P9-NEXT:    xxsldwi vs0, vs34, vs34, 1
396 ; CHECK-P9-NEXT:    addi r3, r7, 12
397 ; CHECK-P9-NEXT:    stfiwx f0, 0, r3
398 ; CHECK-P9-NEXT:    blr
400 ; CHECK-P9-BE-LABEL: testi1:
401 ; CHECK-P9-BE:       # %bb.0: # %entry
402 ; CHECK-P9-BE-NEXT:    addi r3, r7, 12
403 ; CHECK-P9-BE-NEXT:    stxsiwx vs34, 0, r3
404 ; CHECK-P9-BE-NEXT:    blr
405 entry:
406   %vecext = extractelement <4 x i32> %a, i32 1
407   %arrayidx = getelementptr inbounds i32, i32* %ap, i64 3
408   store i32 %vecext, i32* %arrayidx, align 4
409   ret <4 x i32> %a
412 ; Function Attrs: norecurse nounwind writeonly
413 define <4 x i32> @testi2(<4 x i32> returned %a, <4 x i32> %b, i32* nocapture %ap) local_unnamed_addr #0 {
414 ; CHECK-LABEL: testi2:
415 ; CHECK:       # %bb.0: # %entry
416 ; CHECK-NEXT:    addi r3, r7, 12
417 ; CHECK-NEXT:    stxsiwx vs34, 0, r3
418 ; CHECK-NEXT:    blr
420 ; CHECK-BE-LABEL: testi2:
421 ; CHECK-BE:       # %bb.0: # %entry
422 ; CHECK-BE-NEXT:    xxsldwi vs0, vs34, vs34, 1
423 ; CHECK-BE-NEXT:    addi r3, r7, 12
424 ; CHECK-BE-NEXT:    stfiwx f0, 0, r3
425 ; CHECK-BE-NEXT:    blr
427 ; CHECK-P9-LABEL: testi2:
428 ; CHECK-P9:       # %bb.0: # %entry
429 ; CHECK-P9-NEXT:    addi r3, r7, 12
430 ; CHECK-P9-NEXT:    stxsiwx vs34, 0, r3
431 ; CHECK-P9-NEXT:    blr
433 ; CHECK-P9-BE-LABEL: testi2:
434 ; CHECK-P9-BE:       # %bb.0: # %entry
435 ; CHECK-P9-BE-NEXT:    xxsldwi vs0, vs34, vs34, 1
436 ; CHECK-P9-BE-NEXT:    addi r3, r7, 12
437 ; CHECK-P9-BE-NEXT:    stfiwx f0, 0, r3
438 ; CHECK-P9-BE-NEXT:    blr
439 entry:
440   %vecext = extractelement <4 x i32> %a, i32 2
441   %arrayidx = getelementptr inbounds i32, i32* %ap, i64 3
442   store i32 %vecext, i32* %arrayidx, align 4
443   ret <4 x i32> %a
446 ; Function Attrs: norecurse nounwind writeonly
447 define <4 x i32> @testi3(<4 x i32> returned %a, <4 x i32> %b, i32* nocapture %ap) local_unnamed_addr #0 {
448 ; CHECK-LABEL: testi3:
449 ; CHECK:       # %bb.0: # %entry
450 ; CHECK-NEXT:    xxsldwi vs0, vs34, vs34, 3
451 ; CHECK-NEXT:    addi r3, r7, 12
452 ; CHECK-NEXT:    stfiwx f0, 0, r3
453 ; CHECK-NEXT:    blr
455 ; CHECK-BE-LABEL: testi3:
456 ; CHECK-BE:       # %bb.0: # %entry
457 ; CHECK-BE-NEXT:    xxsldwi vs0, vs34, vs34, 2
458 ; CHECK-BE-NEXT:    addi r3, r7, 12
459 ; CHECK-BE-NEXT:    stfiwx f0, 0, r3
460 ; CHECK-BE-NEXT:    blr
462 ; CHECK-P9-LABEL: testi3:
463 ; CHECK-P9:       # %bb.0: # %entry
464 ; CHECK-P9-NEXT:    xxsldwi vs0, vs34, vs34, 3
465 ; CHECK-P9-NEXT:    addi r3, r7, 12
466 ; CHECK-P9-NEXT:    stfiwx f0, 0, r3
467 ; CHECK-P9-NEXT:    blr
469 ; CHECK-P9-BE-LABEL: testi3:
470 ; CHECK-P9-BE:       # %bb.0: # %entry
471 ; CHECK-P9-BE-NEXT:    xxsldwi vs0, vs34, vs34, 2
472 ; CHECK-P9-BE-NEXT:    addi r3, r7, 12
473 ; CHECK-P9-BE-NEXT:    stfiwx f0, 0, r3
474 ; CHECK-P9-BE-NEXT:    blr
475 entry:
476   %vecext = extractelement <4 x i32> %a, i32 3
477   %arrayidx = getelementptr inbounds i32, i32* %ap, i64 3
478   store i32 %vecext, i32* %arrayidx, align 4
479   ret <4 x i32> %a