xref: /llvm-project/llvm/test/CodeGen/PowerPC/ppc64-byval-larger-struct.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=pwr8 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P8LE
4; RUN: llc -verify-machineinstrs --mtriple powerpc64le-unknown-linux-gnu \
5; RUN:   -mcpu=pwr9 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P9LE
6; RUN: llc -verify-machineinstrs --mtriple powerpc64le-unknown-linux-gnu \
7; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P10LE
8; RUN: llc -verify-machineinstrs --mtriple powerpc64-unknown-linux-gnu \
9; RUN:   -mcpu=pwr8 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P8BE
10; RUN: llc -verify-machineinstrs --mtriple powerpc64-unknown-linux-gnu \
11; RUN:   -mcpu=pwr9 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P9BE
12; RUN: llc -verify-machineinstrs --mtriple powerpc64-unknown-linux-gnu \
13; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P10BE
14
15define signext i8 @caller_9(ptr nocapture readonly byval([9 x i8]) %data) #0 {
16; P8LE-LABEL: caller_9:
17; P8LE:       # %bb.0: # %entry
18; P8LE-NEXT:    mflr r0
19; P8LE-NEXT:    stdu r1, -80(r1)
20; P8LE-NEXT:    std r0, 96(r1)
21; P8LE-NEXT:    stb r4, 56(r1)
22; P8LE-NEXT:    addi r4, r1, 71
23; P8LE-NEXT:    lbz r5, 56(r1)
24; P8LE-NEXT:    std r3, 48(r1)
25; P8LE-NEXT:    stdx r3, 0, r4
26; P8LE-NEXT:    mr r3, r4
27; P8LE-NEXT:    stb r5, 79(r1)
28; P8LE-NEXT:    bl callee
29; P8LE-NEXT:    nop
30; P8LE-NEXT:    li r3, 0
31; P8LE-NEXT:    addi r1, r1, 80
32; P8LE-NEXT:    ld r0, 16(r1)
33; P8LE-NEXT:    mtlr r0
34; P8LE-NEXT:    blr
35;
36; P9LE-LABEL: caller_9:
37; P9LE:       # %bb.0: # %entry
38; P9LE-NEXT:    mflr r0
39; P9LE-NEXT:    stdu r1, -80(r1)
40; P9LE-NEXT:    std r0, 96(r1)
41; P9LE-NEXT:    stb r4, 56(r1)
42; P9LE-NEXT:    addi r4, r1, 71
43; P9LE-NEXT:    lbz r5, 56(r1)
44; P9LE-NEXT:    std r3, 48(r1)
45; P9LE-NEXT:    stdx r3, 0, r4
46; P9LE-NEXT:    mr r3, r4
47; P9LE-NEXT:    stb r5, 79(r1)
48; P9LE-NEXT:    bl callee
49; P9LE-NEXT:    nop
50; P9LE-NEXT:    li r3, 0
51; P9LE-NEXT:    addi r1, r1, 80
52; P9LE-NEXT:    ld r0, 16(r1)
53; P9LE-NEXT:    mtlr r0
54; P9LE-NEXT:    blr
55;
56; P10LE-LABEL: caller_9:
57; P10LE:       # %bb.0: # %entry
58; P10LE-NEXT:    mflr r0
59; P10LE-NEXT:    std r0, 16(r1)
60; P10LE-NEXT:    stdu r1, -80(r1)
61; P10LE-NEXT:    stb r4, 56(r1)
62; P10LE-NEXT:    addi r4, r1, 71
63; P10LE-NEXT:    std r3, 48(r1)
64; P10LE-NEXT:    lbz r5, 56(r1)
65; P10LE-NEXT:    stdx r3, 0, r4
66; P10LE-NEXT:    mr r3, r4
67; P10LE-NEXT:    stb r5, 79(r1)
68; P10LE-NEXT:    bl callee@notoc
69; P10LE-NEXT:    li r3, 0
70; P10LE-NEXT:    addi r1, r1, 80
71; P10LE-NEXT:    ld r0, 16(r1)
72; P10LE-NEXT:    mtlr r0
73; P10LE-NEXT:    blr
74;
75; P8BE-LABEL: caller_9:
76; P8BE:       # %bb.0: # %entry
77; P8BE-NEXT:    mflr r0
78; P8BE-NEXT:    stdu r1, -144(r1)
79; P8BE-NEXT:    std r0, 160(r1)
80; P8BE-NEXT:    stb r4, 200(r1)
81; P8BE-NEXT:    addi r4, r1, 135
82; P8BE-NEXT:    lbz r5, 200(r1)
83; P8BE-NEXT:    std r3, 192(r1)
84; P8BE-NEXT:    stdx r3, 0, r4
85; P8BE-NEXT:    mr r3, r4
86; P8BE-NEXT:    stb r5, 143(r1)
87; P8BE-NEXT:    bl callee
88; P8BE-NEXT:    nop
89; P8BE-NEXT:    li r3, 0
90; P8BE-NEXT:    addi r1, r1, 144
91; P8BE-NEXT:    ld r0, 16(r1)
92; P8BE-NEXT:    mtlr r0
93; P8BE-NEXT:    blr
94;
95; P9BE-LABEL: caller_9:
96; P9BE:       # %bb.0: # %entry
97; P9BE-NEXT:    mflr r0
98; P9BE-NEXT:    stdu r1, -144(r1)
99; P9BE-NEXT:    std r0, 160(r1)
100; P9BE-NEXT:    stb r4, 200(r1)
101; P9BE-NEXT:    addi r4, r1, 135
102; P9BE-NEXT:    lbz r5, 200(r1)
103; P9BE-NEXT:    std r3, 192(r1)
104; P9BE-NEXT:    stdx r3, 0, r4
105; P9BE-NEXT:    mr r3, r4
106; P9BE-NEXT:    stb r5, 143(r1)
107; P9BE-NEXT:    bl callee
108; P9BE-NEXT:    nop
109; P9BE-NEXT:    li r3, 0
110; P9BE-NEXT:    addi r1, r1, 144
111; P9BE-NEXT:    ld r0, 16(r1)
112; P9BE-NEXT:    mtlr r0
113; P9BE-NEXT:    blr
114;
115; P10BE-LABEL: caller_9:
116; P10BE:       # %bb.0: # %entry
117; P10BE-NEXT:    mflr r0
118; P10BE-NEXT:    std r0, 16(r1)
119; P10BE-NEXT:    stdu r1, -144(r1)
120; P10BE-NEXT:    stb r4, 200(r1)
121; P10BE-NEXT:    addi r4, r1, 135
122; P10BE-NEXT:    std r3, 192(r1)
123; P10BE-NEXT:    lbz r5, 200(r1)
124; P10BE-NEXT:    stdx r3, 0, r4
125; P10BE-NEXT:    mr r3, r4
126; P10BE-NEXT:    stb r5, 143(r1)
127; P10BE-NEXT:    bl callee
128; P10BE-NEXT:    nop
129; P10BE-NEXT:    li r3, 0
130; P10BE-NEXT:    addi r1, r1, 144
131; P10BE-NEXT:    ld r0, 16(r1)
132; P10BE-NEXT:    mtlr r0
133; P10BE-NEXT:    blr
134entry:
135  %_param_data = alloca [9 x i8], align 1
136  %.unpack0 = load i8, ptr %data, align 1
137  %.elt1 = getelementptr inbounds [9 x i8], ptr %data, i64 0, i64 1
138  %.unpack1 = load i8, ptr %.elt1, align 1
139  %.elt2 = getelementptr inbounds [9 x i8], ptr %data, i64 0, i64 2
140  %.unpack2 = load i8, ptr %.elt2, align 1
141  %.elt3 = getelementptr inbounds [9 x i8], ptr %data, i64 0, i64 3
142  %.unpack3 = load i8, ptr %.elt3, align 1
143  %.elt4 = getelementptr inbounds [9 x i8], ptr %data, i64 0, i64 4
144  %.unpack4 = load i8, ptr %.elt4, align 1
145  %.elt5 = getelementptr inbounds [9 x i8], ptr %data, i64 0, i64 5
146  %.unpack5 = load i8, ptr %.elt5, align 1
147  %.elt6 = getelementptr inbounds [9 x i8], ptr %data, i64 0, i64 6
148  %.unpack6 = load i8, ptr %.elt6, align 1
149  %.elt7 = getelementptr inbounds [9 x i8], ptr %data, i64 0, i64 7
150  %.unpack7 = load i8, ptr %.elt7, align 1
151  %.elt8 = getelementptr inbounds [9 x i8], ptr %data, i64 0, i64 8
152  %.unpack8 = load i8, ptr %.elt8, align 1
153  store i8 %.unpack0, ptr %_param_data, align 1
154  %.temp.1.gep = getelementptr inbounds [9 x i8], ptr %_param_data, i64 0, i64 1
155  store i8 %.unpack1, ptr %.temp.1.gep, align 1
156  %.temp.2.gep = getelementptr inbounds [9 x i8], ptr %_param_data, i64 0, i64 2
157  store i8 %.unpack2, ptr %.temp.2.gep, align 1
158  %.temp.3.gep = getelementptr inbounds [9 x i8], ptr %_param_data, i64 0, i64 3
159  store i8 %.unpack3, ptr %.temp.3.gep, align 1
160  %.temp.4.gep = getelementptr inbounds [9 x i8], ptr %_param_data, i64 0, i64 4
161  store i8 %.unpack4, ptr %.temp.4.gep, align 1
162  %.temp.5.gep = getelementptr inbounds [9 x i8], ptr %_param_data, i64 0, i64 5
163  store i8 %.unpack5, ptr %.temp.5.gep, align 1
164  %.temp.6.gep = getelementptr inbounds [9 x i8], ptr %_param_data, i64 0, i64 6
165  store i8 %.unpack6, ptr %.temp.6.gep, align 1
166  %.temp.7.gep = getelementptr inbounds [9 x i8], ptr %_param_data, i64 0, i64 7
167  store i8 %.unpack7, ptr %.temp.7.gep, align 1
168  %.temp.8.gep = getelementptr inbounds [9 x i8], ptr %_param_data, i64 0, i64 8
169  store i8 %.unpack8, ptr %.temp.8.gep, align 1
170  call void @callee(ptr nonnull %_param_data)
171  ret i8 0
172}
173
174define signext i8 @caller_9_callee_9(ptr nocapture readonly byval([9 x i8]) %data) #0 {
175; P8LE-LABEL: caller_9_callee_9:
176; P8LE:       # %bb.0: # %entry
177; P8LE-NEXT:    mflr r0
178; P8LE-NEXT:    stdu r1, -80(r1)
179; P8LE-NEXT:    std r0, 96(r1)
180; P8LE-NEXT:    stb r4, 56(r1)
181; P8LE-NEXT:    addi r5, r1, 71
182; P8LE-NEXT:    lbz r4, 56(r1)
183; P8LE-NEXT:    std r3, 48(r1)
184; P8LE-NEXT:    stdx r3, 0, r5
185; P8LE-NEXT:    stb r4, 79(r1)
186; P8LE-NEXT:    lbz r4, 56(r1)
187; P8LE-NEXT:    bl callee_9
188; P8LE-NEXT:    nop
189; P8LE-NEXT:    li r3, 0
190; P8LE-NEXT:    addi r1, r1, 80
191; P8LE-NEXT:    ld r0, 16(r1)
192; P8LE-NEXT:    mtlr r0
193; P8LE-NEXT:    blr
194;
195; P9LE-LABEL: caller_9_callee_9:
196; P9LE:       # %bb.0: # %entry
197; P9LE-NEXT:    mflr r0
198; P9LE-NEXT:    stdu r1, -80(r1)
199; P9LE-NEXT:    std r0, 96(r1)
200; P9LE-NEXT:    stb r4, 56(r1)
201; P9LE-NEXT:    addi r4, r1, 71
202; P9LE-NEXT:    lbz r5, 56(r1)
203; P9LE-NEXT:    std r3, 48(r1)
204; P9LE-NEXT:    stdx r3, 0, r4
205; P9LE-NEXT:    lbz r4, 56(r1)
206; P9LE-NEXT:    stb r5, 79(r1)
207; P9LE-NEXT:    bl callee_9
208; P9LE-NEXT:    nop
209; P9LE-NEXT:    li r3, 0
210; P9LE-NEXT:    addi r1, r1, 80
211; P9LE-NEXT:    ld r0, 16(r1)
212; P9LE-NEXT:    mtlr r0
213; P9LE-NEXT:    blr
214;
215; P10LE-LABEL: caller_9_callee_9:
216; P10LE:       # %bb.0: # %entry
217; P10LE-NEXT:    mflr r0
218; P10LE-NEXT:    std r0, 16(r1)
219; P10LE-NEXT:    stdu r1, -80(r1)
220; P10LE-NEXT:    stb r4, 56(r1)
221; P10LE-NEXT:    addi r4, r1, 71
222; P10LE-NEXT:    std r3, 48(r1)
223; P10LE-NEXT:    lbz r5, 56(r1)
224; P10LE-NEXT:    stdx r3, 0, r4
225; P10LE-NEXT:    lbz r4, 56(r1)
226; P10LE-NEXT:    stb r5, 79(r1)
227; P10LE-NEXT:    bl callee_9@notoc
228; P10LE-NEXT:    li r3, 0
229; P10LE-NEXT:    addi r1, r1, 80
230; P10LE-NEXT:    ld r0, 16(r1)
231; P10LE-NEXT:    mtlr r0
232; P10LE-NEXT:    blr
233;
234; P8BE-LABEL: caller_9_callee_9:
235; P8BE:       # %bb.0: # %entry
236; P8BE-NEXT:    mflr r0
237; P8BE-NEXT:    stdu r1, -144(r1)
238; P8BE-NEXT:    std r0, 160(r1)
239; P8BE-NEXT:    stb r4, 200(r1)
240; P8BE-NEXT:    addi r5, r1, 135
241; P8BE-NEXT:    lbz r4, 200(r1)
242; P8BE-NEXT:    std r3, 192(r1)
243; P8BE-NEXT:    stdx r3, 0, r5
244; P8BE-NEXT:    stb r4, 143(r1)
245; P8BE-NEXT:    lbz r4, 200(r1)
246; P8BE-NEXT:    bl callee_9
247; P8BE-NEXT:    nop
248; P8BE-NEXT:    li r3, 0
249; P8BE-NEXT:    addi r1, r1, 144
250; P8BE-NEXT:    ld r0, 16(r1)
251; P8BE-NEXT:    mtlr r0
252; P8BE-NEXT:    blr
253;
254; P9BE-LABEL: caller_9_callee_9:
255; P9BE:       # %bb.0: # %entry
256; P9BE-NEXT:    mflr r0
257; P9BE-NEXT:    stdu r1, -144(r1)
258; P9BE-NEXT:    std r0, 160(r1)
259; P9BE-NEXT:    stb r4, 200(r1)
260; P9BE-NEXT:    addi r4, r1, 135
261; P9BE-NEXT:    lbz r5, 200(r1)
262; P9BE-NEXT:    std r3, 192(r1)
263; P9BE-NEXT:    stdx r3, 0, r4
264; P9BE-NEXT:    lbz r4, 200(r1)
265; P9BE-NEXT:    stb r5, 143(r1)
266; P9BE-NEXT:    bl callee_9
267; P9BE-NEXT:    nop
268; P9BE-NEXT:    li r3, 0
269; P9BE-NEXT:    addi r1, r1, 144
270; P9BE-NEXT:    ld r0, 16(r1)
271; P9BE-NEXT:    mtlr r0
272; P9BE-NEXT:    blr
273;
274; P10BE-LABEL: caller_9_callee_9:
275; P10BE:       # %bb.0: # %entry
276; P10BE-NEXT:    mflr r0
277; P10BE-NEXT:    std r0, 16(r1)
278; P10BE-NEXT:    stdu r1, -144(r1)
279; P10BE-NEXT:    stb r4, 200(r1)
280; P10BE-NEXT:    addi r4, r1, 135
281; P10BE-NEXT:    std r3, 192(r1)
282; P10BE-NEXT:    lbz r5, 200(r1)
283; P10BE-NEXT:    stdx r3, 0, r4
284; P10BE-NEXT:    lbz r4, 200(r1)
285; P10BE-NEXT:    stb r5, 143(r1)
286; P10BE-NEXT:    bl callee_9
287; P10BE-NEXT:    nop
288; P10BE-NEXT:    li r3, 0
289; P10BE-NEXT:    addi r1, r1, 144
290; P10BE-NEXT:    ld r0, 16(r1)
291; P10BE-NEXT:    mtlr r0
292; P10BE-NEXT:    blr
293entry:
294  %_param_data = alloca [9 x i8], align 1
295  %.unpack0 = load i8, ptr %data, align 1
296  %.elt1 = getelementptr inbounds [9 x i8], ptr %data, i64 0, i64 1
297  %.unpack1 = load i8, ptr %.elt1, align 1
298  %.elt2 = getelementptr inbounds [9 x i8], ptr %data, i64 0, i64 2
299  %.unpack2 = load i8, ptr %.elt2, align 1
300  %.elt3 = getelementptr inbounds [9 x i8], ptr %data, i64 0, i64 3
301  %.unpack3 = load i8, ptr %.elt3, align 1
302  %.elt4 = getelementptr inbounds [9 x i8], ptr %data, i64 0, i64 4
303  %.unpack4 = load i8, ptr %.elt4, align 1
304  %.elt5 = getelementptr inbounds [9 x i8], ptr %data, i64 0, i64 5
305  %.unpack5 = load i8, ptr %.elt5, align 1
306  %.elt6 = getelementptr inbounds [9 x i8], ptr %data, i64 0, i64 6
307  %.unpack6 = load i8, ptr %.elt6, align 1
308  %.elt7 = getelementptr inbounds [9 x i8], ptr %data, i64 0, i64 7
309  %.unpack7 = load i8, ptr %.elt7, align 1
310  %.elt8 = getelementptr inbounds [9 x i8], ptr %data, i64 0, i64 8
311  %.unpack8 = load i8, ptr %.elt8, align 1
312  store i8 %.unpack0, ptr %_param_data, align 1
313  %.temp.1.gep = getelementptr inbounds [9 x i8], ptr %_param_data, i64 0, i64 1
314  store i8 %.unpack1, ptr %.temp.1.gep, align 1
315  %.temp.2.gep = getelementptr inbounds [9 x i8], ptr %_param_data, i64 0, i64 2
316  store i8 %.unpack2, ptr %.temp.2.gep, align 1
317  %.temp.3.gep = getelementptr inbounds [9 x i8], ptr %_param_data, i64 0, i64 3
318  store i8 %.unpack3, ptr %.temp.3.gep, align 1
319  %.temp.4.gep = getelementptr inbounds [9 x i8], ptr %_param_data, i64 0, i64 4
320  store i8 %.unpack4, ptr %.temp.4.gep, align 1
321  %.temp.5.gep = getelementptr inbounds [9 x i8], ptr %_param_data, i64 0, i64 5
322  store i8 %.unpack5, ptr %.temp.5.gep, align 1
323  %.temp.6.gep = getelementptr inbounds [9 x i8], ptr %_param_data, i64 0, i64 6
324  store i8 %.unpack6, ptr %.temp.6.gep, align 1
325  %.temp.7.gep = getelementptr inbounds [9 x i8], ptr %_param_data, i64 0, i64 7
326  store i8 %.unpack7, ptr %.temp.7.gep, align 1
327  %.temp.8.gep = getelementptr inbounds [9 x i8], ptr %_param_data, i64 0, i64 8
328  store i8 %.unpack8, ptr %.temp.8.gep, align 1
329  call void @callee_9(ptr nocapture readonly byval([9 x i8]) %data)
330  ret i8 0
331}
332
333define signext i8 @caller_10(ptr nocapture readonly byval([10 x i8]) %data) #0 {
334; P8LE-LABEL: caller_10:
335; P8LE:       # %bb.0: # %entry
336; P8LE-NEXT:    mflr r0
337; P8LE-NEXT:    stdu r1, -80(r1)
338; P8LE-NEXT:    std r0, 96(r1)
339; P8LE-NEXT:    sth r4, 56(r1)
340; P8LE-NEXT:    addi r4, r1, 70
341; P8LE-NEXT:    lhz r5, 56(r1)
342; P8LE-NEXT:    std r3, 48(r1)
343; P8LE-NEXT:    stdx r3, 0, r4
344; P8LE-NEXT:    mr r3, r4
345; P8LE-NEXT:    sth r5, 78(r1)
346; P8LE-NEXT:    bl callee
347; P8LE-NEXT:    nop
348; P8LE-NEXT:    li r3, 0
349; P8LE-NEXT:    addi r1, r1, 80
350; P8LE-NEXT:    ld r0, 16(r1)
351; P8LE-NEXT:    mtlr r0
352; P8LE-NEXT:    blr
353;
354; P9LE-LABEL: caller_10:
355; P9LE:       # %bb.0: # %entry
356; P9LE-NEXT:    mflr r0
357; P9LE-NEXT:    stdu r1, -80(r1)
358; P9LE-NEXT:    std r0, 96(r1)
359; P9LE-NEXT:    sth r4, 56(r1)
360; P9LE-NEXT:    addi r4, r1, 70
361; P9LE-NEXT:    lhz r5, 56(r1)
362; P9LE-NEXT:    std r3, 48(r1)
363; P9LE-NEXT:    stdx r3, 0, r4
364; P9LE-NEXT:    mr r3, r4
365; P9LE-NEXT:    sth r5, 78(r1)
366; P9LE-NEXT:    bl callee
367; P9LE-NEXT:    nop
368; P9LE-NEXT:    li r3, 0
369; P9LE-NEXT:    addi r1, r1, 80
370; P9LE-NEXT:    ld r0, 16(r1)
371; P9LE-NEXT:    mtlr r0
372; P9LE-NEXT:    blr
373;
374; P10LE-LABEL: caller_10:
375; P10LE:       # %bb.0: # %entry
376; P10LE-NEXT:    mflr r0
377; P10LE-NEXT:    std r0, 16(r1)
378; P10LE-NEXT:    stdu r1, -80(r1)
379; P10LE-NEXT:    sth r4, 56(r1)
380; P10LE-NEXT:    addi r4, r1, 70
381; P10LE-NEXT:    std r3, 48(r1)
382; P10LE-NEXT:    lhz r5, 56(r1)
383; P10LE-NEXT:    stdx r3, 0, r4
384; P10LE-NEXT:    mr r3, r4
385; P10LE-NEXT:    sth r5, 78(r1)
386; P10LE-NEXT:    bl callee@notoc
387; P10LE-NEXT:    li r3, 0
388; P10LE-NEXT:    addi r1, r1, 80
389; P10LE-NEXT:    ld r0, 16(r1)
390; P10LE-NEXT:    mtlr r0
391; P10LE-NEXT:    blr
392;
393; P8BE-LABEL: caller_10:
394; P8BE:       # %bb.0: # %entry
395; P8BE-NEXT:    mflr r0
396; P8BE-NEXT:    stdu r1, -144(r1)
397; P8BE-NEXT:    std r0, 160(r1)
398; P8BE-NEXT:    sth r4, 200(r1)
399; P8BE-NEXT:    addi r4, r1, 134
400; P8BE-NEXT:    lhz r5, 200(r1)
401; P8BE-NEXT:    std r3, 192(r1)
402; P8BE-NEXT:    stdx r3, 0, r4
403; P8BE-NEXT:    mr r3, r4
404; P8BE-NEXT:    sth r5, 142(r1)
405; P8BE-NEXT:    bl callee
406; P8BE-NEXT:    nop
407; P8BE-NEXT:    li r3, 0
408; P8BE-NEXT:    addi r1, r1, 144
409; P8BE-NEXT:    ld r0, 16(r1)
410; P8BE-NEXT:    mtlr r0
411; P8BE-NEXT:    blr
412;
413; P9BE-LABEL: caller_10:
414; P9BE:       # %bb.0: # %entry
415; P9BE-NEXT:    mflr r0
416; P9BE-NEXT:    stdu r1, -144(r1)
417; P9BE-NEXT:    std r0, 160(r1)
418; P9BE-NEXT:    sth r4, 200(r1)
419; P9BE-NEXT:    addi r4, r1, 134
420; P9BE-NEXT:    lhz r5, 200(r1)
421; P9BE-NEXT:    std r3, 192(r1)
422; P9BE-NEXT:    stdx r3, 0, r4
423; P9BE-NEXT:    mr r3, r4
424; P9BE-NEXT:    sth r5, 142(r1)
425; P9BE-NEXT:    bl callee
426; P9BE-NEXT:    nop
427; P9BE-NEXT:    li r3, 0
428; P9BE-NEXT:    addi r1, r1, 144
429; P9BE-NEXT:    ld r0, 16(r1)
430; P9BE-NEXT:    mtlr r0
431; P9BE-NEXT:    blr
432;
433; P10BE-LABEL: caller_10:
434; P10BE:       # %bb.0: # %entry
435; P10BE-NEXT:    mflr r0
436; P10BE-NEXT:    std r0, 16(r1)
437; P10BE-NEXT:    stdu r1, -144(r1)
438; P10BE-NEXT:    sth r4, 200(r1)
439; P10BE-NEXT:    addi r4, r1, 134
440; P10BE-NEXT:    std r3, 192(r1)
441; P10BE-NEXT:    lhz r5, 200(r1)
442; P10BE-NEXT:    stdx r3, 0, r4
443; P10BE-NEXT:    mr r3, r4
444; P10BE-NEXT:    sth r5, 142(r1)
445; P10BE-NEXT:    bl callee
446; P10BE-NEXT:    nop
447; P10BE-NEXT:    li r3, 0
448; P10BE-NEXT:    addi r1, r1, 144
449; P10BE-NEXT:    ld r0, 16(r1)
450; P10BE-NEXT:    mtlr r0
451; P10BE-NEXT:    blr
452entry:
453  %_param_data = alloca [10 x i8], align 1
454  %.unpack0 = load i8, ptr %data, align 1
455  %.elt1 = getelementptr inbounds [10 x i8], ptr %data, i64 0, i64 1
456  %.unpack1 = load i8, ptr %.elt1, align 1
457  %.elt2 = getelementptr inbounds [10 x i8], ptr %data, i64 0, i64 2
458  %.unpack2 = load i8, ptr %.elt2, align 1
459  %.elt3 = getelementptr inbounds [10 x i8], ptr %data, i64 0, i64 3
460  %.unpack3 = load i8, ptr %.elt3, align 1
461  %.elt4 = getelementptr inbounds [10 x i8], ptr %data, i64 0, i64 4
462  %.unpack4 = load i8, ptr %.elt4, align 1
463  %.elt5 = getelementptr inbounds [10 x i8], ptr %data, i64 0, i64 5
464  %.unpack5 = load i8, ptr %.elt5, align 1
465  %.elt6 = getelementptr inbounds [10 x i8], ptr %data, i64 0, i64 6
466  %.unpack6 = load i8, ptr %.elt6, align 1
467  %.elt7 = getelementptr inbounds [10 x i8], ptr %data, i64 0, i64 7
468  %.unpack7 = load i8, ptr %.elt7, align 1
469  %.elt8 = getelementptr inbounds [10 x i8], ptr %data, i64 0, i64 8
470  %.unpack8 = load i8, ptr %.elt8, align 1
471  %.elt9 = getelementptr inbounds [10 x i8], ptr %data, i64 0, i64 9
472  %.unpack9 = load i8, ptr %.elt9, align 1
473  store i8 %.unpack0, ptr %_param_data, align 1
474  %.temp.1.gep = getelementptr inbounds [10 x i8], ptr %_param_data, i64 0, i64 1
475  store i8 %.unpack1, ptr %.temp.1.gep, align 1
476  %.temp.2.gep = getelementptr inbounds [10 x i8], ptr %_param_data, i64 0, i64 2
477  store i8 %.unpack2, ptr %.temp.2.gep, align 1
478  %.temp.3.gep = getelementptr inbounds [10 x i8], ptr %_param_data, i64 0, i64 3
479  store i8 %.unpack3, ptr %.temp.3.gep, align 1
480  %.temp.4.gep = getelementptr inbounds [10 x i8], ptr %_param_data, i64 0, i64 4
481  store i8 %.unpack4, ptr %.temp.4.gep, align 1
482  %.temp.5.gep = getelementptr inbounds [10 x i8], ptr %_param_data, i64 0, i64 5
483  store i8 %.unpack5, ptr %.temp.5.gep, align 1
484  %.temp.6.gep = getelementptr inbounds [10 x i8], ptr %_param_data, i64 0, i64 6
485  store i8 %.unpack6, ptr %.temp.6.gep, align 1
486  %.temp.7.gep = getelementptr inbounds [10 x i8], ptr %_param_data, i64 0, i64 7
487  store i8 %.unpack7, ptr %.temp.7.gep, align 1
488  %.temp.8.gep = getelementptr inbounds [10 x i8], ptr %_param_data, i64 0, i64 8
489  store i8 %.unpack8, ptr %.temp.8.gep, align 1
490  %.temp.9.gep = getelementptr inbounds [10 x i8], ptr %_param_data, i64 0, i64 9
491  store i8 %.unpack9, ptr %.temp.9.gep, align 1
492  call void @callee(ptr nonnull %_param_data)
493  ret i8 0
494}
495
496define signext i8 @caller_12(ptr nocapture readonly byval([12 x i8]) %data) #0 {
497; P8LE-LABEL: caller_12:
498; P8LE:       # %bb.0: # %entry
499; P8LE-NEXT:    mflr r0
500; P8LE-NEXT:    stdu r1, -80(r1)
501; P8LE-NEXT:    std r0, 96(r1)
502; P8LE-NEXT:    stw r4, 56(r1)
503; P8LE-NEXT:    addi r4, r1, 68
504; P8LE-NEXT:    lwz r5, 56(r1)
505; P8LE-NEXT:    std r3, 48(r1)
506; P8LE-NEXT:    std r3, 68(r1)
507; P8LE-NEXT:    mr r3, r4
508; P8LE-NEXT:    stw r5, 76(r1)
509; P8LE-NEXT:    bl callee
510; P8LE-NEXT:    nop
511; P8LE-NEXT:    li r3, 0
512; P8LE-NEXT:    addi r1, r1, 80
513; P8LE-NEXT:    ld r0, 16(r1)
514; P8LE-NEXT:    mtlr r0
515; P8LE-NEXT:    blr
516;
517; P9LE-LABEL: caller_12:
518; P9LE:       # %bb.0: # %entry
519; P9LE-NEXT:    mflr r0
520; P9LE-NEXT:    stdu r1, -80(r1)
521; P9LE-NEXT:    std r0, 96(r1)
522; P9LE-NEXT:    stw r4, 56(r1)
523; P9LE-NEXT:    addi r4, r1, 68
524; P9LE-NEXT:    lwz r5, 56(r1)
525; P9LE-NEXT:    std r3, 48(r1)
526; P9LE-NEXT:    std r3, 68(r1)
527; P9LE-NEXT:    mr r3, r4
528; P9LE-NEXT:    stw r5, 76(r1)
529; P9LE-NEXT:    bl callee
530; P9LE-NEXT:    nop
531; P9LE-NEXT:    li r3, 0
532; P9LE-NEXT:    addi r1, r1, 80
533; P9LE-NEXT:    ld r0, 16(r1)
534; P9LE-NEXT:    mtlr r0
535; P9LE-NEXT:    blr
536;
537; P10LE-LABEL: caller_12:
538; P10LE:       # %bb.0: # %entry
539; P10LE-NEXT:    mflr r0
540; P10LE-NEXT:    std r0, 16(r1)
541; P10LE-NEXT:    stdu r1, -80(r1)
542; P10LE-NEXT:    stw r4, 56(r1)
543; P10LE-NEXT:    addi r4, r1, 68
544; P10LE-NEXT:    std r3, 48(r1)
545; P10LE-NEXT:    lwz r5, 56(r1)
546; P10LE-NEXT:    std r3, 68(r1)
547; P10LE-NEXT:    mr r3, r4
548; P10LE-NEXT:    stw r5, 76(r1)
549; P10LE-NEXT:    bl callee@notoc
550; P10LE-NEXT:    li r3, 0
551; P10LE-NEXT:    addi r1, r1, 80
552; P10LE-NEXT:    ld r0, 16(r1)
553; P10LE-NEXT:    mtlr r0
554; P10LE-NEXT:    blr
555;
556; P8BE-LABEL: caller_12:
557; P8BE:       # %bb.0: # %entry
558; P8BE-NEXT:    mflr r0
559; P8BE-NEXT:    stdu r1, -144(r1)
560; P8BE-NEXT:    std r0, 160(r1)
561; P8BE-NEXT:    stw r4, 200(r1)
562; P8BE-NEXT:    addi r4, r1, 132
563; P8BE-NEXT:    lwz r5, 200(r1)
564; P8BE-NEXT:    std r3, 192(r1)
565; P8BE-NEXT:    std r3, 132(r1)
566; P8BE-NEXT:    mr r3, r4
567; P8BE-NEXT:    stw r5, 140(r1)
568; P8BE-NEXT:    bl callee
569; P8BE-NEXT:    nop
570; P8BE-NEXT:    li r3, 0
571; P8BE-NEXT:    addi r1, r1, 144
572; P8BE-NEXT:    ld r0, 16(r1)
573; P8BE-NEXT:    mtlr r0
574; P8BE-NEXT:    blr
575;
576; P9BE-LABEL: caller_12:
577; P9BE:       # %bb.0: # %entry
578; P9BE-NEXT:    mflr r0
579; P9BE-NEXT:    stdu r1, -144(r1)
580; P9BE-NEXT:    std r0, 160(r1)
581; P9BE-NEXT:    stw r4, 200(r1)
582; P9BE-NEXT:    addi r4, r1, 132
583; P9BE-NEXT:    lwz r5, 200(r1)
584; P9BE-NEXT:    std r3, 192(r1)
585; P9BE-NEXT:    std r3, 132(r1)
586; P9BE-NEXT:    mr r3, r4
587; P9BE-NEXT:    stw r5, 140(r1)
588; P9BE-NEXT:    bl callee
589; P9BE-NEXT:    nop
590; P9BE-NEXT:    li r3, 0
591; P9BE-NEXT:    addi r1, r1, 144
592; P9BE-NEXT:    ld r0, 16(r1)
593; P9BE-NEXT:    mtlr r0
594; P9BE-NEXT:    blr
595;
596; P10BE-LABEL: caller_12:
597; P10BE:       # %bb.0: # %entry
598; P10BE-NEXT:    mflr r0
599; P10BE-NEXT:    std r0, 16(r1)
600; P10BE-NEXT:    stdu r1, -144(r1)
601; P10BE-NEXT:    stw r4, 200(r1)
602; P10BE-NEXT:    addi r4, r1, 132
603; P10BE-NEXT:    std r3, 192(r1)
604; P10BE-NEXT:    lwz r5, 200(r1)
605; P10BE-NEXT:    std r3, 132(r1)
606; P10BE-NEXT:    mr r3, r4
607; P10BE-NEXT:    stw r5, 140(r1)
608; P10BE-NEXT:    bl callee
609; P10BE-NEXT:    nop
610; P10BE-NEXT:    li r3, 0
611; P10BE-NEXT:    addi r1, r1, 144
612; P10BE-NEXT:    ld r0, 16(r1)
613; P10BE-NEXT:    mtlr r0
614; P10BE-NEXT:    blr
615entry:
616  %_param_data = alloca [12 x i8], align 1
617  %.unpack0 = load i8, ptr %data, align 1
618  %.elt1 = getelementptr inbounds [12 x i8], ptr %data, i64 0, i64 1
619  %.unpack1 = load i8, ptr %.elt1, align 1
620  %.elt2 = getelementptr inbounds [12 x i8], ptr %data, i64 0, i64 2
621  %.unpack2 = load i8, ptr %.elt2, align 1
622  %.elt3 = getelementptr inbounds [12 x i8], ptr %data, i64 0, i64 3
623  %.unpack3 = load i8, ptr %.elt3, align 1
624  %.elt4 = getelementptr inbounds [12 x i8], ptr %data, i64 0, i64 4
625  %.unpack4 = load i8, ptr %.elt4, align 1
626  %.elt5 = getelementptr inbounds [12 x i8], ptr %data, i64 0, i64 5
627  %.unpack5 = load i8, ptr %.elt5, align 1
628  %.elt6 = getelementptr inbounds [12 x i8], ptr %data, i64 0, i64 6
629  %.unpack6 = load i8, ptr %.elt6, align 1
630  %.elt7 = getelementptr inbounds [12 x i8], ptr %data, i64 0, i64 7
631  %.unpack7 = load i8, ptr %.elt7, align 1
632  %.elt8 = getelementptr inbounds [12 x i8], ptr %data, i64 0, i64 8
633  %.unpack8 = load i8, ptr %.elt8, align 1
634  %.elt9 = getelementptr inbounds [12 x i8], ptr %data, i64 0, i64 9
635  %.unpack9 = load i8, ptr %.elt9, align 1
636  %.elt10 = getelementptr inbounds [12 x i8], ptr %data, i64 0, i64 10
637  %.unpack10 = load i8, ptr %.elt10, align 1
638  %.elt11 = getelementptr inbounds [12 x i8], ptr %data, i64 0, i64 11
639  %.unpack11 = load i8, ptr %.elt11, align 1
640  store i8 %.unpack0, ptr %_param_data, align 1
641  %.temp.1.gep = getelementptr inbounds [12 x i8], ptr %_param_data, i64 0, i64 1
642  store i8 %.unpack1, ptr %.temp.1.gep, align 1
643  %.temp.2.gep = getelementptr inbounds [12 x i8], ptr %_param_data, i64 0, i64 2
644  store i8 %.unpack2, ptr %.temp.2.gep, align 1
645  %.temp.3.gep = getelementptr inbounds [12 x i8], ptr %_param_data, i64 0, i64 3
646  store i8 %.unpack3, ptr %.temp.3.gep, align 1
647  %.temp.4.gep = getelementptr inbounds [12 x i8], ptr %_param_data, i64 0, i64 4
648  store i8 %.unpack4, ptr %.temp.4.gep, align 1
649  %.temp.5.gep = getelementptr inbounds [12 x i8], ptr %_param_data, i64 0, i64 5
650  store i8 %.unpack5, ptr %.temp.5.gep, align 1
651  %.temp.6.gep = getelementptr inbounds [12 x i8], ptr %_param_data, i64 0, i64 6
652  store i8 %.unpack6, ptr %.temp.6.gep, align 1
653  %.temp.7.gep = getelementptr inbounds [12 x i8], ptr %_param_data, i64 0, i64 7
654  store i8 %.unpack7, ptr %.temp.7.gep, align 1
655  %.temp.8.gep = getelementptr inbounds [12 x i8], ptr %_param_data, i64 0, i64 8
656  store i8 %.unpack8, ptr %.temp.8.gep, align 1
657  %.temp.9.gep = getelementptr inbounds [12 x i8], ptr %_param_data, i64 0, i64 9
658  store i8 %.unpack9, ptr %.temp.9.gep, align 1
659  %.temp.10.gep = getelementptr inbounds [12 x i8], ptr %_param_data, i64 0, i64 10
660  store i8 %.unpack10, ptr %.temp.10.gep, align 1
661  %.temp.11.gep = getelementptr inbounds [12 x i8], ptr %_param_data, i64 0, i64 11
662  store i8 %.unpack11, ptr %.temp.11.gep, align 1
663  call void @callee(ptr nonnull %_param_data)
664  ret i8 0
665}
666
667define signext i8 @caller_14(ptr nocapture readonly byval([14 x i8]) %data) #0 {
668; P8LE-LABEL: caller_14:
669; P8LE:       # %bb.0: # %entry
670; P8LE-NEXT:    mflr r0
671; P8LE-NEXT:    stdu r1, -80(r1)
672; P8LE-NEXT:    std r0, 96(r1)
673; P8LE-NEXT:    stw r4, 56(r1)
674; P8LE-NEXT:    rldicl r4, r4, 32, 32
675; P8LE-NEXT:    lwz r5, 56(r1)
676; P8LE-NEXT:    std r3, 48(r1)
677; P8LE-NEXT:    sth r4, 60(r1)
678; P8LE-NEXT:    addi r4, r1, 66
679; P8LE-NEXT:    stdx r3, 0, r4
680; P8LE-NEXT:    mr r3, r4
681; P8LE-NEXT:    stw r5, 74(r1)
682; P8LE-NEXT:    bl callee
683; P8LE-NEXT:    nop
684; P8LE-NEXT:    li r3, 0
685; P8LE-NEXT:    addi r1, r1, 80
686; P8LE-NEXT:    ld r0, 16(r1)
687; P8LE-NEXT:    mtlr r0
688; P8LE-NEXT:    blr
689;
690; P9LE-LABEL: caller_14:
691; P9LE:       # %bb.0: # %entry
692; P9LE-NEXT:    mflr r0
693; P9LE-NEXT:    stdu r1, -80(r1)
694; P9LE-NEXT:    std r0, 96(r1)
695; P9LE-NEXT:    stw r4, 56(r1)
696; P9LE-NEXT:    lwz r5, 56(r1)
697; P9LE-NEXT:    rldicl r4, r4, 32, 32
698; P9LE-NEXT:    std r3, 48(r1)
699; P9LE-NEXT:    sth r4, 60(r1)
700; P9LE-NEXT:    addi r4, r1, 66
701; P9LE-NEXT:    stdx r3, 0, r4
702; P9LE-NEXT:    mr r3, r4
703; P9LE-NEXT:    stw r5, 74(r1)
704; P9LE-NEXT:    bl callee
705; P9LE-NEXT:    nop
706; P9LE-NEXT:    li r3, 0
707; P9LE-NEXT:    addi r1, r1, 80
708; P9LE-NEXT:    ld r0, 16(r1)
709; P9LE-NEXT:    mtlr r0
710; P9LE-NEXT:    blr
711;
712; P10LE-LABEL: caller_14:
713; P10LE:       # %bb.0: # %entry
714; P10LE-NEXT:    mflr r0
715; P10LE-NEXT:    std r0, 16(r1)
716; P10LE-NEXT:    stdu r1, -80(r1)
717; P10LE-NEXT:    stw r4, 56(r1)
718; P10LE-NEXT:    rldicl r4, r4, 32, 32
719; P10LE-NEXT:    std r3, 48(r1)
720; P10LE-NEXT:    lwz r5, 56(r1)
721; P10LE-NEXT:    sth r4, 60(r1)
722; P10LE-NEXT:    addi r4, r1, 66
723; P10LE-NEXT:    stdx r3, 0, r4
724; P10LE-NEXT:    mr r3, r4
725; P10LE-NEXT:    stw r5, 74(r1)
726; P10LE-NEXT:    bl callee@notoc
727; P10LE-NEXT:    li r3, 0
728; P10LE-NEXT:    addi r1, r1, 80
729; P10LE-NEXT:    ld r0, 16(r1)
730; P10LE-NEXT:    mtlr r0
731; P10LE-NEXT:    blr
732;
733; P8BE-LABEL: caller_14:
734; P8BE:       # %bb.0: # %entry
735; P8BE-NEXT:    mflr r0
736; P8BE-NEXT:    stdu r1, -144(r1)
737; P8BE-NEXT:    rldicl r5, r4, 48, 16
738; P8BE-NEXT:    std r0, 160(r1)
739; P8BE-NEXT:    sth r4, 204(r1)
740; P8BE-NEXT:    addi r4, r1, 130
741; P8BE-NEXT:    std r3, 192(r1)
742; P8BE-NEXT:    stw r5, 200(r1)
743; P8BE-NEXT:    stdx r3, 0, r4
744; P8BE-NEXT:    mr r3, r4
745; P8BE-NEXT:    lwz r5, 200(r1)
746; P8BE-NEXT:    stw r5, 138(r1)
747; P8BE-NEXT:    bl callee
748; P8BE-NEXT:    nop
749; P8BE-NEXT:    li r3, 0
750; P8BE-NEXT:    addi r1, r1, 144
751; P8BE-NEXT:    ld r0, 16(r1)
752; P8BE-NEXT:    mtlr r0
753; P8BE-NEXT:    blr
754;
755; P9BE-LABEL: caller_14:
756; P9BE:       # %bb.0: # %entry
757; P9BE-NEXT:    mflr r0
758; P9BE-NEXT:    stdu r1, -144(r1)
759; P9BE-NEXT:    rldicl r5, r4, 48, 16
760; P9BE-NEXT:    std r0, 160(r1)
761; P9BE-NEXT:    sth r4, 204(r1)
762; P9BE-NEXT:    addi r4, r1, 130
763; P9BE-NEXT:    std r3, 192(r1)
764; P9BE-NEXT:    stw r5, 200(r1)
765; P9BE-NEXT:    stdx r3, 0, r4
766; P9BE-NEXT:    mr r3, r4
767; P9BE-NEXT:    lwz r5, 200(r1)
768; P9BE-NEXT:    stw r5, 138(r1)
769; P9BE-NEXT:    bl callee
770; P9BE-NEXT:    nop
771; P9BE-NEXT:    li r3, 0
772; P9BE-NEXT:    addi r1, r1, 144
773; P9BE-NEXT:    ld r0, 16(r1)
774; P9BE-NEXT:    mtlr r0
775; P9BE-NEXT:    blr
776;
777; P10BE-LABEL: caller_14:
778; P10BE:       # %bb.0: # %entry
779; P10BE-NEXT:    mflr r0
780; P10BE-NEXT:    std r0, 16(r1)
781; P10BE-NEXT:    stdu r1, -144(r1)
782; P10BE-NEXT:    rldicl r5, r4, 48, 16
783; P10BE-NEXT:    sth r4, 204(r1)
784; P10BE-NEXT:    addi r4, r1, 130
785; P10BE-NEXT:    std r3, 192(r1)
786; P10BE-NEXT:    stw r5, 200(r1)
787; P10BE-NEXT:    stdx r3, 0, r4
788; P10BE-NEXT:    mr r3, r4
789; P10BE-NEXT:    lwz r5, 200(r1)
790; P10BE-NEXT:    stw r5, 138(r1)
791; P10BE-NEXT:    bl callee
792; P10BE-NEXT:    nop
793; P10BE-NEXT:    li r3, 0
794; P10BE-NEXT:    addi r1, r1, 144
795; P10BE-NEXT:    ld r0, 16(r1)
796; P10BE-NEXT:    mtlr r0
797; P10BE-NEXT:    blr
798entry:
799  %_param_data = alloca [14 x i8], align 1
800  %.unpack0 = load i8, ptr %data, align 1
801  %.elt1 = getelementptr inbounds [14 x i8], ptr %data, i64 0, i64 1
802  %.unpack1 = load i8, ptr %.elt1, align 1
803  %.elt2 = getelementptr inbounds [14 x i8], ptr %data, i64 0, i64 2
804  %.unpack2 = load i8, ptr %.elt2, align 1
805  %.elt3 = getelementptr inbounds [14 x i8], ptr %data, i64 0, i64 3
806  %.unpack3 = load i8, ptr %.elt3, align 1
807  %.elt4 = getelementptr inbounds [14 x i8], ptr %data, i64 0, i64 4
808  %.unpack4 = load i8, ptr %.elt4, align 1
809  %.elt5 = getelementptr inbounds [14 x i8], ptr %data, i64 0, i64 5
810  %.unpack5 = load i8, ptr %.elt5, align 1
811  %.elt6 = getelementptr inbounds [14 x i8], ptr %data, i64 0, i64 6
812  %.unpack6 = load i8, ptr %.elt6, align 1
813  %.elt7 = getelementptr inbounds [14 x i8], ptr %data, i64 0, i64 7
814  %.unpack7 = load i8, ptr %.elt7, align 1
815  %.elt8 = getelementptr inbounds [14 x i8], ptr %data, i64 0, i64 8
816  %.unpack8 = load i8, ptr %.elt8, align 1
817  %.elt9 = getelementptr inbounds [14 x i8], ptr %data, i64 0, i64 9
818  %.unpack9 = load i8, ptr %.elt9, align 1
819  %.elt10 = getelementptr inbounds [14 x i8], ptr %data, i64 0, i64 10
820  %.unpack10 = load i8, ptr %.elt10, align 1
821  %.elt11 = getelementptr inbounds [14 x i8], ptr %data, i64 0, i64 11
822  %.unpack11 = load i8, ptr %.elt11, align 1
823  store i8 %.unpack0, ptr %_param_data, align 1
824  %.temp.1.gep = getelementptr inbounds [14 x i8], ptr %_param_data, i64 0, i64 1
825  store i8 %.unpack1, ptr %.temp.1.gep, align 1
826  %.temp.2.gep = getelementptr inbounds [14 x i8], ptr %_param_data, i64 0, i64 2
827  store i8 %.unpack2, ptr %.temp.2.gep, align 1
828  %.temp.3.gep = getelementptr inbounds [14 x i8], ptr %_param_data, i64 0, i64 3
829  store i8 %.unpack3, ptr %.temp.3.gep, align 1
830  %.temp.4.gep = getelementptr inbounds [14 x i8], ptr %_param_data, i64 0, i64 4
831  store i8 %.unpack4, ptr %.temp.4.gep, align 1
832  %.temp.5.gep = getelementptr inbounds [14 x i8], ptr %_param_data, i64 0, i64 5
833  store i8 %.unpack5, ptr %.temp.5.gep, align 1
834  %.temp.6.gep = getelementptr inbounds [14 x i8], ptr %_param_data, i64 0, i64 6
835  store i8 %.unpack6, ptr %.temp.6.gep, align 1
836  %.temp.7.gep = getelementptr inbounds [14 x i8], ptr %_param_data, i64 0, i64 7
837  store i8 %.unpack7, ptr %.temp.7.gep, align 1
838  %.temp.8.gep = getelementptr inbounds [14 x i8], ptr %_param_data, i64 0, i64 8
839  store i8 %.unpack8, ptr %.temp.8.gep, align 1
840  %.temp.9.gep = getelementptr inbounds [14 x i8], ptr %_param_data, i64 0, i64 9
841  store i8 %.unpack9, ptr %.temp.9.gep, align 1
842  %.temp.10.gep = getelementptr inbounds [14 x i8], ptr %_param_data, i64 0, i64 10
843  store i8 %.unpack10, ptr %.temp.10.gep, align 1
844  %.temp.11.gep = getelementptr inbounds [14 x i8], ptr %_param_data, i64 0, i64 11
845  store i8 %.unpack11, ptr %.temp.11.gep, align 1
846  call void @callee(ptr nonnull %_param_data)
847  ret i8 0
848}
849
850define signext i8 @caller_16(ptr nocapture readonly byval([16 x i8]) %data) #0 {
851; P8LE-LABEL: caller_16:
852; P8LE:       # %bb.0: # %entry
853; P8LE-NEXT:    mflr r0
854; P8LE-NEXT:    stdu r1, -80(r1)
855; P8LE-NEXT:    addi r5, r1, 64
856; P8LE-NEXT:    std r0, 96(r1)
857; P8LE-NEXT:    std r3, 48(r1)
858; P8LE-NEXT:    std r4, 56(r1)
859; P8LE-NEXT:    stw r4, 72(r1)
860; P8LE-NEXT:    std r3, 64(r1)
861; P8LE-NEXT:    mr r3, r5
862; P8LE-NEXT:    bl callee
863; P8LE-NEXT:    nop
864; P8LE-NEXT:    li r3, 0
865; P8LE-NEXT:    addi r1, r1, 80
866; P8LE-NEXT:    ld r0, 16(r1)
867; P8LE-NEXT:    mtlr r0
868; P8LE-NEXT:    blr
869;
870; P9LE-LABEL: caller_16:
871; P9LE:       # %bb.0: # %entry
872; P9LE-NEXT:    mflr r0
873; P9LE-NEXT:    stdu r1, -80(r1)
874; P9LE-NEXT:    addi r5, r1, 64
875; P9LE-NEXT:    std r0, 96(r1)
876; P9LE-NEXT:    std r3, 48(r1)
877; P9LE-NEXT:    std r4, 56(r1)
878; P9LE-NEXT:    stw r4, 72(r1)
879; P9LE-NEXT:    std r3, 64(r1)
880; P9LE-NEXT:    mr r3, r5
881; P9LE-NEXT:    bl callee
882; P9LE-NEXT:    nop
883; P9LE-NEXT:    li r3, 0
884; P9LE-NEXT:    addi r1, r1, 80
885; P9LE-NEXT:    ld r0, 16(r1)
886; P9LE-NEXT:    mtlr r0
887; P9LE-NEXT:    blr
888;
889; P10LE-LABEL: caller_16:
890; P10LE:       # %bb.0: # %entry
891; P10LE-NEXT:    mflr r0
892; P10LE-NEXT:    std r0, 16(r1)
893; P10LE-NEXT:    stdu r1, -80(r1)
894; P10LE-NEXT:    addi r5, r1, 64
895; P10LE-NEXT:    std r3, 48(r1)
896; P10LE-NEXT:    std r4, 56(r1)
897; P10LE-NEXT:    stw r4, 72(r1)
898; P10LE-NEXT:    std r3, 64(r1)
899; P10LE-NEXT:    mr r3, r5
900; P10LE-NEXT:    bl callee@notoc
901; P10LE-NEXT:    li r3, 0
902; P10LE-NEXT:    addi r1, r1, 80
903; P10LE-NEXT:    ld r0, 16(r1)
904; P10LE-NEXT:    mtlr r0
905; P10LE-NEXT:    blr
906;
907; P8BE-LABEL: caller_16:
908; P8BE:       # %bb.0: # %entry
909; P8BE-NEXT:    mflr r0
910; P8BE-NEXT:    stdu r1, -144(r1)
911; P8BE-NEXT:    std r0, 160(r1)
912; P8BE-NEXT:    std r4, 200(r1)
913; P8BE-NEXT:    rldicl r5, r4, 32, 32
914; P8BE-NEXT:    addi r4, r1, 128
915; P8BE-NEXT:    std r3, 192(r1)
916; P8BE-NEXT:    std r3, 128(r1)
917; P8BE-NEXT:    mr r3, r4
918; P8BE-NEXT:    stw r5, 136(r1)
919; P8BE-NEXT:    bl callee
920; P8BE-NEXT:    nop
921; P8BE-NEXT:    li r3, 0
922; P8BE-NEXT:    addi r1, r1, 144
923; P8BE-NEXT:    ld r0, 16(r1)
924; P8BE-NEXT:    mtlr r0
925; P8BE-NEXT:    blr
926;
927; P9BE-LABEL: caller_16:
928; P9BE:       # %bb.0: # %entry
929; P9BE-NEXT:    mflr r0
930; P9BE-NEXT:    stdu r1, -144(r1)
931; P9BE-NEXT:    std r0, 160(r1)
932; P9BE-NEXT:    std r4, 200(r1)
933; P9BE-NEXT:    rldicl r5, r4, 32, 32
934; P9BE-NEXT:    addi r4, r1, 128
935; P9BE-NEXT:    std r3, 192(r1)
936; P9BE-NEXT:    std r3, 128(r1)
937; P9BE-NEXT:    mr r3, r4
938; P9BE-NEXT:    stw r5, 136(r1)
939; P9BE-NEXT:    bl callee
940; P9BE-NEXT:    nop
941; P9BE-NEXT:    li r3, 0
942; P9BE-NEXT:    addi r1, r1, 144
943; P9BE-NEXT:    ld r0, 16(r1)
944; P9BE-NEXT:    mtlr r0
945; P9BE-NEXT:    blr
946;
947; P10BE-LABEL: caller_16:
948; P10BE:       # %bb.0: # %entry
949; P10BE-NEXT:    mflr r0
950; P10BE-NEXT:    std r0, 16(r1)
951; P10BE-NEXT:    stdu r1, -144(r1)
952; P10BE-NEXT:    std r3, 192(r1)
953; P10BE-NEXT:    std r4, 200(r1)
954; P10BE-NEXT:    rldicl r5, r4, 32, 32
955; P10BE-NEXT:    addi r4, r1, 128
956; P10BE-NEXT:    std r3, 128(r1)
957; P10BE-NEXT:    mr r3, r4
958; P10BE-NEXT:    stw r5, 136(r1)
959; P10BE-NEXT:    bl callee
960; P10BE-NEXT:    nop
961; P10BE-NEXT:    li r3, 0
962; P10BE-NEXT:    addi r1, r1, 144
963; P10BE-NEXT:    ld r0, 16(r1)
964; P10BE-NEXT:    mtlr r0
965; P10BE-NEXT:    blr
966entry:
967  %_param_data = alloca [16 x i8], align 1
968  %.unpack0 = load i8, ptr %data, align 1
969  %.elt1 = getelementptr inbounds [16 x i8], ptr %data, i64 0, i64 1
970  %.unpack1 = load i8, ptr %.elt1, align 1
971  %.elt2 = getelementptr inbounds [16 x i8], ptr %data, i64 0, i64 2
972  %.unpack2 = load i8, ptr %.elt2, align 1
973  %.elt3 = getelementptr inbounds [16 x i8], ptr %data, i64 0, i64 3
974  %.unpack3 = load i8, ptr %.elt3, align 1
975  %.elt4 = getelementptr inbounds [16 x i8], ptr %data, i64 0, i64 4
976  %.unpack4 = load i8, ptr %.elt4, align 1
977  %.elt5 = getelementptr inbounds [16 x i8], ptr %data, i64 0, i64 5
978  %.unpack5 = load i8, ptr %.elt5, align 1
979  %.elt6 = getelementptr inbounds [16 x i8], ptr %data, i64 0, i64 6
980  %.unpack6 = load i8, ptr %.elt6, align 1
981  %.elt7 = getelementptr inbounds [16 x i8], ptr %data, i64 0, i64 7
982  %.unpack7 = load i8, ptr %.elt7, align 1
983  %.elt8 = getelementptr inbounds [16 x i8], ptr %data, i64 0, i64 8
984  %.unpack8 = load i8, ptr %.elt8, align 1
985  %.elt9 = getelementptr inbounds [16 x i8], ptr %data, i64 0, i64 9
986  %.unpack9 = load i8, ptr %.elt9, align 1
987  %.elt10 = getelementptr inbounds [16 x i8], ptr %data, i64 0, i64 10
988  %.unpack10 = load i8, ptr %.elt10, align 1
989  %.elt11 = getelementptr inbounds [16 x i8], ptr %data, i64 0, i64 11
990  %.unpack11 = load i8, ptr %.elt11, align 1
991  store i8 %.unpack0, ptr %_param_data, align 1
992  %.temp.1.gep = getelementptr inbounds [16 x i8], ptr %_param_data, i64 0, i64 1
993  store i8 %.unpack1, ptr %.temp.1.gep, align 1
994  %.temp.2.gep = getelementptr inbounds [16 x i8], ptr %_param_data, i64 0, i64 2
995  store i8 %.unpack2, ptr %.temp.2.gep, align 1
996  %.temp.3.gep = getelementptr inbounds [16 x i8], ptr %_param_data, i64 0, i64 3
997  store i8 %.unpack3, ptr %.temp.3.gep, align 1
998  %.temp.4.gep = getelementptr inbounds [16 x i8], ptr %_param_data, i64 0, i64 4
999  store i8 %.unpack4, ptr %.temp.4.gep, align 1
1000  %.temp.5.gep = getelementptr inbounds [16 x i8], ptr %_param_data, i64 0, i64 5
1001  store i8 %.unpack5, ptr %.temp.5.gep, align 1
1002  %.temp.6.gep = getelementptr inbounds [16 x i8], ptr %_param_data, i64 0, i64 6
1003  store i8 %.unpack6, ptr %.temp.6.gep, align 1
1004  %.temp.7.gep = getelementptr inbounds [16 x i8], ptr %_param_data, i64 0, i64 7
1005  store i8 %.unpack7, ptr %.temp.7.gep, align 1
1006  %.temp.8.gep = getelementptr inbounds [16 x i8], ptr %_param_data, i64 0, i64 8
1007  store i8 %.unpack8, ptr %.temp.8.gep, align 1
1008  %.temp.9.gep = getelementptr inbounds [16 x i8], ptr %_param_data, i64 0, i64 9
1009  store i8 %.unpack9, ptr %.temp.9.gep, align 1
1010  %.temp.10.gep = getelementptr inbounds [16 x i8], ptr %_param_data, i64 0, i64 10
1011  store i8 %.unpack10, ptr %.temp.10.gep, align 1
1012  %.temp.11.gep = getelementptr inbounds [16 x i8], ptr %_param_data, i64 0, i64 11
1013  store i8 %.unpack11, ptr %.temp.11.gep, align 1
1014  call void @callee(ptr nonnull %_param_data)
1015  ret i8 0
1016}
1017
1018define signext i8 @caller_18(ptr nocapture readonly byval([18 x i8]) %data) #0 {
1019; P8LE-LABEL: caller_18:
1020; P8LE:       # %bb.0: # %entry
1021; P8LE-NEXT:    mflr r0
1022; P8LE-NEXT:    stdu r1, -96(r1)
1023; P8LE-NEXT:    std r0, 112(r1)
1024; P8LE-NEXT:    sth r5, 64(r1)
1025; P8LE-NEXT:    addi r5, r1, 78
1026; P8LE-NEXT:    std r3, 48(r1)
1027; P8LE-NEXT:    std r4, 56(r1)
1028; P8LE-NEXT:    stw r4, 86(r1)
1029; P8LE-NEXT:    stdx r3, 0, r5
1030; P8LE-NEXT:    mr r3, r5
1031; P8LE-NEXT:    bl callee
1032; P8LE-NEXT:    nop
1033; P8LE-NEXT:    li r3, 0
1034; P8LE-NEXT:    addi r1, r1, 96
1035; P8LE-NEXT:    ld r0, 16(r1)
1036; P8LE-NEXT:    mtlr r0
1037; P8LE-NEXT:    blr
1038;
1039; P9LE-LABEL: caller_18:
1040; P9LE:       # %bb.0: # %entry
1041; P9LE-NEXT:    mflr r0
1042; P9LE-NEXT:    stdu r1, -96(r1)
1043; P9LE-NEXT:    std r0, 112(r1)
1044; P9LE-NEXT:    sth r5, 64(r1)
1045; P9LE-NEXT:    addi r5, r1, 78
1046; P9LE-NEXT:    std r3, 48(r1)
1047; P9LE-NEXT:    std r4, 56(r1)
1048; P9LE-NEXT:    stw r4, 86(r1)
1049; P9LE-NEXT:    stdx r3, 0, r5
1050; P9LE-NEXT:    mr r3, r5
1051; P9LE-NEXT:    bl callee
1052; P9LE-NEXT:    nop
1053; P9LE-NEXT:    li r3, 0
1054; P9LE-NEXT:    addi r1, r1, 96
1055; P9LE-NEXT:    ld r0, 16(r1)
1056; P9LE-NEXT:    mtlr r0
1057; P9LE-NEXT:    blr
1058;
1059; P10LE-LABEL: caller_18:
1060; P10LE:       # %bb.0: # %entry
1061; P10LE-NEXT:    mflr r0
1062; P10LE-NEXT:    std r0, 16(r1)
1063; P10LE-NEXT:    stdu r1, -96(r1)
1064; P10LE-NEXT:    sth r5, 64(r1)
1065; P10LE-NEXT:    addi r5, r1, 78
1066; P10LE-NEXT:    std r3, 48(r1)
1067; P10LE-NEXT:    std r4, 56(r1)
1068; P10LE-NEXT:    stw r4, 86(r1)
1069; P10LE-NEXT:    stdx r3, 0, r5
1070; P10LE-NEXT:    mr r3, r5
1071; P10LE-NEXT:    bl callee@notoc
1072; P10LE-NEXT:    li r3, 0
1073; P10LE-NEXT:    addi r1, r1, 96
1074; P10LE-NEXT:    ld r0, 16(r1)
1075; P10LE-NEXT:    mtlr r0
1076; P10LE-NEXT:    blr
1077;
1078; P8BE-LABEL: caller_18:
1079; P8BE:       # %bb.0: # %entry
1080; P8BE-NEXT:    mflr r0
1081; P8BE-NEXT:    stdu r1, -144(r1)
1082; P8BE-NEXT:    std r0, 160(r1)
1083; P8BE-NEXT:    std r4, 200(r1)
1084; P8BE-NEXT:    sth r5, 208(r1)
1085; P8BE-NEXT:    rldicl r5, r4, 32, 32
1086; P8BE-NEXT:    addi r4, r1, 126
1087; P8BE-NEXT:    std r3, 192(r1)
1088; P8BE-NEXT:    stdx r3, 0, r4
1089; P8BE-NEXT:    mr r3, r4
1090; P8BE-NEXT:    stw r5, 134(r1)
1091; P8BE-NEXT:    bl callee
1092; P8BE-NEXT:    nop
1093; P8BE-NEXT:    li r3, 0
1094; P8BE-NEXT:    addi r1, r1, 144
1095; P8BE-NEXT:    ld r0, 16(r1)
1096; P8BE-NEXT:    mtlr r0
1097; P8BE-NEXT:    blr
1098;
1099; P9BE-LABEL: caller_18:
1100; P9BE:       # %bb.0: # %entry
1101; P9BE-NEXT:    mflr r0
1102; P9BE-NEXT:    stdu r1, -144(r1)
1103; P9BE-NEXT:    std r0, 160(r1)
1104; P9BE-NEXT:    std r4, 200(r1)
1105; P9BE-NEXT:    sth r5, 208(r1)
1106; P9BE-NEXT:    rldicl r5, r4, 32, 32
1107; P9BE-NEXT:    addi r4, r1, 126
1108; P9BE-NEXT:    std r3, 192(r1)
1109; P9BE-NEXT:    stdx r3, 0, r4
1110; P9BE-NEXT:    mr r3, r4
1111; P9BE-NEXT:    stw r5, 134(r1)
1112; P9BE-NEXT:    bl callee
1113; P9BE-NEXT:    nop
1114; P9BE-NEXT:    li r3, 0
1115; P9BE-NEXT:    addi r1, r1, 144
1116; P9BE-NEXT:    ld r0, 16(r1)
1117; P9BE-NEXT:    mtlr r0
1118; P9BE-NEXT:    blr
1119;
1120; P10BE-LABEL: caller_18:
1121; P10BE:       # %bb.0: # %entry
1122; P10BE-NEXT:    mflr r0
1123; P10BE-NEXT:    std r0, 16(r1)
1124; P10BE-NEXT:    stdu r1, -144(r1)
1125; P10BE-NEXT:    std r3, 192(r1)
1126; P10BE-NEXT:    std r4, 200(r1)
1127; P10BE-NEXT:    sth r5, 208(r1)
1128; P10BE-NEXT:    rldicl r5, r4, 32, 32
1129; P10BE-NEXT:    addi r4, r1, 126
1130; P10BE-NEXT:    stdx r3, 0, r4
1131; P10BE-NEXT:    mr r3, r4
1132; P10BE-NEXT:    stw r5, 134(r1)
1133; P10BE-NEXT:    bl callee
1134; P10BE-NEXT:    nop
1135; P10BE-NEXT:    li r3, 0
1136; P10BE-NEXT:    addi r1, r1, 144
1137; P10BE-NEXT:    ld r0, 16(r1)
1138; P10BE-NEXT:    mtlr r0
1139; P10BE-NEXT:    blr
1140entry:
1141  %_param_data = alloca [18 x i8], align 1
1142  %.unpack0 = load i8, ptr %data, align 1
1143  %.elt1 = getelementptr inbounds [18 x i8], ptr %data, i64 0, i64 1
1144  %.unpack1 = load i8, ptr %.elt1, align 1
1145  %.elt2 = getelementptr inbounds [18 x i8], ptr %data, i64 0, i64 2
1146  %.unpack2 = load i8, ptr %.elt2, align 1
1147  %.elt3 = getelementptr inbounds [18 x i8], ptr %data, i64 0, i64 3
1148  %.unpack3 = load i8, ptr %.elt3, align 1
1149  %.elt4 = getelementptr inbounds [18 x i8], ptr %data, i64 0, i64 4
1150  %.unpack4 = load i8, ptr %.elt4, align 1
1151  %.elt5 = getelementptr inbounds [18 x i8], ptr %data, i64 0, i64 5
1152  %.unpack5 = load i8, ptr %.elt5, align 1
1153  %.elt6 = getelementptr inbounds [18 x i8], ptr %data, i64 0, i64 6
1154  %.unpack6 = load i8, ptr %.elt6, align 1
1155  %.elt7 = getelementptr inbounds [18 x i8], ptr %data, i64 0, i64 7
1156  %.unpack7 = load i8, ptr %.elt7, align 1
1157  %.elt8 = getelementptr inbounds [18 x i8], ptr %data, i64 0, i64 8
1158  %.unpack8 = load i8, ptr %.elt8, align 1
1159  %.elt9 = getelementptr inbounds [18 x i8], ptr %data, i64 0, i64 9
1160  %.unpack9 = load i8, ptr %.elt9, align 1
1161  %.elt10 = getelementptr inbounds [18 x i8], ptr %data, i64 0, i64 10
1162  %.unpack10 = load i8, ptr %.elt10, align 1
1163  %.elt11 = getelementptr inbounds [18 x i8], ptr %data, i64 0, i64 11
1164  %.unpack11 = load i8, ptr %.elt11, align 1
1165  store i8 %.unpack0, ptr %_param_data, align 1
1166  %.temp.1.gep = getelementptr inbounds [18 x i8], ptr %_param_data, i64 0, i64 1
1167  store i8 %.unpack1, ptr %.temp.1.gep, align 1
1168  %.temp.2.gep = getelementptr inbounds [18 x i8], ptr %_param_data, i64 0, i64 2
1169  store i8 %.unpack2, ptr %.temp.2.gep, align 1
1170  %.temp.3.gep = getelementptr inbounds [18 x i8], ptr %_param_data, i64 0, i64 3
1171  store i8 %.unpack3, ptr %.temp.3.gep, align 1
1172  %.temp.4.gep = getelementptr inbounds [18 x i8], ptr %_param_data, i64 0, i64 4
1173  store i8 %.unpack4, ptr %.temp.4.gep, align 1
1174  %.temp.5.gep = getelementptr inbounds [18 x i8], ptr %_param_data, i64 0, i64 5
1175  store i8 %.unpack5, ptr %.temp.5.gep, align 1
1176  %.temp.6.gep = getelementptr inbounds [18 x i8], ptr %_param_data, i64 0, i64 6
1177  store i8 %.unpack6, ptr %.temp.6.gep, align 1
1178  %.temp.7.gep = getelementptr inbounds [18 x i8], ptr %_param_data, i64 0, i64 7
1179  store i8 %.unpack7, ptr %.temp.7.gep, align 1
1180  %.temp.8.gep = getelementptr inbounds [18 x i8], ptr %_param_data, i64 0, i64 8
1181  store i8 %.unpack8, ptr %.temp.8.gep, align 1
1182  %.temp.9.gep = getelementptr inbounds [18 x i8], ptr %_param_data, i64 0, i64 9
1183  store i8 %.unpack9, ptr %.temp.9.gep, align 1
1184  %.temp.10.gep = getelementptr inbounds [18 x i8], ptr %_param_data, i64 0, i64 10
1185  store i8 %.unpack10, ptr %.temp.10.gep, align 1
1186  %.temp.11.gep = getelementptr inbounds [18 x i8], ptr %_param_data, i64 0, i64 11
1187  store i8 %.unpack11, ptr %.temp.11.gep, align 1
1188  call void @callee(ptr nonnull %_param_data)
1189  ret i8 0
1190}
1191
1192
1193
1194declare void @callee(ptr) local_unnamed_addr #0
1195declare void @callee_9(ptr nocapture readonly byval([9 x i8]) %data) local_unnamed_addr #0
1196
1197attributes #0 = { nounwind }
1198
1199