Revert rGe6ccb57bb3f6b761f2310e97fd6ca99eff42f73e "[SLP] Add cost model for `llvm...
[llvm-project.git] / llvm / test / CodeGen / PowerPC / mma-acc-memops.ll
blob471b2a6c4d7e202cffcdaaf8bd28be8c956b0042
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, 96
71 ; LE-PWR8-NEXT:    li r5, 112
72 ; LE-PWR8-NEXT:    addi r3, r3, f@toc@l
73 ; LE-PWR8-NEXT:    lxvd2x vs0, r3, r4
74 ; LE-PWR8-NEXT:    li r4, 64
75 ; LE-PWR8-NEXT:    lxvd2x vs1, r3, r5
76 ; LE-PWR8-NEXT:    li r5, 80
77 ; LE-PWR8-NEXT:    lxvd2x vs2, r3, r4
78 ; LE-PWR8-NEXT:    lxvd2x vs3, r3, r5
79 ; LE-PWR8-NEXT:    li r4, 176
80 ; LE-PWR8-NEXT:    li r5, 160
81 ; LE-PWR8-NEXT:    stxvd2x vs1, r3, r4
82 ; LE-PWR8-NEXT:    li r4, 144
83 ; LE-PWR8-NEXT:    stxvd2x vs0, r3, r5
84 ; LE-PWR8-NEXT:    li r5, 128
85 ; LE-PWR8-NEXT:    stxvd2x vs3, r3, r4
86 ; LE-PWR8-NEXT:    stxvd2x vs2, r3, r5
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, 96
107 ; BE-PWR8-NEXT:    li r5, 112
108 ; BE-PWR8-NEXT:    addi r3, r3, f@toc@l
109 ; BE-PWR8-NEXT:    lxvd2x vs0, r3, r4
110 ; BE-PWR8-NEXT:    li r4, 64
111 ; BE-PWR8-NEXT:    lxvd2x vs1, r3, r5
112 ; BE-PWR8-NEXT:    li r5, 80
113 ; BE-PWR8-NEXT:    lxvd2x vs2, r3, r4
114 ; BE-PWR8-NEXT:    lxvd2x vs3, r3, r5
115 ; BE-PWR8-NEXT:    li r4, 176
116 ; BE-PWR8-NEXT:    li r5, 160
117 ; BE-PWR8-NEXT:    stxvd2x vs1, r3, r4
118 ; BE-PWR8-NEXT:    li r4, 144
119 ; BE-PWR8-NEXT:    stxvd2x vs0, r3, r5
120 ; BE-PWR8-NEXT:    li r5, 128
121 ; BE-PWR8-NEXT:    stxvd2x vs3, r3, r4
122 ; BE-PWR8-NEXT:    stxvd2x vs2, r3, r5
123 ; BE-PWR8-NEXT:    blr
124 entry:
125   %arrayidx = getelementptr inbounds <512 x i1>, <512 x i1>* @f, i64 1
126   %0 = load <512 x i1>, <512 x i1>* %arrayidx, align 64
127   %arrayidx1 = getelementptr inbounds <512 x i1>, <512 x i1>* @f, i64 2
128   store <512 x i1> %0, <512 x i1>* %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 r6, 48
191 ; LE-PWR8-NEXT:    li r8, 16
192 ; LE-PWR8-NEXT:    li r9, 32
193 ; LE-PWR8-NEXT:    addi r5, r5, f@toc@l
194 ; LE-PWR8-NEXT:    add r7, r5, r3
195 ; LE-PWR8-NEXT:    lxvd2x vs0, r5, r3
196 ; LE-PWR8-NEXT:    sldi r3, r4, 6
197 ; LE-PWR8-NEXT:    lxvd2x vs1, r7, r6
198 ; LE-PWR8-NEXT:    lxvd2x vs2, r7, r8
199 ; LE-PWR8-NEXT:    add r4, r5, r3
200 ; LE-PWR8-NEXT:    lxvd2x vs3, r7, r9
201 ; LE-PWR8-NEXT:    stxvd2x vs0, r5, r3
202 ; LE-PWR8-NEXT:    stxvd2x vs1, r4, r6
203 ; LE-PWR8-NEXT:    stxvd2x vs3, r4, r9
204 ; LE-PWR8-NEXT:    stxvd2x vs2, r4, r8
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 r6, 32
230 ; BE-PWR8-NEXT:    li r7, 48
231 ; BE-PWR8-NEXT:    li r9, 16
232 ; BE-PWR8-NEXT:    addi r5, r5, f@toc@l
233 ; BE-PWR8-NEXT:    add r8, r5, r3
234 ; BE-PWR8-NEXT:    lxvd2x vs2, r5, r3
235 ; BE-PWR8-NEXT:    sldi r3, r4, 6
236 ; BE-PWR8-NEXT:    lxvd2x vs0, r8, r6
237 ; BE-PWR8-NEXT:    lxvd2x vs1, r8, r7
238 ; BE-PWR8-NEXT:    add r4, r5, r3
239 ; BE-PWR8-NEXT:    lxvd2x vs3, r8, r9
240 ; BE-PWR8-NEXT:    stxvd2x vs2, r5, r3
241 ; BE-PWR8-NEXT:    stxvd2x vs1, r4, r7
242 ; BE-PWR8-NEXT:    stxvd2x vs0, r4, r6
243 ; BE-PWR8-NEXT:    stxvd2x vs3, r4, r9
244 ; BE-PWR8-NEXT:    blr
245 entry:
246   %arrayidx = getelementptr inbounds <512 x i1>, <512 x i1>* @f, i64 %SrcIdx
247   %0 = load <512 x i1>, <512 x i1>* %arrayidx, align 64
248   %arrayidx1 = getelementptr inbounds <512 x i1>, <512 x i1>* @f, i64 %DstIdx
249   store <512 x i1> %0, <512 x i1>* %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, 43
306 ; LE-PWR8-NEXT:    li r5, 59
307 ; LE-PWR8-NEXT:    addi r3, r3, f@toc@l
308 ; LE-PWR8-NEXT:    lxvd2x vs0, r3, r4
309 ; LE-PWR8-NEXT:    li r4, 11
310 ; LE-PWR8-NEXT:    lxvd2x vs1, r3, r5
311 ; LE-PWR8-NEXT:    li r5, 27
312 ; LE-PWR8-NEXT:    lxvd2x vs2, r3, r4
313 ; LE-PWR8-NEXT:    lxvd2x vs3, r3, r5
314 ; LE-PWR8-NEXT:    li r4, 67
315 ; LE-PWR8-NEXT:    li r5, 51
316 ; LE-PWR8-NEXT:    stxvd2x vs1, r3, r4
317 ; LE-PWR8-NEXT:    li r4, 35
318 ; LE-PWR8-NEXT:    stxvd2x vs0, r3, r5
319 ; LE-PWR8-NEXT:    li r5, 19
320 ; LE-PWR8-NEXT:    stxvd2x vs3, r3, r4
321 ; LE-PWR8-NEXT:    stxvd2x vs2, r3, r5
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, 43
350 ; BE-PWR8-NEXT:    li r5, 59
351 ; BE-PWR8-NEXT:    addi r3, r3, f@toc@l
352 ; BE-PWR8-NEXT:    lxvd2x vs0, r3, r4
353 ; BE-PWR8-NEXT:    li r4, 11
354 ; BE-PWR8-NEXT:    lxvd2x vs1, r3, r5
355 ; BE-PWR8-NEXT:    li r5, 27
356 ; BE-PWR8-NEXT:    lxvd2x vs2, r3, r4
357 ; BE-PWR8-NEXT:    lxvd2x vs3, r3, r5
358 ; BE-PWR8-NEXT:    li r4, 67
359 ; BE-PWR8-NEXT:    li r5, 51
360 ; BE-PWR8-NEXT:    stxvd2x vs1, r3, r4
361 ; BE-PWR8-NEXT:    li r4, 35
362 ; BE-PWR8-NEXT:    stxvd2x vs0, r3, r5
363 ; BE-PWR8-NEXT:    li r5, 19
364 ; BE-PWR8-NEXT:    stxvd2x vs3, r3, r4
365 ; BE-PWR8-NEXT:    stxvd2x vs2, r3, r5
366 ; BE-PWR8-NEXT:    blr
367 entry:
368   %0 = bitcast <512 x i1>* @f to i8*
369   %add.ptr = getelementptr inbounds i8, i8* %0, i64 11
370   %add.ptr1 = getelementptr inbounds i8, i8* %0, i64 19
371   %1 = bitcast i8* %add.ptr to <512 x i1>*
372   %2 = bitcast i8* %add.ptr1 to <512 x i1>*
373   %3 = load <512 x i1>, <512 x i1>* %1, align 64
374   store <512 x i1> %3, <512 x i1>* %2, align 64
375   ret void
378 define dso_local void @testLdStPair(i64 %SrcIdx, i64 %DstIdx) {
379 ; LE-PAIRED-LABEL: testLdStPair:
380 ; LE-PAIRED:       # %bb.0: # %entry
381 ; LE-PAIRED-NEXT:    plxv v3, g@PCREL+32(0), 1
382 ; LE-PAIRED-NEXT:    plxv v2, g@PCREL+48(0), 1
383 ; LE-PAIRED-NEXT:    pstxv v3, g@PCREL+64(0), 1
384 ; LE-PAIRED-NEXT:    pstxv v2, g@PCREL+80(0), 1
385 ; LE-PAIRED-NEXT:    blr
387 ; BE-PAIRED-LABEL: testLdStPair:
388 ; BE-PAIRED:       # %bb.0: # %entry
389 ; BE-PAIRED-NEXT:    addis r3, r2, g@toc@ha
390 ; BE-PAIRED-NEXT:    addi r3, r3, g@toc@l
391 ; BE-PAIRED-NEXT:    lxv v3, 48(r3)
392 ; BE-PAIRED-NEXT:    lxv v2, 32(r3)
393 ; BE-PAIRED-NEXT:    stxv v3, 80(r3)
394 ; BE-PAIRED-NEXT:    stxv v2, 64(r3)
395 ; BE-PAIRED-NEXT:    blr
397 ; LE-PWR9-LABEL: testLdStPair:
398 ; LE-PWR9:       # %bb.0: # %entry
399 ; LE-PWR9-NEXT:    addis r3, r2, g@toc@ha
400 ; LE-PWR9-NEXT:    addi r3, r3, g@toc@l
401 ; LE-PWR9-NEXT:    lxv vs0, 32(r3)
402 ; LE-PWR9-NEXT:    lxv vs1, 48(r3)
403 ; LE-PWR9-NEXT:    stxv vs1, 80(r3)
404 ; LE-PWR9-NEXT:    stxv vs0, 64(r3)
405 ; LE-PWR9-NEXT:    blr
407 ; LE-PWR8-LABEL: testLdStPair:
408 ; LE-PWR8:       # %bb.0: # %entry
409 ; LE-PWR8-NEXT:    addis r3, r2, g@toc@ha
410 ; LE-PWR8-NEXT:    li r4, 32
411 ; LE-PWR8-NEXT:    li r5, 48
412 ; LE-PWR8-NEXT:    addi r3, r3, g@toc@l
413 ; LE-PWR8-NEXT:    lxvd2x vs0, r3, r4
414 ; LE-PWR8-NEXT:    lxvd2x vs1, r3, r5
415 ; LE-PWR8-NEXT:    li r4, 80
416 ; LE-PWR8-NEXT:    li r5, 64
417 ; LE-PWR8-NEXT:    stxvd2x vs1, r3, r4
418 ; LE-PWR8-NEXT:    stxvd2x vs0, r3, r5
419 ; LE-PWR8-NEXT:    blr
421 ; BE-PWR9-LABEL: testLdStPair:
422 ; BE-PWR9:       # %bb.0: # %entry
423 ; BE-PWR9-NEXT:    addis r3, r2, g@toc@ha
424 ; BE-PWR9-NEXT:    addi r3, r3, g@toc@l
425 ; BE-PWR9-NEXT:    lxv vs0, 32(r3)
426 ; BE-PWR9-NEXT:    lxv vs1, 48(r3)
427 ; BE-PWR9-NEXT:    stxv vs1, 80(r3)
428 ; BE-PWR9-NEXT:    stxv vs0, 64(r3)
429 ; BE-PWR9-NEXT:    blr
431 ; BE-PWR8-LABEL: testLdStPair:
432 ; BE-PWR8:       # %bb.0: # %entry
433 ; BE-PWR8-NEXT:    addis r3, r2, g@toc@ha
434 ; BE-PWR8-NEXT:    li r4, 32
435 ; BE-PWR8-NEXT:    li r5, 48
436 ; BE-PWR8-NEXT:    addi r3, r3, g@toc@l
437 ; BE-PWR8-NEXT:    lxvd2x vs0, r3, r4
438 ; BE-PWR8-NEXT:    lxvd2x vs1, r3, r5
439 ; BE-PWR8-NEXT:    li r4, 80
440 ; BE-PWR8-NEXT:    li r5, 64
441 ; BE-PWR8-NEXT:    stxvd2x vs1, r3, r4
442 ; BE-PWR8-NEXT:    stxvd2x vs0, r3, r5
443 ; BE-PWR8-NEXT:    blr
444 entry:
445   %arrayidx = getelementptr inbounds <256 x i1>, <256 x i1>* @g, i64 1
446   %0 = load <256 x i1>, <256 x i1>* %arrayidx, align 64
447   %arrayidx1 = getelementptr inbounds <256 x i1>, <256 x i1>* @g, i64 2
448   store <256 x i1> %0, <256 x i1>* %arrayidx1, align 64
449   ret void
452 define dso_local void @testXLdStPair(i64 %SrcIdx, i64 %DstIdx) {
453 ; LE-PAIRED-LABEL: testXLdStPair:
454 ; LE-PAIRED:       # %bb.0: # %entry
455 ; LE-PAIRED-NEXT:    sldi r3, r3, 5
456 ; LE-PAIRED-NEXT:    paddi r5, 0, g@PCREL, 1
457 ; LE-PAIRED-NEXT:    add r6, r5, r3
458 ; LE-PAIRED-NEXT:    lxvx v3, r5, r3
459 ; LE-PAIRED-NEXT:    sldi r3, r4, 5
460 ; LE-PAIRED-NEXT:    lxv v2, 16(r6)
461 ; LE-PAIRED-NEXT:    add r4, r5, r3
462 ; LE-PAIRED-NEXT:    stxvx v3, r5, r3
463 ; LE-PAIRED-NEXT:    stxv v2, 16(r4)
464 ; LE-PAIRED-NEXT:    blr
466 ; BE-PAIRED-LABEL: testXLdStPair:
467 ; BE-PAIRED:       # %bb.0: # %entry
468 ; BE-PAIRED-NEXT:    addis r5, r2, g@toc@ha
469 ; BE-PAIRED-NEXT:    sldi r3, r3, 5
470 ; BE-PAIRED-NEXT:    addi r5, r5, g@toc@l
471 ; BE-PAIRED-NEXT:    add r6, r5, r3
472 ; BE-PAIRED-NEXT:    lxvx v2, r5, r3
473 ; BE-PAIRED-NEXT:    sldi r3, r4, 5
474 ; BE-PAIRED-NEXT:    lxv v3, 16(r6)
475 ; BE-PAIRED-NEXT:    add r4, r5, r3
476 ; BE-PAIRED-NEXT:    stxvx v2, r5, r3
477 ; BE-PAIRED-NEXT:    stxv v3, 16(r4)
478 ; BE-PAIRED-NEXT:    blr
480 ; LE-PWR9-LABEL: testXLdStPair:
481 ; LE-PWR9:       # %bb.0: # %entry
482 ; LE-PWR9-NEXT:    addis r5, r2, g@toc@ha
483 ; LE-PWR9-NEXT:    sldi r3, r3, 5
484 ; LE-PWR9-NEXT:    sldi r4, r4, 5
485 ; LE-PWR9-NEXT:    addi r5, r5, g@toc@l
486 ; LE-PWR9-NEXT:    add r6, r5, r3
487 ; LE-PWR9-NEXT:    lxvx vs1, r5, r3
488 ; LE-PWR9-NEXT:    lxv vs0, 16(r6)
489 ; LE-PWR9-NEXT:    add r6, r5, r4
490 ; LE-PWR9-NEXT:    stxvx vs1, r5, r4
491 ; LE-PWR9-NEXT:    stxv vs0, 16(r6)
492 ; LE-PWR9-NEXT:    blr
494 ; LE-PWR8-LABEL: testXLdStPair:
495 ; LE-PWR8:       # %bb.0: # %entry
496 ; LE-PWR8-NEXT:    addis r5, r2, g@toc@ha
497 ; LE-PWR8-NEXT:    sldi r3, r3, 5
498 ; LE-PWR8-NEXT:    li r7, 16
499 ; LE-PWR8-NEXT:    addi r5, r5, g@toc@l
500 ; LE-PWR8-NEXT:    add r6, r5, r3
501 ; LE-PWR8-NEXT:    lxvd2x vs1, r5, r3
502 ; LE-PWR8-NEXT:    sldi r3, r4, 5
503 ; LE-PWR8-NEXT:    lxvd2x vs0, r6, r7
504 ; LE-PWR8-NEXT:    add r4, r5, r3
505 ; LE-PWR8-NEXT:    stxvd2x vs1, r5, r3
506 ; LE-PWR8-NEXT:    stxvd2x vs0, r4, r7
507 ; LE-PWR8-NEXT:    blr
509 ; BE-PWR9-LABEL: testXLdStPair:
510 ; BE-PWR9:       # %bb.0: # %entry
511 ; BE-PWR9-NEXT:    addis r5, r2, g@toc@ha
512 ; BE-PWR9-NEXT:    sldi r3, r3, 5
513 ; BE-PWR9-NEXT:    sldi r4, r4, 5
514 ; BE-PWR9-NEXT:    addi r5, r5, g@toc@l
515 ; BE-PWR9-NEXT:    add r6, r5, r3
516 ; BE-PWR9-NEXT:    lxvx vs1, r5, r3
517 ; BE-PWR9-NEXT:    lxv vs0, 16(r6)
518 ; BE-PWR9-NEXT:    add r6, r5, r4
519 ; BE-PWR9-NEXT:    stxvx vs1, r5, r4
520 ; BE-PWR9-NEXT:    stxv vs0, 16(r6)
521 ; BE-PWR9-NEXT:    blr
523 ; BE-PWR8-LABEL: testXLdStPair:
524 ; BE-PWR8:       # %bb.0: # %entry
525 ; BE-PWR8-NEXT:    addis r5, r2, g@toc@ha
526 ; BE-PWR8-NEXT:    sldi r3, r3, 5
527 ; BE-PWR8-NEXT:    li r7, 16
528 ; BE-PWR8-NEXT:    addi r5, r5, g@toc@l
529 ; BE-PWR8-NEXT:    add r6, r5, r3
530 ; BE-PWR8-NEXT:    lxvd2x vs0, r5, r3
531 ; BE-PWR8-NEXT:    sldi r3, r4, 5
532 ; BE-PWR8-NEXT:    lxvd2x vs1, r6, r7
533 ; BE-PWR8-NEXT:    add r4, r5, r3
534 ; BE-PWR8-NEXT:    stxvd2x vs0, r5, r3
535 ; BE-PWR8-NEXT:    stxvd2x vs1, r4, r7
536 ; BE-PWR8-NEXT:    blr
537 entry:
538   %arrayidx = getelementptr inbounds <256 x i1>, <256 x i1>* @g, i64 %SrcIdx
539   %0 = load <256 x i1>, <256 x i1>* %arrayidx, align 64
540   %arrayidx1 = getelementptr inbounds <256 x i1>, <256 x i1>* @g, i64 %DstIdx
541   store <256 x i1> %0, <256 x i1>* %arrayidx1, align 64
542   ret void
545 define dso_local void @testUnalignedLdStPair() {
546 ; LE-PAIRED-LABEL: testUnalignedLdStPair:
547 ; LE-PAIRED:       # %bb.0: # %entry
548 ; LE-PAIRED-NEXT:    plxv v3, g@PCREL+11(0), 1
549 ; LE-PAIRED-NEXT:    plxv v2, g@PCREL+27(0), 1
550 ; LE-PAIRED-NEXT:    pstxv v3, g@PCREL+19(0), 1
551 ; LE-PAIRED-NEXT:    pstxv v2, g@PCREL+35(0), 1
552 ; LE-PAIRED-NEXT:    blr
554 ; BE-PAIRED-LABEL: testUnalignedLdStPair:
555 ; BE-PAIRED:       # %bb.0: # %entry
556 ; BE-PAIRED-NEXT:    addis r3, r2, g@toc@ha
557 ; BE-PAIRED-NEXT:    addi r3, r3, g@toc@l
558 ; BE-PAIRED-NEXT:    plxv v3, 27(r3), 0
559 ; BE-PAIRED-NEXT:    plxv v2, 11(r3), 0
560 ; BE-PAIRED-NEXT:    pstxv v3, 35(r3), 0
561 ; BE-PAIRED-NEXT:    pstxv v2, 19(r3), 0
562 ; BE-PAIRED-NEXT:    blr
564 ; LE-PWR9-LABEL: testUnalignedLdStPair:
565 ; LE-PWR9:       # %bb.0: # %entry
566 ; LE-PWR9-NEXT:    addis r3, r2, g@toc@ha
567 ; LE-PWR9-NEXT:    li r4, 11
568 ; LE-PWR9-NEXT:    addi r3, r3, g@toc@l
569 ; LE-PWR9-NEXT:    lxvx vs0, r3, r4
570 ; LE-PWR9-NEXT:    li r4, 27
571 ; LE-PWR9-NEXT:    lxvx vs1, r3, r4
572 ; LE-PWR9-NEXT:    li r4, 35
573 ; LE-PWR9-NEXT:    stxvx vs1, r3, r4
574 ; LE-PWR9-NEXT:    li r4, 19
575 ; LE-PWR9-NEXT:    stxvx vs0, r3, r4
576 ; LE-PWR9-NEXT:    blr
578 ; LE-PWR8-LABEL: testUnalignedLdStPair:
579 ; LE-PWR8:       # %bb.0: # %entry
580 ; LE-PWR8-NEXT:    addis r3, r2, g@toc@ha
581 ; LE-PWR8-NEXT:    li r4, 11
582 ; LE-PWR8-NEXT:    li r5, 27
583 ; LE-PWR8-NEXT:    addi r3, r3, g@toc@l
584 ; LE-PWR8-NEXT:    lxvd2x vs0, r3, r4
585 ; LE-PWR8-NEXT:    lxvd2x vs1, r3, r5
586 ; LE-PWR8-NEXT:    li r4, 35
587 ; LE-PWR8-NEXT:    li r5, 19
588 ; LE-PWR8-NEXT:    stxvd2x vs1, r3, r4
589 ; LE-PWR8-NEXT:    stxvd2x vs0, r3, r5
590 ; LE-PWR8-NEXT:    blr
592 ; BE-PWR9-LABEL: testUnalignedLdStPair:
593 ; BE-PWR9:       # %bb.0: # %entry
594 ; BE-PWR9-NEXT:    addis r3, r2, g@toc@ha
595 ; BE-PWR9-NEXT:    li r4, 11
596 ; BE-PWR9-NEXT:    addi r3, r3, g@toc@l
597 ; BE-PWR9-NEXT:    lxvx vs0, r3, r4
598 ; BE-PWR9-NEXT:    li r4, 27
599 ; BE-PWR9-NEXT:    lxvx vs1, r3, r4
600 ; BE-PWR9-NEXT:    li r4, 35
601 ; BE-PWR9-NEXT:    stxvx vs1, r3, r4
602 ; BE-PWR9-NEXT:    li r4, 19
603 ; BE-PWR9-NEXT:    stxvx vs0, r3, r4
604 ; BE-PWR9-NEXT:    blr
606 ; BE-PWR8-LABEL: testUnalignedLdStPair:
607 ; BE-PWR8:       # %bb.0: # %entry
608 ; BE-PWR8-NEXT:    addis r3, r2, g@toc@ha
609 ; BE-PWR8-NEXT:    li r4, 11
610 ; BE-PWR8-NEXT:    li r5, 27
611 ; BE-PWR8-NEXT:    addi r3, r3, g@toc@l
612 ; BE-PWR8-NEXT:    lxvd2x vs0, r3, r4
613 ; BE-PWR8-NEXT:    lxvd2x vs1, r3, r5
614 ; BE-PWR8-NEXT:    li r4, 35
615 ; BE-PWR8-NEXT:    li r5, 19
616 ; BE-PWR8-NEXT:    stxvd2x vs1, r3, r4
617 ; BE-PWR8-NEXT:    stxvd2x vs0, r3, r5
618 ; BE-PWR8-NEXT:    blr
619 entry:
620   %0 = bitcast <256 x i1>* @g to i8*
621   %add.ptr = getelementptr inbounds i8, i8* %0, i64 11
622   %add.ptr1 = getelementptr inbounds i8, i8* %0, i64 19
623   %1 = bitcast i8* %add.ptr to <256 x i1>*
624   %2 = bitcast i8* %add.ptr1 to <256 x i1>*
625   %3 = load <256 x i1>, <256 x i1>* %1, align 64
626   store <256 x i1> %3, <256 x i1>* %2, align 64
627   ret void