blob: 89043ec11dced3cde09113b6ea6a8de02d944f43 [file] [log] [blame]
Reid Kleckner9c658212014-04-10 22:58:43 +00001; RUN: llc < %s -mtriple=thumb-linux-androideabi -verify-machineinstrs | FileCheck %s -check-prefix=Thumb-android
2; RUN: llc < %s -mtriple=thumb-linux-unknown-gnueabi -verify-machineinstrs | FileCheck %s -check-prefix=Thumb-linux
3; RUN: llc < %s -mtriple=thumb-linux-androideabi -filetype=obj
4; RUN: llc < %s -mtriple=thumb-linux-unknown-gnueabi -filetype=obj
Oliver Stannardb14c6252014-04-02 16:10:33 +00005
6
7; Just to prevent the alloca from being optimized away
8declare void @dummy_use(i32*, i32)
9
Reid Kleckner9c658212014-04-10 22:58:43 +000010define void @test_basic() #0 {
Oliver Stannardb14c6252014-04-02 16:10:33 +000011 %mem = alloca i32, i32 10
12 call void @dummy_use (i32* %mem, i32 10)
13 ret void
14
15; Thumb-android: test_basic:
16
17; Thumb-android: push {r4, r5}
18; Thumb-android-NEXT: mov r5, sp
19; Thumb-android-NEXT: ldr r4, .LCPI0_0
20; Thumb-android-NEXT: ldr r4, [r4]
21; Thumb-android-NEXT: cmp r4, r5
22; Thumb-android-NEXT: blo .LBB0_2
23
24; Thumb-android: mov r4, #48
25; Thumb-android-NEXT: mov r5, #0
26; Thumb-android-NEXT: push {lr}
27; Thumb-android-NEXT: bl __morestack
28; Thumb-android-NEXT: pop {r4}
29; Thumb-android-NEXT: mov lr, r4
30; Thumb-android-NEXT: pop {r4, r5}
31; Thumb-android-NEXT: bx lr
32
33; Thumb-android: pop {r4, r5}
34
35; Thumb-linux: test_basic:
36
37; Thumb-linux: push {r4, r5}
38; Thumb-linux-NEXT: mov r5, sp
39; Thumb-linux-NEXT: ldr r4, .LCPI0_0
40; Thumb-linux-NEXT: ldr r4, [r4]
41; Thumb-linux-NEXT: cmp r4, r5
42; Thumb-linux-NEXT: blo .LBB0_2
43
44; Thumb-linux: mov r4, #48
45; Thumb-linux-NEXT: mov r5, #0
46; Thumb-linux-NEXT: push {lr}
47; Thumb-linux-NEXT: bl __morestack
48; Thumb-linux-NEXT: pop {r4}
49; Thumb-linux-NEXT: mov lr, r4
50; Thumb-linux-NEXT: pop {r4, r5}
51; Thumb-linux-NEXT: bx lr
52
53; Thumb-linux: 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; Thumb-android: test_nested:
63
64; Thumb-android: push {r4, r5}
65; Thumb-android-NEXT: mov r5, sp
66; Thumb-android-NEXT: ldr r4, .LCPI1_0
67; Thumb-android-NEXT: ldr r4, [r4]
68; Thumb-android-NEXT: cmp r4, r5
69; Thumb-android-NEXT: blo .LBB1_2
70
71; Thumb-android: mov r4, #0
72; Thumb-android-NEXT: mov r5, #0
73; Thumb-android-NEXT: push {lr}
74; Thumb-android-NEXT: bl __morestack
75; Thumb-android-NEXT: pop {r4}
76; Thumb-android-NEXT: mov lr, r4
77; Thumb-android-NEXT: pop {r4, r5}
78; Thumb-android-NEXT: bx lr
79
80; Thumb-android: pop {r4, r5}
81
82; Thumb-linux: test_nested:
83
84; Thumb-linux: push {r4, r5}
85; Thumb-linux-NEXT: mov r5, sp
86; Thumb-linux-NEXT: ldr r4, .LCPI1_0
87; Thumb-linux-NEXT: ldr r4, [r4]
88; Thumb-linux-NEXT: cmp r4, r5
89; Thumb-linux-NEXT: blo .LBB1_2
90
91; Thumb-linux: mov r4, #0
92; Thumb-linux-NEXT: mov r5, #0
93; Thumb-linux-NEXT: push {lr}
94; Thumb-linux-NEXT: bl __morestack
95; Thumb-linux-NEXT: pop {r4}
96; Thumb-linux-NEXT: mov lr, r4
97; Thumb-linux-NEXT: pop {r4, r5}
98; Thumb-linux-NEXT: bx lr
99
100; Thumb-linux: pop {r4, r5}
101
102}
103
Reid Kleckner9c658212014-04-10 22:58:43 +0000104define void @test_large() #0 {
Oliver Stannardb14c6252014-04-02 16:10:33 +0000105 %mem = alloca i32, i32 10000
106 call void @dummy_use (i32* %mem, i32 0)
107 ret void
108
109; Thumb-android: test_large:
110
111; Thumb-android: push {r4, r5}
112; Thumb-android-NEXT: mov r5, sp
113; Thumb-android-NEXT: sub r5, #40192
114; Thumb-android-NEXT: ldr r4, .LCPI2_2
115; Thumb-android-NEXT: ldr r4, [r4]
116; Thumb-android-NEXT: cmp r4, r5
117; Thumb-android-NEXT: blo .LBB2_2
118
119; Thumb-android: mov r4, #40192
120; Thumb-android-NEXT: mov r5, #0
121; Thumb-android-NEXT: push {lr}
122; Thumb-android-NEXT: bl __morestack
123; Thumb-android-NEXT: pop {r4}
124; Thumb-android-NEXT: mov lr, r4
125; Thumb-android-NEXT: pop {r4, r5}
126; Thumb-android-NEXT: bx lr
127
128; Thumb-android: pop {r4, r5}
129
130; Thumb-linux: test_large:
131
132; Thumb-linux: push {r4, r5}
133; Thumb-linux-NEXT: mov r5, sp
134; Thumb-linux-NEXT: sub r5, #40192
135; Thumb-linux-NEXT: ldr r4, .LCPI2_2
136; Thumb-linux-NEXT: ldr r4, [r4]
137; Thumb-linux-NEXT: cmp r4, r5
138; Thumb-linux-NEXT: blo .LBB2_2
139
140; Thumb-linux: mov r4, #40192
141; Thumb-linux-NEXT: mov r5, #0
142; Thumb-linux-NEXT: push {lr}
143; Thumb-linux-NEXT: bl __morestack
144; Thumb-linux-NEXT: pop {r4}
145; Thumb-linux-NEXT: mov lr, r4
146; Thumb-linux-NEXT: pop {r4, r5}
147; Thumb-linux-NEXT: bx lr
148
149; Thumb-linux: pop {r4, r5}
150
151}
152
Reid Kleckner9c658212014-04-10 22:58:43 +0000153define fastcc void @test_fastcc() #0 {
Oliver Stannardb14c6252014-04-02 16:10:33 +0000154 %mem = alloca i32, i32 10
155 call void @dummy_use (i32* %mem, i32 10)
156 ret void
157
158; Thumb-android: test_fastcc:
159
160; Thumb-android: push {r4, r5}
161; Thumb-android-NEXT: mov r5, sp
162; Thumb-android-NEXT: ldr r4, .LCPI3_0
163; Thumb-android-NEXT: ldr r4, [r4]
164; Thumb-android-NEXT: cmp r4, r5
165; Thumb-android-NEXT: blo .LBB3_2
166
167; Thumb-android: mov r4, #48
168; Thumb-android-NEXT: mov r5, #0
169; Thumb-android-NEXT: push {lr}
170; Thumb-android-NEXT: bl __morestack
171; Thumb-android-NEXT: pop {r4}
172; Thumb-android-NEXT: mov lr, r4
173; Thumb-android-NEXT: pop {r4, r5}
174; Thumb-android-NEXT: bx lr
175
176; Thumb-android: pop {r4, r5}
177
178; Thumb-linux: test_fastcc:
179
180; Thumb-linux: push {r4, r5}
181; Thumb-linux-NEXT: mov r5, sp
182; Thumb-linux-NEXT: ldr r4, .LCPI3_0
183; Thumb-linux-NEXT: ldr r4, [r4]
184; Thumb-linux-NEXT: cmp r4, r5
185; Thumb-linux-NEXT: blo .LBB3_2
186
187; Thumb-linux: mov r4, #48
188; Thumb-linux-NEXT: mov r5, #0
189; Thumb-linux-NEXT: push {lr}
190; Thumb-linux-NEXT: bl __morestack
191; Thumb-linux-NEXT: pop {r4}
192; Thumb-linux-NEXT: mov lr, r4
193; Thumb-linux-NEXT: pop {r4, r5}
194; Thumb-linux-NEXT: bx lr
195
196; Thumb-linux: pop {r4, r5}
197
198}
199
Reid Kleckner9c658212014-04-10 22:58:43 +0000200define fastcc void @test_fastcc_large() #0 {
Oliver Stannardb14c6252014-04-02 16:10:33 +0000201 %mem = alloca i32, i32 10000
202 call void @dummy_use (i32* %mem, i32 0)
203 ret void
204
205; Thumb-android: test_fastcc_large:
206
207; Thumb-android: push {r4, r5}
208; Thumb-android-NEXT: mov r5, sp
209; Thumb-android-NEXT: sub r5, #40192
210; Thumb-android-NEXT: ldr r4, .LCPI4_2
211; Thumb-android-NEXT: ldr r4, [r4]
212; Thumb-android-NEXT: cmp r4, r5
213; Thumb-android-NEXT: blo .LBB4_2
214
215; Thumb-android: mov r4, #40192
216; Thumb-android-NEXT: mov r5, #0
217; Thumb-android-NEXT: push {lr}
218; Thumb-android-NEXT: bl __morestack
219; Thumb-android-NEXT: pop {r4}
220; Thumb-android-NEXT: mov lr, r4
221; Thumb-android-NEXT: pop {r4, r5}
222; Thumb-android-NEXT: bx lr
223
224; Thumb-android: pop {r4, r5}
225
226; Thumb-linux: test_fastcc_large:
227
228; Thumb-linux: push {r4, r5}
229; Thumb-linux-NEXT: mov r5, sp
230; Thumb-linux-NEXT: sub r5, #40192
231; Thumb-linux-NEXT: ldr r4, .LCPI4_2
232; Thumb-linux-NEXT: ldr r4, [r4]
233; Thumb-linux-NEXT: cmp r4, r5
234; Thumb-linux-NEXT: blo .LBB4_2
235
236; Thumb-linux: mov r4, #40192
237; Thumb-linux-NEXT: mov r5, #0
238; Thumb-linux-NEXT: push {lr}
239; Thumb-linux-NEXT: bl __morestack
240; Thumb-linux-NEXT: pop {r4}
241; Thumb-linux-NEXT: mov lr, r4
242; Thumb-linux-NEXT: pop {r4, r5}
243; Thumb-linux-NEXT: bx lr
244
245; Thumb-linux: pop {r4, r5}
246
247}
Reid Kleckner9c658212014-04-10 22:58:43 +0000248
249attributes #0 = { "split-stack" }