blob: a7804b900a50204f6dd975fa185b20e5970aff40 [file] [log] [blame]
Reid Kleckner9c658212014-04-10 22:58:43 +00001; RUN: llc < %s -mtriple=arm-linux-androideabi -verify-machineinstrs | FileCheck %s -check-prefix=ARM-android
2; RUN: llc < %s -mtriple=arm-linux-unknown-gnueabi -verify-machineinstrs | FileCheck %s -check-prefix=ARM-linux
Oliver Stannardb14c6252014-04-02 16:10:33 +00003
4; We used to crash with filetype=obj
Reid Kleckner9c658212014-04-10 22:58:43 +00005; RUN: llc < %s -mtriple=arm-linux-androideabi -filetype=obj
6; RUN: llc < %s -mtriple=arm-linux-unknown-gnueabi -filetype=obj
Oliver Stannardb14c6252014-04-02 16:10:33 +00007
8
9; Just to prevent the alloca from being optimized away
10declare void @dummy_use(i32*, i32)
11
Reid Kleckner9c658212014-04-10 22:58:43 +000012define void @test_basic() #0 {
Oliver Stannardb14c6252014-04-02 16:10:33 +000013 %mem = alloca i32, i32 10
14 call void @dummy_use (i32* %mem, i32 10)
15 ret void
16
17; ARM-linux: test_basic:
18
19; ARM-linux: push {r4, r5}
20; ARM-linux-NEXT: mrc p15, #0, r4, c13, c0, #3
21; ARM-linux-NEXT: mov r5, sp
22; ARM-linux-NEXT: ldr r4, [r4, #4]
23; ARM-linux-NEXT: cmp r4, r5
24; ARM-linux-NEXT: blo .LBB0_2
25
26; ARM-linux: mov r4, #48
27; ARM-linux-NEXT: mov r5, #0
28; ARM-linux-NEXT: stmdb sp!, {lr}
29; ARM-linux-NEXT: bl __morestack
30; ARM-linux-NEXT: ldm sp!, {lr}
31; ARM-linux-NEXT: pop {r4, r5}
32; ARM-linux-NEXT: bx lr
33
34; ARM-linux: pop {r4, r5}
35
36; ARM-android: test_basic:
37
38; ARM-android: push {r4, r5}
39; ARM-android-NEXT: mrc p15, #0, r4, c13, c0, #3
40; ARM-android-NEXT: mov r5, sp
41; ARM-android-NEXT: ldr r4, [r4, #252]
42; ARM-android-NEXT: cmp r4, r5
43; ARM-android-NEXT: blo .LBB0_2
44
45; ARM-android: mov r4, #48
46; ARM-android-NEXT: mov r5, #0
47; ARM-android-NEXT: stmdb sp!, {lr}
48; ARM-android-NEXT: bl __morestack
49; ARM-android-NEXT: ldm sp!, {lr}
50; ARM-android-NEXT: pop {r4, r5}
51; ARM-android-NEXT: bx lr
52
53; ARM-android: pop {r4, r5}
54
55}
56
Reid Kleckner9c658212014-04-10 22:58:43 +000057define i32 @test_nested(i32 * nest %closure, i32 %other) #0 {
Oliver Stannardb14c6252014-04-02 16:10:33 +000058 %addend = load i32 * %closure
59 %result = add i32 %other, %addend
60 ret i32 %result
61
62; ARM-linux: test_nested:
63
64; ARM-linux: push {r4, r5}
65; ARM-linux-NEXT: mrc p15, #0, r4, c13, c0, #3
66; ARM-linux-NEXT: mov r5, sp
67; ARM-linux-NEXT: ldr r4, [r4, #4]
68; ARM-linux-NEXT: cmp r4, r5
69; ARM-linux-NEXT: blo .LBB1_2
70
71; ARM-linux: mov r4, #0
72; ARM-linux-NEXT: mov r5, #0
73; ARM-linux-NEXT: stmdb sp!, {lr}
74; ARM-linux-NEXT: bl __morestack
75; ARM-linux-NEXT: ldm sp!, {lr}
76; ARM-linux-NEXT: pop {r4, r5}
77; ARM-linux-NEXT: bx lr
78
79; ARM-linux: pop {r4, r5}
80
81; ARM-android: test_nested:
82
83; ARM-android: push {r4, r5}
84; ARM-android-NEXT: mrc p15, #0, r4, c13, c0, #3
85; ARM-android-NEXT: mov r5, sp
86; ARM-android-NEXT: ldr r4, [r4, #252]
87; ARM-android-NEXT: cmp r4, r5
88; ARM-android-NEXT: blo .LBB1_2
89
90; ARM-android: mov r4, #0
91; ARM-android-NEXT: mov r5, #0
92; ARM-android-NEXT: stmdb sp!, {lr}
93; ARM-android-NEXT: bl __morestack
94; ARM-android-NEXT: ldm sp!, {lr}
95; ARM-android-NEXT: pop {r4, r5}
96; ARM-android-NEXT: bx lr
97
98; ARM-android: pop {r4, r5}
99
100}
101
Reid Kleckner9c658212014-04-10 22:58:43 +0000102define void @test_large() #0 {
Oliver Stannardb14c6252014-04-02 16:10:33 +0000103 %mem = alloca i32, i32 10000
104 call void @dummy_use (i32* %mem, i32 0)
105 ret void
106
107; ARM-linux: test_large:
108
109; ARM-linux: push {r4, r5}
110; ARM-linux-NEXT: mrc p15, #0, r4, c13, c0, #3
111; ARM-linux-NEXT: sub r5, sp, #40192
112; ARM-linux-NEXT: ldr r4, [r4, #4]
113; ARM-linux-NEXT: cmp r4, r5
114; ARM-linux-NEXT: blo .LBB2_2
115
116; ARM-linux: mov r4, #40192
117; ARM-linux-NEXT: mov r5, #0
118; ARM-linux-NEXT: stmdb sp!, {lr}
119; ARM-linux-NEXT: bl __morestack
120; ARM-linux-NEXT: ldm sp!, {lr}
121; ARM-linux-NEXT: pop {r4, r5}
122; ARM-linux-NEXT: bx lr
123
124; ARM-linux: pop {r4, r5}
125
126; ARM-android: test_large:
127
128; ARM-android: push {r4, r5}
129; ARM-android-NEXT: mrc p15, #0, r4, c13, c0, #3
130; ARM-android-NEXT: sub r5, sp, #40192
131; ARM-android-NEXT: ldr r4, [r4, #252]
132; ARM-android-NEXT: cmp r4, r5
133; ARM-android-NEXT: blo .LBB2_2
134
135; ARM-android: mov r4, #40192
136; ARM-android-NEXT: mov r5, #0
137; ARM-android-NEXT: stmdb sp!, {lr}
138; ARM-android-NEXT: bl __morestack
139; ARM-android-NEXT: ldm sp!, {lr}
140; ARM-android-NEXT: pop {r4, r5}
141; ARM-android-NEXT: bx lr
142
143; ARM-android: pop {r4, r5}
144
145}
146
Reid Kleckner9c658212014-04-10 22:58:43 +0000147define fastcc void @test_fastcc() #0 {
Oliver Stannardb14c6252014-04-02 16:10:33 +0000148 %mem = alloca i32, i32 10
149 call void @dummy_use (i32* %mem, i32 10)
150 ret void
151
152; ARM-linux: test_fastcc:
153
154; ARM-linux: push {r4, r5}
155; ARM-linux-NEXT: mrc p15, #0, r4, c13, c0, #3
156; ARM-linux-NEXT: mov r5, sp
157; ARM-linux-NEXT: ldr r4, [r4, #4]
158; ARM-linux-NEXT: cmp r4, r5
159; ARM-linux-NEXT: blo .LBB3_2
160
161; ARM-linux: mov r4, #48
162; ARM-linux-NEXT: mov r5, #0
163; ARM-linux-NEXT: stmdb sp!, {lr}
164; ARM-linux-NEXT: bl __morestack
165; ARM-linux-NEXT: ldm sp!, {lr}
166; ARM-linux-NEXT: pop {r4, r5}
167; ARM-linux-NEXT: bx lr
168
169; ARM-linux: pop {r4, r5}
170
171; ARM-android: test_fastcc:
172
173; ARM-android: push {r4, r5}
174; ARM-android-NEXT: mrc p15, #0, r4, c13, c0, #3
175; ARM-android-NEXT: mov r5, sp
176; ARM-android-NEXT: ldr r4, [r4, #252]
177; ARM-android-NEXT: cmp r4, r5
178; ARM-android-NEXT: blo .LBB3_2
179
180; ARM-android: mov r4, #48
181; ARM-android-NEXT: mov r5, #0
182; ARM-android-NEXT: stmdb sp!, {lr}
183; ARM-android-NEXT: bl __morestack
184; ARM-android-NEXT: ldm sp!, {lr}
185; ARM-android-NEXT: pop {r4, r5}
186; ARM-android-NEXT: bx lr
187
188; ARM-android: pop {r4, r5}
189
190}
191
Reid Kleckner9c658212014-04-10 22:58:43 +0000192define fastcc void @test_fastcc_large() #0 {
Oliver Stannardb14c6252014-04-02 16:10:33 +0000193 %mem = alloca i32, i32 10000
194 call void @dummy_use (i32* %mem, i32 0)
195 ret void
196
197; ARM-linux: test_fastcc_large:
198
199; ARM-linux: push {r4, r5}
200; ARM-linux-NEXT: mrc p15, #0, r4, c13, c0, #3
201; ARM-linux-NEXT: sub r5, sp, #40192
202; ARM-linux-NEXT: ldr r4, [r4, #4]
203; ARM-linux-NEXT: cmp r4, r5
204; ARM-linux-NEXT: blo .LBB4_2
205
206; ARM-linux: mov r4, #40192
207; ARM-linux-NEXT: mov r5, #0
208; ARM-linux-NEXT: stmdb sp!, {lr}
209; ARM-linux-NEXT: bl __morestack
210; ARM-linux-NEXT: ldm sp!, {lr}
211; ARM-linux-NEXT: pop {r4, r5}
212; ARM-linux-NEXT: bx lr
213
214; ARM-linux: pop {r4, r5}
215
216; ARM-android: test_fastcc_large:
217
218; ARM-android: push {r4, r5}
219; ARM-android-NEXT: mrc p15, #0, r4, c13, c0, #3
220; ARM-android-NEXT: sub r5, sp, #40192
221; ARM-android-NEXT: ldr r4, [r4, #252]
222; ARM-android-NEXT: cmp r4, r5
223; ARM-android-NEXT: blo .LBB4_2
224
225; ARM-android: mov r4, #40192
226; ARM-android-NEXT: mov r5, #0
227; ARM-android-NEXT: stmdb sp!, {lr}
228; ARM-android-NEXT: bl __morestack
229; ARM-android-NEXT: ldm sp!, {lr}
230; ARM-android-NEXT: pop {r4, r5}
231; ARM-android-NEXT: bx lr
232
233; ARM-android: pop {r4, r5}
234
235}
Reid Kleckner9c658212014-04-10 22:58:43 +0000236
237attributes #0 = { "split-stack" }