[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / PowerPC / elf64-byval-cc.ll
blobfc0bfef11d7a6f8726dae97c9aaf241c0068f3fe
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -verify-machineinstrs < %s | FileCheck %s
4 target datalayout = "e-m:e-i64:64-n32:64-S128-v256:256:256-v512:512:512"
5 target triple = "powerpc64le-unknown-linux-gnu"
7 %struct_S1 = type { [1 x i8] }
8 @gS1 = external global %struct_S1, align 1
10 define void @call_test_byval_mem1() #0 {
11 ; CHECK-LABEL: call_test_byval_mem1:
12 ; CHECK:       # %bb.0: # %entry
13 ; CHECK-NEXT:    mflr 0
14 ; CHECK-NEXT:    stdu 1, -32(1)
15 ; CHECK-NEXT:    std 0, 48(1)
16 ; CHECK-NEXT:    .cfi_def_cfa_offset 32
17 ; CHECK-NEXT:    .cfi_offset lr, 16
18 ; CHECK-NEXT:    addis 3, 2, .LC0@toc@ha
19 ; CHECK-NEXT:    ld 3, .LC0@toc@l(3)
20 ; CHECK-NEXT:    lbz 3, 0(3)
21 ; CHECK-NEXT:    bl test_byval_mem1
22 ; CHECK-NEXT:    nop
23 ; CHECK-NEXT:    addi 1, 1, 32
24 ; CHECK-NEXT:    ld 0, 16(1)
25 ; CHECK-NEXT:    mtlr 0
26 ; CHECK-NEXT:    blr
27 entry:
28   %call = call zeroext i8 @test_byval_mem1(ptr byval(%struct_S1) align 1 @gS1)
29   ret void
32 define zeroext i8 @test_byval_mem1(ptr byval(%struct_S1) align 1 %s) {
33 ; CHECK-LABEL: test_byval_mem1:
34 ; CHECK:       # %bb.0: # %entry
35 ; CHECK-NEXT:    stb 3, -8(1)
36 ; CHECK-NEXT:    clrldi 3, 3, 56
37 ; CHECK-NEXT:    blr
38 entry:
39   %0 = load i8, ptr %s, align 1
40   ret i8 %0
43 define void @call_test_byval_mem1_2() #0 {
44 ; CHECK-LABEL: call_test_byval_mem1_2:
45 ; CHECK:       # %bb.0: # %entry
46 ; CHECK-NEXT:    mflr 0
47 ; CHECK-NEXT:    stdu 1, -112(1)
48 ; CHECK-NEXT:    std 0, 128(1)
49 ; CHECK-NEXT:    .cfi_def_cfa_offset 112
50 ; CHECK-NEXT:    .cfi_offset lr, 16
51 ; CHECK-NEXT:    addis 3, 2, .LC0@toc@ha
52 ; CHECK-NEXT:    li 4, 1
53 ; CHECK-NEXT:    li 5, 2
54 ; CHECK-NEXT:    li 6, 3
55 ; CHECK-NEXT:    li 7, 4
56 ; CHECK-NEXT:    li 8, 5
57 ; CHECK-NEXT:    li 9, 6
58 ; CHECK-NEXT:    li 10, 7
59 ; CHECK-NEXT:    ld 3, .LC0@toc@l(3)
60 ; CHECK-NEXT:    lbz 3, 0(3)
61 ; CHECK-NEXT:    stb 3, 96(1)
62 ; CHECK-NEXT:    li 3, 0
63 ; CHECK-NEXT:    bl test_byval_mem1_2
64 ; CHECK-NEXT:    nop
65 ; CHECK-NEXT:    addi 1, 1, 112
66 ; CHECK-NEXT:    ld 0, 16(1)
67 ; CHECK-NEXT:    mtlr 0
68 ; CHECK-NEXT:    blr
69 entry:
70   %call = call zeroext i8 @test_byval_mem1_2(i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, ptr byval(%struct_S1) align 1 @gS1)
71   ret void
74 define zeroext i8 @test_byval_mem1_2(i64 %v1, i64 %v2, i64 %v3, i64 %v4, i64 %v5, i64 %v6, i64 %v7, i64 %v8, ptr byval(%struct_S1) align 1 %s) {
75 ; CHECK-LABEL: test_byval_mem1_2:
76 ; CHECK:       # %bb.0: # %entry
77 ; CHECK-NEXT:    lbz 3, 96(1)
78 ; CHECK-NEXT:    blr
79 entry:
80   %0 = load i8, ptr %s, align 1
81   ret i8 %0
84 define void @call_test_byval_mem1_3() #0 {
85 ; CHECK-LABEL: call_test_byval_mem1_3:
86 ; CHECK:       # %bb.0: # %entry
87 ; CHECK-NEXT:    mflr 0
88 ; CHECK-NEXT:    stdu 1, -32(1)
89 ; CHECK-NEXT:    std 0, 48(1)
90 ; CHECK-NEXT:    .cfi_def_cfa_offset 32
91 ; CHECK-NEXT:    .cfi_offset lr, 16
92 ; CHECK-NEXT:    addis 3, 2, .LC0@toc@ha
93 ; CHECK-NEXT:    li 4, 1
94 ; CHECK-NEXT:    li 5, 2
95 ; CHECK-NEXT:    li 6, 3
96 ; CHECK-NEXT:    li 7, 4
97 ; CHECK-NEXT:    li 8, 5
98 ; CHECK-NEXT:    li 9, 6
99 ; CHECK-NEXT:    ld 3, .LC0@toc@l(3)
100 ; CHECK-NEXT:    lbz 10, 0(3)
101 ; CHECK-NEXT:    li 3, 0
102 ; CHECK-NEXT:    bl test_byval_mem1_3
103 ; CHECK-NEXT:    nop
104 ; CHECK-NEXT:    addi 1, 1, 32
105 ; CHECK-NEXT:    ld 0, 16(1)
106 ; CHECK-NEXT:    mtlr 0
107 ; CHECK-NEXT:    blr
108 entry:
109   %call = call zeroext i8 @test_byval_mem1_3(i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, ptr byval(%struct_S1) align 1 @gS1)
110   ret void
113 define zeroext i8 @test_byval_mem1_3(i64 %v1, i64 %v2, i64 %v3, i64 %v4, i64 %v5, i64 %v6, i64 %v7, ptr byval(%struct_S1) align 1 %s) {
114 ; CHECK-LABEL: test_byval_mem1_3:
115 ; CHECK:       # %bb.0: # %entry
116 ; CHECK-NEXT:    clrldi 3, 10, 56
117 ; CHECK-NEXT:    stb 10, -8(1)
118 ; CHECK-NEXT:    blr
119 entry:
120   %0 = load i8, ptr %s, align 1
121   ret i8 %0
124 define void @call_test_byval_mem1_4() #0 {
125 ; CHECK-LABEL: call_test_byval_mem1_4:
126 ; CHECK:       # %bb.0: # %entry
127 ; CHECK-NEXT:    mflr 0
128 ; CHECK-NEXT:    stdu 1, -112(1)
129 ; CHECK-NEXT:    std 0, 128(1)
130 ; CHECK-NEXT:    .cfi_def_cfa_offset 112
131 ; CHECK-NEXT:    .cfi_offset lr, 16
132 ; CHECK-NEXT:    li 3, 7
133 ; CHECK-NEXT:    li 4, 1
134 ; CHECK-NEXT:    li 5, 2
135 ; CHECK-NEXT:    li 7, 3
136 ; CHECK-NEXT:    li 8, 4
137 ; CHECK-NEXT:    li 9, 5
138 ; CHECK-NEXT:    li 10, 6
139 ; CHECK-NEXT:    std 3, 96(1)
140 ; CHECK-NEXT:    addis 3, 2, .LC0@toc@ha
141 ; CHECK-NEXT:    ld 3, .LC0@toc@l(3)
142 ; CHECK-NEXT:    lbz 6, 0(3)
143 ; CHECK-NEXT:    li 3, 0
144 ; CHECK-NEXT:    bl test_byval_mem1_4
145 ; CHECK-NEXT:    nop
146 ; CHECK-NEXT:    addi 1, 1, 112
147 ; CHECK-NEXT:    ld 0, 16(1)
148 ; CHECK-NEXT:    mtlr 0
149 ; CHECK-NEXT:    blr
150 entry:
151   %call = call zeroext i8 @test_byval_mem1_4(i64 0, i64 1, i64 2, ptr byval(%struct_S1) align 1 @gS1, i64 3, i64 4, i64 5, i64 6, i64 7)
152   ret void
155 define zeroext i8 @test_byval_mem1_4(i64 %v1, i64 %v2, i64 %v3, ptr byval(%struct_S1) align 1 %s, i64 %v4, i64 %v5, i64 %v6, i64 %v7, i64 %v8) {
156 ; CHECK-LABEL: test_byval_mem1_4:
157 ; CHECK:       # %bb.0: # %entry
158 ; CHECK-NEXT:    clrldi 3, 6, 56
159 ; CHECK-NEXT:    stb 6, 56(1)
160 ; CHECK-NEXT:    blr
161 entry:
162   %0 = load i8, ptr %s, align 1
163   ret i8 %0
166 define void @call_test_byval_mem1_5() #0 {
167 ; CHECK-LABEL: call_test_byval_mem1_5:
168 ; CHECK:       # %bb.0: # %entry
169 ; CHECK-NEXT:    mflr 0
170 ; CHECK-NEXT:    stdu 1, -32(1)
171 ; CHECK-NEXT:    std 0, 48(1)
172 ; CHECK-NEXT:    .cfi_def_cfa_offset 32
173 ; CHECK-NEXT:    .cfi_offset lr, 16
174 ; CHECK-NEXT:    addis 3, 2, .LC0@toc@ha
175 ; CHECK-NEXT:    li 4, 1
176 ; CHECK-NEXT:    li 5, 2
177 ; CHECK-NEXT:    li 7, 3
178 ; CHECK-NEXT:    li 8, 4
179 ; CHECK-NEXT:    li 9, 5
180 ; CHECK-NEXT:    li 10, 6
181 ; CHECK-NEXT:    ld 3, .LC0@toc@l(3)
182 ; CHECK-NEXT:    lbz 6, 0(3)
183 ; CHECK-NEXT:    li 3, 0
184 ; CHECK-NEXT:    bl test_byval_mem1_5
185 ; CHECK-NEXT:    nop
186 ; CHECK-NEXT:    addi 1, 1, 32
187 ; CHECK-NEXT:    ld 0, 16(1)
188 ; CHECK-NEXT:    mtlr 0
189 ; CHECK-NEXT:    blr
190 entry:
191   %call = call zeroext i8 @test_byval_mem1_5(i64 0, i64 1, i64 2, ptr byval(%struct_S1) align 1 @gS1, i64 3, i64 4, i64 5, i64 6)
192   ret void
195 define zeroext i8 @test_byval_mem1_5(i64 %v1, i64 %v2, i64 %v3, ptr byval(%struct_S1) align 1 %s, i64 %v4, i64 %v5, i64 %v6, i64 %v7) {
196 ; CHECK-LABEL: test_byval_mem1_5:
197 ; CHECK:       # %bb.0: # %entry
198 ; CHECK-NEXT:    clrldi 3, 6, 56
199 ; CHECK-NEXT:    stb 6, -8(1)
200 ; CHECK-NEXT:    blr
201 entry:
202   %0 = load i8, ptr %s, align 1
203   ret i8 %0
206 %struct_S2 = type { [2 x i8] }
207 @gS2 = external global %struct_S2, align 1
209 define void @call_test_byval_mem2() #0 {
210 ; CHECK-LABEL: call_test_byval_mem2:
211 ; CHECK:       # %bb.0: # %entry
212 ; CHECK-NEXT:    mflr 0
213 ; CHECK-NEXT:    stdu 1, -32(1)
214 ; CHECK-NEXT:    std 0, 48(1)
215 ; CHECK-NEXT:    .cfi_def_cfa_offset 32
216 ; CHECK-NEXT:    .cfi_offset lr, 16
217 ; CHECK-NEXT:    addis 3, 2, .LC1@toc@ha
218 ; CHECK-NEXT:    ld 3, .LC1@toc@l(3)
219 ; CHECK-NEXT:    lhz 3, 0(3)
220 ; CHECK-NEXT:    bl test_byval_mem2
221 ; CHECK-NEXT:    nop
222 ; CHECK-NEXT:    addi 1, 1, 32
223 ; CHECK-NEXT:    ld 0, 16(1)
224 ; CHECK-NEXT:    mtlr 0
225 ; CHECK-NEXT:    blr
226 entry:
227   %call = call zeroext i8 @test_byval_mem2(ptr byval(%struct_S2) align 1 @gS2)
228   ret void
231 define zeroext i8 @test_byval_mem2(ptr byval(%struct_S2) align 1 %s) {
232 ; CHECK-LABEL: test_byval_mem2:
233 ; CHECK:       # %bb.0: # %entry
234 ; CHECK-NEXT:    sth 3, -8(1)
235 ; CHECK-NEXT:    lbz 3, -8(1)
236 ; CHECK-NEXT:    blr
237 entry:
238   %0 = load i8, ptr %s, align 1
239   ret i8 %0
242 %struct_S3 = type { [3 x i8] }
243 @gS3 = external global %struct_S3, align 1
245 define void @call_test_byval_mem3() #0 {
246 ; CHECK-LABEL: call_test_byval_mem3:
247 ; CHECK:       # %bb.0: # %entry
248 ; CHECK-NEXT:    mflr 0
249 ; CHECK-NEXT:    stdu 1, -32(1)
250 ; CHECK-NEXT:    std 0, 48(1)
251 ; CHECK-NEXT:    .cfi_def_cfa_offset 32
252 ; CHECK-NEXT:    .cfi_offset lr, 16
253 ; CHECK-NEXT:    addis 3, 2, .LC2@toc@ha
254 ; CHECK-NEXT:    ld 3, .LC2@toc@l(3)
255 ; CHECK-NEXT:    lbz 4, 2(3)
256 ; CHECK-NEXT:    stb 4, 34(1)
257 ; CHECK-NEXT:    lhz 3, 0(3)
258 ; CHECK-NEXT:    sth 3, 32(1)
259 ; CHECK-NEXT:    ld 3, 32(1)
260 ; CHECK-NEXT:    bl test_byval_mem3
261 ; CHECK-NEXT:    nop
262 ; CHECK-NEXT:    addi 1, 1, 32
263 ; CHECK-NEXT:    ld 0, 16(1)
264 ; CHECK-NEXT:    mtlr 0
265 ; CHECK-NEXT:    blr
266 entry:
267   %call = call zeroext i8 @test_byval_mem3(ptr byval(%struct_S3) align 1 @gS3)
268   ret void
271 define zeroext i8 @test_byval_mem3(ptr byval(%struct_S3) align 1 %s) {
272 ; CHECK-LABEL: test_byval_mem3:
273 ; CHECK:       # %bb.0: # %entry
274 ; CHECK-NEXT:    sth 3, -8(1)
275 ; CHECK-NEXT:    rldicl 3, 3, 48, 16
276 ; CHECK-NEXT:    stb 3, -6(1)
277 ; CHECK-NEXT:    lbz 3, -8(1)
278 ; CHECK-NEXT:    blr
279 entry:
280   %0 = load i8, ptr %s, align 1
281   ret i8 %0
284 %struct_S4 = type { [4 x i8] }
285 @gS4 = external global %struct_S4, align 1
287 define void @call_test_byval_mem4() #0 {
288 ; CHECK-LABEL: call_test_byval_mem4:
289 ; CHECK:       # %bb.0: # %entry
290 ; CHECK-NEXT:    mflr 0
291 ; CHECK-NEXT:    stdu 1, -32(1)
292 ; CHECK-NEXT:    std 0, 48(1)
293 ; CHECK-NEXT:    .cfi_def_cfa_offset 32
294 ; CHECK-NEXT:    .cfi_offset lr, 16
295 ; CHECK-NEXT:    addis 3, 2, .LC3@toc@ha
296 ; CHECK-NEXT:    ld 3, .LC3@toc@l(3)
297 ; CHECK-NEXT:    lwz 3, 0(3)
298 ; CHECK-NEXT:    bl test_byval_mem4
299 ; CHECK-NEXT:    nop
300 ; CHECK-NEXT:    addi 1, 1, 32
301 ; CHECK-NEXT:    ld 0, 16(1)
302 ; CHECK-NEXT:    mtlr 0
303 ; CHECK-NEXT:    blr
304 entry:
305   %call = call zeroext i8 @test_byval_mem4(ptr byval(%struct_S4) align 1 @gS4)
306   ret void
309 define zeroext i8 @test_byval_mem4(ptr byval(%struct_S4) align 1 %s) {
310 ; CHECK-LABEL: test_byval_mem4:
311 ; CHECK:       # %bb.0: # %entry
312 ; CHECK-NEXT:    stw 3, -8(1)
313 ; CHECK-NEXT:    lbz 3, -8(1)
314 ; CHECK-NEXT:    blr
315 entry:
316   %0 = load i8, ptr %s, align 1
317   ret i8 %0
320 %struct_S8 = type { [8 x i8] }
321 @gS8 = external global %struct_S8, align 1
323 define void @call_test_byval_mem8() #0 {
324 ; CHECK-LABEL: call_test_byval_mem8:
325 ; CHECK:       # %bb.0: # %entry
326 ; CHECK-NEXT:    mflr 0
327 ; CHECK-NEXT:    stdu 1, -32(1)
328 ; CHECK-NEXT:    std 0, 48(1)
329 ; CHECK-NEXT:    .cfi_def_cfa_offset 32
330 ; CHECK-NEXT:    .cfi_offset lr, 16
331 ; CHECK-NEXT:    addis 3, 2, .LC4@toc@ha
332 ; CHECK-NEXT:    ld 3, .LC4@toc@l(3)
333 ; CHECK-NEXT:    ld 3, 0(3)
334 ; CHECK-NEXT:    bl test_byval_mem8
335 ; CHECK-NEXT:    nop
336 ; CHECK-NEXT:    addi 1, 1, 32
337 ; CHECK-NEXT:    ld 0, 16(1)
338 ; CHECK-NEXT:    mtlr 0
339 ; CHECK-NEXT:    blr
340 entry:
341   %call = call zeroext i8 @test_byval_mem8(ptr byval(%struct_S8) align 1 @gS8)
342   ret void
345 define zeroext i8 @test_byval_mem8(ptr byval(%struct_S8) align 1 %s) {
346 ; CHECK-LABEL: test_byval_mem8:
347 ; CHECK:       # %bb.0: # %entry
348 ; CHECK-NEXT:    std 3, -8(1)
349 ; CHECK-NEXT:    clrldi 3, 3, 56
350 ; CHECK-NEXT:    blr
351 entry:
352   %0 = load i8, ptr %s, align 1
353   ret i8 %0
356 %struct_S32 = type {[32 x i8] }
357 @gS32 = external global %struct_S32, align 1
359 define void @call_test_byval_mem32() #0 {
360 ; CHECK-LABEL: call_test_byval_mem32:
361 ; CHECK:       # %bb.0: # %entry
362 ; CHECK-NEXT:    mflr 0
363 ; CHECK-NEXT:    stdu 1, -32(1)
364 ; CHECK-NEXT:    std 0, 48(1)
365 ; CHECK-NEXT:    .cfi_def_cfa_offset 32
366 ; CHECK-NEXT:    .cfi_offset lr, 16
367 ; CHECK-NEXT:    addis 3, 2, .LC5@toc@ha
368 ; CHECK-NEXT:    ld 3, .LC5@toc@l(3)
369 ; CHECK-NEXT:    ld 6, 24(3)
370 ; CHECK-NEXT:    ld 5, 16(3)
371 ; CHECK-NEXT:    ld 4, 8(3)
372 ; CHECK-NEXT:    ld 3, 0(3)
373 ; CHECK-NEXT:    bl test_byval_mem32
374 ; CHECK-NEXT:    nop
375 ; CHECK-NEXT:    addi 1, 1, 32
376 ; CHECK-NEXT:    ld 0, 16(1)
377 ; CHECK-NEXT:    mtlr 0
378 ; CHECK-NEXT:    blr
379 entry:
380   %call = call zeroext i8 @test_byval_mem32(ptr byval(%struct_S32) align 1 @gS32)
381   ret void
384 define zeroext i8 @test_byval_mem32(ptr byval(%struct_S32) align 1 %s) {
385 ; CHECK-LABEL: test_byval_mem32:
386 ; CHECK:       # %bb.0: # %entry
387 ; CHECK-NEXT:    std 3, -32(1)
388 ; CHECK-NEXT:    clrldi 3, 3, 56
389 ; CHECK-NEXT:    std 4, -24(1)
390 ; CHECK-NEXT:    std 5, -16(1)
391 ; CHECK-NEXT:    std 6, -8(1)
392 ; CHECK-NEXT:    blr
393 entry:
394   %0 = load i8, ptr %s, align 1
395   ret i8 %0
398 define void @call_test_byval_mem32_2() #0 {
399 ; CHECK-LABEL: call_test_byval_mem32_2:
400 ; CHECK:       # %bb.0: # %entry
401 ; CHECK-NEXT:    mflr 0
402 ; CHECK-NEXT:    stdu 1, -32(1)
403 ; CHECK-NEXT:    std 0, 48(1)
404 ; CHECK-NEXT:    .cfi_def_cfa_offset 32
405 ; CHECK-NEXT:    .cfi_offset lr, 16
406 ; CHECK-NEXT:    addis 3, 2, .LC5@toc@ha
407 ; CHECK-NEXT:    vspltisw 2, 1
408 ; CHECK-NEXT:    ld 3, .LC5@toc@l(3)
409 ; CHECK-NEXT:    xvcvsxwdp 1, 34
410 ; CHECK-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
411 ; CHECK-NEXT:    ld 7, 24(3)
412 ; CHECK-NEXT:    ld 6, 16(3)
413 ; CHECK-NEXT:    ld 5, 8(3)
414 ; CHECK-NEXT:    ld 4, 0(3)
415 ; CHECK-NEXT:    bl test_byval_mem32_2
416 ; CHECK-NEXT:    nop
417 ; CHECK-NEXT:    addi 1, 1, 32
418 ; CHECK-NEXT:    ld 0, 16(1)
419 ; CHECK-NEXT:    mtlr 0
420 ; CHECK-NEXT:    blr
421 entry:
422   %call = call zeroext i8 @test_byval_mem32_2(float 1.0, ptr byval(%struct_S32) align 1 @gS32)
423   ret void
426 define zeroext i8 @test_byval_mem32_2(float %f, ptr byval(%struct_S32) align 1 %s) {
427 ; CHECK-LABEL: test_byval_mem32_2:
428 ; CHECK:       # %bb.0: # %entry
429 ; CHECK-NEXT:    clrldi 3, 4, 56
430 ; CHECK-NEXT:    std 4, -32(1)
431 ; CHECK-NEXT:    std 5, -24(1)
432 ; CHECK-NEXT:    std 6, -16(1)
433 ; CHECK-NEXT:    std 7, -8(1)
434 ; CHECK-NEXT:    blr
435 entry:
436   %0 = load i8, ptr %s, align 1
437   ret i8 %0
440 define void @call_test_byval_mem32_3() #0 {
441 ; CHECK-LABEL: call_test_byval_mem32_3:
442 ; CHECK:       # %bb.0: # %entry
443 ; CHECK-NEXT:    mflr 0
444 ; CHECK-NEXT:    stdu 1, -112(1)
445 ; CHECK-NEXT:    std 0, 128(1)
446 ; CHECK-NEXT:    .cfi_def_cfa_offset 112
447 ; CHECK-NEXT:    .cfi_offset lr, 16
448 ; CHECK-NEXT:    addis 3, 2, .LC5@toc@ha
449 ; CHECK-NEXT:    li 4, 16
450 ; CHECK-NEXT:    vspltisw 2, 1
451 ; CHECK-NEXT:    vspltisw 3, 4
452 ; CHECK-NEXT:    li 5, 3
453 ; CHECK-NEXT:    li 7, 2
454 ; CHECK-NEXT:    ld 3, .LC5@toc@l(3)
455 ; CHECK-NEXT:    xvcvsxwdp 1, 34
456 ; CHECK-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
457 ; CHECK-NEXT:    xvcvsxwdp 2, 35
458 ; CHECK-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
459 ; CHECK-NEXT:    lxvd2x 0, 3, 4
460 ; CHECK-NEXT:    li 4, 88
461 ; CHECK-NEXT:    stxvd2x 0, 1, 4
462 ; CHECK-NEXT:    li 4, 72
463 ; CHECK-NEXT:    lxvd2x 0, 0, 3
464 ; CHECK-NEXT:    stxvd2x 0, 1, 4
465 ; CHECK-NEXT:    ld 10, 16(3)
466 ; CHECK-NEXT:    ld 9, 8(3)
467 ; CHECK-NEXT:    ld 8, 0(3)
468 ; CHECK-NEXT:    li 3, 1
469 ; CHECK-NEXT:    bl test_byval_mem32_3
470 ; CHECK-NEXT:    nop
471 ; CHECK-NEXT:    addi 1, 1, 112
472 ; CHECK-NEXT:    ld 0, 16(1)
473 ; CHECK-NEXT:    mtlr 0
474 ; CHECK-NEXT:    blr
475 entry:
476   %call = call zeroext i8 @test_byval_mem32_3(i64 1, float 1.0, i64 3, double 4.0, i32 2, ptr byval(%struct_S32) align 1 @gS32)
477   ret void
480 define zeroext i8 @test_byval_mem32_3(i64 %i1, float %f, i64 %i2, double %d, i32 %i3, ptr byval(%struct_S32) align 1 %s) {
481 ; CHECK-LABEL: test_byval_mem32_3:
482 ; CHECK:       # %bb.0: # %entry
483 ; CHECK-NEXT:    clrldi 3, 8, 56
484 ; CHECK-NEXT:    std 8, 72(1)
485 ; CHECK-NEXT:    std 9, 80(1)
486 ; CHECK-NEXT:    std 10, 88(1)
487 ; CHECK-NEXT:    blr
488 entry:
489   %0 = load i8, ptr %s, align 1
490   ret i8 %0
493 %struct_S64 = type {[64 x i8] }
494 @gS64= external global %struct_S64, align 1
496 define void @call_test_byval_mem64() #0 {
497 ; CHECK-LABEL: call_test_byval_mem64:
498 ; CHECK:       # %bb.0: # %entry
499 ; CHECK-NEXT:    mflr 0
500 ; CHECK-NEXT:    stdu 1, -32(1)
501 ; CHECK-NEXT:    std 0, 48(1)
502 ; CHECK-NEXT:    .cfi_def_cfa_offset 32
503 ; CHECK-NEXT:    .cfi_offset lr, 16
504 ; CHECK-NEXT:    addis 3, 2, .LC6@toc@ha
505 ; CHECK-NEXT:    ld 3, .LC6@toc@l(3)
506 ; CHECK-NEXT:    ld 10, 56(3)
507 ; CHECK-NEXT:    ld 9, 48(3)
508 ; CHECK-NEXT:    ld 8, 40(3)
509 ; CHECK-NEXT:    ld 7, 32(3)
510 ; CHECK-NEXT:    ld 6, 24(3)
511 ; CHECK-NEXT:    ld 5, 16(3)
512 ; CHECK-NEXT:    ld 4, 8(3)
513 ; CHECK-NEXT:    ld 3, 0(3)
514 ; CHECK-NEXT:    bl test_byval_mem64
515 ; CHECK-NEXT:    nop
516 ; CHECK-NEXT:    addi 1, 1, 32
517 ; CHECK-NEXT:    ld 0, 16(1)
518 ; CHECK-NEXT:    mtlr 0
519 ; CHECK-NEXT:    blr
520 entry:
521   %call = call zeroext i8 @test_byval_mem64(ptr byval(%struct_S64) align 1 @gS64)
522   ret void
525 define zeroext i8 @test_byval_mem64(ptr byval(%struct_S64) align 1 %s) {
526 ; CHECK-LABEL: test_byval_mem64:
527 ; CHECK:       # %bb.0: # %entry
528 ; CHECK-NEXT:    std 3, -64(1)
529 ; CHECK-NEXT:    clrldi 3, 3, 56
530 ; CHECK-NEXT:    std 4, -56(1)
531 ; CHECK-NEXT:    std 5, -48(1)
532 ; CHECK-NEXT:    std 6, -40(1)
533 ; CHECK-NEXT:    std 7, -32(1)
534 ; CHECK-NEXT:    std 8, -24(1)
535 ; CHECK-NEXT:    std 9, -16(1)
536 ; CHECK-NEXT:    std 10, -8(1)
537 ; CHECK-NEXT:    blr
538 entry:
539   %0 = load i8, ptr %s, align 1
540   ret i8 %0
543 %struct_S65 = type { [65 x i8] }
544 @gS65 = external global %struct_S65, align 1
546 define void @call_test_byval_mem65() #0 {
547 ; CHECK-LABEL: call_test_byval_mem65:
548 ; CHECK:       # %bb.0: # %entry
549 ; CHECK-NEXT:    mflr 0
550 ; CHECK-NEXT:    stdu 1, -112(1)
551 ; CHECK-NEXT:    std 0, 128(1)
552 ; CHECK-NEXT:    .cfi_def_cfa_offset 112
553 ; CHECK-NEXT:    .cfi_offset lr, 16
554 ; CHECK-NEXT:    addis 3, 2, .LC7@toc@ha
555 ; CHECK-NEXT:    li 4, 48
556 ; CHECK-NEXT:    li 5, 80
557 ; CHECK-NEXT:    li 6, 64
558 ; CHECK-NEXT:    ld 3, .LC7@toc@l(3)
559 ; CHECK-NEXT:    lxvd2x 0, 3, 4
560 ; CHECK-NEXT:    stxvd2x 0, 1, 5
561 ; CHECK-NEXT:    li 5, 32
562 ; CHECK-NEXT:    lxvd2x 0, 3, 5
563 ; CHECK-NEXT:    stxvd2x 0, 1, 6
564 ; CHECK-NEXT:    li 6, 16
565 ; CHECK-NEXT:    lxvd2x 0, 3, 6
566 ; CHECK-NEXT:    stxvd2x 0, 1, 4
567 ; CHECK-NEXT:    lxvd2x 0, 0, 3
568 ; CHECK-NEXT:    stxvd2x 0, 1, 5
569 ; CHECK-NEXT:    lbz 4, 64(3)
570 ; CHECK-NEXT:    stb 4, 96(1)
571 ; CHECK-NEXT:    ld 10, 56(3)
572 ; CHECK-NEXT:    ld 9, 48(3)
573 ; CHECK-NEXT:    ld 8, 40(3)
574 ; CHECK-NEXT:    ld 7, 32(3)
575 ; CHECK-NEXT:    ld 6, 24(3)
576 ; CHECK-NEXT:    ld 5, 16(3)
577 ; CHECK-NEXT:    ld 4, 8(3)
578 ; CHECK-NEXT:    ld 3, 0(3)
579 ; CHECK-NEXT:    bl test_byval_mem65
580 ; CHECK-NEXT:    nop
581 ; CHECK-NEXT:    addi 1, 1, 112
582 ; CHECK-NEXT:    ld 0, 16(1)
583 ; CHECK-NEXT:    mtlr 0
584 ; CHECK-NEXT:    blr
585 entry:
586   %call = call zeroext i8 @test_byval_mem65(ptr byval(%struct_S65) align 1 @gS65)
587   ret void
590 define zeroext i8 @test_byval_mem65(ptr byval(%struct_S65) align 1 %s) {
591 ; CHECK-LABEL: test_byval_mem65:
592 ; CHECK:       # %bb.0: # %entry
593 ; CHECK-NEXT:    std 3, 32(1)
594 ; CHECK-NEXT:    clrldi 3, 3, 56
595 ; CHECK-NEXT:    std 4, 40(1)
596 ; CHECK-NEXT:    std 5, 48(1)
597 ; CHECK-NEXT:    std 6, 56(1)
598 ; CHECK-NEXT:    std 7, 64(1)
599 ; CHECK-NEXT:    std 8, 72(1)
600 ; CHECK-NEXT:    std 9, 80(1)
601 ; CHECK-NEXT:    std 10, 88(1)
602 ; CHECK-NEXT:    blr
603 entry:
604   %0 = load i8, ptr %s, align 1
605   ret i8 %0