xref: /llvm-project/llvm/test/CodeGen/PowerPC/ppc64-byval-multi-store.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_1(ptr nocapture readonly byval([1 x i8]) %data) #0 {
16; P8LE-LABEL: caller_1:
17; P8LE:       # %bb.0: # %entry
18; P8LE-NEXT:    mflr r0
19; P8LE-NEXT:    stdu r1, -64(r1)
20; P8LE-NEXT:    std r0, 80(r1)
21; P8LE-NEXT:    stb r3, 48(r1)
22; P8LE-NEXT:    lbz r3, 48(r1)
23; P8LE-NEXT:    stb r3, 63(r1)
24; P8LE-NEXT:    addi r3, r1, 63
25; P8LE-NEXT:    bl callee
26; P8LE-NEXT:    nop
27; P8LE-NEXT:    li r3, 0
28; P8LE-NEXT:    addi r1, r1, 64
29; P8LE-NEXT:    ld r0, 16(r1)
30; P8LE-NEXT:    mtlr r0
31; P8LE-NEXT:    blr
32;
33; P9LE-LABEL: caller_1:
34; P9LE:       # %bb.0: # %entry
35; P9LE-NEXT:    mflr r0
36; P9LE-NEXT:    stdu r1, -64(r1)
37; P9LE-NEXT:    std r0, 80(r1)
38; P9LE-NEXT:    stb r3, 48(r1)
39; P9LE-NEXT:    lbz r3, 48(r1)
40; P9LE-NEXT:    stb r3, 63(r1)
41; P9LE-NEXT:    addi r3, r1, 63
42; P9LE-NEXT:    bl callee
43; P9LE-NEXT:    nop
44; P9LE-NEXT:    li r3, 0
45; P9LE-NEXT:    addi r1, r1, 64
46; P9LE-NEXT:    ld r0, 16(r1)
47; P9LE-NEXT:    mtlr r0
48; P9LE-NEXT:    blr
49;
50; P10LE-LABEL: caller_1:
51; P10LE:       # %bb.0: # %entry
52; P10LE-NEXT:    mflr r0
53; P10LE-NEXT:    std r0, 16(r1)
54; P10LE-NEXT:    stdu r1, -64(r1)
55; P10LE-NEXT:    stb r3, 48(r1)
56; P10LE-NEXT:    lbz r3, 48(r1)
57; P10LE-NEXT:    stb r3, 63(r1)
58; P10LE-NEXT:    addi r3, r1, 63
59; P10LE-NEXT:    bl callee@notoc
60; P10LE-NEXT:    li r3, 0
61; P10LE-NEXT:    addi r1, r1, 64
62; P10LE-NEXT:    ld r0, 16(r1)
63; P10LE-NEXT:    mtlr r0
64; P10LE-NEXT:    blr
65;
66; P8BE-LABEL: caller_1:
67; P8BE:       # %bb.0: # %entry
68; P8BE-NEXT:    mflr r0
69; P8BE-NEXT:    stdu r1, -128(r1)
70; P8BE-NEXT:    std r0, 144(r1)
71; P8BE-NEXT:    stb r3, 183(r1)
72; P8BE-NEXT:    lbz r3, 183(r1)
73; P8BE-NEXT:    stb r3, 127(r1)
74; P8BE-NEXT:    addi r3, r1, 127
75; P8BE-NEXT:    bl callee
76; P8BE-NEXT:    nop
77; P8BE-NEXT:    li r3, 0
78; P8BE-NEXT:    addi r1, r1, 128
79; P8BE-NEXT:    ld r0, 16(r1)
80; P8BE-NEXT:    mtlr r0
81; P8BE-NEXT:    blr
82;
83; P9BE-LABEL: caller_1:
84; P9BE:       # %bb.0: # %entry
85; P9BE-NEXT:    mflr r0
86; P9BE-NEXT:    stdu r1, -128(r1)
87; P9BE-NEXT:    std r0, 144(r1)
88; P9BE-NEXT:    stb r3, 183(r1)
89; P9BE-NEXT:    lbz r3, 183(r1)
90; P9BE-NEXT:    stb r3, 127(r1)
91; P9BE-NEXT:    addi r3, r1, 127
92; P9BE-NEXT:    bl callee
93; P9BE-NEXT:    nop
94; P9BE-NEXT:    li r3, 0
95; P9BE-NEXT:    addi r1, r1, 128
96; P9BE-NEXT:    ld r0, 16(r1)
97; P9BE-NEXT:    mtlr r0
98; P9BE-NEXT:    blr
99;
100; P10BE-LABEL: caller_1:
101; P10BE:       # %bb.0: # %entry
102; P10BE-NEXT:    mflr r0
103; P10BE-NEXT:    std r0, 16(r1)
104; P10BE-NEXT:    stdu r1, -128(r1)
105; P10BE-NEXT:    stb r3, 183(r1)
106; P10BE-NEXT:    lbz r3, 183(r1)
107; P10BE-NEXT:    stb r3, 127(r1)
108; P10BE-NEXT:    addi r3, r1, 127
109; P10BE-NEXT:    bl callee
110; P10BE-NEXT:    nop
111; P10BE-NEXT:    li r3, 0
112; P10BE-NEXT:    addi r1, r1, 128
113; P10BE-NEXT:    ld r0, 16(r1)
114; P10BE-NEXT:    mtlr r0
115; P10BE-NEXT:    blr
116entry:
117  %_param_data = alloca [1 x i8], align 1
118  %.unpack = load i8, ptr %data, align 1
119  store i8 %.unpack, ptr %_param_data, align 1
120  call void @callee(ptr nonnull %_param_data)
121  ret i8 0
122}
123
124define signext i8 @caller_2(ptr nocapture readonly byval([2 x i8]) %data) #0 {
125; P8LE-LABEL: caller_2:
126; P8LE:       # %bb.0: # %entry
127; P8LE-NEXT:    mflr r0
128; P8LE-NEXT:    stdu r1, -64(r1)
129; P8LE-NEXT:    std r0, 80(r1)
130; P8LE-NEXT:    sth r3, 48(r1)
131; P8LE-NEXT:    lhz r3, 48(r1)
132; P8LE-NEXT:    sth r3, 62(r1)
133; P8LE-NEXT:    addi r3, r1, 62
134; P8LE-NEXT:    bl callee
135; P8LE-NEXT:    nop
136; P8LE-NEXT:    li r3, 0
137; P8LE-NEXT:    addi r1, r1, 64
138; P8LE-NEXT:    ld r0, 16(r1)
139; P8LE-NEXT:    mtlr r0
140; P8LE-NEXT:    blr
141;
142; P9LE-LABEL: caller_2:
143; P9LE:       # %bb.0: # %entry
144; P9LE-NEXT:    mflr r0
145; P9LE-NEXT:    stdu r1, -64(r1)
146; P9LE-NEXT:    std r0, 80(r1)
147; P9LE-NEXT:    sth r3, 48(r1)
148; P9LE-NEXT:    lhz r3, 48(r1)
149; P9LE-NEXT:    sth r3, 62(r1)
150; P9LE-NEXT:    addi r3, r1, 62
151; P9LE-NEXT:    bl callee
152; P9LE-NEXT:    nop
153; P9LE-NEXT:    li r3, 0
154; P9LE-NEXT:    addi r1, r1, 64
155; P9LE-NEXT:    ld r0, 16(r1)
156; P9LE-NEXT:    mtlr r0
157; P9LE-NEXT:    blr
158;
159; P10LE-LABEL: caller_2:
160; P10LE:       # %bb.0: # %entry
161; P10LE-NEXT:    mflr r0
162; P10LE-NEXT:    std r0, 16(r1)
163; P10LE-NEXT:    stdu r1, -64(r1)
164; P10LE-NEXT:    sth r3, 48(r1)
165; P10LE-NEXT:    lhz r3, 48(r1)
166; P10LE-NEXT:    sth r3, 62(r1)
167; P10LE-NEXT:    addi r3, r1, 62
168; P10LE-NEXT:    bl callee@notoc
169; P10LE-NEXT:    li r3, 0
170; P10LE-NEXT:    addi r1, r1, 64
171; P10LE-NEXT:    ld r0, 16(r1)
172; P10LE-NEXT:    mtlr r0
173; P10LE-NEXT:    blr
174;
175; P8BE-LABEL: caller_2:
176; P8BE:       # %bb.0: # %entry
177; P8BE-NEXT:    mflr r0
178; P8BE-NEXT:    stdu r1, -128(r1)
179; P8BE-NEXT:    std r0, 144(r1)
180; P8BE-NEXT:    sth r3, 182(r1)
181; P8BE-NEXT:    lhz r3, 182(r1)
182; P8BE-NEXT:    sth r3, 126(r1)
183; P8BE-NEXT:    addi r3, r1, 126
184; P8BE-NEXT:    bl callee
185; P8BE-NEXT:    nop
186; P8BE-NEXT:    li r3, 0
187; P8BE-NEXT:    addi r1, r1, 128
188; P8BE-NEXT:    ld r0, 16(r1)
189; P8BE-NEXT:    mtlr r0
190; P8BE-NEXT:    blr
191;
192; P9BE-LABEL: caller_2:
193; P9BE:       # %bb.0: # %entry
194; P9BE-NEXT:    mflr r0
195; P9BE-NEXT:    stdu r1, -128(r1)
196; P9BE-NEXT:    std r0, 144(r1)
197; P9BE-NEXT:    sth r3, 182(r1)
198; P9BE-NEXT:    lhz r3, 182(r1)
199; P9BE-NEXT:    sth r3, 126(r1)
200; P9BE-NEXT:    addi r3, r1, 126
201; P9BE-NEXT:    bl callee
202; P9BE-NEXT:    nop
203; P9BE-NEXT:    li r3, 0
204; P9BE-NEXT:    addi r1, r1, 128
205; P9BE-NEXT:    ld r0, 16(r1)
206; P9BE-NEXT:    mtlr r0
207; P9BE-NEXT:    blr
208;
209; P10BE-LABEL: caller_2:
210; P10BE:       # %bb.0: # %entry
211; P10BE-NEXT:    mflr r0
212; P10BE-NEXT:    std r0, 16(r1)
213; P10BE-NEXT:    stdu r1, -128(r1)
214; P10BE-NEXT:    sth r3, 182(r1)
215; P10BE-NEXT:    lhz r3, 182(r1)
216; P10BE-NEXT:    sth r3, 126(r1)
217; P10BE-NEXT:    addi r3, r1, 126
218; P10BE-NEXT:    bl callee
219; P10BE-NEXT:    nop
220; P10BE-NEXT:    li r3, 0
221; P10BE-NEXT:    addi r1, r1, 128
222; P10BE-NEXT:    ld r0, 16(r1)
223; P10BE-NEXT:    mtlr r0
224; P10BE-NEXT:    blr
225entry:
226  %_param_data = alloca [2 x i8], align 1
227  %.unpack = load i8, ptr %data, align 1
228  %.elt1 = getelementptr inbounds [2 x i8], ptr %data, i64 0, i64 1
229  %.unpack2 = load i8, ptr %.elt1, align 1
230  store i8 %.unpack, ptr %_param_data, align 1
231  %.temp.1.gep = getelementptr inbounds [2 x i8], ptr %_param_data, i64 0, i64 1
232  store i8 %.unpack2, ptr %.temp.1.gep, align 1
233  call void @callee(ptr nonnull %_param_data)
234  ret i8 0
235}
236
237define signext i8 @caller_3(ptr nocapture readonly byval([3 x i8]) %data) #0 {
238; P8LE-LABEL: caller_3:
239; P8LE:       # %bb.0: # %entry
240; P8LE-NEXT:    mflr r0
241; P8LE-NEXT:    stdu r1, -64(r1)
242; P8LE-NEXT:    std r0, 80(r1)
243; P8LE-NEXT:    sth r3, 48(r1)
244; P8LE-NEXT:    rldicl r3, r3, 48, 16
245; P8LE-NEXT:    stb r3, 50(r1)
246; P8LE-NEXT:    lhz r3, 48(r1)
247; P8LE-NEXT:    lbz r4, 50(r1)
248; P8LE-NEXT:    sth r3, 61(r1)
249; P8LE-NEXT:    addi r3, r1, 61
250; P8LE-NEXT:    stb r4, 63(r1)
251; P8LE-NEXT:    bl callee
252; P8LE-NEXT:    nop
253; P8LE-NEXT:    li r3, 0
254; P8LE-NEXT:    addi r1, r1, 64
255; P8LE-NEXT:    ld r0, 16(r1)
256; P8LE-NEXT:    mtlr r0
257; P8LE-NEXT:    blr
258;
259; P9LE-LABEL: caller_3:
260; P9LE:       # %bb.0: # %entry
261; P9LE-NEXT:    mflr r0
262; P9LE-NEXT:    stdu r1, -64(r1)
263; P9LE-NEXT:    std r0, 80(r1)
264; P9LE-NEXT:    sth r3, 48(r1)
265; P9LE-NEXT:    rldicl r3, r3, 48, 16
266; P9LE-NEXT:    stb r3, 50(r1)
267; P9LE-NEXT:    lhz r3, 48(r1)
268; P9LE-NEXT:    lbz r4, 50(r1)
269; P9LE-NEXT:    sth r3, 61(r1)
270; P9LE-NEXT:    addi r3, r1, 61
271; P9LE-NEXT:    stb r4, 63(r1)
272; P9LE-NEXT:    bl callee
273; P9LE-NEXT:    nop
274; P9LE-NEXT:    li r3, 0
275; P9LE-NEXT:    addi r1, r1, 64
276; P9LE-NEXT:    ld r0, 16(r1)
277; P9LE-NEXT:    mtlr r0
278; P9LE-NEXT:    blr
279;
280; P10LE-LABEL: caller_3:
281; P10LE:       # %bb.0: # %entry
282; P10LE-NEXT:    mflr r0
283; P10LE-NEXT:    std r0, 16(r1)
284; P10LE-NEXT:    stdu r1, -64(r1)
285; P10LE-NEXT:    sth r3, 48(r1)
286; P10LE-NEXT:    rldicl r3, r3, 48, 16
287; P10LE-NEXT:    stb r3, 50(r1)
288; P10LE-NEXT:    lhz r3, 48(r1)
289; P10LE-NEXT:    lbz r4, 50(r1)
290; P10LE-NEXT:    sth r3, 61(r1)
291; P10LE-NEXT:    addi r3, r1, 61
292; P10LE-NEXT:    stb r4, 63(r1)
293; P10LE-NEXT:    bl callee@notoc
294; P10LE-NEXT:    li r3, 0
295; P10LE-NEXT:    addi r1, r1, 64
296; P10LE-NEXT:    ld r0, 16(r1)
297; P10LE-NEXT:    mtlr r0
298; P10LE-NEXT:    blr
299;
300; P8BE-LABEL: caller_3:
301; P8BE:       # %bb.0: # %entry
302; P8BE-NEXT:    mflr r0
303; P8BE-NEXT:    stdu r1, -128(r1)
304; P8BE-NEXT:    rldicl r4, r3, 56, 8
305; P8BE-NEXT:    std r0, 144(r1)
306; P8BE-NEXT:    stb r3, 183(r1)
307; P8BE-NEXT:    sth r4, 181(r1)
308; P8BE-NEXT:    lbz r4, 183(r1)
309; P8BE-NEXT:    lhz r3, 181(r1)
310; P8BE-NEXT:    stb r4, 127(r1)
311; P8BE-NEXT:    sth r3, 125(r1)
312; P8BE-NEXT:    addi r3, r1, 125
313; P8BE-NEXT:    bl callee
314; P8BE-NEXT:    nop
315; P8BE-NEXT:    li r3, 0
316; P8BE-NEXT:    addi r1, r1, 128
317; P8BE-NEXT:    ld r0, 16(r1)
318; P8BE-NEXT:    mtlr r0
319; P8BE-NEXT:    blr
320;
321; P9BE-LABEL: caller_3:
322; P9BE:       # %bb.0: # %entry
323; P9BE-NEXT:    mflr r0
324; P9BE-NEXT:    stdu r1, -128(r1)
325; P9BE-NEXT:    rldicl r4, r3, 56, 8
326; P9BE-NEXT:    std r0, 144(r1)
327; P9BE-NEXT:    stb r3, 183(r1)
328; P9BE-NEXT:    sth r4, 181(r1)
329; P9BE-NEXT:    lbz r4, 183(r1)
330; P9BE-NEXT:    lhz r3, 181(r1)
331; P9BE-NEXT:    stb r4, 127(r1)
332; P9BE-NEXT:    sth r3, 125(r1)
333; P9BE-NEXT:    addi r3, r1, 125
334; P9BE-NEXT:    bl callee
335; P9BE-NEXT:    nop
336; P9BE-NEXT:    li r3, 0
337; P9BE-NEXT:    addi r1, r1, 128
338; P9BE-NEXT:    ld r0, 16(r1)
339; P9BE-NEXT:    mtlr r0
340; P9BE-NEXT:    blr
341;
342; P10BE-LABEL: caller_3:
343; P10BE:       # %bb.0: # %entry
344; P10BE-NEXT:    mflr r0
345; P10BE-NEXT:    std r0, 16(r1)
346; P10BE-NEXT:    stdu r1, -128(r1)
347; P10BE-NEXT:    rldicl r4, r3, 56, 8
348; P10BE-NEXT:    stb r3, 183(r1)
349; P10BE-NEXT:    sth r4, 181(r1)
350; P10BE-NEXT:    lbz r4, 183(r1)
351; P10BE-NEXT:    lhz r3, 181(r1)
352; P10BE-NEXT:    stb r4, 127(r1)
353; P10BE-NEXT:    sth r3, 125(r1)
354; P10BE-NEXT:    addi r3, r1, 125
355; P10BE-NEXT:    bl callee
356; P10BE-NEXT:    nop
357; P10BE-NEXT:    li r3, 0
358; P10BE-NEXT:    addi r1, r1, 128
359; P10BE-NEXT:    ld r0, 16(r1)
360; P10BE-NEXT:    mtlr r0
361; P10BE-NEXT:    blr
362entry:
363  %_param_data = alloca [3 x i8], align 1
364  %.unpack = load i8, ptr %data, align 1
365  %.elt1 = getelementptr inbounds [3 x i8], ptr %data, i64 0, i64 1
366  %.unpack2 = load i8, ptr %.elt1, align 1
367  %.elt3 = getelementptr inbounds [3 x i8], ptr %data, i64 0, i64 2
368  %.unpack4 = load i8, ptr %.elt3, align 1
369  store i8 %.unpack, ptr %_param_data, align 1
370  %.temp.1.gep = getelementptr inbounds [3 x i8], ptr %_param_data, i64 0, i64 1
371  store i8 %.unpack2, ptr %.temp.1.gep, align 1
372  %.temp.2.gep = getelementptr inbounds [3 x i8], ptr %_param_data, i64 0, i64 2
373  store i8 %.unpack4, ptr %.temp.2.gep, align 1
374  call void @callee(ptr nonnull %_param_data)
375  ret i8 0
376}
377
378define signext i8 @caller_4(ptr nocapture readonly byval([4 x i8]) %data) #0 {
379; P8LE-LABEL: caller_4:
380; P8LE:       # %bb.0: # %entry
381; P8LE-NEXT:    mflr r0
382; P8LE-NEXT:    stdu r1, -64(r1)
383; P8LE-NEXT:    std r0, 80(r1)
384; P8LE-NEXT:    stw r3, 48(r1)
385; P8LE-NEXT:    lwz r3, 48(r1)
386; P8LE-NEXT:    stw r3, 60(r1)
387; P8LE-NEXT:    addi r3, r1, 60
388; P8LE-NEXT:    bl callee
389; P8LE-NEXT:    nop
390; P8LE-NEXT:    li r3, 0
391; P8LE-NEXT:    addi r1, r1, 64
392; P8LE-NEXT:    ld r0, 16(r1)
393; P8LE-NEXT:    mtlr r0
394; P8LE-NEXT:    blr
395;
396; P9LE-LABEL: caller_4:
397; P9LE:       # %bb.0: # %entry
398; P9LE-NEXT:    mflr r0
399; P9LE-NEXT:    stdu r1, -64(r1)
400; P9LE-NEXT:    std r0, 80(r1)
401; P9LE-NEXT:    stw r3, 48(r1)
402; P9LE-NEXT:    lwz r3, 48(r1)
403; P9LE-NEXT:    stw r3, 60(r1)
404; P9LE-NEXT:    addi r3, r1, 60
405; P9LE-NEXT:    bl callee
406; P9LE-NEXT:    nop
407; P9LE-NEXT:    li r3, 0
408; P9LE-NEXT:    addi r1, r1, 64
409; P9LE-NEXT:    ld r0, 16(r1)
410; P9LE-NEXT:    mtlr r0
411; P9LE-NEXT:    blr
412;
413; P10LE-LABEL: caller_4:
414; P10LE:       # %bb.0: # %entry
415; P10LE-NEXT:    mflr r0
416; P10LE-NEXT:    std r0, 16(r1)
417; P10LE-NEXT:    stdu r1, -64(r1)
418; P10LE-NEXT:    stw r3, 48(r1)
419; P10LE-NEXT:    lwz r3, 48(r1)
420; P10LE-NEXT:    stw r3, 60(r1)
421; P10LE-NEXT:    addi r3, r1, 60
422; P10LE-NEXT:    bl callee@notoc
423; P10LE-NEXT:    li r3, 0
424; P10LE-NEXT:    addi r1, r1, 64
425; P10LE-NEXT:    ld r0, 16(r1)
426; P10LE-NEXT:    mtlr r0
427; P10LE-NEXT:    blr
428;
429; P8BE-LABEL: caller_4:
430; P8BE:       # %bb.0: # %entry
431; P8BE-NEXT:    mflr r0
432; P8BE-NEXT:    stdu r1, -128(r1)
433; P8BE-NEXT:    std r0, 144(r1)
434; P8BE-NEXT:    stw r3, 180(r1)
435; P8BE-NEXT:    lwz r3, 180(r1)
436; P8BE-NEXT:    stw r3, 124(r1)
437; P8BE-NEXT:    addi r3, r1, 124
438; P8BE-NEXT:    bl callee
439; P8BE-NEXT:    nop
440; P8BE-NEXT:    li r3, 0
441; P8BE-NEXT:    addi r1, r1, 128
442; P8BE-NEXT:    ld r0, 16(r1)
443; P8BE-NEXT:    mtlr r0
444; P8BE-NEXT:    blr
445;
446; P9BE-LABEL: caller_4:
447; P9BE:       # %bb.0: # %entry
448; P9BE-NEXT:    mflr r0
449; P9BE-NEXT:    stdu r1, -128(r1)
450; P9BE-NEXT:    std r0, 144(r1)
451; P9BE-NEXT:    stw r3, 180(r1)
452; P9BE-NEXT:    lwz r3, 180(r1)
453; P9BE-NEXT:    stw r3, 124(r1)
454; P9BE-NEXT:    addi r3, r1, 124
455; P9BE-NEXT:    bl callee
456; P9BE-NEXT:    nop
457; P9BE-NEXT:    li r3, 0
458; P9BE-NEXT:    addi r1, r1, 128
459; P9BE-NEXT:    ld r0, 16(r1)
460; P9BE-NEXT:    mtlr r0
461; P9BE-NEXT:    blr
462;
463; P10BE-LABEL: caller_4:
464; P10BE:       # %bb.0: # %entry
465; P10BE-NEXT:    mflr r0
466; P10BE-NEXT:    std r0, 16(r1)
467; P10BE-NEXT:    stdu r1, -128(r1)
468; P10BE-NEXT:    stw r3, 180(r1)
469; P10BE-NEXT:    lwz r3, 180(r1)
470; P10BE-NEXT:    stw r3, 124(r1)
471; P10BE-NEXT:    addi r3, r1, 124
472; P10BE-NEXT:    bl callee
473; P10BE-NEXT:    nop
474; P10BE-NEXT:    li r3, 0
475; P10BE-NEXT:    addi r1, r1, 128
476; P10BE-NEXT:    ld r0, 16(r1)
477; P10BE-NEXT:    mtlr r0
478; P10BE-NEXT:    blr
479entry:
480  %_param_data = alloca [4 x i8], align 1
481  %.unpack = load i8, ptr %data, align 1
482  %.elt1 = getelementptr inbounds [4 x i8], ptr %data, i64 0, i64 1
483  %.unpack2 = load i8, ptr %.elt1, align 1
484  %.elt3 = getelementptr inbounds [4 x i8], ptr %data, i64 0, i64 2
485  %.unpack4 = load i8, ptr %.elt3, align 1
486  %.elt5 = getelementptr inbounds [4 x i8], ptr %data, i64 0, i64 3
487  %.unpack6 = load i8, ptr %.elt5, align 1
488  store i8 %.unpack, ptr %_param_data, align 1
489  %.temp.1.gep = getelementptr inbounds [4 x i8], ptr %_param_data, i64 0, i64 1
490  store i8 %.unpack2, ptr %.temp.1.gep, align 1
491  %.temp.2.gep = getelementptr inbounds [4 x i8], ptr %_param_data, i64 0, i64 2
492  store i8 %.unpack4, ptr %.temp.2.gep, align 1
493  %.temp.3.gep = getelementptr inbounds [4 x i8], ptr %_param_data, i64 0, i64 3
494  store i8 %.unpack6, ptr %.temp.3.gep, align 1
495  call void @callee(ptr nonnull %_param_data)
496  ret i8 0
497}
498
499define signext i8 @caller_5(ptr nocapture readonly byval([5 x i8]) %data) #0 {
500; P8LE-LABEL: caller_5:
501; P8LE:       # %bb.0: # %entry
502; P8LE-NEXT:    mflr r0
503; P8LE-NEXT:    stdu r1, -64(r1)
504; P8LE-NEXT:    rldicl r4, r3, 32, 32
505; P8LE-NEXT:    std r0, 80(r1)
506; P8LE-NEXT:    stw r3, 48(r1)
507; P8LE-NEXT:    stw r3, 59(r1)
508; P8LE-NEXT:    addi r3, r1, 59
509; P8LE-NEXT:    stb r4, 52(r1)
510; P8LE-NEXT:    lbz r4, 52(r1)
511; P8LE-NEXT:    stb r4, 63(r1)
512; P8LE-NEXT:    bl callee
513; P8LE-NEXT:    nop
514; P8LE-NEXT:    li r3, 0
515; P8LE-NEXT:    addi r1, r1, 64
516; P8LE-NEXT:    ld r0, 16(r1)
517; P8LE-NEXT:    mtlr r0
518; P8LE-NEXT:    blr
519;
520; P9LE-LABEL: caller_5:
521; P9LE:       # %bb.0: # %entry
522; P9LE-NEXT:    mflr r0
523; P9LE-NEXT:    stdu r1, -64(r1)
524; P9LE-NEXT:    rldicl r4, r3, 32, 32
525; P9LE-NEXT:    std r0, 80(r1)
526; P9LE-NEXT:    stw r3, 48(r1)
527; P9LE-NEXT:    stw r3, 59(r1)
528; P9LE-NEXT:    addi r3, r1, 59
529; P9LE-NEXT:    stb r4, 52(r1)
530; P9LE-NEXT:    lbz r4, 52(r1)
531; P9LE-NEXT:    stb r4, 63(r1)
532; P9LE-NEXT:    bl callee
533; P9LE-NEXT:    nop
534; P9LE-NEXT:    li r3, 0
535; P9LE-NEXT:    addi r1, r1, 64
536; P9LE-NEXT:    ld r0, 16(r1)
537; P9LE-NEXT:    mtlr r0
538; P9LE-NEXT:    blr
539;
540; P10LE-LABEL: caller_5:
541; P10LE:       # %bb.0: # %entry
542; P10LE-NEXT:    mflr r0
543; P10LE-NEXT:    std r0, 16(r1)
544; P10LE-NEXT:    stdu r1, -64(r1)
545; P10LE-NEXT:    rldicl r4, r3, 32, 32
546; P10LE-NEXT:    stw r3, 48(r1)
547; P10LE-NEXT:    stw r3, 59(r1)
548; P10LE-NEXT:    addi r3, r1, 59
549; P10LE-NEXT:    stb r4, 52(r1)
550; P10LE-NEXT:    lbz r4, 52(r1)
551; P10LE-NEXT:    stb r4, 63(r1)
552; P10LE-NEXT:    bl callee@notoc
553; P10LE-NEXT:    li r3, 0
554; P10LE-NEXT:    addi r1, r1, 64
555; P10LE-NEXT:    ld r0, 16(r1)
556; P10LE-NEXT:    mtlr r0
557; P10LE-NEXT:    blr
558;
559; P8BE-LABEL: caller_5:
560; P8BE:       # %bb.0: # %entry
561; P8BE-NEXT:    mflr r0
562; P8BE-NEXT:    stdu r1, -128(r1)
563; P8BE-NEXT:    std r0, 144(r1)
564; P8BE-NEXT:    stb r3, 183(r1)
565; P8BE-NEXT:    rldicl r3, r3, 56, 8
566; P8BE-NEXT:    lbz r4, 183(r1)
567; P8BE-NEXT:    stw r3, 179(r1)
568; P8BE-NEXT:    stw r3, 123(r1)
569; P8BE-NEXT:    addi r3, r1, 123
570; P8BE-NEXT:    stb r4, 127(r1)
571; P8BE-NEXT:    bl callee
572; P8BE-NEXT:    nop
573; P8BE-NEXT:    li r3, 0
574; P8BE-NEXT:    addi r1, r1, 128
575; P8BE-NEXT:    ld r0, 16(r1)
576; P8BE-NEXT:    mtlr r0
577; P8BE-NEXT:    blr
578;
579; P9BE-LABEL: caller_5:
580; P9BE:       # %bb.0: # %entry
581; P9BE-NEXT:    mflr r0
582; P9BE-NEXT:    stdu r1, -128(r1)
583; P9BE-NEXT:    std r0, 144(r1)
584; P9BE-NEXT:    stb r3, 183(r1)
585; P9BE-NEXT:    lbz r4, 183(r1)
586; P9BE-NEXT:    rldicl r3, r3, 56, 8
587; P9BE-NEXT:    stw r3, 179(r1)
588; P9BE-NEXT:    stw r3, 123(r1)
589; P9BE-NEXT:    addi r3, r1, 123
590; P9BE-NEXT:    stb r4, 127(r1)
591; P9BE-NEXT:    bl callee
592; P9BE-NEXT:    nop
593; P9BE-NEXT:    li r3, 0
594; P9BE-NEXT:    addi r1, r1, 128
595; P9BE-NEXT:    ld r0, 16(r1)
596; P9BE-NEXT:    mtlr r0
597; P9BE-NEXT:    blr
598;
599; P10BE-LABEL: caller_5:
600; P10BE:       # %bb.0: # %entry
601; P10BE-NEXT:    mflr r0
602; P10BE-NEXT:    std r0, 16(r1)
603; P10BE-NEXT:    stdu r1, -128(r1)
604; P10BE-NEXT:    stb r3, 183(r1)
605; P10BE-NEXT:    rldicl r3, r3, 56, 8
606; P10BE-NEXT:    lbz r4, 183(r1)
607; P10BE-NEXT:    stw r3, 179(r1)
608; P10BE-NEXT:    stw r3, 123(r1)
609; P10BE-NEXT:    addi r3, r1, 123
610; P10BE-NEXT:    stb r4, 127(r1)
611; P10BE-NEXT:    bl callee
612; P10BE-NEXT:    nop
613; P10BE-NEXT:    li r3, 0
614; P10BE-NEXT:    addi r1, r1, 128
615; P10BE-NEXT:    ld r0, 16(r1)
616; P10BE-NEXT:    mtlr r0
617; P10BE-NEXT:    blr
618entry:
619  %_param_data = alloca [5 x i8], align 1
620  %.unpack = load i8, ptr %data, align 1
621  %.elt1 = getelementptr inbounds [5 x i8], ptr %data, i64 0, i64 1
622  %.unpack2 = load i8, ptr %.elt1, align 1
623  %.elt3 = getelementptr inbounds [5 x i8], ptr %data, i64 0, i64 2
624  %.unpack4 = load i8, ptr %.elt3, align 1
625  %.elt5 = getelementptr inbounds [5 x i8], ptr %data, i64 0, i64 3
626  %.unpack6 = load i8, ptr %.elt5, align 1
627  %.elt7 = getelementptr inbounds [5 x i8], ptr %data, i64 0, i64 4
628  %.unpack8 = load i8, ptr %.elt7, align 1
629  store i8 %.unpack, ptr %_param_data, align 1
630  %.temp.1.gep = getelementptr inbounds [5 x i8], ptr %_param_data, i64 0, i64 1
631  store i8 %.unpack2, ptr %.temp.1.gep, align 1
632  %.temp.2.gep = getelementptr inbounds [5 x i8], ptr %_param_data, i64 0, i64 2
633  store i8 %.unpack4, ptr %.temp.2.gep, align 1
634  %.temp.3.gep = getelementptr inbounds [5 x i8], ptr %_param_data, i64 0, i64 3
635  store i8 %.unpack6, ptr %.temp.3.gep, align 1
636  %.temp.4.gep = getelementptr inbounds [5 x i8], ptr %_param_data, i64 0, i64 4
637  store i8 %.unpack8, ptr %.temp.4.gep, align 1
638  call void @callee(ptr nonnull %_param_data)
639  ret i8 0
640}
641
642define signext i8 @caller_6(ptr nocapture readonly byval([6 x i8]) %data) #0 {
643; P8LE-LABEL: caller_6:
644; P8LE:       # %bb.0: # %entry
645; P8LE-NEXT:    mflr r0
646; P8LE-NEXT:    stdu r1, -64(r1)
647; P8LE-NEXT:    std r0, 80(r1)
648; P8LE-NEXT:    stw r3, 48(r1)
649; P8LE-NEXT:    rldicl r3, r3, 32, 32
650; P8LE-NEXT:    sth r3, 52(r1)
651; P8LE-NEXT:    lwz r3, 48(r1)
652; P8LE-NEXT:    lhz r4, 52(r1)
653; P8LE-NEXT:    stw r3, 58(r1)
654; P8LE-NEXT:    addi r3, r1, 58
655; P8LE-NEXT:    sth r4, 62(r1)
656; P8LE-NEXT:    bl callee
657; P8LE-NEXT:    nop
658; P8LE-NEXT:    li r3, 0
659; P8LE-NEXT:    addi r1, r1, 64
660; P8LE-NEXT:    ld r0, 16(r1)
661; P8LE-NEXT:    mtlr r0
662; P8LE-NEXT:    blr
663;
664; P9LE-LABEL: caller_6:
665; P9LE:       # %bb.0: # %entry
666; P9LE-NEXT:    mflr r0
667; P9LE-NEXT:    stdu r1, -64(r1)
668; P9LE-NEXT:    std r0, 80(r1)
669; P9LE-NEXT:    stw r3, 48(r1)
670; P9LE-NEXT:    rldicl r3, r3, 32, 32
671; P9LE-NEXT:    sth r3, 52(r1)
672; P9LE-NEXT:    lwz r3, 48(r1)
673; P9LE-NEXT:    lhz r4, 52(r1)
674; P9LE-NEXT:    stw r3, 58(r1)
675; P9LE-NEXT:    addi r3, r1, 58
676; P9LE-NEXT:    sth r4, 62(r1)
677; P9LE-NEXT:    bl callee
678; P9LE-NEXT:    nop
679; P9LE-NEXT:    li r3, 0
680; P9LE-NEXT:    addi r1, r1, 64
681; P9LE-NEXT:    ld r0, 16(r1)
682; P9LE-NEXT:    mtlr r0
683; P9LE-NEXT:    blr
684;
685; P10LE-LABEL: caller_6:
686; P10LE:       # %bb.0: # %entry
687; P10LE-NEXT:    mflr r0
688; P10LE-NEXT:    std r0, 16(r1)
689; P10LE-NEXT:    stdu r1, -64(r1)
690; P10LE-NEXT:    stw r3, 48(r1)
691; P10LE-NEXT:    rldicl r3, r3, 32, 32
692; P10LE-NEXT:    sth r3, 52(r1)
693; P10LE-NEXT:    lwz r3, 48(r1)
694; P10LE-NEXT:    lhz r4, 52(r1)
695; P10LE-NEXT:    stw r3, 58(r1)
696; P10LE-NEXT:    addi r3, r1, 58
697; P10LE-NEXT:    sth r4, 62(r1)
698; P10LE-NEXT:    bl callee@notoc
699; P10LE-NEXT:    li r3, 0
700; P10LE-NEXT:    addi r1, r1, 64
701; P10LE-NEXT:    ld r0, 16(r1)
702; P10LE-NEXT:    mtlr r0
703; P10LE-NEXT:    blr
704;
705; P8BE-LABEL: caller_6:
706; P8BE:       # %bb.0: # %entry
707; P8BE-NEXT:    mflr r0
708; P8BE-NEXT:    stdu r1, -128(r1)
709; P8BE-NEXT:    rldicl r4, r3, 48, 16
710; P8BE-NEXT:    std r0, 144(r1)
711; P8BE-NEXT:    sth r3, 182(r1)
712; P8BE-NEXT:    stw r4, 178(r1)
713; P8BE-NEXT:    lhz r4, 182(r1)
714; P8BE-NEXT:    lwz r3, 178(r1)
715; P8BE-NEXT:    sth r4, 126(r1)
716; P8BE-NEXT:    stw r3, 122(r1)
717; P8BE-NEXT:    addi r3, r1, 122
718; P8BE-NEXT:    bl callee
719; P8BE-NEXT:    nop
720; P8BE-NEXT:    li r3, 0
721; P8BE-NEXT:    addi r1, r1, 128
722; P8BE-NEXT:    ld r0, 16(r1)
723; P8BE-NEXT:    mtlr r0
724; P8BE-NEXT:    blr
725;
726; P9BE-LABEL: caller_6:
727; P9BE:       # %bb.0: # %entry
728; P9BE-NEXT:    mflr r0
729; P9BE-NEXT:    stdu r1, -128(r1)
730; P9BE-NEXT:    rldicl r4, r3, 48, 16
731; P9BE-NEXT:    std r0, 144(r1)
732; P9BE-NEXT:    sth r3, 182(r1)
733; P9BE-NEXT:    stw r4, 178(r1)
734; P9BE-NEXT:    lhz r4, 182(r1)
735; P9BE-NEXT:    lwz r3, 178(r1)
736; P9BE-NEXT:    sth r4, 126(r1)
737; P9BE-NEXT:    stw r3, 122(r1)
738; P9BE-NEXT:    addi r3, r1, 122
739; P9BE-NEXT:    bl callee
740; P9BE-NEXT:    nop
741; P9BE-NEXT:    li r3, 0
742; P9BE-NEXT:    addi r1, r1, 128
743; P9BE-NEXT:    ld r0, 16(r1)
744; P9BE-NEXT:    mtlr r0
745; P9BE-NEXT:    blr
746;
747; P10BE-LABEL: caller_6:
748; P10BE:       # %bb.0: # %entry
749; P10BE-NEXT:    mflr r0
750; P10BE-NEXT:    std r0, 16(r1)
751; P10BE-NEXT:    stdu r1, -128(r1)
752; P10BE-NEXT:    rldicl r4, r3, 48, 16
753; P10BE-NEXT:    sth r3, 182(r1)
754; P10BE-NEXT:    stw r4, 178(r1)
755; P10BE-NEXT:    lhz r4, 182(r1)
756; P10BE-NEXT:    lwz r3, 178(r1)
757; P10BE-NEXT:    sth r4, 126(r1)
758; P10BE-NEXT:    stw r3, 122(r1)
759; P10BE-NEXT:    addi r3, r1, 122
760; P10BE-NEXT:    bl callee
761; P10BE-NEXT:    nop
762; P10BE-NEXT:    li r3, 0
763; P10BE-NEXT:    addi r1, r1, 128
764; P10BE-NEXT:    ld r0, 16(r1)
765; P10BE-NEXT:    mtlr r0
766; P10BE-NEXT:    blr
767entry:
768  %_param_data = alloca [6 x i8], align 1
769  %.unpack = load i8, ptr %data, align 1
770  %.elt1 = getelementptr inbounds [6 x i8], ptr %data, i64 0, i64 1
771  %.unpack2 = load i8, ptr %.elt1, align 1
772  %.elt3 = getelementptr inbounds [6 x i8], ptr %data, i64 0, i64 2
773  %.unpack4 = load i8, ptr %.elt3, align 1
774  %.elt5 = getelementptr inbounds [6 x i8], ptr %data, i64 0, i64 3
775  %.unpack6 = load i8, ptr %.elt5, align 1
776  %.elt7 = getelementptr inbounds [6 x i8], ptr %data, i64 0, i64 4
777  %.unpack8 = load i8, ptr %.elt7, align 1
778  %.elt9 = getelementptr inbounds [6 x i8], ptr %data, i64 0, i64 5
779  %.unpack10 = load i8, ptr %.elt9, align 1
780  store i8 %.unpack, ptr %_param_data, align 1
781  %.temp.1.gep = getelementptr inbounds [6 x i8], ptr %_param_data, i64 0, i64 1
782  store i8 %.unpack2, ptr %.temp.1.gep, align 1
783  %.temp.2.gep = getelementptr inbounds [6 x i8], ptr %_param_data, i64 0, i64 2
784  store i8 %.unpack4, ptr %.temp.2.gep, align 1
785  %.temp.3.gep = getelementptr inbounds [6 x i8], ptr %_param_data, i64 0, i64 3
786  store i8 %.unpack6, ptr %.temp.3.gep, align 1
787  %.temp.4.gep = getelementptr inbounds [6 x i8], ptr %_param_data, i64 0, i64 4
788  store i8 %.unpack8, ptr %.temp.4.gep, align 1
789  %.temp.5.gep = getelementptr inbounds [6 x i8], ptr %_param_data, i64 0, i64 5
790  store i8 %.unpack10, ptr %.temp.5.gep, align 1
791  call void @callee(ptr nonnull %_param_data)
792  ret i8 0
793}
794
795define signext i8 @caller_7(ptr nocapture readonly byval([7 x i8]) %data) #0 {
796; P8LE-LABEL: caller_7:
797; P8LE:       # %bb.0: # %entry
798; P8LE-NEXT:    mflr r0
799; P8LE-NEXT:    stdu r1, -64(r1)
800; P8LE-NEXT:    rldicl r4, r3, 32, 32
801; P8LE-NEXT:    std r0, 80(r1)
802; P8LE-NEXT:    stw r3, 48(r1)
803; P8LE-NEXT:    stw r3, 57(r1)
804; P8LE-NEXT:    sth r4, 52(r1)
805; P8LE-NEXT:    rldicl r4, r3, 16, 48
806; P8LE-NEXT:    stb r4, 54(r1)
807; P8LE-NEXT:    lhz r4, 52(r1)
808; P8LE-NEXT:    lbz r3, 54(r1)
809; P8LE-NEXT:    sth r4, 61(r1)
810; P8LE-NEXT:    stb r3, 63(r1)
811; P8LE-NEXT:    addi r3, r1, 57
812; P8LE-NEXT:    bl callee
813; P8LE-NEXT:    nop
814; P8LE-NEXT:    li r3, 0
815; P8LE-NEXT:    addi r1, r1, 64
816; P8LE-NEXT:    ld r0, 16(r1)
817; P8LE-NEXT:    mtlr r0
818; P8LE-NEXT:    blr
819;
820; P9LE-LABEL: caller_7:
821; P9LE:       # %bb.0: # %entry
822; P9LE-NEXT:    mflr r0
823; P9LE-NEXT:    stdu r1, -64(r1)
824; P9LE-NEXT:    rldicl r4, r3, 32, 32
825; P9LE-NEXT:    std r0, 80(r1)
826; P9LE-NEXT:    stw r3, 48(r1)
827; P9LE-NEXT:    stw r3, 57(r1)
828; P9LE-NEXT:    sth r4, 52(r1)
829; P9LE-NEXT:    rldicl r4, r3, 16, 48
830; P9LE-NEXT:    addi r3, r1, 57
831; P9LE-NEXT:    stb r4, 54(r1)
832; P9LE-NEXT:    lhz r4, 52(r1)
833; P9LE-NEXT:    lbz r5, 54(r1)
834; P9LE-NEXT:    sth r4, 61(r1)
835; P9LE-NEXT:    stb r5, 63(r1)
836; P9LE-NEXT:    bl callee
837; P9LE-NEXT:    nop
838; P9LE-NEXT:    li r3, 0
839; P9LE-NEXT:    addi r1, r1, 64
840; P9LE-NEXT:    ld r0, 16(r1)
841; P9LE-NEXT:    mtlr r0
842; P9LE-NEXT:    blr
843;
844; P10LE-LABEL: caller_7:
845; P10LE:       # %bb.0: # %entry
846; P10LE-NEXT:    mflr r0
847; P10LE-NEXT:    std r0, 16(r1)
848; P10LE-NEXT:    stdu r1, -64(r1)
849; P10LE-NEXT:    rldicl r4, r3, 32, 32
850; P10LE-NEXT:    stw r3, 48(r1)
851; P10LE-NEXT:    stw r3, 57(r1)
852; P10LE-NEXT:    sth r4, 52(r1)
853; P10LE-NEXT:    rldicl r4, r3, 16, 48
854; P10LE-NEXT:    addi r3, r1, 57
855; P10LE-NEXT:    stb r4, 54(r1)
856; P10LE-NEXT:    lhz r4, 52(r1)
857; P10LE-NEXT:    lbz r5, 54(r1)
858; P10LE-NEXT:    sth r4, 61(r1)
859; P10LE-NEXT:    stb r5, 63(r1)
860; P10LE-NEXT:    bl callee@notoc
861; P10LE-NEXT:    li r3, 0
862; P10LE-NEXT:    addi r1, r1, 64
863; P10LE-NEXT:    ld r0, 16(r1)
864; P10LE-NEXT:    mtlr r0
865; P10LE-NEXT:    blr
866;
867; P8BE-LABEL: caller_7:
868; P8BE:       # %bb.0: # %entry
869; P8BE-NEXT:    mflr r0
870; P8BE-NEXT:    stdu r1, -128(r1)
871; P8BE-NEXT:    std r0, 144(r1)
872; P8BE-NEXT:    rldicl r4, r3, 56, 8
873; P8BE-NEXT:    stb r3, 183(r1)
874; P8BE-NEXT:    rldicl r3, r3, 40, 24
875; P8BE-NEXT:    stw r3, 177(r1)
876; P8BE-NEXT:    stw r3, 121(r1)
877; P8BE-NEXT:    lbz r3, 183(r1)
878; P8BE-NEXT:    sth r4, 181(r1)
879; P8BE-NEXT:    lhz r4, 181(r1)
880; P8BE-NEXT:    stb r3, 127(r1)
881; P8BE-NEXT:    addi r3, r1, 121
882; P8BE-NEXT:    sth r4, 125(r1)
883; P8BE-NEXT:    bl callee
884; P8BE-NEXT:    nop
885; P8BE-NEXT:    li r3, 0
886; P8BE-NEXT:    addi r1, r1, 128
887; P8BE-NEXT:    ld r0, 16(r1)
888; P8BE-NEXT:    mtlr r0
889; P8BE-NEXT:    blr
890;
891; P9BE-LABEL: caller_7:
892; P9BE:       # %bb.0: # %entry
893; P9BE-NEXT:    mflr r0
894; P9BE-NEXT:    stdu r1, -128(r1)
895; P9BE-NEXT:    rldicl r4, r3, 56, 8
896; P9BE-NEXT:    std r0, 144(r1)
897; P9BE-NEXT:    stb r3, 183(r1)
898; P9BE-NEXT:    lbz r5, 183(r1)
899; P9BE-NEXT:    rldicl r3, r3, 40, 24
900; P9BE-NEXT:    sth r4, 181(r1)
901; P9BE-NEXT:    stw r3, 177(r1)
902; P9BE-NEXT:    lhz r4, 181(r1)
903; P9BE-NEXT:    stw r3, 121(r1)
904; P9BE-NEXT:    addi r3, r1, 121
905; P9BE-NEXT:    stb r5, 127(r1)
906; P9BE-NEXT:    sth r4, 125(r1)
907; P9BE-NEXT:    bl callee
908; P9BE-NEXT:    nop
909; P9BE-NEXT:    li r3, 0
910; P9BE-NEXT:    addi r1, r1, 128
911; P9BE-NEXT:    ld r0, 16(r1)
912; P9BE-NEXT:    mtlr r0
913; P9BE-NEXT:    blr
914;
915; P10BE-LABEL: caller_7:
916; P10BE:       # %bb.0: # %entry
917; P10BE-NEXT:    mflr r0
918; P10BE-NEXT:    std r0, 16(r1)
919; P10BE-NEXT:    stdu r1, -128(r1)
920; P10BE-NEXT:    rldicl r4, r3, 56, 8
921; P10BE-NEXT:    stb r3, 183(r1)
922; P10BE-NEXT:    rldicl r3, r3, 40, 24
923; P10BE-NEXT:    lbz r5, 183(r1)
924; P10BE-NEXT:    sth r4, 181(r1)
925; P10BE-NEXT:    stw r3, 177(r1)
926; P10BE-NEXT:    stw r3, 121(r1)
927; P10BE-NEXT:    addi r3, r1, 121
928; P10BE-NEXT:    lhz r4, 181(r1)
929; P10BE-NEXT:    stb r5, 127(r1)
930; P10BE-NEXT:    sth r4, 125(r1)
931; P10BE-NEXT:    bl callee
932; P10BE-NEXT:    nop
933; P10BE-NEXT:    li r3, 0
934; P10BE-NEXT:    addi r1, r1, 128
935; P10BE-NEXT:    ld r0, 16(r1)
936; P10BE-NEXT:    mtlr r0
937; P10BE-NEXT:    blr
938entry:
939  %_param_data = alloca [7 x i8], align 1
940  %.unpack = load i8, ptr %data, align 1
941  %.elt1 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 1
942  %.unpack2 = load i8, ptr %.elt1, align 1
943  %.elt3 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 2
944  %.unpack4 = load i8, ptr %.elt3, align 1
945  %.elt5 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 3
946  %.unpack6 = load i8, ptr %.elt5, align 1
947  %.elt7 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 4
948  %.unpack8 = load i8, ptr %.elt7, align 1
949  %.elt9 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 5
950  %.unpack10 = load i8, ptr %.elt9, align 1
951  %.elt11 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 6
952  %.unpack12 = load i8, ptr %.elt11, align 1
953  store i8 %.unpack, ptr %_param_data, align 1
954  %.temp.1.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 1
955  store i8 %.unpack2, ptr %.temp.1.gep, align 1
956  %.temp.2.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 2
957  store i8 %.unpack4, ptr %.temp.2.gep, align 1
958  %.temp.3.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 3
959  store i8 %.unpack6, ptr %.temp.3.gep, align 1
960  %.temp.4.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 4
961  store i8 %.unpack8, ptr %.temp.4.gep, align 1
962  %.temp.5.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 5
963  store i8 %.unpack10, ptr %.temp.5.gep, align 1
964  %.temp.6.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 6
965  store i8 %.unpack12, ptr %.temp.6.gep, align 1
966  call void @callee(ptr nonnull %_param_data)
967  ret i8 0
968}
969
970declare void @callee(ptr) local_unnamed_addr #0
971
972attributes #0 = { nounwind }
973