xref: /llvm-project/llvm/test/CodeGen/PowerPC/const-splat-array-init.ll (revision 032014ef103157bfd8403418538e25f3f58efa9d)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -mcpu=pwr8 \
3; RUN:   -mtriple=powerpc64-unknown-aix < %s | FileCheck %s --check-prefix=P8-BE
4; RUN: llc -verify-machineinstrs -mcpu=pwr9 \
5; RUN:   -mtriple=powerpc64-unknown-aix < %s | FileCheck %s --check-prefix=P9-BE
6; RUN: llc -verify-machineinstrs -mcpu=pwr10 \
7; RUN:   -mtriple=powerpc64-unknown-aix < %s | FileCheck %s --check-prefix=P10-BE
8; RUN: llc -verify-machineinstrs -mcpu=pwr8 \
9; RUN:   -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s --check-prefix=P8-LE
10; RUN: llc -verify-machineinstrs -mcpu=pwr9 \
11; RUN:   -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s --check-prefix=P9-LE
12; RUN: llc -verify-machineinstrs -mcpu=pwr10 \
13; RUN:   -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s --check-prefix=P10-LE
14
15define dso_local void @foo1(ptr nocapture noundef writeonly %a) local_unnamed_addr {
16; P8-BE-LABEL: foo1:
17; P8-BE:       # %bb.0: # %entry
18; P8-BE-NEXT:    ld 4, L..C0(2) # %const.0
19; P8-BE-NEXT:    lxvw4x 0, 0, 4
20; P8-BE-NEXT:    li 4, 3333
21; P8-BE-NEXT:    sth 4, 16(3)
22; P8-BE-NEXT:    stxvw4x 0, 0, 3
23; P8-BE-NEXT:    blr
24;
25; P9-BE-LABEL: foo1:
26; P9-BE:       # %bb.0: # %entry
27; P9-BE-NEXT:    ld 4, L..C0(2) # %const.0
28; P9-BE-NEXT:    lxv 0, 0(4)
29; P9-BE-NEXT:    li 4, 3333
30; P9-BE-NEXT:    sth 4, 16(3)
31; P9-BE-NEXT:    stxv 0, 0(3)
32; P9-BE-NEXT:    blr
33;
34; P10-BE-LABEL: foo1:
35; P10-BE:       # %bb.0: # %entry
36; P10-BE-NEXT:    xxspltiw 0, 218434821
37; P10-BE-NEXT:    li 4, 3333
38; P10-BE-NEXT:    sth 4, 16(3)
39; P10-BE-NEXT:    stxv 0, 0(3)
40; P10-BE-NEXT:    blr
41;
42; P8-LE-LABEL: foo1:
43; P8-LE:       # %bb.0: # %entry
44; P8-LE-NEXT:    addis 4, 2, .LCPI0_0@toc@ha
45; P8-LE-NEXT:    addi 4, 4, .LCPI0_0@toc@l
46; P8-LE-NEXT:    lxvd2x 0, 0, 4
47; P8-LE-NEXT:    li 4, 3333
48; P8-LE-NEXT:    sth 4, 16(3)
49; P8-LE-NEXT:    stxvd2x 0, 0, 3
50; P8-LE-NEXT:    blr
51;
52; P9-LE-LABEL: foo1:
53; P9-LE:       # %bb.0: # %entry
54; P9-LE-NEXT:    addis 4, 2, .LCPI0_0@toc@ha
55; P9-LE-NEXT:    addi 4, 4, .LCPI0_0@toc@l
56; P9-LE-NEXT:    lxv 0, 0(4)
57; P9-LE-NEXT:    li 4, 3333
58; P9-LE-NEXT:    sth 4, 16(3)
59; P9-LE-NEXT:    stxv 0, 0(3)
60; P9-LE-NEXT:    blr
61;
62; P10-LE-LABEL: foo1:
63; P10-LE:       # %bb.0: # %entry
64; P10-LE-NEXT:    xxspltiw 0, 218434821
65; P10-LE-NEXT:    li 4, 3333
66; P10-LE-NEXT:    sth 4, 16(3)
67; P10-LE-NEXT:    stxv 0, 0(3)
68; P10-LE-NEXT:    blr
69entry:
70  store <8 x i16> <i16 3333, i16 3333, i16 3333, i16 3333, i16 3333, i16 3333, i16 3333, i16 3333>, ptr %a, align 2
71  %arrayidx8 = getelementptr inbounds i16, ptr %a, i64 8
72  store i16 3333, ptr %arrayidx8, align 2
73  ret void
74}
75
76define dso_local void @foo2(ptr nocapture noundef writeonly %a) local_unnamed_addr {
77; P8-BE-LABEL: foo2:
78; P8-BE:       # %bb.0: # %entry
79; P8-BE-NEXT:    ld 4, L..C1(2) # %const.0
80; P8-BE-NEXT:    lxvw4x 0, 0, 4
81; P8-BE-NEXT:    lis 4, 3333
82; P8-BE-NEXT:    ori 4, 4, 3333
83; P8-BE-NEXT:    stw 4, 16(3)
84; P8-BE-NEXT:    stxvw4x 0, 0, 3
85; P8-BE-NEXT:    blr
86;
87; P9-BE-LABEL: foo2:
88; P9-BE:       # %bb.0: # %entry
89; P9-BE-NEXT:    ld 4, L..C1(2) # %const.0
90; P9-BE-NEXT:    lxv 0, 0(4)
91; P9-BE-NEXT:    lis 4, 3333
92; P9-BE-NEXT:    ori 4, 4, 3333
93; P9-BE-NEXT:    stw 4, 16(3)
94; P9-BE-NEXT:    stxv 0, 0(3)
95; P9-BE-NEXT:    blr
96;
97; P10-BE-LABEL: foo2:
98; P10-BE:       # %bb.0: # %entry
99; P10-BE-NEXT:    xxspltiw 0, 218434821
100; P10-BE-NEXT:    pli 4, 218434821
101; P10-BE-NEXT:    stw 4, 16(3)
102; P10-BE-NEXT:    stxv 0, 0(3)
103; P10-BE-NEXT:    blr
104;
105; P8-LE-LABEL: foo2:
106; P8-LE:       # %bb.0: # %entry
107; P8-LE-NEXT:    addis 4, 2, .LCPI1_0@toc@ha
108; P8-LE-NEXT:    addi 4, 4, .LCPI1_0@toc@l
109; P8-LE-NEXT:    lxvd2x 0, 0, 4
110; P8-LE-NEXT:    lis 4, 3333
111; P8-LE-NEXT:    ori 4, 4, 3333
112; P8-LE-NEXT:    stw 4, 16(3)
113; P8-LE-NEXT:    stxvd2x 0, 0, 3
114; P8-LE-NEXT:    blr
115;
116; P9-LE-LABEL: foo2:
117; P9-LE:       # %bb.0: # %entry
118; P9-LE-NEXT:    addis 4, 2, .LCPI1_0@toc@ha
119; P9-LE-NEXT:    addi 4, 4, .LCPI1_0@toc@l
120; P9-LE-NEXT:    lxv 0, 0(4)
121; P9-LE-NEXT:    lis 4, 3333
122; P9-LE-NEXT:    ori 4, 4, 3333
123; P9-LE-NEXT:    stw 4, 16(3)
124; P9-LE-NEXT:    stxv 0, 0(3)
125; P9-LE-NEXT:    blr
126;
127; P10-LE-LABEL: foo2:
128; P10-LE:       # %bb.0: # %entry
129; P10-LE-NEXT:    xxspltiw 0, 218434821
130; P10-LE-NEXT:    pli 4, 218434821
131; P10-LE-NEXT:    stw 4, 16(3)
132; P10-LE-NEXT:    stxv 0, 0(3)
133; P10-LE-NEXT:    blr
134entry:
135  store <8 x i16> <i16 3333, i16 3333, i16 3333, i16 3333, i16 3333, i16 3333, i16 3333, i16 3333>, ptr %a, align 2
136  %arrayidx8 = getelementptr inbounds i16, ptr %a, i64 8
137  store i16 3333, ptr %arrayidx8, align 2
138  %arrayidx9 = getelementptr inbounds i16, ptr %a, i64 9
139  store i16 3333, ptr %arrayidx9, align 2
140  ret void
141}
142
143define dso_local void @foo3(ptr nocapture noundef writeonly %a) local_unnamed_addr {
144; P8-BE-LABEL: foo3:
145; P8-BE:       # %bb.0: # %entry
146; P8-BE-NEXT:    ld 4, L..C2(2) # %const.0
147; P8-BE-NEXT:    lxvw4x 0, 0, 4
148; P8-BE-NEXT:    lis 4, 3333
149; P8-BE-NEXT:    ori 4, 4, 3333
150; P8-BE-NEXT:    stw 4, 16(3)
151; P8-BE-NEXT:    li 4, 3333
152; P8-BE-NEXT:    stxvw4x 0, 0, 3
153; P8-BE-NEXT:    sth 4, 20(3)
154; P8-BE-NEXT:    blr
155;
156; P9-BE-LABEL: foo3:
157; P9-BE:       # %bb.0: # %entry
158; P9-BE-NEXT:    ld 4, L..C2(2) # %const.0
159; P9-BE-NEXT:    lxv 0, 0(4)
160; P9-BE-NEXT:    lis 4, 3333
161; P9-BE-NEXT:    ori 4, 4, 3333
162; P9-BE-NEXT:    stw 4, 16(3)
163; P9-BE-NEXT:    li 4, 3333
164; P9-BE-NEXT:    stxv 0, 0(3)
165; P9-BE-NEXT:    sth 4, 20(3)
166; P9-BE-NEXT:    blr
167;
168; P10-BE-LABEL: foo3:
169; P10-BE:       # %bb.0: # %entry
170; P10-BE-NEXT:    pli 4, 218434821
171; P10-BE-NEXT:    xxspltiw 0, 218434821
172; P10-BE-NEXT:    stw 4, 16(3)
173; P10-BE-NEXT:    li 4, 3333
174; P10-BE-NEXT:    stxv 0, 0(3)
175; P10-BE-NEXT:    sth 4, 20(3)
176; P10-BE-NEXT:    blr
177;
178; P8-LE-LABEL: foo3:
179; P8-LE:       # %bb.0: # %entry
180; P8-LE-NEXT:    addis 4, 2, .LCPI2_0@toc@ha
181; P8-LE-NEXT:    addi 4, 4, .LCPI2_0@toc@l
182; P8-LE-NEXT:    lxvd2x 0, 0, 4
183; P8-LE-NEXT:    lis 4, 3333
184; P8-LE-NEXT:    ori 4, 4, 3333
185; P8-LE-NEXT:    stw 4, 16(3)
186; P8-LE-NEXT:    li 4, 3333
187; P8-LE-NEXT:    stxvd2x 0, 0, 3
188; P8-LE-NEXT:    sth 4, 20(3)
189; P8-LE-NEXT:    blr
190;
191; P9-LE-LABEL: foo3:
192; P9-LE:       # %bb.0: # %entry
193; P9-LE-NEXT:    addis 4, 2, .LCPI2_0@toc@ha
194; P9-LE-NEXT:    addi 4, 4, .LCPI2_0@toc@l
195; P9-LE-NEXT:    lxv 0, 0(4)
196; P9-LE-NEXT:    lis 4, 3333
197; P9-LE-NEXT:    ori 4, 4, 3333
198; P9-LE-NEXT:    stw 4, 16(3)
199; P9-LE-NEXT:    li 4, 3333
200; P9-LE-NEXT:    stxv 0, 0(3)
201; P9-LE-NEXT:    sth 4, 20(3)
202; P9-LE-NEXT:    blr
203;
204; P10-LE-LABEL: foo3:
205; P10-LE:       # %bb.0: # %entry
206; P10-LE-NEXT:    pli 4, 218434821
207; P10-LE-NEXT:    xxspltiw 0, 218434821
208; P10-LE-NEXT:    stw 4, 16(3)
209; P10-LE-NEXT:    li 4, 3333
210; P10-LE-NEXT:    stxv 0, 0(3)
211; P10-LE-NEXT:    sth 4, 20(3)
212; P10-LE-NEXT:    blr
213entry:
214  store <8 x i16> <i16 3333, i16 3333, i16 3333, i16 3333, i16 3333, i16 3333, i16 3333, i16 3333>, ptr %a, align 2
215  %arrayidx8 = getelementptr inbounds i16, ptr %a, i64 8
216  store i16 3333, ptr %arrayidx8, align 2
217  %arrayidx9 = getelementptr inbounds i16, ptr %a, i64 9
218  store i16 3333, ptr %arrayidx9, align 2
219  %arrayidx10 = getelementptr inbounds i16, ptr %a, i64 10
220  store i16 3333, ptr %arrayidx10, align 2
221  ret void
222}
223
224define dso_local void @foo4(ptr nocapture noundef writeonly %a) local_unnamed_addr {
225; P8-BE-LABEL: foo4:
226; P8-BE:       # %bb.0: # %entry
227; P8-BE-NEXT:    ld 4, L..C3(2) # %const.0
228; P8-BE-NEXT:    lxvw4x 0, 0, 4
229; P8-BE-NEXT:    lis 4, 3333
230; P8-BE-NEXT:    ori 4, 4, 3333
231; P8-BE-NEXT:    rldimi 4, 4, 32, 0
232; P8-BE-NEXT:    stxvw4x 0, 0, 3
233; P8-BE-NEXT:    std 4, 16(3)
234; P8-BE-NEXT:    blr
235;
236; P9-BE-LABEL: foo4:
237; P9-BE:       # %bb.0: # %entry
238; P9-BE-NEXT:    ld 4, L..C3(2) # %const.0
239; P9-BE-NEXT:    lxv 0, 0(4)
240; P9-BE-NEXT:    lis 4, 3333
241; P9-BE-NEXT:    ori 4, 4, 3333
242; P9-BE-NEXT:    rldimi 4, 4, 32, 0
243; P9-BE-NEXT:    stxv 0, 0(3)
244; P9-BE-NEXT:    std 4, 16(3)
245; P9-BE-NEXT:    blr
246;
247; P10-BE-LABEL: foo4:
248; P10-BE:       # %bb.0: # %entry
249; P10-BE-NEXT:    pli 4, 218434821
250; P10-BE-NEXT:    xxspltiw 0, 218434821
251; P10-BE-NEXT:    rldimi 4, 4, 32, 0
252; P10-BE-NEXT:    stxv 0, 0(3)
253; P10-BE-NEXT:    std 4, 16(3)
254; P10-BE-NEXT:    blr
255;
256; P8-LE-LABEL: foo4:
257; P8-LE:       # %bb.0: # %entry
258; P8-LE-NEXT:    addis 4, 2, .LCPI3_0@toc@ha
259; P8-LE-NEXT:    addi 4, 4, .LCPI3_0@toc@l
260; P8-LE-NEXT:    lxvd2x 0, 0, 4
261; P8-LE-NEXT:    lis 4, 3333
262; P8-LE-NEXT:    ori 4, 4, 3333
263; P8-LE-NEXT:    rldimi 4, 4, 32, 0
264; P8-LE-NEXT:    stxvd2x 0, 0, 3
265; P8-LE-NEXT:    std 4, 16(3)
266; P8-LE-NEXT:    blr
267;
268; P9-LE-LABEL: foo4:
269; P9-LE:       # %bb.0: # %entry
270; P9-LE-NEXT:    addis 4, 2, .LCPI3_0@toc@ha
271; P9-LE-NEXT:    addi 4, 4, .LCPI3_0@toc@l
272; P9-LE-NEXT:    lxv 0, 0(4)
273; P9-LE-NEXT:    lis 4, 3333
274; P9-LE-NEXT:    ori 4, 4, 3333
275; P9-LE-NEXT:    rldimi 4, 4, 32, 0
276; P9-LE-NEXT:    stxv 0, 0(3)
277; P9-LE-NEXT:    std 4, 16(3)
278; P9-LE-NEXT:    blr
279;
280; P10-LE-LABEL: foo4:
281; P10-LE:       # %bb.0: # %entry
282; P10-LE-NEXT:    pli 4, 218434821
283; P10-LE-NEXT:    xxspltiw 0, 218434821
284; P10-LE-NEXT:    rldimi 4, 4, 32, 0
285; P10-LE-NEXT:    stxv 0, 0(3)
286; P10-LE-NEXT:    std 4, 16(3)
287; P10-LE-NEXT:    blr
288entry:
289  store <8 x i16> <i16 3333, i16 3333, i16 3333, i16 3333, i16 3333, i16 3333, i16 3333, i16 3333>, ptr %a, align 2
290  %arrayidx8 = getelementptr inbounds i16, ptr %a, i64 8
291  store i16 3333, ptr %arrayidx8, align 2
292  %arrayidx9 = getelementptr inbounds i16, ptr %a, i64 9
293  store i16 3333, ptr %arrayidx9, align 2
294  %arrayidx10 = getelementptr inbounds i16, ptr %a, i64 10
295  store i16 3333, ptr %arrayidx10, align 2
296  %arrayidx11 = getelementptr inbounds i16, ptr %a, i64 11
297  store i16 3333, ptr %arrayidx11, align 2
298  ret void
299}
300
301define dso_local void @foo5(ptr nocapture noundef writeonly %a) local_unnamed_addr {
302; P8-BE-LABEL: foo5:
303; P8-BE:       # %bb.0: # %entry
304; P8-BE-NEXT:    ld 4, L..C4(2) # %const.0
305; P8-BE-NEXT:    lxvw4x 0, 0, 4
306; P8-BE-NEXT:    lis 4, 5
307; P8-BE-NEXT:    ori 4, 4, 5653
308; P8-BE-NEXT:    stw 4, 16(3)
309; P8-BE-NEXT:    stxvw4x 0, 0, 3
310; P8-BE-NEXT:    blr
311;
312; P9-BE-LABEL: foo5:
313; P9-BE:       # %bb.0: # %entry
314; P9-BE-NEXT:    ld 4, L..C4(2) # %const.0
315; P9-BE-NEXT:    lxv 0, 0(4)
316; P9-BE-NEXT:    lis 4, 5
317; P9-BE-NEXT:    ori 4, 4, 5653
318; P9-BE-NEXT:    stw 4, 16(3)
319; P9-BE-NEXT:    stxv 0, 0(3)
320; P9-BE-NEXT:    blr
321;
322; P10-BE-LABEL: foo5:
323; P10-BE:       # %bb.0: # %entry
324; P10-BE-NEXT:    xxspltiw 0, 333333
325; P10-BE-NEXT:    pli 4, 333333
326; P10-BE-NEXT:    stw 4, 16(3)
327; P10-BE-NEXT:    stxv 0, 0(3)
328; P10-BE-NEXT:    blr
329;
330; P8-LE-LABEL: foo5:
331; P8-LE:       # %bb.0: # %entry
332; P8-LE-NEXT:    addis 4, 2, .LCPI4_0@toc@ha
333; P8-LE-NEXT:    addi 4, 4, .LCPI4_0@toc@l
334; P8-LE-NEXT:    lxvd2x 0, 0, 4
335; P8-LE-NEXT:    lis 4, 5
336; P8-LE-NEXT:    ori 4, 4, 5653
337; P8-LE-NEXT:    stw 4, 16(3)
338; P8-LE-NEXT:    stxvd2x 0, 0, 3
339; P8-LE-NEXT:    blr
340;
341; P9-LE-LABEL: foo5:
342; P9-LE:       # %bb.0: # %entry
343; P9-LE-NEXT:    addis 4, 2, .LCPI4_0@toc@ha
344; P9-LE-NEXT:    addi 4, 4, .LCPI4_0@toc@l
345; P9-LE-NEXT:    lxv 0, 0(4)
346; P9-LE-NEXT:    lis 4, 5
347; P9-LE-NEXT:    ori 4, 4, 5653
348; P9-LE-NEXT:    stw 4, 16(3)
349; P9-LE-NEXT:    stxv 0, 0(3)
350; P9-LE-NEXT:    blr
351;
352; P10-LE-LABEL: foo5:
353; P10-LE:       # %bb.0: # %entry
354; P10-LE-NEXT:    xxspltiw 0, 333333
355; P10-LE-NEXT:    pli 4, 333333
356; P10-LE-NEXT:    stw 4, 16(3)
357; P10-LE-NEXT:    stxv 0, 0(3)
358; P10-LE-NEXT:    blr
359entry:
360  store <4 x i32> <i32 333333, i32 333333, i32 333333, i32 333333>, ptr %a, align 4
361  %arrayidx4 = getelementptr inbounds i32, ptr %a, i64 4
362  store i32 333333, ptr %arrayidx4, align 4
363  ret void
364}
365
366define dso_local void @foo6(ptr nocapture noundef writeonly %a) local_unnamed_addr {
367; P8-BE-LABEL: foo6:
368; P8-BE:       # %bb.0: # %entry
369; P8-BE-NEXT:    ld 4, L..C5(2) # %const.0
370; P8-BE-NEXT:    lxvw4x 0, 0, 4
371; P8-BE-NEXT:    lis 4, 5
372; P8-BE-NEXT:    ori 4, 4, 5653
373; P8-BE-NEXT:    rldimi 4, 4, 32, 0
374; P8-BE-NEXT:    stxvw4x 0, 0, 3
375; P8-BE-NEXT:    std 4, 16(3)
376; P8-BE-NEXT:    blr
377;
378; P9-BE-LABEL: foo6:
379; P9-BE:       # %bb.0: # %entry
380; P9-BE-NEXT:    ld 4, L..C5(2) # %const.0
381; P9-BE-NEXT:    lxv 0, 0(4)
382; P9-BE-NEXT:    lis 4, 5
383; P9-BE-NEXT:    ori 4, 4, 5653
384; P9-BE-NEXT:    rldimi 4, 4, 32, 0
385; P9-BE-NEXT:    stxv 0, 0(3)
386; P9-BE-NEXT:    std 4, 16(3)
387; P9-BE-NEXT:    blr
388;
389; P10-BE-LABEL: foo6:
390; P10-BE:       # %bb.0: # %entry
391; P10-BE-NEXT:    pli 4, 333333
392; P10-BE-NEXT:    xxspltiw 0, 333333
393; P10-BE-NEXT:    rldimi 4, 4, 32, 0
394; P10-BE-NEXT:    stxv 0, 0(3)
395; P10-BE-NEXT:    std 4, 16(3)
396; P10-BE-NEXT:    blr
397;
398; P8-LE-LABEL: foo6:
399; P8-LE:       # %bb.0: # %entry
400; P8-LE-NEXT:    addis 4, 2, .LCPI5_0@toc@ha
401; P8-LE-NEXT:    addi 4, 4, .LCPI5_0@toc@l
402; P8-LE-NEXT:    lxvd2x 0, 0, 4
403; P8-LE-NEXT:    lis 4, 5
404; P8-LE-NEXT:    ori 4, 4, 5653
405; P8-LE-NEXT:    rldimi 4, 4, 32, 0
406; P8-LE-NEXT:    stxvd2x 0, 0, 3
407; P8-LE-NEXT:    std 4, 16(3)
408; P8-LE-NEXT:    blr
409;
410; P9-LE-LABEL: foo6:
411; P9-LE:       # %bb.0: # %entry
412; P9-LE-NEXT:    addis 4, 2, .LCPI5_0@toc@ha
413; P9-LE-NEXT:    addi 4, 4, .LCPI5_0@toc@l
414; P9-LE-NEXT:    lxv 0, 0(4)
415; P9-LE-NEXT:    lis 4, 5
416; P9-LE-NEXT:    ori 4, 4, 5653
417; P9-LE-NEXT:    rldimi 4, 4, 32, 0
418; P9-LE-NEXT:    stxv 0, 0(3)
419; P9-LE-NEXT:    std 4, 16(3)
420; P9-LE-NEXT:    blr
421;
422; P10-LE-LABEL: foo6:
423; P10-LE:       # %bb.0: # %entry
424; P10-LE-NEXT:    pli 4, 333333
425; P10-LE-NEXT:    xxspltiw 0, 333333
426; P10-LE-NEXT:    rldimi 4, 4, 32, 0
427; P10-LE-NEXT:    stxv 0, 0(3)
428; P10-LE-NEXT:    std 4, 16(3)
429; P10-LE-NEXT:    blr
430entry:
431  store <4 x i32> <i32 333333, i32 333333, i32 333333, i32 333333>, ptr %a, align 4
432  %arrayidx4 = getelementptr inbounds i32, ptr %a, i64 4
433  store i32 333333, ptr %arrayidx4, align 4
434  %arrayidx5 = getelementptr inbounds i32, ptr %a, i64 5
435  store i32 333333, ptr %arrayidx5, align 4
436  ret void
437}
438
439define dso_local void @foo7(ptr nocapture noundef writeonly %a) local_unnamed_addr {
440; P8-BE-LABEL: foo7:
441; P8-BE:       # %bb.0: # %entry
442; P8-BE-NEXT:    ld 4, L..C6(2) # %const.0
443; P8-BE-NEXT:    lxvd2x 0, 0, 4
444; P8-BE-NEXT:    lis 4, 508
445; P8-BE-NEXT:    ori 4, 4, 41045
446; P8-BE-NEXT:    std 4, 16(3)
447; P8-BE-NEXT:    stxvd2x 0, 0, 3
448; P8-BE-NEXT:    blr
449;
450; P9-BE-LABEL: foo7:
451; P9-BE:       # %bb.0: # %entry
452; P9-BE-NEXT:    ld 4, L..C6(2) # %const.0
453; P9-BE-NEXT:    lxv 0, 0(4)
454; P9-BE-NEXT:    lis 4, 508
455; P9-BE-NEXT:    ori 4, 4, 41045
456; P9-BE-NEXT:    std 4, 16(3)
457; P9-BE-NEXT:    stxv 0, 0(3)
458; P9-BE-NEXT:    blr
459;
460; P10-BE-LABEL: foo7:
461; P10-BE:       # %bb.0: # %entry
462; P10-BE-NEXT:    xxlxor 0, 0, 0
463; P10-BE-NEXT:    pli 4, 33333333
464; P10-BE-NEXT:    xxsplti32dx 0, 1, 33333333
465; P10-BE-NEXT:    std 4, 16(3)
466; P10-BE-NEXT:    stxv 0, 0(3)
467; P10-BE-NEXT:    blr
468;
469; P8-LE-LABEL: foo7:
470; P8-LE:       # %bb.0: # %entry
471; P8-LE-NEXT:    addis 4, 2, .LCPI6_0@toc@ha
472; P8-LE-NEXT:    addi 4, 4, .LCPI6_0@toc@l
473; P8-LE-NEXT:    lxvd2x 0, 0, 4
474; P8-LE-NEXT:    lis 4, 508
475; P8-LE-NEXT:    ori 4, 4, 41045
476; P8-LE-NEXT:    std 4, 16(3)
477; P8-LE-NEXT:    stxvd2x 0, 0, 3
478; P8-LE-NEXT:    blr
479;
480; P9-LE-LABEL: foo7:
481; P9-LE:       # %bb.0: # %entry
482; P9-LE-NEXT:    addis 4, 2, .LCPI6_0@toc@ha
483; P9-LE-NEXT:    addi 4, 4, .LCPI6_0@toc@l
484; P9-LE-NEXT:    lxv 0, 0(4)
485; P9-LE-NEXT:    lis 4, 508
486; P9-LE-NEXT:    ori 4, 4, 41045
487; P9-LE-NEXT:    std 4, 16(3)
488; P9-LE-NEXT:    stxv 0, 0(3)
489; P9-LE-NEXT:    blr
490;
491; P10-LE-LABEL: foo7:
492; P10-LE:       # %bb.0: # %entry
493; P10-LE-NEXT:    xxlxor 0, 0, 0
494; P10-LE-NEXT:    pli 4, 33333333
495; P10-LE-NEXT:    xxsplti32dx 0, 1, 33333333
496; P10-LE-NEXT:    std 4, 16(3)
497; P10-LE-NEXT:    stxv 0, 0(3)
498; P10-LE-NEXT:    blr
499entry:
500  store <2 x i64> <i64 33333333, i64 33333333>, ptr %a, align 8
501  %arrayidx2 = getelementptr inbounds i64, ptr %a, i64 2
502  store i64 33333333, ptr %arrayidx2, align 8
503  ret void
504}
505
506define dso_local void @foo8(ptr nocapture noundef writeonly %a) local_unnamed_addr {
507; P8-BE-LABEL: foo8:
508; P8-BE:       # %bb.0: # %entry
509; P8-BE-NEXT:    ld 4, L..C7(2) # %const.0
510; P8-BE-NEXT:    lxvw4x 0, 0, 4
511; P8-BE-NEXT:    lis 4, 16469
512; P8-BE-NEXT:    ori 4, 4, 7864
513; P8-BE-NEXT:    stw 4, 16(3)
514; P8-BE-NEXT:    stxvw4x 0, 0, 3
515; P8-BE-NEXT:    blr
516;
517; P9-BE-LABEL: foo8:
518; P9-BE:       # %bb.0: # %entry
519; P9-BE-NEXT:    ld 4, L..C7(2) # %const.0
520; P9-BE-NEXT:    lxv 0, 0(4)
521; P9-BE-NEXT:    lis 4, 16469
522; P9-BE-NEXT:    ori 4, 4, 7864
523; P9-BE-NEXT:    stw 4, 16(3)
524; P9-BE-NEXT:    stxv 0, 0(3)
525; P9-BE-NEXT:    blr
526;
527; P10-BE-LABEL: foo8:
528; P10-BE:       # %bb.0: # %entry
529; P10-BE-NEXT:    xxspltiw 0, 1079320248
530; P10-BE-NEXT:    pli 4, 1079320248
531; P10-BE-NEXT:    stw 4, 16(3)
532; P10-BE-NEXT:    stxv 0, 0(3)
533; P10-BE-NEXT:    blr
534;
535; P8-LE-LABEL: foo8:
536; P8-LE:       # %bb.0: # %entry
537; P8-LE-NEXT:    addis 4, 2, .LCPI7_0@toc@ha
538; P8-LE-NEXT:    addi 4, 4, .LCPI7_0@toc@l
539; P8-LE-NEXT:    lxvd2x 0, 0, 4
540; P8-LE-NEXT:    lis 4, 16469
541; P8-LE-NEXT:    ori 4, 4, 7864
542; P8-LE-NEXT:    stw 4, 16(3)
543; P8-LE-NEXT:    stxvd2x 0, 0, 3
544; P8-LE-NEXT:    blr
545;
546; P9-LE-LABEL: foo8:
547; P9-LE:       # %bb.0: # %entry
548; P9-LE-NEXT:    addis 4, 2, .LCPI7_0@toc@ha
549; P9-LE-NEXT:    addi 4, 4, .LCPI7_0@toc@l
550; P9-LE-NEXT:    lxv 0, 0(4)
551; P9-LE-NEXT:    lis 4, 16469
552; P9-LE-NEXT:    ori 4, 4, 7864
553; P9-LE-NEXT:    stw 4, 16(3)
554; P9-LE-NEXT:    stxv 0, 0(3)
555; P9-LE-NEXT:    blr
556;
557; P10-LE-LABEL: foo8:
558; P10-LE:       # %bb.0: # %entry
559; P10-LE-NEXT:    xxspltiw 0, 1079320248
560; P10-LE-NEXT:    pli 4, 1079320248
561; P10-LE-NEXT:    stw 4, 16(3)
562; P10-LE-NEXT:    stxv 0, 0(3)
563; P10-LE-NEXT:    blr
564entry:
565  store <4 x float> <float 0x400AA3D700000000, float 0x400AA3D700000000, float 0x400AA3D700000000, float 0x400AA3D700000000>, ptr %a, align 4
566  %arrayidx4 = getelementptr inbounds float, ptr %a, i64 4
567  store float 0x400AA3D700000000, ptr %arrayidx4, align 4
568  ret void
569}
570
571define dso_local void @foo9(ptr nocapture noundef writeonly %a) local_unnamed_addr {
572; P8-BE-LABEL: foo9:
573; P8-BE:       # %bb.0: # %entry
574; P8-BE-NEXT:    ld 4, L..C8(2) # %const.0
575; P8-BE-NEXT:    lxvd2x 0, 0, 4
576; P8-BE-NEXT:    lis 4, 16394
577; P8-BE-NEXT:    ori 4, 4, 41943
578; P8-BE-NEXT:    rldic 4, 4, 32, 1
579; P8-BE-NEXT:    stxvd2x 0, 0, 3
580; P8-BE-NEXT:    oris 4, 4, 2621
581; P8-BE-NEXT:    ori 4, 4, 28836
582; P8-BE-NEXT:    std 4, 16(3)
583; P8-BE-NEXT:    blr
584;
585; P9-BE-LABEL: foo9:
586; P9-BE:       # %bb.0: # %entry
587; P9-BE-NEXT:    ld 4, L..C8(2) # %const.0
588; P9-BE-NEXT:    lxv 0, 0(4)
589; P9-BE-NEXT:    lis 4, 16394
590; P9-BE-NEXT:    ori 4, 4, 41943
591; P9-BE-NEXT:    rldic 4, 4, 32, 1
592; P9-BE-NEXT:    stxv 0, 0(3)
593; P9-BE-NEXT:    oris 4, 4, 2621
594; P9-BE-NEXT:    ori 4, 4, 28836
595; P9-BE-NEXT:    std 4, 16(3)
596; P9-BE-NEXT:    blr
597;
598; P10-BE-LABEL: foo9:
599; P10-BE:       # %bb.0: # %entry
600; P10-BE-NEXT:    xxsplti32dx 0, 0, 1074439127
601; P10-BE-NEXT:    pli 4, 1074439127
602; P10-BE-NEXT:    pli 5, 171798692
603; P10-BE-NEXT:    rldimi 5, 4, 32, 0
604; P10-BE-NEXT:    xxsplti32dx 0, 1, 171798692
605; P10-BE-NEXT:    std 5, 16(3)
606; P10-BE-NEXT:    stxv 0, 0(3)
607; P10-BE-NEXT:    blr
608;
609; P8-LE-LABEL: foo9:
610; P8-LE:       # %bb.0: # %entry
611; P8-LE-NEXT:    addis 4, 2, .LCPI8_0@toc@ha
612; P8-LE-NEXT:    addi 4, 4, .LCPI8_0@toc@l
613; P8-LE-NEXT:    lxvd2x 0, 0, 4
614; P8-LE-NEXT:    lis 4, 16394
615; P8-LE-NEXT:    ori 4, 4, 41943
616; P8-LE-NEXT:    rldic 4, 4, 32, 1
617; P8-LE-NEXT:    stxvd2x 0, 0, 3
618; P8-LE-NEXT:    oris 4, 4, 2621
619; P8-LE-NEXT:    ori 4, 4, 28836
620; P8-LE-NEXT:    std 4, 16(3)
621; P8-LE-NEXT:    blr
622;
623; P9-LE-LABEL: foo9:
624; P9-LE:       # %bb.0: # %entry
625; P9-LE-NEXT:    addis 4, 2, .LCPI8_0@toc@ha
626; P9-LE-NEXT:    addi 4, 4, .LCPI8_0@toc@l
627; P9-LE-NEXT:    lxv 0, 0(4)
628; P9-LE-NEXT:    lis 4, 16394
629; P9-LE-NEXT:    ori 4, 4, 41943
630; P9-LE-NEXT:    rldic 4, 4, 32, 1
631; P9-LE-NEXT:    stxv 0, 0(3)
632; P9-LE-NEXT:    oris 4, 4, 2621
633; P9-LE-NEXT:    ori 4, 4, 28836
634; P9-LE-NEXT:    std 4, 16(3)
635; P9-LE-NEXT:    blr
636;
637; P10-LE-LABEL: foo9:
638; P10-LE:       # %bb.0: # %entry
639; P10-LE-NEXT:    xxsplti32dx 0, 0, 1074439127
640; P10-LE-NEXT:    pli 4, 1074439127
641; P10-LE-NEXT:    pli 5, 171798692
642; P10-LE-NEXT:    rldimi 5, 4, 32, 0
643; P10-LE-NEXT:    xxsplti32dx 0, 1, 171798692
644; P10-LE-NEXT:    std 5, 16(3)
645; P10-LE-NEXT:    stxv 0, 0(3)
646; P10-LE-NEXT:    blr
647entry:
648  store <2 x double> <double 3.330000e+00, double 3.330000e+00>, ptr %a, align 8
649  %arrayidx2 = getelementptr inbounds double, ptr %a, i64 2
650  store double 3.330000e+00, ptr %arrayidx2, align 8
651  ret void
652}
653
654define dso_local void @foo10(ptr nocapture noundef writeonly %a) local_unnamed_addr {
655; P8-BE-LABEL: foo10:
656; P8-BE:       # %bb.0: # %entry
657; P8-BE-NEXT:    ld 4, L..C9(2) # %const.0
658; P8-BE-NEXT:    lxvw4x 0, 0, 4
659; P8-BE-NEXT:    lis 4, 16469
660; P8-BE-NEXT:    ori 4, 4, 7864
661; P8-BE-NEXT:    rldimi 4, 4, 32, 0
662; P8-BE-NEXT:    stxvw4x 0, 0, 3
663; P8-BE-NEXT:    std 4, 16(3)
664; P8-BE-NEXT:    blr
665;
666; P9-BE-LABEL: foo10:
667; P9-BE:       # %bb.0: # %entry
668; P9-BE-NEXT:    ld 4, L..C9(2) # %const.0
669; P9-BE-NEXT:    lxv 0, 0(4)
670; P9-BE-NEXT:    lis 4, 16469
671; P9-BE-NEXT:    ori 4, 4, 7864
672; P9-BE-NEXT:    rldimi 4, 4, 32, 0
673; P9-BE-NEXT:    stxv 0, 0(3)
674; P9-BE-NEXT:    std 4, 16(3)
675; P9-BE-NEXT:    blr
676;
677; P10-BE-LABEL: foo10:
678; P10-BE:       # %bb.0: # %entry
679; P10-BE-NEXT:    pli 4, 1079320248
680; P10-BE-NEXT:    xxspltiw 0, 1079320248
681; P10-BE-NEXT:    rldimi 4, 4, 32, 0
682; P10-BE-NEXT:    stxv 0, 0(3)
683; P10-BE-NEXT:    std 4, 16(3)
684; P10-BE-NEXT:    blr
685;
686; P8-LE-LABEL: foo10:
687; P8-LE:       # %bb.0: # %entry
688; P8-LE-NEXT:    addis 4, 2, .LCPI9_0@toc@ha
689; P8-LE-NEXT:    addi 4, 4, .LCPI9_0@toc@l
690; P8-LE-NEXT:    lxvd2x 0, 0, 4
691; P8-LE-NEXT:    lis 4, 16469
692; P8-LE-NEXT:    ori 4, 4, 7864
693; P8-LE-NEXT:    rldimi 4, 4, 32, 0
694; P8-LE-NEXT:    stxvd2x 0, 0, 3
695; P8-LE-NEXT:    std 4, 16(3)
696; P8-LE-NEXT:    blr
697;
698; P9-LE-LABEL: foo10:
699; P9-LE:       # %bb.0: # %entry
700; P9-LE-NEXT:    addis 4, 2, .LCPI9_0@toc@ha
701; P9-LE-NEXT:    addi 4, 4, .LCPI9_0@toc@l
702; P9-LE-NEXT:    lxv 0, 0(4)
703; P9-LE-NEXT:    lis 4, 16469
704; P9-LE-NEXT:    ori 4, 4, 7864
705; P9-LE-NEXT:    rldimi 4, 4, 32, 0
706; P9-LE-NEXT:    stxv 0, 0(3)
707; P9-LE-NEXT:    std 4, 16(3)
708; P9-LE-NEXT:    blr
709;
710; P10-LE-LABEL: foo10:
711; P10-LE:       # %bb.0: # %entry
712; P10-LE-NEXT:    pli 4, 1079320248
713; P10-LE-NEXT:    xxspltiw 0, 1079320248
714; P10-LE-NEXT:    rldimi 4, 4, 32, 0
715; P10-LE-NEXT:    stxv 0, 0(3)
716; P10-LE-NEXT:    std 4, 16(3)
717; P10-LE-NEXT:    blr
718entry:
719  store <4 x float> <float 0x400AA3D700000000, float 0x400AA3D700000000, float 0x400AA3D700000000, float 0x400AA3D700000000>, ptr %a, align 4
720  %arrayidx4 = getelementptr inbounds float, ptr %a, i64 4
721  store float 0x400AA3D700000000, ptr %arrayidx4, align 4
722  %arrayidx5 = getelementptr inbounds float, ptr %a, i64 5
723  store float 0x400AA3D700000000, ptr %arrayidx5, align 4
724  ret void
725}
726