xref: /llvm-project/llvm/test/CodeGen/PowerPC/mma-acc-memops.ll (revision b922a3621116b404d868af8b74cab25ab78555be)
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
22
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
25
26define 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
38;
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
52;
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
66;
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
88;
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
102;
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
124entry:
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
130}
131
132define 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
149;
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
167;
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
185;
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
206;
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
224;
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
245entry:
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
251}
252
253define 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
265;
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
279;
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
301;
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
323;
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
345;
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
367entry:
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
373}
374
375define 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
383;
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
393;
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
403;
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
417;
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
427;
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
441entry:
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
447}
448
449define 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
462;
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
476;
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
490;
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
505;
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
519;
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
534entry:
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
540}
541
542define 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
550;
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
560;
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
574;
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
588;
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
602;
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
616entry:
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
622}
623