xref: /llvm-project/llvm/test/CodeGen/ARM/struct-byval-loop.ll (revision 6c8f4472b488d2729bed73dbb5644854e1b3c312)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2; RUN: llc -mtriple=arm--none-eabi < %s | FileCheck %s
3
4%type_80 = type [20 x i32]
5
6declare void @func_80(ptr, ptr byval(%type_80))
7
8define void @test_80() {
9; CHECK-LABEL: test_80:
10; CHECK:       @ %bb.0:
11; CHECK-NEXT:    .save {r11, lr}
12; CHECK-NEXT:    push {r11, lr}
13; CHECK-NEXT:    .pad #152
14; CHECK-NEXT:    sub sp, sp, #152
15; CHECK-NEXT:    add r0, sp, #72
16; CHECK-NEXT:    ldr r1, .LCPI0_0
17; CHECK-NEXT:    add r0, r0, #12
18; CHECK-NEXT:    mov r2, sp
19; CHECK-NEXT:  .LBB0_1: @ =>This Inner Loop Header: Depth=1
20; CHECK-NEXT:    ldr r3, [r0], #4
21; CHECK-NEXT:    subs r1, r1, #4
22; CHECK-NEXT:    str r3, [r2], #4
23; CHECK-NEXT:    bne .LBB0_1
24; CHECK-NEXT:  @ %bb.2:
25; CHECK-NEXT:    add r3, sp, #72
26; CHECK-NEXT:    mov r0, #0
27; CHECK-NEXT:    ldm r3, {r1, r2, r3}
28; CHECK-NEXT:    bl func_80
29; CHECK-NEXT:    add sp, sp, #152
30; CHECK-NEXT:    pop {r11, lr}
31; CHECK-NEXT:    mov pc, lr
32; CHECK-NEXT:    .p2align 2
33; CHECK-NEXT:  @ %bb.3:
34; CHECK-NEXT:  .LCPI0_0:
35; CHECK-NEXT:    .long 68 @ 0x44
36  %a = alloca %type_80
37  call void @func_80(ptr null, ptr %a)
38  ret void
39}
40
41%type_4000 = type [1000 x i32]
42
43declare void @func_4000(ptr, ptr byval(%type_4000))
44
45define void @test_4000() {
46; CHECK-LABEL: test_4000:
47; CHECK:       @ %bb.0:
48; CHECK-NEXT:    .save {r11, lr}
49; CHECK-NEXT:    push {r11, lr}
50; CHECK-NEXT:    .pad #4000
51; CHECK-NEXT:    sub sp, sp, #4000
52; CHECK-NEXT:    sub sp, sp, #920
53; CHECK-NEXT:    sub sp, sp, #3072
54; CHECK-NEXT:    add lr, sp, #3072
55; CHECK-NEXT:    ldr r1, .LCPI1_0
56; CHECK-NEXT:    add r0, lr, #920
57; CHECK-NEXT:    mov r2, sp
58; CHECK-NEXT:    add r0, r0, #12
59; CHECK-NEXT:  .LBB1_1: @ =>This Inner Loop Header: Depth=1
60; CHECK-NEXT:    ldr r3, [r0], #4
61; CHECK-NEXT:    subs r1, r1, #4
62; CHECK-NEXT:    str r3, [r2], #4
63; CHECK-NEXT:    bne .LBB1_1
64; CHECK-NEXT:  @ %bb.2:
65; CHECK-NEXT:    ldr r1, [sp, #3992]
66; CHECK-NEXT:    mov r0, #0
67; CHECK-NEXT:    ldr r2, [sp, #3996]
68; CHECK-NEXT:    ldr r3, [sp, #4000]
69; CHECK-NEXT:    bl func_4000
70; CHECK-NEXT:    add sp, sp, #920
71; CHECK-NEXT:    add sp, sp, #3072
72; CHECK-NEXT:    add sp, sp, #4000
73; CHECK-NEXT:    pop {r11, lr}
74; CHECK-NEXT:    mov pc, lr
75; CHECK-NEXT:    .p2align 2
76; CHECK-NEXT:  @ %bb.3:
77; CHECK-NEXT:  .LCPI1_0:
78; CHECK-NEXT:    .long 3988 @ 0xf94
79  %a = alloca %type_4000
80  call void @func_4000(ptr null, ptr %a)
81  ret void
82}
83