Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / PowerPC / mma-acc-memops.ll
blob7c197449201faf1197e39798911f3f38a264b450
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
3 ; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
4 ; RUN:   -disable-auto-paired-vec-st=false < %s | FileCheck %s \
5 ; RUN:   --check-prefix=LE-PAIRED
6 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
7 ; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names \
8 ; RUN:   -ppc-vsr-nums-as-vr -disable-auto-paired-vec-st=false < %s | \
9 ; RUN:   FileCheck %s --check-prefix=BE-PAIRED
10 ; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-vsr-nums-as-vr \
11 ; RUN:   -ppc-asm-full-reg-names -mtriple=powerpc64le-unknown-linux-gnu < %s \
12 ; RUN:   | FileCheck %s --check-prefix=LE-PWR9
13 ; RUN: llc -verify-machineinstrs -mcpu=pwr8 -ppc-vsr-nums-as-vr \
14 ; RUN:   -ppc-asm-full-reg-names -mtriple=powerpc64le-unknown-linux-gnu < %s \
15 ; RUN:   | FileCheck %s --check-prefix=LE-PWR8
16 ; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-vsr-nums-as-vr \
17 ; RUN:   -ppc-asm-full-reg-names -mtriple=powerpc64-unknown-linux-gnu < %s \
18 ; RUN:   | FileCheck %s --check-prefix=BE-PWR9
19 ; RUN: llc -verify-machineinstrs -mcpu=pwr8 -ppc-vsr-nums-as-vr \
20 ; RUN:   -ppc-asm-full-reg-names -mtriple=powerpc64-unknown-linux-gnu < %s \
21 ; RUN:   | FileCheck %s --check-prefix=BE-PWR8
23 @f = common dso_local local_unnamed_addr global <512 x i1> zeroinitializer, align 16
24 @g = common dso_local local_unnamed_addr global <256 x i1> zeroinitializer, align 16
26 define dso_local void @testLdSt(i64 %SrcIdx, i64 %DstIdx) {
27 ; LE-PAIRED-LABEL: testLdSt:
28 ; LE-PAIRED:       # %bb.0: # %entry
29 ; LE-PAIRED-NEXT:    plxv vs1, f@PCREL+96(0), 1
30 ; LE-PAIRED-NEXT:    plxv vs0, f@PCREL+112(0), 1
31 ; LE-PAIRED-NEXT:    plxv vs3, f@PCREL+64(0), 1
32 ; LE-PAIRED-NEXT:    plxv vs2, f@PCREL+80(0), 1
33 ; LE-PAIRED-NEXT:    pstxv vs0, f@PCREL+176(0), 1
34 ; LE-PAIRED-NEXT:    pstxv vs1, f@PCREL+160(0), 1
35 ; LE-PAIRED-NEXT:    pstxv vs2, f@PCREL+144(0), 1
36 ; LE-PAIRED-NEXT:    pstxv vs3, f@PCREL+128(0), 1
37 ; LE-PAIRED-NEXT:    blr
39 ; BE-PAIRED-LABEL: testLdSt:
40 ; BE-PAIRED:       # %bb.0: # %entry
41 ; BE-PAIRED-NEXT:    addis r3, r2, f@toc@ha
42 ; BE-PAIRED-NEXT:    addi r3, r3, f@toc@l
43 ; BE-PAIRED-NEXT:    lxv vs1, 80(r3)
44 ; BE-PAIRED-NEXT:    lxv vs0, 64(r3)
45 ; BE-PAIRED-NEXT:    lxv vs3, 112(r3)
46 ; BE-PAIRED-NEXT:    lxv vs2, 96(r3)
47 ; BE-PAIRED-NEXT:    stxv vs1, 144(r3)
48 ; BE-PAIRED-NEXT:    stxv vs0, 128(r3)
49 ; BE-PAIRED-NEXT:    stxv vs3, 176(r3)
50 ; BE-PAIRED-NEXT:    stxv vs2, 160(r3)
51 ; BE-PAIRED-NEXT:    blr
53 ; LE-PWR9-LABEL: testLdSt:
54 ; LE-PWR9:       # %bb.0: # %entry
55 ; LE-PWR9-NEXT:    addis r3, r2, f@toc@ha
56 ; LE-PWR9-NEXT:    addi r3, r3, f@toc@l
57 ; LE-PWR9-NEXT:    lxv vs1, 96(r3)
58 ; LE-PWR9-NEXT:    lxv vs0, 64(r3)
59 ; LE-PWR9-NEXT:    lxv vs2, 112(r3)
60 ; LE-PWR9-NEXT:    stxv vs1, 160(r3)
61 ; LE-PWR9-NEXT:    lxv vs1, 80(r3)
62 ; LE-PWR9-NEXT:    stxv vs2, 176(r3)
63 ; LE-PWR9-NEXT:    stxv vs0, 128(r3)
64 ; LE-PWR9-NEXT:    stxv vs1, 144(r3)
65 ; LE-PWR9-NEXT:    blr
67 ; LE-PWR8-LABEL: testLdSt:
68 ; LE-PWR8:       # %bb.0: # %entry
69 ; LE-PWR8-NEXT:    addis r3, r2, f@toc@ha
70 ; LE-PWR8-NEXT:    li r4, 64
71 ; LE-PWR8-NEXT:    addi r3, r3, f@toc@l
72 ; LE-PWR8-NEXT:    lxvd2x vs0, r3, r4
73 ; LE-PWR8-NEXT:    li r4, 80
74 ; LE-PWR8-NEXT:    lxvd2x vs1, r3, r4
75 ; LE-PWR8-NEXT:    li r4, 96
76 ; LE-PWR8-NEXT:    lxvd2x vs2, r3, r4
77 ; LE-PWR8-NEXT:    li r4, 112
78 ; LE-PWR8-NEXT:    lxvd2x vs3, r3, r4
79 ; LE-PWR8-NEXT:    li r4, 176
80 ; LE-PWR8-NEXT:    stxvd2x vs3, r3, r4
81 ; LE-PWR8-NEXT:    li r4, 160
82 ; LE-PWR8-NEXT:    stxvd2x vs2, r3, r4
83 ; LE-PWR8-NEXT:    li r4, 144
84 ; LE-PWR8-NEXT:    stxvd2x vs1, r3, r4
85 ; LE-PWR8-NEXT:    li r4, 128
86 ; LE-PWR8-NEXT:    stxvd2x vs0, r3, r4
87 ; LE-PWR8-NEXT:    blr
89 ; BE-PWR9-LABEL: testLdSt:
90 ; BE-PWR9:       # %bb.0: # %entry
91 ; BE-PWR9-NEXT:    addis r3, r2, f@toc@ha
92 ; BE-PWR9-NEXT:    addi r3, r3, f@toc@l
93 ; BE-PWR9-NEXT:    lxv vs1, 96(r3)
94 ; BE-PWR9-NEXT:    lxv vs0, 64(r3)
95 ; BE-PWR9-NEXT:    lxv vs2, 112(r3)
96 ; BE-PWR9-NEXT:    stxv vs1, 160(r3)
97 ; BE-PWR9-NEXT:    lxv vs1, 80(r3)
98 ; BE-PWR9-NEXT:    stxv vs2, 176(r3)
99 ; BE-PWR9-NEXT:    stxv vs0, 128(r3)
100 ; BE-PWR9-NEXT:    stxv vs1, 144(r3)
101 ; BE-PWR9-NEXT:    blr
103 ; BE-PWR8-LABEL: testLdSt:
104 ; BE-PWR8:       # %bb.0: # %entry
105 ; BE-PWR8-NEXT:    addis r3, r2, f@toc@ha
106 ; BE-PWR8-NEXT:    li r4, 64
107 ; BE-PWR8-NEXT:    addi r3, r3, f@toc@l
108 ; BE-PWR8-NEXT:    lxvd2x vs0, r3, r4
109 ; BE-PWR8-NEXT:    li r4, 80
110 ; BE-PWR8-NEXT:    lxvd2x vs1, r3, r4
111 ; BE-PWR8-NEXT:    li r4, 96
112 ; BE-PWR8-NEXT:    lxvd2x vs2, r3, r4
113 ; BE-PWR8-NEXT:    li r4, 112
114 ; BE-PWR8-NEXT:    lxvd2x vs3, r3, r4
115 ; BE-PWR8-NEXT:    li r4, 176
116 ; BE-PWR8-NEXT:    stxvd2x vs3, r3, r4
117 ; BE-PWR8-NEXT:    li r4, 160
118 ; BE-PWR8-NEXT:    stxvd2x vs2, r3, r4
119 ; BE-PWR8-NEXT:    li r4, 144
120 ; BE-PWR8-NEXT:    stxvd2x vs1, r3, r4
121 ; BE-PWR8-NEXT:    li r4, 128
122 ; BE-PWR8-NEXT:    stxvd2x vs0, r3, r4
123 ; BE-PWR8-NEXT:    blr
124 entry:
125   %arrayidx = getelementptr inbounds <512 x i1>, ptr @f, i64 1
126   %0 = load <512 x i1>, ptr %arrayidx, align 64
127   %arrayidx1 = getelementptr inbounds <512 x i1>, ptr @f, i64 2
128   store <512 x i1> %0, ptr %arrayidx1, align 64
129   ret void
132 define dso_local void @testXLdSt(i64 %SrcIdx, i64 %DstIdx) {
133 ; LE-PAIRED-LABEL: testXLdSt:
134 ; LE-PAIRED:       # %bb.0: # %entry
135 ; LE-PAIRED-NEXT:    paddi r5, 0, f@PCREL, 1
136 ; LE-PAIRED-NEXT:    sldi r3, r3, 6
137 ; LE-PAIRED-NEXT:    add r6, r5, r3
138 ; LE-PAIRED-NEXT:    lxv vs1, 32(r6)
139 ; LE-PAIRED-NEXT:    lxv vs0, 48(r6)
140 ; LE-PAIRED-NEXT:    lxvx vs3, r5, r3
141 ; LE-PAIRED-NEXT:    lxv vs2, 16(r6)
142 ; LE-PAIRED-NEXT:    sldi r3, r4, 6
143 ; LE-PAIRED-NEXT:    add r4, r5, r3
144 ; LE-PAIRED-NEXT:    stxvx vs3, r5, r3
145 ; LE-PAIRED-NEXT:    stxv vs0, 48(r4)
146 ; LE-PAIRED-NEXT:    stxv vs1, 32(r4)
147 ; LE-PAIRED-NEXT:    stxv vs2, 16(r4)
148 ; LE-PAIRED-NEXT:    blr
150 ; BE-PAIRED-LABEL: testXLdSt:
151 ; BE-PAIRED:       # %bb.0: # %entry
152 ; BE-PAIRED-NEXT:    addis r5, r2, f@toc@ha
153 ; BE-PAIRED-NEXT:    addi r5, r5, f@toc@l
154 ; BE-PAIRED-NEXT:    sldi r3, r3, 6
155 ; BE-PAIRED-NEXT:    add r6, r5, r3
156 ; BE-PAIRED-NEXT:    lxvx vs0, r5, r3
157 ; BE-PAIRED-NEXT:    sldi r3, r4, 6
158 ; BE-PAIRED-NEXT:    add r4, r5, r3
159 ; BE-PAIRED-NEXT:    lxv vs1, 16(r6)
160 ; BE-PAIRED-NEXT:    lxv vs3, 48(r6)
161 ; BE-PAIRED-NEXT:    lxv vs2, 32(r6)
162 ; BE-PAIRED-NEXT:    stxvx vs0, r5, r3
163 ; BE-PAIRED-NEXT:    stxv vs1, 16(r4)
164 ; BE-PAIRED-NEXT:    stxv vs3, 48(r4)
165 ; BE-PAIRED-NEXT:    stxv vs2, 32(r4)
166 ; BE-PAIRED-NEXT:    blr
168 ; LE-PWR9-LABEL: testXLdSt:
169 ; LE-PWR9:       # %bb.0: # %entry
170 ; LE-PWR9-NEXT:    addis r5, r2, f@toc@ha
171 ; LE-PWR9-NEXT:    sldi r3, r3, 6
172 ; LE-PWR9-NEXT:    addi r5, r5, f@toc@l
173 ; LE-PWR9-NEXT:    add r6, r5, r3
174 ; LE-PWR9-NEXT:    lxvx vs3, r5, r3
175 ; LE-PWR9-NEXT:    sldi r3, r4, 6
176 ; LE-PWR9-NEXT:    lxv vs0, 16(r6)
177 ; LE-PWR9-NEXT:    lxv vs1, 32(r6)
178 ; LE-PWR9-NEXT:    lxv vs2, 48(r6)
179 ; LE-PWR9-NEXT:    stxvx vs3, r5, r3
180 ; LE-PWR9-NEXT:    add r3, r5, r3
181 ; LE-PWR9-NEXT:    stxv vs2, 48(r3)
182 ; LE-PWR9-NEXT:    stxv vs1, 32(r3)
183 ; LE-PWR9-NEXT:    stxv vs0, 16(r3)
184 ; LE-PWR9-NEXT:    blr
186 ; LE-PWR8-LABEL: testXLdSt:
187 ; LE-PWR8:       # %bb.0: # %entry
188 ; LE-PWR8-NEXT:    addis r5, r2, f@toc@ha
189 ; LE-PWR8-NEXT:    sldi r3, r3, 6
190 ; LE-PWR8-NEXT:    li r7, 16
191 ; LE-PWR8-NEXT:    li r8, 32
192 ; LE-PWR8-NEXT:    li r9, 48
193 ; LE-PWR8-NEXT:    addi r5, r5, f@toc@l
194 ; LE-PWR8-NEXT:    add r6, r5, r3
195 ; LE-PWR8-NEXT:    lxvd2x vs3, r5, r3
196 ; LE-PWR8-NEXT:    sldi r3, r4, 6
197 ; LE-PWR8-NEXT:    lxvd2x vs0, r6, r7
198 ; LE-PWR8-NEXT:    lxvd2x vs1, r6, r8
199 ; LE-PWR8-NEXT:    lxvd2x vs2, r6, r9
200 ; LE-PWR8-NEXT:    stxvd2x vs3, r5, r3
201 ; LE-PWR8-NEXT:    add r3, r5, r3
202 ; LE-PWR8-NEXT:    stxvd2x vs2, r3, r9
203 ; LE-PWR8-NEXT:    stxvd2x vs1, r3, r8
204 ; LE-PWR8-NEXT:    stxvd2x vs0, r3, r7
205 ; LE-PWR8-NEXT:    blr
207 ; BE-PWR9-LABEL: testXLdSt:
208 ; BE-PWR9:       # %bb.0: # %entry
209 ; BE-PWR9-NEXT:    addis r5, r2, f@toc@ha
210 ; BE-PWR9-NEXT:    sldi r3, r3, 6
211 ; BE-PWR9-NEXT:    addi r5, r5, f@toc@l
212 ; BE-PWR9-NEXT:    add r6, r5, r3
213 ; BE-PWR9-NEXT:    lxvx vs3, r5, r3
214 ; BE-PWR9-NEXT:    sldi r3, r4, 6
215 ; BE-PWR9-NEXT:    lxv vs0, 16(r6)
216 ; BE-PWR9-NEXT:    lxv vs1, 32(r6)
217 ; BE-PWR9-NEXT:    lxv vs2, 48(r6)
218 ; BE-PWR9-NEXT:    stxvx vs3, r5, r3
219 ; BE-PWR9-NEXT:    add r3, r5, r3
220 ; BE-PWR9-NEXT:    stxv vs2, 48(r3)
221 ; BE-PWR9-NEXT:    stxv vs1, 32(r3)
222 ; BE-PWR9-NEXT:    stxv vs0, 16(r3)
223 ; BE-PWR9-NEXT:    blr
225 ; BE-PWR8-LABEL: testXLdSt:
226 ; BE-PWR8:       # %bb.0: # %entry
227 ; BE-PWR8-NEXT:    addis r5, r2, f@toc@ha
228 ; BE-PWR8-NEXT:    sldi r3, r3, 6
229 ; BE-PWR8-NEXT:    li r7, 32
230 ; BE-PWR8-NEXT:    li r8, 48
231 ; BE-PWR8-NEXT:    sldi r4, r4, 6
232 ; BE-PWR8-NEXT:    addi r5, r5, f@toc@l
233 ; BE-PWR8-NEXT:    add r6, r5, r3
234 ; BE-PWR8-NEXT:    lxvd2x vs0, r5, r3
235 ; BE-PWR8-NEXT:    li r3, 16
236 ; BE-PWR8-NEXT:    lxvd2x vs1, r6, r3
237 ; BE-PWR8-NEXT:    lxvd2x vs2, r6, r7
238 ; BE-PWR8-NEXT:    lxvd2x vs3, r6, r8
239 ; BE-PWR8-NEXT:    add r6, r5, r4
240 ; BE-PWR8-NEXT:    stxvd2x vs0, r5, r4
241 ; BE-PWR8-NEXT:    stxvd2x vs3, r6, r8
242 ; BE-PWR8-NEXT:    stxvd2x vs2, r6, r7
243 ; BE-PWR8-NEXT:    stxvd2x vs1, r6, r3
244 ; BE-PWR8-NEXT:    blr
245 entry:
246   %arrayidx = getelementptr inbounds <512 x i1>, ptr @f, i64 %SrcIdx
247   %0 = load <512 x i1>, ptr %arrayidx, align 64
248   %arrayidx1 = getelementptr inbounds <512 x i1>, ptr @f, i64 %DstIdx
249   store <512 x i1> %0, ptr %arrayidx1, align 64
250   ret void
253 define dso_local void @testUnalignedLdSt() {
254 ; LE-PAIRED-LABEL: testUnalignedLdSt:
255 ; LE-PAIRED:       # %bb.0: # %entry
256 ; LE-PAIRED-NEXT:    plxv vs1, f@PCREL+43(0), 1
257 ; LE-PAIRED-NEXT:    plxv vs0, f@PCREL+59(0), 1
258 ; LE-PAIRED-NEXT:    plxv vs3, f@PCREL+11(0), 1
259 ; LE-PAIRED-NEXT:    plxv vs2, f@PCREL+27(0), 1
260 ; LE-PAIRED-NEXT:    pstxv vs0, f@PCREL+67(0), 1
261 ; LE-PAIRED-NEXT:    pstxv vs1, f@PCREL+51(0), 1
262 ; LE-PAIRED-NEXT:    pstxv vs2, f@PCREL+35(0), 1
263 ; LE-PAIRED-NEXT:    pstxv vs3, f@PCREL+19(0), 1
264 ; LE-PAIRED-NEXT:    blr
266 ; BE-PAIRED-LABEL: testUnalignedLdSt:
267 ; BE-PAIRED:       # %bb.0: # %entry
268 ; BE-PAIRED-NEXT:    addis r3, r2, f@toc@ha
269 ; BE-PAIRED-NEXT:    addi r3, r3, f@toc@l
270 ; BE-PAIRED-NEXT:    plxv vs1, 27(r3), 0
271 ; BE-PAIRED-NEXT:    plxv vs0, 11(r3), 0
272 ; BE-PAIRED-NEXT:    plxv vs3, 59(r3), 0
273 ; BE-PAIRED-NEXT:    plxv vs2, 43(r3), 0
274 ; BE-PAIRED-NEXT:    pstxv vs1, 35(r3), 0
275 ; BE-PAIRED-NEXT:    pstxv vs0, 19(r3), 0
276 ; BE-PAIRED-NEXT:    pstxv vs3, 67(r3), 0
277 ; BE-PAIRED-NEXT:    pstxv vs2, 51(r3), 0
278 ; BE-PAIRED-NEXT:    blr
280 ; LE-PWR9-LABEL: testUnalignedLdSt:
281 ; LE-PWR9:       # %bb.0: # %entry
282 ; LE-PWR9-NEXT:    addis r3, r2, f@toc@ha
283 ; LE-PWR9-NEXT:    li r4, 11
284 ; LE-PWR9-NEXT:    addi r3, r3, f@toc@l
285 ; LE-PWR9-NEXT:    lxvx vs0, r3, r4
286 ; LE-PWR9-NEXT:    li r4, 27
287 ; LE-PWR9-NEXT:    lxvx vs1, r3, r4
288 ; LE-PWR9-NEXT:    li r4, 43
289 ; LE-PWR9-NEXT:    lxvx vs2, r3, r4
290 ; LE-PWR9-NEXT:    li r4, 59
291 ; LE-PWR9-NEXT:    lxvx vs3, r3, r4
292 ; LE-PWR9-NEXT:    li r4, 67
293 ; LE-PWR9-NEXT:    stxvx vs3, r3, r4
294 ; LE-PWR9-NEXT:    li r4, 51
295 ; LE-PWR9-NEXT:    stxvx vs2, r3, r4
296 ; LE-PWR9-NEXT:    li r4, 35
297 ; LE-PWR9-NEXT:    stxvx vs1, r3, r4
298 ; LE-PWR9-NEXT:    li r4, 19
299 ; LE-PWR9-NEXT:    stxvx vs0, r3, r4
300 ; LE-PWR9-NEXT:    blr
302 ; LE-PWR8-LABEL: testUnalignedLdSt:
303 ; LE-PWR8:       # %bb.0: # %entry
304 ; LE-PWR8-NEXT:    addis r3, r2, f@toc@ha
305 ; LE-PWR8-NEXT:    li r4, 11
306 ; LE-PWR8-NEXT:    addi r3, r3, f@toc@l
307 ; LE-PWR8-NEXT:    lxvd2x vs0, r3, r4
308 ; LE-PWR8-NEXT:    li r4, 27
309 ; LE-PWR8-NEXT:    lxvd2x vs1, r3, r4
310 ; LE-PWR8-NEXT:    li r4, 43
311 ; LE-PWR8-NEXT:    lxvd2x vs2, r3, r4
312 ; LE-PWR8-NEXT:    li r4, 59
313 ; LE-PWR8-NEXT:    lxvd2x vs3, r3, r4
314 ; LE-PWR8-NEXT:    li r4, 67
315 ; LE-PWR8-NEXT:    stxvd2x vs3, r3, r4
316 ; LE-PWR8-NEXT:    li r4, 51
317 ; LE-PWR8-NEXT:    stxvd2x vs2, r3, r4
318 ; LE-PWR8-NEXT:    li r4, 35
319 ; LE-PWR8-NEXT:    stxvd2x vs1, r3, r4
320 ; LE-PWR8-NEXT:    li r4, 19
321 ; LE-PWR8-NEXT:    stxvd2x vs0, r3, r4
322 ; LE-PWR8-NEXT:    blr
324 ; BE-PWR9-LABEL: testUnalignedLdSt:
325 ; BE-PWR9:       # %bb.0: # %entry
326 ; BE-PWR9-NEXT:    addis r3, r2, f@toc@ha
327 ; BE-PWR9-NEXT:    li r4, 11
328 ; BE-PWR9-NEXT:    addi r3, r3, f@toc@l
329 ; BE-PWR9-NEXT:    lxvx vs0, r3, r4
330 ; BE-PWR9-NEXT:    li r4, 27
331 ; BE-PWR9-NEXT:    lxvx vs1, r3, r4
332 ; BE-PWR9-NEXT:    li r4, 43
333 ; BE-PWR9-NEXT:    lxvx vs2, r3, r4
334 ; BE-PWR9-NEXT:    li r4, 59
335 ; BE-PWR9-NEXT:    lxvx vs3, r3, r4
336 ; BE-PWR9-NEXT:    li r4, 67
337 ; BE-PWR9-NEXT:    stxvx vs3, r3, r4
338 ; BE-PWR9-NEXT:    li r4, 51
339 ; BE-PWR9-NEXT:    stxvx vs2, r3, r4
340 ; BE-PWR9-NEXT:    li r4, 35
341 ; BE-PWR9-NEXT:    stxvx vs1, r3, r4
342 ; BE-PWR9-NEXT:    li r4, 19
343 ; BE-PWR9-NEXT:    stxvx vs0, r3, r4
344 ; BE-PWR9-NEXT:    blr
346 ; BE-PWR8-LABEL: testUnalignedLdSt:
347 ; BE-PWR8:       # %bb.0: # %entry
348 ; BE-PWR8-NEXT:    addis r3, r2, f@toc@ha
349 ; BE-PWR8-NEXT:    li r4, 11
350 ; BE-PWR8-NEXT:    addi r3, r3, f@toc@l
351 ; BE-PWR8-NEXT:    lxvd2x vs0, r3, r4
352 ; BE-PWR8-NEXT:    li r4, 27
353 ; BE-PWR8-NEXT:    lxvd2x vs1, r3, r4
354 ; BE-PWR8-NEXT:    li r4, 43
355 ; BE-PWR8-NEXT:    lxvd2x vs2, r3, r4
356 ; BE-PWR8-NEXT:    li r4, 59
357 ; BE-PWR8-NEXT:    lxvd2x vs3, r3, r4
358 ; BE-PWR8-NEXT:    li r4, 67
359 ; BE-PWR8-NEXT:    stxvd2x vs3, r3, r4
360 ; BE-PWR8-NEXT:    li r4, 51
361 ; BE-PWR8-NEXT:    stxvd2x vs2, r3, r4
362 ; BE-PWR8-NEXT:    li r4, 35
363 ; BE-PWR8-NEXT:    stxvd2x vs1, r3, r4
364 ; BE-PWR8-NEXT:    li r4, 19
365 ; BE-PWR8-NEXT:    stxvd2x vs0, r3, r4
366 ; BE-PWR8-NEXT:    blr
367 entry:
368   %add.ptr = getelementptr inbounds i8, ptr @f, i64 11
369   %add.ptr1 = getelementptr inbounds i8, ptr @f, i64 19
370   %0 = load <512 x i1>, ptr %add.ptr, align 64
371   store <512 x i1> %0, ptr %add.ptr1, align 64
372   ret void
375 define dso_local void @testLdStPair(i64 %SrcIdx, i64 %DstIdx) {
376 ; LE-PAIRED-LABEL: testLdStPair:
377 ; LE-PAIRED:       # %bb.0: # %entry
378 ; LE-PAIRED-NEXT:    plxv v3, g@PCREL+32(0), 1
379 ; LE-PAIRED-NEXT:    plxv v2, g@PCREL+48(0), 1
380 ; LE-PAIRED-NEXT:    pstxv v2, g@PCREL+80(0), 1
381 ; LE-PAIRED-NEXT:    pstxv v3, g@PCREL+64(0), 1
382 ; LE-PAIRED-NEXT:    blr
384 ; BE-PAIRED-LABEL: testLdStPair:
385 ; BE-PAIRED:       # %bb.0: # %entry
386 ; BE-PAIRED-NEXT:    addis r3, r2, g@toc@ha
387 ; BE-PAIRED-NEXT:    addi r3, r3, g@toc@l
388 ; BE-PAIRED-NEXT:    lxv v3, 48(r3)
389 ; BE-PAIRED-NEXT:    lxv v2, 32(r3)
390 ; BE-PAIRED-NEXT:    stxv v3, 80(r3)
391 ; BE-PAIRED-NEXT:    stxv v2, 64(r3)
392 ; BE-PAIRED-NEXT:    blr
394 ; LE-PWR9-LABEL: testLdStPair:
395 ; LE-PWR9:       # %bb.0: # %entry
396 ; LE-PWR9-NEXT:    addis r3, r2, g@toc@ha
397 ; LE-PWR9-NEXT:    addi r3, r3, g@toc@l
398 ; LE-PWR9-NEXT:    lxv vs0, 32(r3)
399 ; LE-PWR9-NEXT:    lxv vs1, 48(r3)
400 ; LE-PWR9-NEXT:    stxv vs1, 80(r3)
401 ; LE-PWR9-NEXT:    stxv vs0, 64(r3)
402 ; LE-PWR9-NEXT:    blr
404 ; LE-PWR8-LABEL: testLdStPair:
405 ; LE-PWR8:       # %bb.0: # %entry
406 ; LE-PWR8-NEXT:    addis r3, r2, g@toc@ha
407 ; LE-PWR8-NEXT:    li r4, 32
408 ; LE-PWR8-NEXT:    addi r3, r3, g@toc@l
409 ; LE-PWR8-NEXT:    lxvd2x vs0, r3, r4
410 ; LE-PWR8-NEXT:    li r4, 48
411 ; LE-PWR8-NEXT:    lxvd2x vs1, r3, r4
412 ; LE-PWR8-NEXT:    li r4, 80
413 ; LE-PWR8-NEXT:    stxvd2x vs1, r3, r4
414 ; LE-PWR8-NEXT:    li r4, 64
415 ; LE-PWR8-NEXT:    stxvd2x vs0, r3, r4
416 ; LE-PWR8-NEXT:    blr
418 ; BE-PWR9-LABEL: testLdStPair:
419 ; BE-PWR9:       # %bb.0: # %entry
420 ; BE-PWR9-NEXT:    addis r3, r2, g@toc@ha
421 ; BE-PWR9-NEXT:    addi r3, r3, g@toc@l
422 ; BE-PWR9-NEXT:    lxv vs0, 32(r3)
423 ; BE-PWR9-NEXT:    lxv vs1, 48(r3)
424 ; BE-PWR9-NEXT:    stxv vs1, 80(r3)
425 ; BE-PWR9-NEXT:    stxv vs0, 64(r3)
426 ; BE-PWR9-NEXT:    blr
428 ; BE-PWR8-LABEL: testLdStPair:
429 ; BE-PWR8:       # %bb.0: # %entry
430 ; BE-PWR8-NEXT:    addis r3, r2, g@toc@ha
431 ; BE-PWR8-NEXT:    li r4, 32
432 ; BE-PWR8-NEXT:    addi r3, r3, g@toc@l
433 ; BE-PWR8-NEXT:    lxvd2x vs0, r3, r4
434 ; BE-PWR8-NEXT:    li r4, 48
435 ; BE-PWR8-NEXT:    lxvd2x vs1, r3, r4
436 ; BE-PWR8-NEXT:    li r4, 80
437 ; BE-PWR8-NEXT:    stxvd2x vs1, r3, r4
438 ; BE-PWR8-NEXT:    li r4, 64
439 ; BE-PWR8-NEXT:    stxvd2x vs0, r3, r4
440 ; BE-PWR8-NEXT:    blr
441 entry:
442   %arrayidx = getelementptr inbounds <256 x i1>, ptr @g, i64 1
443   %0 = load <256 x i1>, ptr %arrayidx, align 64
444   %arrayidx1 = getelementptr inbounds <256 x i1>, ptr @g, i64 2
445   store <256 x i1> %0, ptr %arrayidx1, align 64
446   ret void
449 define dso_local void @testXLdStPair(i64 %SrcIdx, i64 %DstIdx) {
450 ; LE-PAIRED-LABEL: testXLdStPair:
451 ; LE-PAIRED:       # %bb.0: # %entry
452 ; LE-PAIRED-NEXT:    sldi r3, r3, 5
453 ; LE-PAIRED-NEXT:    paddi r5, 0, g@PCREL, 1
454 ; LE-PAIRED-NEXT:    add r6, r5, r3
455 ; LE-PAIRED-NEXT:    lxvx v3, r5, r3
456 ; LE-PAIRED-NEXT:    sldi r3, r4, 5
457 ; LE-PAIRED-NEXT:    add r4, r5, r3
458 ; LE-PAIRED-NEXT:    lxv v2, 16(r6)
459 ; LE-PAIRED-NEXT:    stxvx v3, r5, r3
460 ; LE-PAIRED-NEXT:    stxv v2, 16(r4)
461 ; LE-PAIRED-NEXT:    blr
463 ; BE-PAIRED-LABEL: testXLdStPair:
464 ; BE-PAIRED:       # %bb.0: # %entry
465 ; BE-PAIRED-NEXT:    addis r5, r2, g@toc@ha
466 ; BE-PAIRED-NEXT:    sldi r3, r3, 5
467 ; BE-PAIRED-NEXT:    addi r5, r5, g@toc@l
468 ; BE-PAIRED-NEXT:    add r6, r5, r3
469 ; BE-PAIRED-NEXT:    lxvx v2, r5, r3
470 ; BE-PAIRED-NEXT:    sldi r3, r4, 5
471 ; BE-PAIRED-NEXT:    add r4, r5, r3
472 ; BE-PAIRED-NEXT:    lxv v3, 16(r6)
473 ; BE-PAIRED-NEXT:    stxvx v2, r5, r3
474 ; BE-PAIRED-NEXT:    stxv v3, 16(r4)
475 ; BE-PAIRED-NEXT:    blr
477 ; LE-PWR9-LABEL: testXLdStPair:
478 ; LE-PWR9:       # %bb.0: # %entry
479 ; LE-PWR9-NEXT:    addis r5, r2, g@toc@ha
480 ; LE-PWR9-NEXT:    sldi r3, r3, 5
481 ; LE-PWR9-NEXT:    sldi r4, r4, 5
482 ; LE-PWR9-NEXT:    addi r5, r5, g@toc@l
483 ; LE-PWR9-NEXT:    add r6, r5, r3
484 ; LE-PWR9-NEXT:    lxvx vs1, r5, r3
485 ; LE-PWR9-NEXT:    lxv vs0, 16(r6)
486 ; LE-PWR9-NEXT:    add r6, r5, r4
487 ; LE-PWR9-NEXT:    stxvx vs1, r5, r4
488 ; LE-PWR9-NEXT:    stxv vs0, 16(r6)
489 ; LE-PWR9-NEXT:    blr
491 ; LE-PWR8-LABEL: testXLdStPair:
492 ; LE-PWR8:       # %bb.0: # %entry
493 ; LE-PWR8-NEXT:    addis r5, r2, g@toc@ha
494 ; LE-PWR8-NEXT:    sldi r3, r3, 5
495 ; LE-PWR8-NEXT:    li r7, 16
496 ; LE-PWR8-NEXT:    addi r5, r5, g@toc@l
497 ; LE-PWR8-NEXT:    add r6, r5, r3
498 ; LE-PWR8-NEXT:    lxvd2x vs1, r5, r3
499 ; LE-PWR8-NEXT:    sldi r3, r4, 5
500 ; LE-PWR8-NEXT:    lxvd2x vs0, r6, r7
501 ; LE-PWR8-NEXT:    add r4, r5, r3
502 ; LE-PWR8-NEXT:    stxvd2x vs1, r5, r3
503 ; LE-PWR8-NEXT:    stxvd2x vs0, r4, r7
504 ; LE-PWR8-NEXT:    blr
506 ; BE-PWR9-LABEL: testXLdStPair:
507 ; BE-PWR9:       # %bb.0: # %entry
508 ; BE-PWR9-NEXT:    addis r5, r2, g@toc@ha
509 ; BE-PWR9-NEXT:    sldi r3, r3, 5
510 ; BE-PWR9-NEXT:    sldi r4, r4, 5
511 ; BE-PWR9-NEXT:    addi r5, r5, g@toc@l
512 ; BE-PWR9-NEXT:    add r6, r5, r3
513 ; BE-PWR9-NEXT:    lxvx vs1, r5, r3
514 ; BE-PWR9-NEXT:    lxv vs0, 16(r6)
515 ; BE-PWR9-NEXT:    add r6, r5, r4
516 ; BE-PWR9-NEXT:    stxvx vs1, r5, r4
517 ; BE-PWR9-NEXT:    stxv vs0, 16(r6)
518 ; BE-PWR9-NEXT:    blr
520 ; BE-PWR8-LABEL: testXLdStPair:
521 ; BE-PWR8:       # %bb.0: # %entry
522 ; BE-PWR8-NEXT:    addis r5, r2, g@toc@ha
523 ; BE-PWR8-NEXT:    sldi r3, r3, 5
524 ; BE-PWR8-NEXT:    sldi r4, r4, 5
525 ; BE-PWR8-NEXT:    addi r5, r5, g@toc@l
526 ; BE-PWR8-NEXT:    add r6, r5, r3
527 ; BE-PWR8-NEXT:    lxvd2x vs0, r5, r3
528 ; BE-PWR8-NEXT:    li r3, 16
529 ; BE-PWR8-NEXT:    lxvd2x vs1, r6, r3
530 ; BE-PWR8-NEXT:    add r6, r5, r4
531 ; BE-PWR8-NEXT:    stxvd2x vs0, r5, r4
532 ; BE-PWR8-NEXT:    stxvd2x vs1, r6, r3
533 ; BE-PWR8-NEXT:    blr
534 entry:
535   %arrayidx = getelementptr inbounds <256 x i1>, ptr @g, i64 %SrcIdx
536   %0 = load <256 x i1>, ptr %arrayidx, align 64
537   %arrayidx1 = getelementptr inbounds <256 x i1>, ptr @g, i64 %DstIdx
538   store <256 x i1> %0, ptr %arrayidx1, align 64
539   ret void
542 define dso_local void @testUnalignedLdStPair() {
543 ; LE-PAIRED-LABEL: testUnalignedLdStPair:
544 ; LE-PAIRED:       # %bb.0: # %entry
545 ; LE-PAIRED-NEXT:    plxv v3, g@PCREL+11(0), 1
546 ; LE-PAIRED-NEXT:    plxv v2, g@PCREL+27(0), 1
547 ; LE-PAIRED-NEXT:    pstxv v2, g@PCREL+35(0), 1
548 ; LE-PAIRED-NEXT:    pstxv v3, g@PCREL+19(0), 1
549 ; LE-PAIRED-NEXT:    blr
551 ; BE-PAIRED-LABEL: testUnalignedLdStPair:
552 ; BE-PAIRED:       # %bb.0: # %entry
553 ; BE-PAIRED-NEXT:    addis r3, r2, g@toc@ha
554 ; BE-PAIRED-NEXT:    addi r3, r3, g@toc@l
555 ; BE-PAIRED-NEXT:    plxv v3, 27(r3), 0
556 ; BE-PAIRED-NEXT:    plxv v2, 11(r3), 0
557 ; BE-PAIRED-NEXT:    pstxv v3, 35(r3), 0
558 ; BE-PAIRED-NEXT:    pstxv v2, 19(r3), 0
559 ; BE-PAIRED-NEXT:    blr
561 ; LE-PWR9-LABEL: testUnalignedLdStPair:
562 ; LE-PWR9:       # %bb.0: # %entry
563 ; LE-PWR9-NEXT:    addis r3, r2, g@toc@ha
564 ; LE-PWR9-NEXT:    li r4, 11
565 ; LE-PWR9-NEXT:    addi r3, r3, g@toc@l
566 ; LE-PWR9-NEXT:    lxvx vs0, r3, r4
567 ; LE-PWR9-NEXT:    li r4, 27
568 ; LE-PWR9-NEXT:    lxvx vs1, r3, r4
569 ; LE-PWR9-NEXT:    li r4, 35
570 ; LE-PWR9-NEXT:    stxvx vs1, r3, r4
571 ; LE-PWR9-NEXT:    li r4, 19
572 ; LE-PWR9-NEXT:    stxvx vs0, r3, r4
573 ; LE-PWR9-NEXT:    blr
575 ; LE-PWR8-LABEL: testUnalignedLdStPair:
576 ; LE-PWR8:       # %bb.0: # %entry
577 ; LE-PWR8-NEXT:    addis r3, r2, g@toc@ha
578 ; LE-PWR8-NEXT:    li r4, 11
579 ; LE-PWR8-NEXT:    addi r3, r3, g@toc@l
580 ; LE-PWR8-NEXT:    lxvd2x vs0, r3, r4
581 ; LE-PWR8-NEXT:    li r4, 27
582 ; LE-PWR8-NEXT:    lxvd2x vs1, r3, r4
583 ; LE-PWR8-NEXT:    li r4, 35
584 ; LE-PWR8-NEXT:    stxvd2x vs1, r3, r4
585 ; LE-PWR8-NEXT:    li r4, 19
586 ; LE-PWR8-NEXT:    stxvd2x vs0, r3, r4
587 ; LE-PWR8-NEXT:    blr
589 ; BE-PWR9-LABEL: testUnalignedLdStPair:
590 ; BE-PWR9:       # %bb.0: # %entry
591 ; BE-PWR9-NEXT:    addis r3, r2, g@toc@ha
592 ; BE-PWR9-NEXT:    li r4, 11
593 ; BE-PWR9-NEXT:    addi r3, r3, g@toc@l
594 ; BE-PWR9-NEXT:    lxvx vs0, r3, r4
595 ; BE-PWR9-NEXT:    li r4, 27
596 ; BE-PWR9-NEXT:    lxvx vs1, r3, r4
597 ; BE-PWR9-NEXT:    li r4, 35
598 ; BE-PWR9-NEXT:    stxvx vs1, r3, r4
599 ; BE-PWR9-NEXT:    li r4, 19
600 ; BE-PWR9-NEXT:    stxvx vs0, r3, r4
601 ; BE-PWR9-NEXT:    blr
603 ; BE-PWR8-LABEL: testUnalignedLdStPair:
604 ; BE-PWR8:       # %bb.0: # %entry
605 ; BE-PWR8-NEXT:    addis r3, r2, g@toc@ha
606 ; BE-PWR8-NEXT:    li r4, 11
607 ; BE-PWR8-NEXT:    addi r3, r3, g@toc@l
608 ; BE-PWR8-NEXT:    lxvd2x vs0, r3, r4
609 ; BE-PWR8-NEXT:    li r4, 27
610 ; BE-PWR8-NEXT:    lxvd2x vs1, r3, r4
611 ; BE-PWR8-NEXT:    li r4, 35
612 ; BE-PWR8-NEXT:    stxvd2x vs1, r3, r4
613 ; BE-PWR8-NEXT:    li r4, 19
614 ; BE-PWR8-NEXT:    stxvd2x vs0, r3, r4
615 ; BE-PWR8-NEXT:    blr
616 entry:
617   %add.ptr = getelementptr inbounds i8, ptr @g, i64 11
618   %add.ptr1 = getelementptr inbounds i8, ptr @g, i64 19
619   %0 = load <256 x i1>, ptr %add.ptr, align 64
620   store <256 x i1> %0, ptr %add.ptr1, align 64
621   ret void