[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / X86 / segmented-stacks.ll
blob7304fedd28758776bd05e24b4d44f978c77c91d9
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mcpu=generic -mtriple=i686-linux -verify-machineinstrs | FileCheck %s -check-prefix=X86-Linux
3 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux  -verify-machineinstrs | FileCheck %s -check-prefix=X64-Linux
4 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -code-model=large -verify-machineinstrs | FileCheck %s -check-prefix=X64-Linux-Large
5 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnux32 -verify-machineinstrs | FileCheck %s -check-prefix=X32ABI
6 ; RUN: llc < %s -mcpu=generic -mtriple=i686-darwin -verify-machineinstrs | FileCheck %s -check-prefix=X86-Darwin
7 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-darwin -verify-machineinstrs | FileCheck %s -check-prefix=X64-Darwin
8 ; RUN: llc < %s -mcpu=generic -mtriple=i686-mingw32 -verify-machineinstrs | FileCheck %s -check-prefix=X86-MinGW
9 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-freebsd -verify-machineinstrs | FileCheck %s -check-prefix=X64-FreeBSD
10 ; RUN: llc < %s -mcpu=generic -mtriple=i686-dragonfly -verify-machineinstrs | FileCheck %s -check-prefix=X86-DFlyBSD
11 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-dragonfly -verify-machineinstrs | FileCheck %s -check-prefix=X64-DFlyBSD
12 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-mingw32 -verify-machineinstrs | FileCheck %s -check-prefix=X64-MinGW
14 ; We used to crash with filetype=obj
15 ; RUN: llc < %s -mcpu=generic -mtriple=i686-linux -filetype=obj -o /dev/null
16 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -filetype=obj -o /dev/null
17 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnux32 -filetype=obj -o /dev/null
18 ; RUN: llc < %s -mcpu=generic -mtriple=i686-darwin -filetype=obj -o /dev/null
19 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-darwin -filetype=obj -o /dev/null
20 ; RUN: llc < %s -mcpu=generic -mtriple=i686-mingw32 -filetype=obj -o /dev/null
21 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-freebsd -filetype=obj -o /dev/null
22 ; RUN: llc < %s -mcpu=generic -mtriple=i686-dragonfly -filetype=obj -o /dev/null
23 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-dragonfly -filetype=obj -o /dev/null
24 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-mingw32 -filetype=obj -o /dev/null
26 ; RUN: not --crash llc < %s -mcpu=generic -mtriple=x86_64-solaris 2> %t.log
27 ; RUN: FileCheck %s -input-file=%t.log -check-prefix=X64-Solaris
28 ; RUN: not --crash llc < %s -mcpu=generic -mtriple=i686-freebsd 2> %t.log
29 ; RUN: FileCheck %s -input-file=%t.log -check-prefix=X86-FreeBSD
31 ; X64-Solaris: Segmented stacks not supported on this platform
32 ; X86-FreeBSD: Segmented stacks not supported on FreeBSD i386
34 ; Just to prevent the alloca from being optimized away
35 declare void @dummy_use(ptr, i32)
37 define void @test_basic() #0 {
38 ; X86-Linux-LABEL: test_basic:
39 ; X86-Linux:       # %bb.0:
40 ; X86-Linux-NEXT:    cmpl %gs:48, %esp
41 ; X86-Linux-NEXT:    jbe .LBB0_1
42 ; X86-Linux-NEXT:  .LBB0_2:
43 ; X86-Linux-NEXT:    subl $52, %esp
44 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 52
45 ; X86-Linux-NEXT:    leal {{[0-9]+}}(%esp), %eax
46 ; X86-Linux-NEXT:    pushl $10
47 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 4
48 ; X86-Linux-NEXT:    pushl %eax
49 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 4
50 ; X86-Linux-NEXT:    calll dummy_use@PLT
51 ; X86-Linux-NEXT:    addl $60, %esp
52 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset -60
53 ; X86-Linux-NEXT:    retl
54 ; X86-Linux-NEXT:  .LBB0_1:
55 ; X86-Linux-NEXT:    pushl $0
56 ; X86-Linux-NEXT:    pushl $44
57 ; X86-Linux-NEXT:    calll __morestack
58 ; X86-Linux-NEXT:    retl
59 ; X86-Linux-NEXT:    jmp .LBB0_2
61 ; X64-Linux-LABEL: test_basic:
62 ; X64-Linux:       # %bb.0:
63 ; X64-Linux-NEXT:    cmpq %fs:112, %rsp
64 ; X64-Linux-NEXT:    jbe .LBB0_1
65 ; X64-Linux-NEXT:  .LBB0_2:
66 ; X64-Linux-NEXT:    subq $40, %rsp
67 ; X64-Linux-NEXT:    .cfi_def_cfa_offset 48
68 ; X64-Linux-NEXT:    movq %rsp, %rdi
69 ; X64-Linux-NEXT:    movl $10, %esi
70 ; X64-Linux-NEXT:    callq dummy_use@PLT
71 ; X64-Linux-NEXT:    addq $40, %rsp
72 ; X64-Linux-NEXT:    .cfi_def_cfa_offset 8
73 ; X64-Linux-NEXT:    retq
74 ; X64-Linux-NEXT:  .LBB0_1:
75 ; X64-Linux-NEXT:    movl $40, %r10d
76 ; X64-Linux-NEXT:    movl $0, %r11d
77 ; X64-Linux-NEXT:    callq __morestack
78 ; X64-Linux-NEXT:    retq
79 ; X64-Linux-NEXT:    jmp .LBB0_2
81 ; X64-Linux-Large-LABEL: test_basic:
82 ; X64-Linux-Large:       # %bb.0:
83 ; X64-Linux-Large-NEXT:    cmpq %fs:112, %rsp
84 ; X64-Linux-Large-NEXT:    jbe .LBB0_1
85 ; X64-Linux-Large-NEXT:  .LBB0_2:
86 ; X64-Linux-Large-NEXT:    subq $40, %rsp
87 ; X64-Linux-Large-NEXT:    .cfi_def_cfa_offset 48
88 ; X64-Linux-Large-NEXT:    movabsq $dummy_use, %rax
89 ; X64-Linux-Large-NEXT:    movq %rsp, %rdi
90 ; X64-Linux-Large-NEXT:    movl $10, %esi
91 ; X64-Linux-Large-NEXT:    callq *%rax
92 ; X64-Linux-Large-NEXT:    addq $40, %rsp
93 ; X64-Linux-Large-NEXT:    .cfi_def_cfa_offset 8
94 ; X64-Linux-Large-NEXT:    retq
95 ; X64-Linux-Large-NEXT:  .LBB0_1:
96 ; X64-Linux-Large-NEXT:    movl $40, %r10d
97 ; X64-Linux-Large-NEXT:    movl $0, %r11d
98 ; X64-Linux-Large-NEXT:    callq *__morestack_addr(%rip)
99 ; X64-Linux-Large-NEXT:    retq
100 ; X64-Linux-Large-NEXT:    jmp .LBB0_2
102 ; X32ABI-LABEL: test_basic:
103 ; X32ABI:       # %bb.0:
104 ; X32ABI-NEXT:    cmpl %fs:64, %esp
105 ; X32ABI-NEXT:    jbe .LBB0_1
106 ; X32ABI-NEXT:  .LBB0_2:
107 ; X32ABI-NEXT:    subl $40, %esp
108 ; X32ABI-NEXT:    .cfi_def_cfa_offset 48
109 ; X32ABI-NEXT:    movl %esp, %edi
110 ; X32ABI-NEXT:    movl $10, %esi
111 ; X32ABI-NEXT:    callq dummy_use@PLT
112 ; X32ABI-NEXT:    addl $40, %esp
113 ; X32ABI-NEXT:    .cfi_def_cfa_offset 8
114 ; X32ABI-NEXT:    retq
115 ; X32ABI-NEXT:  .LBB0_1:
116 ; X32ABI-NEXT:    movl $40, %r10d
117 ; X32ABI-NEXT:    movl $0, %r11d
118 ; X32ABI-NEXT:    callq __morestack
119 ; X32ABI-NEXT:    retq
120 ; X32ABI-NEXT:    jmp .LBB0_2
122 ; X86-Darwin-LABEL: test_basic:
123 ; X86-Darwin:       ## %bb.0:
124 ; X86-Darwin-NEXT:    movl $432, %ecx ## imm = 0x1B0
125 ; X86-Darwin-NEXT:    cmpl %gs:(%ecx), %esp
126 ; X86-Darwin-NEXT:    jbe LBB0_1
127 ; X86-Darwin-NEXT:  LBB0_2:
128 ; X86-Darwin-NEXT:    subl $60, %esp
129 ; X86-Darwin-NEXT:    .cfi_def_cfa_offset 64
130 ; X86-Darwin-NEXT:    leal {{[0-9]+}}(%esp), %eax
131 ; X86-Darwin-NEXT:    movl %eax, (%esp)
132 ; X86-Darwin-NEXT:    movl $10, {{[0-9]+}}(%esp)
133 ; X86-Darwin-NEXT:    calll _dummy_use
134 ; X86-Darwin-NEXT:    addl $60, %esp
135 ; X86-Darwin-NEXT:    retl
136 ; X86-Darwin-NEXT:  LBB0_1:
137 ; X86-Darwin-NEXT:    pushl $0
138 ; X86-Darwin-NEXT:    pushl $60
139 ; X86-Darwin-NEXT:    calll ___morestack
140 ; X86-Darwin-NEXT:    retl
141 ; X86-Darwin-NEXT:    jmp LBB0_2
143 ; X64-Darwin-LABEL: test_basic:
144 ; X64-Darwin:       ## %bb.0:
145 ; X64-Darwin-NEXT:    cmpq %gs:816, %rsp
146 ; X64-Darwin-NEXT:    jbe LBB0_1
147 ; X64-Darwin-NEXT:  LBB0_2:
148 ; X64-Darwin-NEXT:    subq $40, %rsp
149 ; X64-Darwin-NEXT:    .cfi_def_cfa_offset 48
150 ; X64-Darwin-NEXT:    movq %rsp, %rdi
151 ; X64-Darwin-NEXT:    movl $10, %esi
152 ; X64-Darwin-NEXT:    callq _dummy_use
153 ; X64-Darwin-NEXT:    addq $40, %rsp
154 ; X64-Darwin-NEXT:    retq
155 ; X64-Darwin-NEXT:  LBB0_1:
156 ; X64-Darwin-NEXT:    movl $40, %r10d
157 ; X64-Darwin-NEXT:    movl $0, %r11d
158 ; X64-Darwin-NEXT:    callq ___morestack
159 ; X64-Darwin-NEXT:    retq
160 ; X64-Darwin-NEXT:    jmp LBB0_2
162 ; X86-MinGW-LABEL: test_basic:
163 ; X86-MinGW:       # %bb.0:
164 ; X86-MinGW-NEXT:    cmpl %fs:20, %esp
165 ; X86-MinGW-NEXT:    jbe LBB0_1
166 ; X86-MinGW-NEXT:  LBB0_2:
167 ; X86-MinGW-NEXT:    subl $40, %esp
168 ; X86-MinGW-NEXT:    .cfi_def_cfa_offset 44
169 ; X86-MinGW-NEXT:    movl %esp, %eax
170 ; X86-MinGW-NEXT:    pushl $10
171 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset 4
172 ; X86-MinGW-NEXT:    pushl %eax
173 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset 4
174 ; X86-MinGW-NEXT:    calll _dummy_use
175 ; X86-MinGW-NEXT:    addl $48, %esp
176 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset -48
177 ; X86-MinGW-NEXT:    retl
178 ; X86-MinGW-NEXT:  LBB0_1:
179 ; X86-MinGW-NEXT:    pushl $0
180 ; X86-MinGW-NEXT:    pushl $40
181 ; X86-MinGW-NEXT:    calll ___morestack
182 ; X86-MinGW-NEXT:    retl
183 ; X86-MinGW-NEXT:    jmp LBB0_2
185 ; X64-FreeBSD-LABEL: test_basic:
186 ; X64-FreeBSD:       # %bb.0:
187 ; X64-FreeBSD-NEXT:    cmpq %fs:24, %rsp
188 ; X64-FreeBSD-NEXT:    jbe .LBB0_1
189 ; X64-FreeBSD-NEXT:  .LBB0_2:
190 ; X64-FreeBSD-NEXT:    subq $40, %rsp
191 ; X64-FreeBSD-NEXT:    .cfi_def_cfa_offset 48
192 ; X64-FreeBSD-NEXT:    movq %rsp, %rdi
193 ; X64-FreeBSD-NEXT:    movl $10, %esi
194 ; X64-FreeBSD-NEXT:    callq dummy_use@PLT
195 ; X64-FreeBSD-NEXT:    addq $40, %rsp
196 ; X64-FreeBSD-NEXT:    .cfi_def_cfa_offset 8
197 ; X64-FreeBSD-NEXT:    retq
198 ; X64-FreeBSD-NEXT:  .LBB0_1:
199 ; X64-FreeBSD-NEXT:    movl $40, %r10d
200 ; X64-FreeBSD-NEXT:    movl $0, %r11d
201 ; X64-FreeBSD-NEXT:    callq __morestack
202 ; X64-FreeBSD-NEXT:    retq
203 ; X64-FreeBSD-NEXT:    jmp .LBB0_2
205 ; X86-DFlyBSD-LABEL: test_basic:
206 ; X86-DFlyBSD:       # %bb.0:
207 ; X86-DFlyBSD-NEXT:    cmpl %fs:16, %esp
208 ; X86-DFlyBSD-NEXT:    jbe .LBB0_1
209 ; X86-DFlyBSD-NEXT:  .LBB0_2:
210 ; X86-DFlyBSD-NEXT:    subl $40, %esp
211 ; X86-DFlyBSD-NEXT:    .cfi_def_cfa_offset 44
212 ; X86-DFlyBSD-NEXT:    movl %esp, %eax
213 ; X86-DFlyBSD-NEXT:    pushl $10
214 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset 4
215 ; X86-DFlyBSD-NEXT:    pushl %eax
216 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset 4
217 ; X86-DFlyBSD-NEXT:    calll dummy_use@PLT
218 ; X86-DFlyBSD-NEXT:    addl $48, %esp
219 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset -48
220 ; X86-DFlyBSD-NEXT:    retl
221 ; X86-DFlyBSD-NEXT:  .LBB0_1:
222 ; X86-DFlyBSD-NEXT:    pushl $0
223 ; X86-DFlyBSD-NEXT:    pushl $40
224 ; X86-DFlyBSD-NEXT:    calll __morestack
225 ; X86-DFlyBSD-NEXT:    retl
226 ; X86-DFlyBSD-NEXT:    jmp .LBB0_2
228 ; X64-DFlyBSD-LABEL: test_basic:
229 ; X64-DFlyBSD:       # %bb.0:
230 ; X64-DFlyBSD-NEXT:    cmpq %fs:32, %rsp
231 ; X64-DFlyBSD-NEXT:    jbe .LBB0_1
232 ; X64-DFlyBSD-NEXT:  .LBB0_2:
233 ; X64-DFlyBSD-NEXT:    subq $40, %rsp
234 ; X64-DFlyBSD-NEXT:    .cfi_def_cfa_offset 48
235 ; X64-DFlyBSD-NEXT:    movq %rsp, %rdi
236 ; X64-DFlyBSD-NEXT:    movl $10, %esi
237 ; X64-DFlyBSD-NEXT:    callq dummy_use@PLT
238 ; X64-DFlyBSD-NEXT:    addq $40, %rsp
239 ; X64-DFlyBSD-NEXT:    .cfi_def_cfa_offset 8
240 ; X64-DFlyBSD-NEXT:    retq
241 ; X64-DFlyBSD-NEXT:  .LBB0_1:
242 ; X64-DFlyBSD-NEXT:    movl $40, %r10d
243 ; X64-DFlyBSD-NEXT:    movl $0, %r11d
244 ; X64-DFlyBSD-NEXT:    callq __morestack
245 ; X64-DFlyBSD-NEXT:    retq
246 ; X64-DFlyBSD-NEXT:    jmp .LBB0_2
248 ; X64-MinGW-LABEL: test_basic:
249 ; X64-MinGW:       # %bb.0:
250 ; X64-MinGW-NEXT:    cmpq %gs:40, %rsp
251 ; X64-MinGW-NEXT:    jbe .LBB0_1
252 ; X64-MinGW-NEXT:  .LBB0_2:
253 ; X64-MinGW-NEXT:    subq $72, %rsp
254 ; X64-MinGW-NEXT:    .seh_stackalloc 72
255 ; X64-MinGW-NEXT:    .seh_endprologue
256 ; X64-MinGW-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx
257 ; X64-MinGW-NEXT:    movl $10, %edx
258 ; X64-MinGW-NEXT:    callq dummy_use
259 ; X64-MinGW-NEXT:    nop
260 ; X64-MinGW-NEXT:    addq $72, %rsp
261 ; X64-MinGW-NEXT:    retq
262 ; X64-MinGW-NEXT:  .LBB0_1:
263 ; X64-MinGW-NEXT:    movl $72, %r10d
264 ; X64-MinGW-NEXT:    movl $32, %r11d
265 ; X64-MinGW-NEXT:    callq __morestack
266 ; X64-MinGW-NEXT:    retq
267 ; X64-MinGW-NEXT:    jmp .LBB0_2
268 ; X64-MinGW-NEXT:    .seh_endproc
269         %mem = alloca i32, i32 10
270         call void @dummy_use (ptr %mem, i32 10)
271         ret void
274 define i32 @test_nested(ptr nest %closure, i32 %other) #0 {
275 ; X86-Linux-LABEL: test_nested:
276 ; X86-Linux:       # %bb.0:
277 ; X86-Linux-NEXT:    cmpl %gs:48, %esp
278 ; X86-Linux-NEXT:    jbe .LBB1_1
279 ; X86-Linux-NEXT:  .LBB1_2:
280 ; X86-Linux-NEXT:    pushl %esi
281 ; X86-Linux-NEXT:    .cfi_def_cfa_offset 8
282 ; X86-Linux-NEXT:    subl $40, %esp
283 ; X86-Linux-NEXT:    .cfi_def_cfa_offset 48
284 ; X86-Linux-NEXT:    .cfi_offset %esi, -8
285 ; X86-Linux-NEXT:    movl {{[0-9]+}}(%esp), %esi
286 ; X86-Linux-NEXT:    addl (%ecx), %esi
287 ; X86-Linux-NEXT:    subl $8, %esp
288 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 8
289 ; X86-Linux-NEXT:    leal {{[0-9]+}}(%esp), %eax
290 ; X86-Linux-NEXT:    pushl $10
291 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 4
292 ; X86-Linux-NEXT:    pushl %eax
293 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 4
294 ; X86-Linux-NEXT:    calll dummy_use@PLT
295 ; X86-Linux-NEXT:    addl $16, %esp
296 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset -16
297 ; X86-Linux-NEXT:    movl %esi, %eax
298 ; X86-Linux-NEXT:    addl $40, %esp
299 ; X86-Linux-NEXT:    .cfi_def_cfa_offset 8
300 ; X86-Linux-NEXT:    popl %esi
301 ; X86-Linux-NEXT:    .cfi_def_cfa_offset 4
302 ; X86-Linux-NEXT:    retl
303 ; X86-Linux-NEXT:  .LBB1_1:
304 ; X86-Linux-NEXT:    .cfi_restore %esi
305 ; X86-Linux-NEXT:    pushl $4
306 ; X86-Linux-NEXT:    pushl $44
307 ; X86-Linux-NEXT:    calll __morestack
308 ; X86-Linux-NEXT:    retl
309 ; X86-Linux-NEXT:    jmp .LBB1_2
311 ; X64-Linux-LABEL: test_nested:
312 ; X64-Linux:       # %bb.0:
313 ; X64-Linux-NEXT:    cmpq %fs:112, %rsp
314 ; X64-Linux-NEXT:    jbe .LBB1_1
315 ; X64-Linux-NEXT:  .LBB1_2:
316 ; X64-Linux-NEXT:    pushq %rbx
317 ; X64-Linux-NEXT:    .cfi_def_cfa_offset 16
318 ; X64-Linux-NEXT:    subq $48, %rsp
319 ; X64-Linux-NEXT:    .cfi_def_cfa_offset 64
320 ; X64-Linux-NEXT:    .cfi_offset %rbx, -16
321 ; X64-Linux-NEXT:    movl %edi, %ebx
322 ; X64-Linux-NEXT:    addl (%r10), %ebx
323 ; X64-Linux-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
324 ; X64-Linux-NEXT:    movl $10, %esi
325 ; X64-Linux-NEXT:    callq dummy_use@PLT
326 ; X64-Linux-NEXT:    movl %ebx, %eax
327 ; X64-Linux-NEXT:    addq $48, %rsp
328 ; X64-Linux-NEXT:    .cfi_def_cfa_offset 16
329 ; X64-Linux-NEXT:    popq %rbx
330 ; X64-Linux-NEXT:    .cfi_def_cfa_offset 8
331 ; X64-Linux-NEXT:    retq
332 ; X64-Linux-NEXT:  .LBB1_1:
333 ; X64-Linux-NEXT:    .cfi_restore %rbx
334 ; X64-Linux-NEXT:    movq %r10, %rax
335 ; X64-Linux-NEXT:    movl $56, %r10d
336 ; X64-Linux-NEXT:    movl $0, %r11d
337 ; X64-Linux-NEXT:    callq __morestack
338 ; X64-Linux-NEXT:    retq
339 ; X64-Linux-NEXT:    movq %rax, %r10
340 ; X64-Linux-NEXT:    jmp .LBB1_2
342 ; X64-Linux-Large-LABEL: test_nested:
343 ; X64-Linux-Large:       # %bb.0:
344 ; X64-Linux-Large-NEXT:    cmpq %fs:112, %rsp
345 ; X64-Linux-Large-NEXT:    jbe .LBB1_1
346 ; X64-Linux-Large-NEXT:  .LBB1_2:
347 ; X64-Linux-Large-NEXT:    pushq %rbx
348 ; X64-Linux-Large-NEXT:    .cfi_def_cfa_offset 16
349 ; X64-Linux-Large-NEXT:    subq $48, %rsp
350 ; X64-Linux-Large-NEXT:    .cfi_def_cfa_offset 64
351 ; X64-Linux-Large-NEXT:    .cfi_offset %rbx, -16
352 ; X64-Linux-Large-NEXT:    movl %edi, %ebx
353 ; X64-Linux-Large-NEXT:    addl (%r10), %ebx
354 ; X64-Linux-Large-NEXT:    movabsq $dummy_use, %rax
355 ; X64-Linux-Large-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
356 ; X64-Linux-Large-NEXT:    movl $10, %esi
357 ; X64-Linux-Large-NEXT:    callq *%rax
358 ; X64-Linux-Large-NEXT:    movl %ebx, %eax
359 ; X64-Linux-Large-NEXT:    addq $48, %rsp
360 ; X64-Linux-Large-NEXT:    .cfi_def_cfa_offset 16
361 ; X64-Linux-Large-NEXT:    popq %rbx
362 ; X64-Linux-Large-NEXT:    .cfi_def_cfa_offset 8
363 ; X64-Linux-Large-NEXT:    retq
364 ; X64-Linux-Large-NEXT:  .LBB1_1:
365 ; X64-Linux-Large-NEXT:    .cfi_restore %rbx
366 ; X64-Linux-Large-NEXT:    movq %r10, %rax
367 ; X64-Linux-Large-NEXT:    movl $56, %r10d
368 ; X64-Linux-Large-NEXT:    movl $0, %r11d
369 ; X64-Linux-Large-NEXT:    callq *__morestack_addr(%rip)
370 ; X64-Linux-Large-NEXT:    retq
371 ; X64-Linux-Large-NEXT:    movq %rax, %r10
372 ; X64-Linux-Large-NEXT:    jmp .LBB1_2
374 ; X32ABI-LABEL: test_nested:
375 ; X32ABI:       # %bb.0:
376 ; X32ABI-NEXT:    cmpl %fs:64, %esp
377 ; X32ABI-NEXT:    jbe .LBB1_1
378 ; X32ABI-NEXT:  .LBB1_2:
379 ; X32ABI-NEXT:    pushq %rbx
380 ; X32ABI-NEXT:    .cfi_def_cfa_offset 16
381 ; X32ABI-NEXT:    subl $48, %esp
382 ; X32ABI-NEXT:    .cfi_def_cfa_offset 64
383 ; X32ABI-NEXT:    .cfi_offset %rbx, -16
384 ; X32ABI-NEXT:    movl %edi, %ebx
385 ; X32ABI-NEXT:    addl (%r10d), %ebx
386 ; X32ABI-NEXT:    leal {{[0-9]+}}(%rsp), %edi
387 ; X32ABI-NEXT:    movl $10, %esi
388 ; X32ABI-NEXT:    callq dummy_use@PLT
389 ; X32ABI-NEXT:    movl %ebx, %eax
390 ; X32ABI-NEXT:    addl $48, %esp
391 ; X32ABI-NEXT:    .cfi_def_cfa_offset 16
392 ; X32ABI-NEXT:    popq %rbx
393 ; X32ABI-NEXT:    .cfi_def_cfa_offset 8
394 ; X32ABI-NEXT:    retq
395 ; X32ABI-NEXT:  .LBB1_1:
396 ; X32ABI-NEXT:    .cfi_restore %rbx
397 ; X32ABI-NEXT:    movl %r10d, %eax
398 ; X32ABI-NEXT:    movl $56, %r10d
399 ; X32ABI-NEXT:    movl $0, %r11d
400 ; X32ABI-NEXT:    callq __morestack
401 ; X32ABI-NEXT:    retq
402 ; X32ABI-NEXT:    movq %rax, %r10
403 ; X32ABI-NEXT:    jmp .LBB1_2
405 ; X86-Darwin-LABEL: test_nested:
406 ; X86-Darwin:       ## %bb.0:
407 ; X86-Darwin-NEXT:    movl $432, %edx ## imm = 0x1B0
408 ; X86-Darwin-NEXT:    cmpl %gs:(%edx), %esp
409 ; X86-Darwin-NEXT:    jbe LBB1_1
410 ; X86-Darwin-NEXT:  LBB1_2:
411 ; X86-Darwin-NEXT:    pushl %esi
412 ; X86-Darwin-NEXT:    .cfi_def_cfa_offset 8
413 ; X86-Darwin-NEXT:    subl $56, %esp
414 ; X86-Darwin-NEXT:    .cfi_def_cfa_offset 64
415 ; X86-Darwin-NEXT:    .cfi_offset %esi, -8
416 ; X86-Darwin-NEXT:    movl {{[0-9]+}}(%esp), %esi
417 ; X86-Darwin-NEXT:    addl (%ecx), %esi
418 ; X86-Darwin-NEXT:    leal {{[0-9]+}}(%esp), %eax
419 ; X86-Darwin-NEXT:    movl %eax, (%esp)
420 ; X86-Darwin-NEXT:    movl $10, {{[0-9]+}}(%esp)
421 ; X86-Darwin-NEXT:    calll _dummy_use
422 ; X86-Darwin-NEXT:    movl %esi, %eax
423 ; X86-Darwin-NEXT:    addl $56, %esp
424 ; X86-Darwin-NEXT:    popl %esi
425 ; X86-Darwin-NEXT:    retl
426 ; X86-Darwin-NEXT:  LBB1_1:
427 ; X86-Darwin-NEXT:    pushl $4
428 ; X86-Darwin-NEXT:    pushl $60
429 ; X86-Darwin-NEXT:    calll ___morestack
430 ; X86-Darwin-NEXT:    retl
431 ; X86-Darwin-NEXT:    jmp LBB1_2
433 ; X64-Darwin-LABEL: test_nested:
434 ; X64-Darwin:       ## %bb.0:
435 ; X64-Darwin-NEXT:    cmpq %gs:816, %rsp
436 ; X64-Darwin-NEXT:    jbe LBB1_1
437 ; X64-Darwin-NEXT:  LBB1_2:
438 ; X64-Darwin-NEXT:    pushq %rbx
439 ; X64-Darwin-NEXT:    .cfi_def_cfa_offset 16
440 ; X64-Darwin-NEXT:    subq $48, %rsp
441 ; X64-Darwin-NEXT:    .cfi_def_cfa_offset 64
442 ; X64-Darwin-NEXT:    .cfi_offset %rbx, -16
443 ; X64-Darwin-NEXT:    movl %edi, %ebx
444 ; X64-Darwin-NEXT:    addl (%r10), %ebx
445 ; X64-Darwin-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
446 ; X64-Darwin-NEXT:    movl $10, %esi
447 ; X64-Darwin-NEXT:    callq _dummy_use
448 ; X64-Darwin-NEXT:    movl %ebx, %eax
449 ; X64-Darwin-NEXT:    addq $48, %rsp
450 ; X64-Darwin-NEXT:    popq %rbx
451 ; X64-Darwin-NEXT:    retq
452 ; X64-Darwin-NEXT:  LBB1_1:
453 ; X64-Darwin-NEXT:    movq %r10, %rax
454 ; X64-Darwin-NEXT:    movl $56, %r10d
455 ; X64-Darwin-NEXT:    movl $0, %r11d
456 ; X64-Darwin-NEXT:    callq ___morestack
457 ; X64-Darwin-NEXT:    retq
458 ; X64-Darwin-NEXT:    movq %rax, %r10
459 ; X64-Darwin-NEXT:    jmp LBB1_2
461 ; X86-MinGW-LABEL: test_nested:
462 ; X86-MinGW:       # %bb.0:
463 ; X86-MinGW-NEXT:    cmpl %fs:20, %esp
464 ; X86-MinGW-NEXT:    jbe LBB1_1
465 ; X86-MinGW-NEXT:  LBB1_2:
466 ; X86-MinGW-NEXT:    pushl %esi
467 ; X86-MinGW-NEXT:    .cfi_def_cfa_offset 8
468 ; X86-MinGW-NEXT:    subl $40, %esp
469 ; X86-MinGW-NEXT:    .cfi_def_cfa_offset 48
470 ; X86-MinGW-NEXT:    .cfi_offset %esi, -8
471 ; X86-MinGW-NEXT:    movl {{[0-9]+}}(%esp), %esi
472 ; X86-MinGW-NEXT:    addl (%ecx), %esi
473 ; X86-MinGW-NEXT:    movl %esp, %eax
474 ; X86-MinGW-NEXT:    pushl $10
475 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset 4
476 ; X86-MinGW-NEXT:    pushl %eax
477 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset 4
478 ; X86-MinGW-NEXT:    calll _dummy_use
479 ; X86-MinGW-NEXT:    addl $8, %esp
480 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset -8
481 ; X86-MinGW-NEXT:    movl %esi, %eax
482 ; X86-MinGW-NEXT:    addl $40, %esp
483 ; X86-MinGW-NEXT:    popl %esi
484 ; X86-MinGW-NEXT:    retl
485 ; X86-MinGW-NEXT:  LBB1_1:
486 ; X86-MinGW-NEXT:    .cfi_def_cfa_offset 4
487 ; X86-MinGW-NEXT:    .cfi_restore %esi
488 ; X86-MinGW-NEXT:    pushl $4
489 ; X86-MinGW-NEXT:    pushl $44
490 ; X86-MinGW-NEXT:    calll ___morestack
491 ; X86-MinGW-NEXT:    retl
492 ; X86-MinGW-NEXT:    jmp LBB1_2
494 ; X64-FreeBSD-LABEL: test_nested:
495 ; X64-FreeBSD:       # %bb.0:
496 ; X64-FreeBSD-NEXT:    cmpq %fs:24, %rsp
497 ; X64-FreeBSD-NEXT:    jbe .LBB1_1
498 ; X64-FreeBSD-NEXT:  .LBB1_2:
499 ; X64-FreeBSD-NEXT:    pushq %rbx
500 ; X64-FreeBSD-NEXT:    .cfi_def_cfa_offset 16
501 ; X64-FreeBSD-NEXT:    subq $48, %rsp
502 ; X64-FreeBSD-NEXT:    .cfi_def_cfa_offset 64
503 ; X64-FreeBSD-NEXT:    .cfi_offset %rbx, -16
504 ; X64-FreeBSD-NEXT:    movl %edi, %ebx
505 ; X64-FreeBSD-NEXT:    addl (%r10), %ebx
506 ; X64-FreeBSD-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
507 ; X64-FreeBSD-NEXT:    movl $10, %esi
508 ; X64-FreeBSD-NEXT:    callq dummy_use@PLT
509 ; X64-FreeBSD-NEXT:    movl %ebx, %eax
510 ; X64-FreeBSD-NEXT:    addq $48, %rsp
511 ; X64-FreeBSD-NEXT:    .cfi_def_cfa_offset 16
512 ; X64-FreeBSD-NEXT:    popq %rbx
513 ; X64-FreeBSD-NEXT:    .cfi_def_cfa_offset 8
514 ; X64-FreeBSD-NEXT:    retq
515 ; X64-FreeBSD-NEXT:  .LBB1_1:
516 ; X64-FreeBSD-NEXT:    .cfi_restore %rbx
517 ; X64-FreeBSD-NEXT:    movq %r10, %rax
518 ; X64-FreeBSD-NEXT:    movl $56, %r10d
519 ; X64-FreeBSD-NEXT:    movl $0, %r11d
520 ; X64-FreeBSD-NEXT:    callq __morestack
521 ; X64-FreeBSD-NEXT:    retq
522 ; X64-FreeBSD-NEXT:    movq %rax, %r10
523 ; X64-FreeBSD-NEXT:    jmp .LBB1_2
525 ; X86-DFlyBSD-LABEL: test_nested:
526 ; X86-DFlyBSD:       # %bb.0:
527 ; X86-DFlyBSD-NEXT:    cmpl %fs:16, %esp
528 ; X86-DFlyBSD-NEXT:    jbe .LBB1_1
529 ; X86-DFlyBSD-NEXT:  .LBB1_2:
530 ; X86-DFlyBSD-NEXT:    pushl %esi
531 ; X86-DFlyBSD-NEXT:    .cfi_def_cfa_offset 8
532 ; X86-DFlyBSD-NEXT:    subl $40, %esp
533 ; X86-DFlyBSD-NEXT:    .cfi_def_cfa_offset 48
534 ; X86-DFlyBSD-NEXT:    .cfi_offset %esi, -8
535 ; X86-DFlyBSD-NEXT:    movl {{[0-9]+}}(%esp), %esi
536 ; X86-DFlyBSD-NEXT:    addl (%ecx), %esi
537 ; X86-DFlyBSD-NEXT:    movl %esp, %eax
538 ; X86-DFlyBSD-NEXT:    pushl $10
539 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset 4
540 ; X86-DFlyBSD-NEXT:    pushl %eax
541 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset 4
542 ; X86-DFlyBSD-NEXT:    calll dummy_use@PLT
543 ; X86-DFlyBSD-NEXT:    addl $8, %esp
544 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset -8
545 ; X86-DFlyBSD-NEXT:    movl %esi, %eax
546 ; X86-DFlyBSD-NEXT:    addl $40, %esp
547 ; X86-DFlyBSD-NEXT:    .cfi_def_cfa_offset 8
548 ; X86-DFlyBSD-NEXT:    popl %esi
549 ; X86-DFlyBSD-NEXT:    .cfi_def_cfa_offset 4
550 ; X86-DFlyBSD-NEXT:    retl
551 ; X86-DFlyBSD-NEXT:  .LBB1_1:
552 ; X86-DFlyBSD-NEXT:    .cfi_restore %esi
553 ; X86-DFlyBSD-NEXT:    pushl $4
554 ; X86-DFlyBSD-NEXT:    pushl $44
555 ; X86-DFlyBSD-NEXT:    calll __morestack
556 ; X86-DFlyBSD-NEXT:    retl
557 ; X86-DFlyBSD-NEXT:    jmp .LBB1_2
559 ; X64-DFlyBSD-LABEL: test_nested:
560 ; X64-DFlyBSD:       # %bb.0:
561 ; X64-DFlyBSD-NEXT:    cmpq %fs:32, %rsp
562 ; X64-DFlyBSD-NEXT:    jbe .LBB1_1
563 ; X64-DFlyBSD-NEXT:  .LBB1_2:
564 ; X64-DFlyBSD-NEXT:    pushq %rbx
565 ; X64-DFlyBSD-NEXT:    .cfi_def_cfa_offset 16
566 ; X64-DFlyBSD-NEXT:    subq $48, %rsp
567 ; X64-DFlyBSD-NEXT:    .cfi_def_cfa_offset 64
568 ; X64-DFlyBSD-NEXT:    .cfi_offset %rbx, -16
569 ; X64-DFlyBSD-NEXT:    movl %edi, %ebx
570 ; X64-DFlyBSD-NEXT:    addl (%r10), %ebx
571 ; X64-DFlyBSD-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
572 ; X64-DFlyBSD-NEXT:    movl $10, %esi
573 ; X64-DFlyBSD-NEXT:    callq dummy_use@PLT
574 ; X64-DFlyBSD-NEXT:    movl %ebx, %eax
575 ; X64-DFlyBSD-NEXT:    addq $48, %rsp
576 ; X64-DFlyBSD-NEXT:    .cfi_def_cfa_offset 16
577 ; X64-DFlyBSD-NEXT:    popq %rbx
578 ; X64-DFlyBSD-NEXT:    .cfi_def_cfa_offset 8
579 ; X64-DFlyBSD-NEXT:    retq
580 ; X64-DFlyBSD-NEXT:  .LBB1_1:
581 ; X64-DFlyBSD-NEXT:    .cfi_restore %rbx
582 ; X64-DFlyBSD-NEXT:    movq %r10, %rax
583 ; X64-DFlyBSD-NEXT:    movl $56, %r10d
584 ; X64-DFlyBSD-NEXT:    movl $0, %r11d
585 ; X64-DFlyBSD-NEXT:    callq __morestack
586 ; X64-DFlyBSD-NEXT:    retq
587 ; X64-DFlyBSD-NEXT:    movq %rax, %r10
588 ; X64-DFlyBSD-NEXT:    jmp .LBB1_2
590 ; X64-MinGW-LABEL: test_nested:
591 ; X64-MinGW:       # %bb.0:
592 ; X64-MinGW-NEXT:    cmpq %gs:40, %rsp
593 ; X64-MinGW-NEXT:    jbe .LBB1_1
594 ; X64-MinGW-NEXT:  .LBB1_2:
595 ; X64-MinGW-NEXT:    pushq %rsi
596 ; X64-MinGW-NEXT:    .seh_pushreg %rsi
597 ; X64-MinGW-NEXT:    subq $80, %rsp
598 ; X64-MinGW-NEXT:    .seh_stackalloc 80
599 ; X64-MinGW-NEXT:    .seh_endprologue
600 ; X64-MinGW-NEXT:    movl %ecx, %esi
601 ; X64-MinGW-NEXT:    addl (%r10), %esi
602 ; X64-MinGW-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx
603 ; X64-MinGW-NEXT:    movl $10, %edx
604 ; X64-MinGW-NEXT:    callq dummy_use
605 ; X64-MinGW-NEXT:    movl %esi, %eax
606 ; X64-MinGW-NEXT:    addq $80, %rsp
607 ; X64-MinGW-NEXT:    popq %rsi
608 ; X64-MinGW-NEXT:    retq
609 ; X64-MinGW-NEXT:  .LBB1_1:
610 ; X64-MinGW-NEXT:    movq %r10, %rax
611 ; X64-MinGW-NEXT:    movl $88, %r10d
612 ; X64-MinGW-NEXT:    movl $32, %r11d
613 ; X64-MinGW-NEXT:    callq __morestack
614 ; X64-MinGW-NEXT:    retq
615 ; X64-MinGW-NEXT:    movq %rax, %r10
616 ; X64-MinGW-NEXT:    jmp .LBB1_2
617 ; X64-MinGW-NEXT:    .seh_endproc
618        %addend = load i32 , ptr %closure
619        %result = add i32 %other, %addend
620        %mem = alloca i32, i32 10
621        call void @dummy_use (ptr %mem, i32 10)
622        ret i32 %result
625 define void @test_large() #0 {
626 ; X86-Linux-LABEL: test_large:
627 ; X86-Linux:       # %bb.0:
628 ; X86-Linux-NEXT:    leal -{{[0-9]+}}(%esp), %ecx
629 ; X86-Linux-NEXT:    cmpl %gs:48, %ecx
630 ; X86-Linux-NEXT:    jbe .LBB2_1
631 ; X86-Linux-NEXT:  .LBB2_2:
632 ; X86-Linux-NEXT:    subl $40020, %esp # imm = 0x9C54
633 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 40020
634 ; X86-Linux-NEXT:    leal {{[0-9]+}}(%esp), %eax
635 ; X86-Linux-NEXT:    pushl $3
636 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 4
637 ; X86-Linux-NEXT:    pushl %eax
638 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 4
639 ; X86-Linux-NEXT:    calll dummy_use@PLT
640 ; X86-Linux-NEXT:    addl $40028, %esp # imm = 0x9C5C
641 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset -40028
642 ; X86-Linux-NEXT:    retl
643 ; X86-Linux-NEXT:  .LBB2_1:
644 ; X86-Linux-NEXT:    pushl $0
645 ; X86-Linux-NEXT:    pushl $40012 # imm = 0x9C4C
646 ; X86-Linux-NEXT:    calll __morestack
647 ; X86-Linux-NEXT:    retl
648 ; X86-Linux-NEXT:    jmp .LBB2_2
650 ; X64-Linux-LABEL: test_large:
651 ; X64-Linux:       # %bb.0:
652 ; X64-Linux-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
653 ; X64-Linux-NEXT:    cmpq %fs:112, %r11
654 ; X64-Linux-NEXT:    jbe .LBB2_1
655 ; X64-Linux-NEXT:  .LBB2_2:
656 ; X64-Linux-NEXT:    subq $40008, %rsp # imm = 0x9C48
657 ; X64-Linux-NEXT:    .cfi_def_cfa_offset 40016
658 ; X64-Linux-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
659 ; X64-Linux-NEXT:    movl $3, %esi
660 ; X64-Linux-NEXT:    callq dummy_use@PLT
661 ; X64-Linux-NEXT:    addq $40008, %rsp # imm = 0x9C48
662 ; X64-Linux-NEXT:    .cfi_def_cfa_offset 8
663 ; X64-Linux-NEXT:    retq
664 ; X64-Linux-NEXT:  .LBB2_1:
665 ; X64-Linux-NEXT:    movl $40008, %r10d # imm = 0x9C48
666 ; X64-Linux-NEXT:    movl $0, %r11d
667 ; X64-Linux-NEXT:    callq __morestack
668 ; X64-Linux-NEXT:    retq
669 ; X64-Linux-NEXT:    jmp .LBB2_2
671 ; X64-Linux-Large-LABEL: test_large:
672 ; X64-Linux-Large:       # %bb.0:
673 ; X64-Linux-Large-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
674 ; X64-Linux-Large-NEXT:    cmpq %fs:112, %r11
675 ; X64-Linux-Large-NEXT:    jbe .LBB2_1
676 ; X64-Linux-Large-NEXT:  .LBB2_2:
677 ; X64-Linux-Large-NEXT:    subq $40008, %rsp # imm = 0x9C48
678 ; X64-Linux-Large-NEXT:    .cfi_def_cfa_offset 40016
679 ; X64-Linux-Large-NEXT:    movabsq $dummy_use, %rax
680 ; X64-Linux-Large-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
681 ; X64-Linux-Large-NEXT:    movl $3, %esi
682 ; X64-Linux-Large-NEXT:    callq *%rax
683 ; X64-Linux-Large-NEXT:    addq $40008, %rsp # imm = 0x9C48
684 ; X64-Linux-Large-NEXT:    .cfi_def_cfa_offset 8
685 ; X64-Linux-Large-NEXT:    retq
686 ; X64-Linux-Large-NEXT:  .LBB2_1:
687 ; X64-Linux-Large-NEXT:    movl $40008, %r10d # imm = 0x9C48
688 ; X64-Linux-Large-NEXT:    movl $0, %r11d
689 ; X64-Linux-Large-NEXT:    callq *__morestack_addr(%rip)
690 ; X64-Linux-Large-NEXT:    retq
691 ; X64-Linux-Large-NEXT:    jmp .LBB2_2
693 ; X32ABI-LABEL: test_large:
694 ; X32ABI:       # %bb.0:
695 ; X32ABI-NEXT:    leal -{{[0-9]+}}(%rsp), %r11d
696 ; X32ABI-NEXT:    cmpl %fs:64, %r11d
697 ; X32ABI-NEXT:    jbe .LBB2_1
698 ; X32ABI-NEXT:  .LBB2_2:
699 ; X32ABI-NEXT:    subl $40008, %esp # imm = 0x9C48
700 ; X32ABI-NEXT:    .cfi_def_cfa_offset 40016
701 ; X32ABI-NEXT:    leal {{[0-9]+}}(%rsp), %edi
702 ; X32ABI-NEXT:    movl $3, %esi
703 ; X32ABI-NEXT:    callq dummy_use@PLT
704 ; X32ABI-NEXT:    addl $40008, %esp # imm = 0x9C48
705 ; X32ABI-NEXT:    .cfi_def_cfa_offset 8
706 ; X32ABI-NEXT:    retq
707 ; X32ABI-NEXT:  .LBB2_1:
708 ; X32ABI-NEXT:    movl $40008, %r10d # imm = 0x9C48
709 ; X32ABI-NEXT:    movl $0, %r11d
710 ; X32ABI-NEXT:    callq __morestack
711 ; X32ABI-NEXT:    retq
712 ; X32ABI-NEXT:    jmp .LBB2_2
714 ; X86-Darwin-LABEL: test_large:
715 ; X86-Darwin:       ## %bb.0:
716 ; X86-Darwin-NEXT:    leal -{{[0-9]+}}(%esp), %ecx
717 ; X86-Darwin-NEXT:    movl $432, %eax ## imm = 0x1B0
718 ; X86-Darwin-NEXT:    cmpl %gs:(%eax), %ecx
719 ; X86-Darwin-NEXT:    jbe LBB2_1
720 ; X86-Darwin-NEXT:  LBB2_2:
721 ; X86-Darwin-NEXT:    subl $40012, %esp ## imm = 0x9C4C
722 ; X86-Darwin-NEXT:    .cfi_def_cfa_offset 40016
723 ; X86-Darwin-NEXT:    leal {{[0-9]+}}(%esp), %eax
724 ; X86-Darwin-NEXT:    movl %eax, (%esp)
725 ; X86-Darwin-NEXT:    movl $3, {{[0-9]+}}(%esp)
726 ; X86-Darwin-NEXT:    calll _dummy_use
727 ; X86-Darwin-NEXT:    addl $40012, %esp ## imm = 0x9C4C
728 ; X86-Darwin-NEXT:    retl
729 ; X86-Darwin-NEXT:  LBB2_1:
730 ; X86-Darwin-NEXT:    pushl $0
731 ; X86-Darwin-NEXT:    pushl $40012 ## imm = 0x9C4C
732 ; X86-Darwin-NEXT:    calll ___morestack
733 ; X86-Darwin-NEXT:    retl
734 ; X86-Darwin-NEXT:    jmp LBB2_2
736 ; X64-Darwin-LABEL: test_large:
737 ; X64-Darwin:       ## %bb.0:
738 ; X64-Darwin-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
739 ; X64-Darwin-NEXT:    cmpq %gs:816, %r11
740 ; X64-Darwin-NEXT:    jbe LBB2_1
741 ; X64-Darwin-NEXT:  LBB2_2:
742 ; X64-Darwin-NEXT:    subq $40008, %rsp ## imm = 0x9C48
743 ; X64-Darwin-NEXT:    .cfi_def_cfa_offset 40016
744 ; X64-Darwin-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
745 ; X64-Darwin-NEXT:    movl $3, %esi
746 ; X64-Darwin-NEXT:    callq _dummy_use
747 ; X64-Darwin-NEXT:    addq $40008, %rsp ## imm = 0x9C48
748 ; X64-Darwin-NEXT:    retq
749 ; X64-Darwin-NEXT:  LBB2_1:
750 ; X64-Darwin-NEXT:    movl $40008, %r10d ## imm = 0x9C48
751 ; X64-Darwin-NEXT:    movl $0, %r11d
752 ; X64-Darwin-NEXT:    callq ___morestack
753 ; X64-Darwin-NEXT:    retq
754 ; X64-Darwin-NEXT:    jmp LBB2_2
756 ; X86-MinGW-LABEL: test_large:
757 ; X86-MinGW:       # %bb.0:
758 ; X86-MinGW-NEXT:    leal -{{[0-9]+}}(%esp), %ecx
759 ; X86-MinGW-NEXT:    cmpl %fs:20, %ecx
760 ; X86-MinGW-NEXT:    jbe LBB2_1
761 ; X86-MinGW-NEXT:  LBB2_2:
762 ; X86-MinGW-NEXT:    movl $40000, %eax # imm = 0x9C40
763 ; X86-MinGW-NEXT:    calll __alloca
764 ; X86-MinGW-NEXT:    .cfi_def_cfa_offset 40004
765 ; X86-MinGW-NEXT:    movl %esp, %eax
766 ; X86-MinGW-NEXT:    pushl $3
767 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset 4
768 ; X86-MinGW-NEXT:    pushl %eax
769 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset 4
770 ; X86-MinGW-NEXT:    calll _dummy_use
771 ; X86-MinGW-NEXT:    addl $40008, %esp # imm = 0x9C48
772 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset -40008
773 ; X86-MinGW-NEXT:    retl
774 ; X86-MinGW-NEXT:  LBB2_1:
775 ; X86-MinGW-NEXT:    pushl $0
776 ; X86-MinGW-NEXT:    pushl $40000 # imm = 0x9C40
777 ; X86-MinGW-NEXT:    calll ___morestack
778 ; X86-MinGW-NEXT:    retl
779 ; X86-MinGW-NEXT:    jmp LBB2_2
781 ; X64-FreeBSD-LABEL: test_large:
782 ; X64-FreeBSD:       # %bb.0:
783 ; X64-FreeBSD-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
784 ; X64-FreeBSD-NEXT:    cmpq %fs:24, %r11
785 ; X64-FreeBSD-NEXT:    jbe .LBB2_1
786 ; X64-FreeBSD-NEXT:  .LBB2_2:
787 ; X64-FreeBSD-NEXT:    subq $40008, %rsp # imm = 0x9C48
788 ; X64-FreeBSD-NEXT:    .cfi_def_cfa_offset 40016
789 ; X64-FreeBSD-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
790 ; X64-FreeBSD-NEXT:    movl $3, %esi
791 ; X64-FreeBSD-NEXT:    callq dummy_use@PLT
792 ; X64-FreeBSD-NEXT:    addq $40008, %rsp # imm = 0x9C48
793 ; X64-FreeBSD-NEXT:    .cfi_def_cfa_offset 8
794 ; X64-FreeBSD-NEXT:    retq
795 ; X64-FreeBSD-NEXT:  .LBB2_1:
796 ; X64-FreeBSD-NEXT:    movl $40008, %r10d # imm = 0x9C48
797 ; X64-FreeBSD-NEXT:    movl $0, %r11d
798 ; X64-FreeBSD-NEXT:    callq __morestack
799 ; X64-FreeBSD-NEXT:    retq
800 ; X64-FreeBSD-NEXT:    jmp .LBB2_2
802 ; X86-DFlyBSD-LABEL: test_large:
803 ; X86-DFlyBSD:       # %bb.0:
804 ; X86-DFlyBSD-NEXT:    leal -{{[0-9]+}}(%esp), %ecx
805 ; X86-DFlyBSD-NEXT:    cmpl %fs:16, %ecx
806 ; X86-DFlyBSD-NEXT:    jbe .LBB2_1
807 ; X86-DFlyBSD-NEXT:  .LBB2_2:
808 ; X86-DFlyBSD-NEXT:    subl $40000, %esp # imm = 0x9C40
809 ; X86-DFlyBSD-NEXT:    .cfi_def_cfa_offset 40004
810 ; X86-DFlyBSD-NEXT:    movl %esp, %eax
811 ; X86-DFlyBSD-NEXT:    pushl $3
812 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset 4
813 ; X86-DFlyBSD-NEXT:    pushl %eax
814 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset 4
815 ; X86-DFlyBSD-NEXT:    calll dummy_use@PLT
816 ; X86-DFlyBSD-NEXT:    addl $40008, %esp # imm = 0x9C48
817 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset -40008
818 ; X86-DFlyBSD-NEXT:    retl
819 ; X86-DFlyBSD-NEXT:  .LBB2_1:
820 ; X86-DFlyBSD-NEXT:    pushl $0
821 ; X86-DFlyBSD-NEXT:    pushl $40000 # imm = 0x9C40
822 ; X86-DFlyBSD-NEXT:    calll __morestack
823 ; X86-DFlyBSD-NEXT:    retl
824 ; X86-DFlyBSD-NEXT:    jmp .LBB2_2
826 ; X64-DFlyBSD-LABEL: test_large:
827 ; X64-DFlyBSD:       # %bb.0:
828 ; X64-DFlyBSD-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
829 ; X64-DFlyBSD-NEXT:    cmpq %fs:32, %r11
830 ; X64-DFlyBSD-NEXT:    jbe .LBB2_1
831 ; X64-DFlyBSD-NEXT:  .LBB2_2:
832 ; X64-DFlyBSD-NEXT:    subq $40008, %rsp # imm = 0x9C48
833 ; X64-DFlyBSD-NEXT:    .cfi_def_cfa_offset 40016
834 ; X64-DFlyBSD-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
835 ; X64-DFlyBSD-NEXT:    movl $3, %esi
836 ; X64-DFlyBSD-NEXT:    callq dummy_use@PLT
837 ; X64-DFlyBSD-NEXT:    addq $40008, %rsp # imm = 0x9C48
838 ; X64-DFlyBSD-NEXT:    .cfi_def_cfa_offset 8
839 ; X64-DFlyBSD-NEXT:    retq
840 ; X64-DFlyBSD-NEXT:  .LBB2_1:
841 ; X64-DFlyBSD-NEXT:    movl $40008, %r10d # imm = 0x9C48
842 ; X64-DFlyBSD-NEXT:    movl $0, %r11d
843 ; X64-DFlyBSD-NEXT:    callq __morestack
844 ; X64-DFlyBSD-NEXT:    retq
845 ; X64-DFlyBSD-NEXT:    jmp .LBB2_2
847 ; X64-MinGW-LABEL: test_large:
848 ; X64-MinGW:       # %bb.0:
849 ; X64-MinGW-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
850 ; X64-MinGW-NEXT:    cmpq %gs:40, %r11
851 ; X64-MinGW-NEXT:    jbe .LBB2_1
852 ; X64-MinGW-NEXT:  .LBB2_2:
853 ; X64-MinGW-NEXT:    movl $40040, %eax # imm = 0x9C68
854 ; X64-MinGW-NEXT:    callq ___chkstk_ms
855 ; X64-MinGW-NEXT:    subq %rax, %rsp
856 ; X64-MinGW-NEXT:    .seh_stackalloc 40040
857 ; X64-MinGW-NEXT:    .seh_endprologue
858 ; X64-MinGW-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx
859 ; X64-MinGW-NEXT:    movl $3, %edx
860 ; X64-MinGW-NEXT:    callq dummy_use
861 ; X64-MinGW-NEXT:    nop
862 ; X64-MinGW-NEXT:    addq $40040, %rsp # imm = 0x9C68
863 ; X64-MinGW-NEXT:    retq
864 ; X64-MinGW-NEXT:  .LBB2_1:
865 ; X64-MinGW-NEXT:    movl $40040, %r10d # imm = 0x9C68
866 ; X64-MinGW-NEXT:    movl $32, %r11d
867 ; X64-MinGW-NEXT:    callq __morestack
868 ; X64-MinGW-NEXT:    retq
869 ; X64-MinGW-NEXT:    jmp .LBB2_2
870 ; X64-MinGW-NEXT:    .seh_endproc
871         %mem = alloca i32, i32 10000
872         call void @dummy_use (ptr %mem, i32 3)
873         ret void
876 define fastcc void @test_fastcc() #0 {
877 ; X86-Linux-LABEL: test_fastcc:
878 ; X86-Linux:       # %bb.0:
879 ; X86-Linux-NEXT:    cmpl %gs:48, %esp
880 ; X86-Linux-NEXT:    jbe .LBB3_1
881 ; X86-Linux-NEXT:  .LBB3_2:
882 ; X86-Linux-NEXT:    subl $52, %esp
883 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 52
884 ; X86-Linux-NEXT:    leal {{[0-9]+}}(%esp), %eax
885 ; X86-Linux-NEXT:    pushl $10
886 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 4
887 ; X86-Linux-NEXT:    pushl %eax
888 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 4
889 ; X86-Linux-NEXT:    calll dummy_use@PLT
890 ; X86-Linux-NEXT:    addl $60, %esp
891 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset -60
892 ; X86-Linux-NEXT:    retl
893 ; X86-Linux-NEXT:  .LBB3_1:
894 ; X86-Linux-NEXT:    pushl $0
895 ; X86-Linux-NEXT:    pushl $44
896 ; X86-Linux-NEXT:    calll __morestack
897 ; X86-Linux-NEXT:    retl
898 ; X86-Linux-NEXT:    jmp .LBB3_2
900 ; X64-Linux-LABEL: test_fastcc:
901 ; X64-Linux:       # %bb.0:
902 ; X64-Linux-NEXT:    cmpq %fs:112, %rsp
903 ; X64-Linux-NEXT:    jbe .LBB3_1
904 ; X64-Linux-NEXT:  .LBB3_2:
905 ; X64-Linux-NEXT:    subq $40, %rsp
906 ; X64-Linux-NEXT:    .cfi_def_cfa_offset 48
907 ; X64-Linux-NEXT:    movq %rsp, %rdi
908 ; X64-Linux-NEXT:    movl $10, %esi
909 ; X64-Linux-NEXT:    callq dummy_use@PLT
910 ; X64-Linux-NEXT:    addq $40, %rsp
911 ; X64-Linux-NEXT:    .cfi_def_cfa_offset 8
912 ; X64-Linux-NEXT:    retq
913 ; X64-Linux-NEXT:  .LBB3_1:
914 ; X64-Linux-NEXT:    movl $40, %r10d
915 ; X64-Linux-NEXT:    movl $0, %r11d
916 ; X64-Linux-NEXT:    callq __morestack
917 ; X64-Linux-NEXT:    retq
918 ; X64-Linux-NEXT:    jmp .LBB3_2
920 ; X64-Linux-Large-LABEL: test_fastcc:
921 ; X64-Linux-Large:       # %bb.0:
922 ; X64-Linux-Large-NEXT:    cmpq %fs:112, %rsp
923 ; X64-Linux-Large-NEXT:    jbe .LBB3_1
924 ; X64-Linux-Large-NEXT:  .LBB3_2:
925 ; X64-Linux-Large-NEXT:    subq $40, %rsp
926 ; X64-Linux-Large-NEXT:    .cfi_def_cfa_offset 48
927 ; X64-Linux-Large-NEXT:    movabsq $dummy_use, %rax
928 ; X64-Linux-Large-NEXT:    movq %rsp, %rdi
929 ; X64-Linux-Large-NEXT:    movl $10, %esi
930 ; X64-Linux-Large-NEXT:    callq *%rax
931 ; X64-Linux-Large-NEXT:    addq $40, %rsp
932 ; X64-Linux-Large-NEXT:    .cfi_def_cfa_offset 8
933 ; X64-Linux-Large-NEXT:    retq
934 ; X64-Linux-Large-NEXT:  .LBB3_1:
935 ; X64-Linux-Large-NEXT:    movl $40, %r10d
936 ; X64-Linux-Large-NEXT:    movl $0, %r11d
937 ; X64-Linux-Large-NEXT:    callq *__morestack_addr(%rip)
938 ; X64-Linux-Large-NEXT:    retq
939 ; X64-Linux-Large-NEXT:    jmp .LBB3_2
941 ; X32ABI-LABEL: test_fastcc:
942 ; X32ABI:       # %bb.0:
943 ; X32ABI-NEXT:    cmpl %fs:64, %esp
944 ; X32ABI-NEXT:    jbe .LBB3_1
945 ; X32ABI-NEXT:  .LBB3_2:
946 ; X32ABI-NEXT:    subl $40, %esp
947 ; X32ABI-NEXT:    .cfi_def_cfa_offset 48
948 ; X32ABI-NEXT:    movl %esp, %edi
949 ; X32ABI-NEXT:    movl $10, %esi
950 ; X32ABI-NEXT:    callq dummy_use@PLT
951 ; X32ABI-NEXT:    addl $40, %esp
952 ; X32ABI-NEXT:    .cfi_def_cfa_offset 8
953 ; X32ABI-NEXT:    retq
954 ; X32ABI-NEXT:  .LBB3_1:
955 ; X32ABI-NEXT:    movl $40, %r10d
956 ; X32ABI-NEXT:    movl $0, %r11d
957 ; X32ABI-NEXT:    callq __morestack
958 ; X32ABI-NEXT:    retq
959 ; X32ABI-NEXT:    jmp .LBB3_2
961 ; X86-Darwin-LABEL: test_fastcc:
962 ; X86-Darwin:       ## %bb.0:
963 ; X86-Darwin-NEXT:    movl $432, %eax ## imm = 0x1B0
964 ; X86-Darwin-NEXT:    cmpl %gs:(%eax), %esp
965 ; X86-Darwin-NEXT:    jbe LBB3_1
966 ; X86-Darwin-NEXT:  LBB3_2:
967 ; X86-Darwin-NEXT:    subl $60, %esp
968 ; X86-Darwin-NEXT:    .cfi_def_cfa_offset 64
969 ; X86-Darwin-NEXT:    leal {{[0-9]+}}(%esp), %eax
970 ; X86-Darwin-NEXT:    movl %eax, (%esp)
971 ; X86-Darwin-NEXT:    movl $10, {{[0-9]+}}(%esp)
972 ; X86-Darwin-NEXT:    calll _dummy_use
973 ; X86-Darwin-NEXT:    addl $60, %esp
974 ; X86-Darwin-NEXT:    retl
975 ; X86-Darwin-NEXT:  LBB3_1:
976 ; X86-Darwin-NEXT:    pushl $0
977 ; X86-Darwin-NEXT:    pushl $60
978 ; X86-Darwin-NEXT:    calll ___morestack
979 ; X86-Darwin-NEXT:    retl
980 ; X86-Darwin-NEXT:    jmp LBB3_2
982 ; X64-Darwin-LABEL: test_fastcc:
983 ; X64-Darwin:       ## %bb.0:
984 ; X64-Darwin-NEXT:    cmpq %gs:816, %rsp
985 ; X64-Darwin-NEXT:    jbe LBB3_1
986 ; X64-Darwin-NEXT:  LBB3_2:
987 ; X64-Darwin-NEXT:    subq $40, %rsp
988 ; X64-Darwin-NEXT:    .cfi_def_cfa_offset 48
989 ; X64-Darwin-NEXT:    movq %rsp, %rdi
990 ; X64-Darwin-NEXT:    movl $10, %esi
991 ; X64-Darwin-NEXT:    callq _dummy_use
992 ; X64-Darwin-NEXT:    addq $40, %rsp
993 ; X64-Darwin-NEXT:    retq
994 ; X64-Darwin-NEXT:  LBB3_1:
995 ; X64-Darwin-NEXT:    movl $40, %r10d
996 ; X64-Darwin-NEXT:    movl $0, %r11d
997 ; X64-Darwin-NEXT:    callq ___morestack
998 ; X64-Darwin-NEXT:    retq
999 ; X64-Darwin-NEXT:    jmp LBB3_2
1001 ; X86-MinGW-LABEL: test_fastcc:
1002 ; X86-MinGW:       # %bb.0:
1003 ; X86-MinGW-NEXT:    cmpl %fs:20, %esp
1004 ; X86-MinGW-NEXT:    jbe LBB3_1
1005 ; X86-MinGW-NEXT:  LBB3_2:
1006 ; X86-MinGW-NEXT:    subl $40, %esp
1007 ; X86-MinGW-NEXT:    .cfi_def_cfa_offset 44
1008 ; X86-MinGW-NEXT:    movl %esp, %eax
1009 ; X86-MinGW-NEXT:    pushl $10
1010 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset 4
1011 ; X86-MinGW-NEXT:    pushl %eax
1012 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset 4
1013 ; X86-MinGW-NEXT:    calll _dummy_use
1014 ; X86-MinGW-NEXT:    addl $48, %esp
1015 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset -48
1016 ; X86-MinGW-NEXT:    retl
1017 ; X86-MinGW-NEXT:  LBB3_1:
1018 ; X86-MinGW-NEXT:    pushl $0
1019 ; X86-MinGW-NEXT:    pushl $40
1020 ; X86-MinGW-NEXT:    calll ___morestack
1021 ; X86-MinGW-NEXT:    retl
1022 ; X86-MinGW-NEXT:    jmp LBB3_2
1024 ; X64-FreeBSD-LABEL: test_fastcc:
1025 ; X64-FreeBSD:       # %bb.0:
1026 ; X64-FreeBSD-NEXT:    cmpq %fs:24, %rsp
1027 ; X64-FreeBSD-NEXT:    jbe .LBB3_1
1028 ; X64-FreeBSD-NEXT:  .LBB3_2:
1029 ; X64-FreeBSD-NEXT:    subq $40, %rsp
1030 ; X64-FreeBSD-NEXT:    .cfi_def_cfa_offset 48
1031 ; X64-FreeBSD-NEXT:    movq %rsp, %rdi
1032 ; X64-FreeBSD-NEXT:    movl $10, %esi
1033 ; X64-FreeBSD-NEXT:    callq dummy_use@PLT
1034 ; X64-FreeBSD-NEXT:    addq $40, %rsp
1035 ; X64-FreeBSD-NEXT:    .cfi_def_cfa_offset 8
1036 ; X64-FreeBSD-NEXT:    retq
1037 ; X64-FreeBSD-NEXT:  .LBB3_1:
1038 ; X64-FreeBSD-NEXT:    movl $40, %r10d
1039 ; X64-FreeBSD-NEXT:    movl $0, %r11d
1040 ; X64-FreeBSD-NEXT:    callq __morestack
1041 ; X64-FreeBSD-NEXT:    retq
1042 ; X64-FreeBSD-NEXT:    jmp .LBB3_2
1044 ; X86-DFlyBSD-LABEL: test_fastcc:
1045 ; X86-DFlyBSD:       # %bb.0:
1046 ; X86-DFlyBSD-NEXT:    cmpl %fs:16, %esp
1047 ; X86-DFlyBSD-NEXT:    jbe .LBB3_1
1048 ; X86-DFlyBSD-NEXT:  .LBB3_2:
1049 ; X86-DFlyBSD-NEXT:    subl $40, %esp
1050 ; X86-DFlyBSD-NEXT:    .cfi_def_cfa_offset 44
1051 ; X86-DFlyBSD-NEXT:    movl %esp, %eax
1052 ; X86-DFlyBSD-NEXT:    pushl $10
1053 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset 4
1054 ; X86-DFlyBSD-NEXT:    pushl %eax
1055 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset 4
1056 ; X86-DFlyBSD-NEXT:    calll dummy_use@PLT
1057 ; X86-DFlyBSD-NEXT:    addl $48, %esp
1058 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset -48
1059 ; X86-DFlyBSD-NEXT:    retl
1060 ; X86-DFlyBSD-NEXT:  .LBB3_1:
1061 ; X86-DFlyBSD-NEXT:    pushl $0
1062 ; X86-DFlyBSD-NEXT:    pushl $40
1063 ; X86-DFlyBSD-NEXT:    calll __morestack
1064 ; X86-DFlyBSD-NEXT:    retl
1065 ; X86-DFlyBSD-NEXT:    jmp .LBB3_2
1067 ; X64-DFlyBSD-LABEL: test_fastcc:
1068 ; X64-DFlyBSD:       # %bb.0:
1069 ; X64-DFlyBSD-NEXT:    cmpq %fs:32, %rsp
1070 ; X64-DFlyBSD-NEXT:    jbe .LBB3_1
1071 ; X64-DFlyBSD-NEXT:  .LBB3_2:
1072 ; X64-DFlyBSD-NEXT:    subq $40, %rsp
1073 ; X64-DFlyBSD-NEXT:    .cfi_def_cfa_offset 48
1074 ; X64-DFlyBSD-NEXT:    movq %rsp, %rdi
1075 ; X64-DFlyBSD-NEXT:    movl $10, %esi
1076 ; X64-DFlyBSD-NEXT:    callq dummy_use@PLT
1077 ; X64-DFlyBSD-NEXT:    addq $40, %rsp
1078 ; X64-DFlyBSD-NEXT:    .cfi_def_cfa_offset 8
1079 ; X64-DFlyBSD-NEXT:    retq
1080 ; X64-DFlyBSD-NEXT:  .LBB3_1:
1081 ; X64-DFlyBSD-NEXT:    movl $40, %r10d
1082 ; X64-DFlyBSD-NEXT:    movl $0, %r11d
1083 ; X64-DFlyBSD-NEXT:    callq __morestack
1084 ; X64-DFlyBSD-NEXT:    retq
1085 ; X64-DFlyBSD-NEXT:    jmp .LBB3_2
1087 ; X64-MinGW-LABEL: test_fastcc:
1088 ; X64-MinGW:       # %bb.0:
1089 ; X64-MinGW-NEXT:    cmpq %gs:40, %rsp
1090 ; X64-MinGW-NEXT:    jbe .LBB3_1
1091 ; X64-MinGW-NEXT:  .LBB3_2:
1092 ; X64-MinGW-NEXT:    subq $72, %rsp
1093 ; X64-MinGW-NEXT:    .seh_stackalloc 72
1094 ; X64-MinGW-NEXT:    .seh_endprologue
1095 ; X64-MinGW-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx
1096 ; X64-MinGW-NEXT:    movl $10, %edx
1097 ; X64-MinGW-NEXT:    callq dummy_use
1098 ; X64-MinGW-NEXT:    nop
1099 ; X64-MinGW-NEXT:    addq $72, %rsp
1100 ; X64-MinGW-NEXT:    retq
1101 ; X64-MinGW-NEXT:  .LBB3_1:
1102 ; X64-MinGW-NEXT:    movl $72, %r10d
1103 ; X64-MinGW-NEXT:    movl $32, %r11d
1104 ; X64-MinGW-NEXT:    callq __morestack
1105 ; X64-MinGW-NEXT:    retq
1106 ; X64-MinGW-NEXT:    jmp .LBB3_2
1107 ; X64-MinGW-NEXT:    .seh_endproc
1108         %mem = alloca i32, i32 10
1109         call void @dummy_use (ptr %mem, i32 10)
1110         ret void
1113 define fastcc void @test_fastcc_large() #0 {
1114 ; X86-Linux-LABEL: test_fastcc_large:
1115 ; X86-Linux:       # %bb.0:
1116 ; X86-Linux-NEXT:    leal -{{[0-9]+}}(%esp), %eax
1117 ; X86-Linux-NEXT:    cmpl %gs:48, %eax
1118 ; X86-Linux-NEXT:    jbe .LBB4_1
1119 ; X86-Linux-NEXT:  .LBB4_2:
1120 ; X86-Linux-NEXT:    subl $40020, %esp # imm = 0x9C54
1121 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 40020
1122 ; X86-Linux-NEXT:    leal {{[0-9]+}}(%esp), %eax
1123 ; X86-Linux-NEXT:    pushl $3
1124 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 4
1125 ; X86-Linux-NEXT:    pushl %eax
1126 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 4
1127 ; X86-Linux-NEXT:    calll dummy_use@PLT
1128 ; X86-Linux-NEXT:    addl $40028, %esp # imm = 0x9C5C
1129 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset -40028
1130 ; X86-Linux-NEXT:    retl
1131 ; X86-Linux-NEXT:  .LBB4_1:
1132 ; X86-Linux-NEXT:    pushl $0
1133 ; X86-Linux-NEXT:    pushl $40012 # imm = 0x9C4C
1134 ; X86-Linux-NEXT:    calll __morestack
1135 ; X86-Linux-NEXT:    retl
1136 ; X86-Linux-NEXT:    jmp .LBB4_2
1138 ; X64-Linux-LABEL: test_fastcc_large:
1139 ; X64-Linux:       # %bb.0:
1140 ; X64-Linux-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
1141 ; X64-Linux-NEXT:    cmpq %fs:112, %r11
1142 ; X64-Linux-NEXT:    jbe .LBB4_1
1143 ; X64-Linux-NEXT:  .LBB4_2:
1144 ; X64-Linux-NEXT:    subq $40008, %rsp # imm = 0x9C48
1145 ; X64-Linux-NEXT:    .cfi_def_cfa_offset 40016
1146 ; X64-Linux-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
1147 ; X64-Linux-NEXT:    movl $3, %esi
1148 ; X64-Linux-NEXT:    callq dummy_use@PLT
1149 ; X64-Linux-NEXT:    addq $40008, %rsp # imm = 0x9C48
1150 ; X64-Linux-NEXT:    .cfi_def_cfa_offset 8
1151 ; X64-Linux-NEXT:    retq
1152 ; X64-Linux-NEXT:  .LBB4_1:
1153 ; X64-Linux-NEXT:    movl $40008, %r10d # imm = 0x9C48
1154 ; X64-Linux-NEXT:    movl $0, %r11d
1155 ; X64-Linux-NEXT:    callq __morestack
1156 ; X64-Linux-NEXT:    retq
1157 ; X64-Linux-NEXT:    jmp .LBB4_2
1159 ; X64-Linux-Large-LABEL: test_fastcc_large:
1160 ; X64-Linux-Large:       # %bb.0:
1161 ; X64-Linux-Large-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
1162 ; X64-Linux-Large-NEXT:    cmpq %fs:112, %r11
1163 ; X64-Linux-Large-NEXT:    jbe .LBB4_1
1164 ; X64-Linux-Large-NEXT:  .LBB4_2:
1165 ; X64-Linux-Large-NEXT:    subq $40008, %rsp # imm = 0x9C48
1166 ; X64-Linux-Large-NEXT:    .cfi_def_cfa_offset 40016
1167 ; X64-Linux-Large-NEXT:    movabsq $dummy_use, %rax
1168 ; X64-Linux-Large-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
1169 ; X64-Linux-Large-NEXT:    movl $3, %esi
1170 ; X64-Linux-Large-NEXT:    callq *%rax
1171 ; X64-Linux-Large-NEXT:    addq $40008, %rsp # imm = 0x9C48
1172 ; X64-Linux-Large-NEXT:    .cfi_def_cfa_offset 8
1173 ; X64-Linux-Large-NEXT:    retq
1174 ; X64-Linux-Large-NEXT:  .LBB4_1:
1175 ; X64-Linux-Large-NEXT:    movl $40008, %r10d # imm = 0x9C48
1176 ; X64-Linux-Large-NEXT:    movl $0, %r11d
1177 ; X64-Linux-Large-NEXT:    callq *__morestack_addr(%rip)
1178 ; X64-Linux-Large-NEXT:    retq
1179 ; X64-Linux-Large-NEXT:    jmp .LBB4_2
1181 ; X32ABI-LABEL: test_fastcc_large:
1182 ; X32ABI:       # %bb.0:
1183 ; X32ABI-NEXT:    leal -{{[0-9]+}}(%rsp), %r11d
1184 ; X32ABI-NEXT:    cmpl %fs:64, %r11d
1185 ; X32ABI-NEXT:    jbe .LBB4_1
1186 ; X32ABI-NEXT:  .LBB4_2:
1187 ; X32ABI-NEXT:    subl $40008, %esp # imm = 0x9C48
1188 ; X32ABI-NEXT:    .cfi_def_cfa_offset 40016
1189 ; X32ABI-NEXT:    leal {{[0-9]+}}(%rsp), %edi
1190 ; X32ABI-NEXT:    movl $3, %esi
1191 ; X32ABI-NEXT:    callq dummy_use@PLT
1192 ; X32ABI-NEXT:    addl $40008, %esp # imm = 0x9C48
1193 ; X32ABI-NEXT:    .cfi_def_cfa_offset 8
1194 ; X32ABI-NEXT:    retq
1195 ; X32ABI-NEXT:  .LBB4_1:
1196 ; X32ABI-NEXT:    movl $40008, %r10d # imm = 0x9C48
1197 ; X32ABI-NEXT:    movl $0, %r11d
1198 ; X32ABI-NEXT:    callq __morestack
1199 ; X32ABI-NEXT:    retq
1200 ; X32ABI-NEXT:    jmp .LBB4_2
1202 ; X86-Darwin-LABEL: test_fastcc_large:
1203 ; X86-Darwin:       ## %bb.0:
1204 ; X86-Darwin-NEXT:    leal -{{[0-9]+}}(%esp), %eax
1205 ; X86-Darwin-NEXT:    movl $432, %ecx ## imm = 0x1B0
1206 ; X86-Darwin-NEXT:    cmpl %gs:(%ecx), %eax
1207 ; X86-Darwin-NEXT:    jbe LBB4_1
1208 ; X86-Darwin-NEXT:  LBB4_2:
1209 ; X86-Darwin-NEXT:    subl $40012, %esp ## imm = 0x9C4C
1210 ; X86-Darwin-NEXT:    .cfi_def_cfa_offset 40016
1211 ; X86-Darwin-NEXT:    leal {{[0-9]+}}(%esp), %eax
1212 ; X86-Darwin-NEXT:    movl %eax, (%esp)
1213 ; X86-Darwin-NEXT:    movl $3, {{[0-9]+}}(%esp)
1214 ; X86-Darwin-NEXT:    calll _dummy_use
1215 ; X86-Darwin-NEXT:    addl $40012, %esp ## imm = 0x9C4C
1216 ; X86-Darwin-NEXT:    retl
1217 ; X86-Darwin-NEXT:  LBB4_1:
1218 ; X86-Darwin-NEXT:    pushl $0
1219 ; X86-Darwin-NEXT:    pushl $40012 ## imm = 0x9C4C
1220 ; X86-Darwin-NEXT:    calll ___morestack
1221 ; X86-Darwin-NEXT:    retl
1222 ; X86-Darwin-NEXT:    jmp LBB4_2
1224 ; X64-Darwin-LABEL: test_fastcc_large:
1225 ; X64-Darwin:       ## %bb.0:
1226 ; X64-Darwin-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
1227 ; X64-Darwin-NEXT:    cmpq %gs:816, %r11
1228 ; X64-Darwin-NEXT:    jbe LBB4_1
1229 ; X64-Darwin-NEXT:  LBB4_2:
1230 ; X64-Darwin-NEXT:    subq $40008, %rsp ## imm = 0x9C48
1231 ; X64-Darwin-NEXT:    .cfi_def_cfa_offset 40016
1232 ; X64-Darwin-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
1233 ; X64-Darwin-NEXT:    movl $3, %esi
1234 ; X64-Darwin-NEXT:    callq _dummy_use
1235 ; X64-Darwin-NEXT:    addq $40008, %rsp ## imm = 0x9C48
1236 ; X64-Darwin-NEXT:    retq
1237 ; X64-Darwin-NEXT:  LBB4_1:
1238 ; X64-Darwin-NEXT:    movl $40008, %r10d ## imm = 0x9C48
1239 ; X64-Darwin-NEXT:    movl $0, %r11d
1240 ; X64-Darwin-NEXT:    callq ___morestack
1241 ; X64-Darwin-NEXT:    retq
1242 ; X64-Darwin-NEXT:    jmp LBB4_2
1244 ; X86-MinGW-LABEL: test_fastcc_large:
1245 ; X86-MinGW:       # %bb.0:
1246 ; X86-MinGW-NEXT:    leal -{{[0-9]+}}(%esp), %eax
1247 ; X86-MinGW-NEXT:    cmpl %fs:20, %eax
1248 ; X86-MinGW-NEXT:    jbe LBB4_1
1249 ; X86-MinGW-NEXT:  LBB4_2:
1250 ; X86-MinGW-NEXT:    movl $40000, %eax # imm = 0x9C40
1251 ; X86-MinGW-NEXT:    calll __alloca
1252 ; X86-MinGW-NEXT:    .cfi_def_cfa_offset 40004
1253 ; X86-MinGW-NEXT:    movl %esp, %eax
1254 ; X86-MinGW-NEXT:    pushl $3
1255 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset 4
1256 ; X86-MinGW-NEXT:    pushl %eax
1257 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset 4
1258 ; X86-MinGW-NEXT:    calll _dummy_use
1259 ; X86-MinGW-NEXT:    addl $40008, %esp # imm = 0x9C48
1260 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset -40008
1261 ; X86-MinGW-NEXT:    retl
1262 ; X86-MinGW-NEXT:  LBB4_1:
1263 ; X86-MinGW-NEXT:    pushl $0
1264 ; X86-MinGW-NEXT:    pushl $40000 # imm = 0x9C40
1265 ; X86-MinGW-NEXT:    calll ___morestack
1266 ; X86-MinGW-NEXT:    retl
1267 ; X86-MinGW-NEXT:    jmp LBB4_2
1269 ; X64-FreeBSD-LABEL: test_fastcc_large:
1270 ; X64-FreeBSD:       # %bb.0:
1271 ; X64-FreeBSD-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
1272 ; X64-FreeBSD-NEXT:    cmpq %fs:24, %r11
1273 ; X64-FreeBSD-NEXT:    jbe .LBB4_1
1274 ; X64-FreeBSD-NEXT:  .LBB4_2:
1275 ; X64-FreeBSD-NEXT:    subq $40008, %rsp # imm = 0x9C48
1276 ; X64-FreeBSD-NEXT:    .cfi_def_cfa_offset 40016
1277 ; X64-FreeBSD-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
1278 ; X64-FreeBSD-NEXT:    movl $3, %esi
1279 ; X64-FreeBSD-NEXT:    callq dummy_use@PLT
1280 ; X64-FreeBSD-NEXT:    addq $40008, %rsp # imm = 0x9C48
1281 ; X64-FreeBSD-NEXT:    .cfi_def_cfa_offset 8
1282 ; X64-FreeBSD-NEXT:    retq
1283 ; X64-FreeBSD-NEXT:  .LBB4_1:
1284 ; X64-FreeBSD-NEXT:    movl $40008, %r10d # imm = 0x9C48
1285 ; X64-FreeBSD-NEXT:    movl $0, %r11d
1286 ; X64-FreeBSD-NEXT:    callq __morestack
1287 ; X64-FreeBSD-NEXT:    retq
1288 ; X64-FreeBSD-NEXT:    jmp .LBB4_2
1290 ; X86-DFlyBSD-LABEL: test_fastcc_large:
1291 ; X86-DFlyBSD:       # %bb.0:
1292 ; X86-DFlyBSD-NEXT:    leal -{{[0-9]+}}(%esp), %eax
1293 ; X86-DFlyBSD-NEXT:    cmpl %fs:16, %eax
1294 ; X86-DFlyBSD-NEXT:    jbe .LBB4_1
1295 ; X86-DFlyBSD-NEXT:  .LBB4_2:
1296 ; X86-DFlyBSD-NEXT:    subl $40000, %esp # imm = 0x9C40
1297 ; X86-DFlyBSD-NEXT:    .cfi_def_cfa_offset 40004
1298 ; X86-DFlyBSD-NEXT:    movl %esp, %eax
1299 ; X86-DFlyBSD-NEXT:    pushl $3
1300 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset 4
1301 ; X86-DFlyBSD-NEXT:    pushl %eax
1302 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset 4
1303 ; X86-DFlyBSD-NEXT:    calll dummy_use@PLT
1304 ; X86-DFlyBSD-NEXT:    addl $40008, %esp # imm = 0x9C48
1305 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset -40008
1306 ; X86-DFlyBSD-NEXT:    retl
1307 ; X86-DFlyBSD-NEXT:  .LBB4_1:
1308 ; X86-DFlyBSD-NEXT:    pushl $0
1309 ; X86-DFlyBSD-NEXT:    pushl $40000 # imm = 0x9C40
1310 ; X86-DFlyBSD-NEXT:    calll __morestack
1311 ; X86-DFlyBSD-NEXT:    retl
1312 ; X86-DFlyBSD-NEXT:    jmp .LBB4_2
1314 ; X64-DFlyBSD-LABEL: test_fastcc_large:
1315 ; X64-DFlyBSD:       # %bb.0:
1316 ; X64-DFlyBSD-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
1317 ; X64-DFlyBSD-NEXT:    cmpq %fs:32, %r11
1318 ; X64-DFlyBSD-NEXT:    jbe .LBB4_1
1319 ; X64-DFlyBSD-NEXT:  .LBB4_2:
1320 ; X64-DFlyBSD-NEXT:    subq $40008, %rsp # imm = 0x9C48
1321 ; X64-DFlyBSD-NEXT:    .cfi_def_cfa_offset 40016
1322 ; X64-DFlyBSD-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
1323 ; X64-DFlyBSD-NEXT:    movl $3, %esi
1324 ; X64-DFlyBSD-NEXT:    callq dummy_use@PLT
1325 ; X64-DFlyBSD-NEXT:    addq $40008, %rsp # imm = 0x9C48
1326 ; X64-DFlyBSD-NEXT:    .cfi_def_cfa_offset 8
1327 ; X64-DFlyBSD-NEXT:    retq
1328 ; X64-DFlyBSD-NEXT:  .LBB4_1:
1329 ; X64-DFlyBSD-NEXT:    movl $40008, %r10d # imm = 0x9C48
1330 ; X64-DFlyBSD-NEXT:    movl $0, %r11d
1331 ; X64-DFlyBSD-NEXT:    callq __morestack
1332 ; X64-DFlyBSD-NEXT:    retq
1333 ; X64-DFlyBSD-NEXT:    jmp .LBB4_2
1335 ; X64-MinGW-LABEL: test_fastcc_large:
1336 ; X64-MinGW:       # %bb.0:
1337 ; X64-MinGW-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
1338 ; X64-MinGW-NEXT:    cmpq %gs:40, %r11
1339 ; X64-MinGW-NEXT:    jbe .LBB4_1
1340 ; X64-MinGW-NEXT:  .LBB4_2:
1341 ; X64-MinGW-NEXT:    movl $40040, %eax # imm = 0x9C68
1342 ; X64-MinGW-NEXT:    callq ___chkstk_ms
1343 ; X64-MinGW-NEXT:    subq %rax, %rsp
1344 ; X64-MinGW-NEXT:    .seh_stackalloc 40040
1345 ; X64-MinGW-NEXT:    .seh_endprologue
1346 ; X64-MinGW-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx
1347 ; X64-MinGW-NEXT:    movl $3, %edx
1348 ; X64-MinGW-NEXT:    callq dummy_use
1349 ; X64-MinGW-NEXT:    nop
1350 ; X64-MinGW-NEXT:    addq $40040, %rsp # imm = 0x9C68
1351 ; X64-MinGW-NEXT:    retq
1352 ; X64-MinGW-NEXT:  .LBB4_1:
1353 ; X64-MinGW-NEXT:    movl $40040, %r10d # imm = 0x9C68
1354 ; X64-MinGW-NEXT:    movl $32, %r11d
1355 ; X64-MinGW-NEXT:    callq __morestack
1356 ; X64-MinGW-NEXT:    retq
1357 ; X64-MinGW-NEXT:    jmp .LBB4_2
1358 ; X64-MinGW-NEXT:    .seh_endproc
1359         %mem = alloca i32, i32 10000
1360         call void @dummy_use (ptr %mem, i32 3)
1361         ret void
1364 ; This is testing that the Mac implementation preserves ecx
1366 define fastcc void @test_fastcc_large_with_ecx_arg(i32 %a) #0 {
1367 ; X86-Linux-LABEL: test_fastcc_large_with_ecx_arg:
1368 ; X86-Linux:       # %bb.0:
1369 ; X86-Linux-NEXT:    leal -{{[0-9]+}}(%esp), %eax
1370 ; X86-Linux-NEXT:    cmpl %gs:48, %eax
1371 ; X86-Linux-NEXT:    jbe .LBB5_1
1372 ; X86-Linux-NEXT:  .LBB5_2:
1373 ; X86-Linux-NEXT:    subl $40020, %esp # imm = 0x9C54
1374 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 40020
1375 ; X86-Linux-NEXT:    leal {{[0-9]+}}(%esp), %eax
1376 ; X86-Linux-NEXT:    pushl %ecx
1377 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 4
1378 ; X86-Linux-NEXT:    pushl %eax
1379 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 4
1380 ; X86-Linux-NEXT:    calll dummy_use@PLT
1381 ; X86-Linux-NEXT:    addl $40028, %esp # imm = 0x9C5C
1382 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset -40028
1383 ; X86-Linux-NEXT:    retl
1384 ; X86-Linux-NEXT:  .LBB5_1:
1385 ; X86-Linux-NEXT:    pushl $0
1386 ; X86-Linux-NEXT:    pushl $40012 # imm = 0x9C4C
1387 ; X86-Linux-NEXT:    calll __morestack
1388 ; X86-Linux-NEXT:    retl
1389 ; X86-Linux-NEXT:    jmp .LBB5_2
1391 ; X64-Linux-LABEL: test_fastcc_large_with_ecx_arg:
1392 ; X64-Linux:       # %bb.0:
1393 ; X64-Linux-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
1394 ; X64-Linux-NEXT:    cmpq %fs:112, %r11
1395 ; X64-Linux-NEXT:    jbe .LBB5_1
1396 ; X64-Linux-NEXT:  .LBB5_2:
1397 ; X64-Linux-NEXT:    subq $40008, %rsp # imm = 0x9C48
1398 ; X64-Linux-NEXT:    .cfi_def_cfa_offset 40016
1399 ; X64-Linux-NEXT:    movl %edi, %esi
1400 ; X64-Linux-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
1401 ; X64-Linux-NEXT:    callq dummy_use@PLT
1402 ; X64-Linux-NEXT:    addq $40008, %rsp # imm = 0x9C48
1403 ; X64-Linux-NEXT:    .cfi_def_cfa_offset 8
1404 ; X64-Linux-NEXT:    retq
1405 ; X64-Linux-NEXT:  .LBB5_1:
1406 ; X64-Linux-NEXT:    movl $40008, %r10d # imm = 0x9C48
1407 ; X64-Linux-NEXT:    movl $0, %r11d
1408 ; X64-Linux-NEXT:    callq __morestack
1409 ; X64-Linux-NEXT:    retq
1410 ; X64-Linux-NEXT:    jmp .LBB5_2
1412 ; X64-Linux-Large-LABEL: test_fastcc_large_with_ecx_arg:
1413 ; X64-Linux-Large:       # %bb.0:
1414 ; X64-Linux-Large-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
1415 ; X64-Linux-Large-NEXT:    cmpq %fs:112, %r11
1416 ; X64-Linux-Large-NEXT:    jbe .LBB5_1
1417 ; X64-Linux-Large-NEXT:  .LBB5_2:
1418 ; X64-Linux-Large-NEXT:    subq $40008, %rsp # imm = 0x9C48
1419 ; X64-Linux-Large-NEXT:    .cfi_def_cfa_offset 40016
1420 ; X64-Linux-Large-NEXT:    movl %edi, %esi
1421 ; X64-Linux-Large-NEXT:    movabsq $dummy_use, %rax
1422 ; X64-Linux-Large-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
1423 ; X64-Linux-Large-NEXT:    callq *%rax
1424 ; X64-Linux-Large-NEXT:    addq $40008, %rsp # imm = 0x9C48
1425 ; X64-Linux-Large-NEXT:    .cfi_def_cfa_offset 8
1426 ; X64-Linux-Large-NEXT:    retq
1427 ; X64-Linux-Large-NEXT:  .LBB5_1:
1428 ; X64-Linux-Large-NEXT:    movl $40008, %r10d # imm = 0x9C48
1429 ; X64-Linux-Large-NEXT:    movl $0, %r11d
1430 ; X64-Linux-Large-NEXT:    callq *__morestack_addr(%rip)
1431 ; X64-Linux-Large-NEXT:    retq
1432 ; X64-Linux-Large-NEXT:    jmp .LBB5_2
1434 ; X32ABI-LABEL: test_fastcc_large_with_ecx_arg:
1435 ; X32ABI:       # %bb.0:
1436 ; X32ABI-NEXT:    leal -{{[0-9]+}}(%rsp), %r11d
1437 ; X32ABI-NEXT:    cmpl %fs:64, %r11d
1438 ; X32ABI-NEXT:    jbe .LBB5_1
1439 ; X32ABI-NEXT:  .LBB5_2:
1440 ; X32ABI-NEXT:    subl $40008, %esp # imm = 0x9C48
1441 ; X32ABI-NEXT:    .cfi_def_cfa_offset 40016
1442 ; X32ABI-NEXT:    movl %edi, %esi
1443 ; X32ABI-NEXT:    leal {{[0-9]+}}(%rsp), %edi
1444 ; X32ABI-NEXT:    callq dummy_use@PLT
1445 ; X32ABI-NEXT:    addl $40008, %esp # imm = 0x9C48
1446 ; X32ABI-NEXT:    .cfi_def_cfa_offset 8
1447 ; X32ABI-NEXT:    retq
1448 ; X32ABI-NEXT:  .LBB5_1:
1449 ; X32ABI-NEXT:    movl $40008, %r10d # imm = 0x9C48
1450 ; X32ABI-NEXT:    movl $0, %r11d
1451 ; X32ABI-NEXT:    callq __morestack
1452 ; X32ABI-NEXT:    retq
1453 ; X32ABI-NEXT:    jmp .LBB5_2
1455 ; X86-Darwin-LABEL: test_fastcc_large_with_ecx_arg:
1456 ; X86-Darwin:       ## %bb.0:
1457 ; X86-Darwin-NEXT:    leal -{{[0-9]+}}(%esp), %eax
1458 ; X86-Darwin-NEXT:    pushl %ecx
1459 ; X86-Darwin-NEXT:    movl $432, %ecx ## imm = 0x1B0
1460 ; X86-Darwin-NEXT:    cmpl %gs:(%ecx), %eax
1461 ; X86-Darwin-NEXT:    popl %ecx
1462 ; X86-Darwin-NEXT:    jbe LBB5_1
1463 ; X86-Darwin-NEXT:  LBB5_2:
1464 ; X86-Darwin-NEXT:    subl $40012, %esp ## imm = 0x9C4C
1465 ; X86-Darwin-NEXT:    .cfi_def_cfa_offset 40016
1466 ; X86-Darwin-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
1467 ; X86-Darwin-NEXT:    leal {{[0-9]+}}(%esp), %eax
1468 ; X86-Darwin-NEXT:    movl %eax, (%esp)
1469 ; X86-Darwin-NEXT:    calll _dummy_use
1470 ; X86-Darwin-NEXT:    addl $40012, %esp ## imm = 0x9C4C
1471 ; X86-Darwin-NEXT:    retl
1472 ; X86-Darwin-NEXT:  LBB5_1:
1473 ; X86-Darwin-NEXT:    pushl $0
1474 ; X86-Darwin-NEXT:    pushl $40012 ## imm = 0x9C4C
1475 ; X86-Darwin-NEXT:    calll ___morestack
1476 ; X86-Darwin-NEXT:    retl
1477 ; X86-Darwin-NEXT:    jmp LBB5_2
1479 ; X64-Darwin-LABEL: test_fastcc_large_with_ecx_arg:
1480 ; X64-Darwin:       ## %bb.0:
1481 ; X64-Darwin-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
1482 ; X64-Darwin-NEXT:    cmpq %gs:816, %r11
1483 ; X64-Darwin-NEXT:    jbe LBB5_1
1484 ; X64-Darwin-NEXT:  LBB5_2:
1485 ; X64-Darwin-NEXT:    subq $40008, %rsp ## imm = 0x9C48
1486 ; X64-Darwin-NEXT:    .cfi_def_cfa_offset 40016
1487 ; X64-Darwin-NEXT:    movl %edi, %esi
1488 ; X64-Darwin-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
1489 ; X64-Darwin-NEXT:    callq _dummy_use
1490 ; X64-Darwin-NEXT:    addq $40008, %rsp ## imm = 0x9C48
1491 ; X64-Darwin-NEXT:    retq
1492 ; X64-Darwin-NEXT:  LBB5_1:
1493 ; X64-Darwin-NEXT:    movl $40008, %r10d ## imm = 0x9C48
1494 ; X64-Darwin-NEXT:    movl $0, %r11d
1495 ; X64-Darwin-NEXT:    callq ___morestack
1496 ; X64-Darwin-NEXT:    retq
1497 ; X64-Darwin-NEXT:    jmp LBB5_2
1499 ; X86-MinGW-LABEL: test_fastcc_large_with_ecx_arg:
1500 ; X86-MinGW:       # %bb.0:
1501 ; X86-MinGW-NEXT:    leal -{{[0-9]+}}(%esp), %eax
1502 ; X86-MinGW-NEXT:    cmpl %fs:20, %eax
1503 ; X86-MinGW-NEXT:    jbe LBB5_1
1504 ; X86-MinGW-NEXT:  LBB5_2:
1505 ; X86-MinGW-NEXT:    movl $40000, %eax # imm = 0x9C40
1506 ; X86-MinGW-NEXT:    calll __alloca
1507 ; X86-MinGW-NEXT:    .cfi_def_cfa_offset 40004
1508 ; X86-MinGW-NEXT:    movl %esp, %eax
1509 ; X86-MinGW-NEXT:    pushl %ecx
1510 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset 4
1511 ; X86-MinGW-NEXT:    pushl %eax
1512 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset 4
1513 ; X86-MinGW-NEXT:    calll _dummy_use
1514 ; X86-MinGW-NEXT:    addl $40008, %esp # imm = 0x9C48
1515 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset -40008
1516 ; X86-MinGW-NEXT:    retl
1517 ; X86-MinGW-NEXT:  LBB5_1:
1518 ; X86-MinGW-NEXT:    pushl $0
1519 ; X86-MinGW-NEXT:    pushl $40000 # imm = 0x9C40
1520 ; X86-MinGW-NEXT:    calll ___morestack
1521 ; X86-MinGW-NEXT:    retl
1522 ; X86-MinGW-NEXT:    jmp LBB5_2
1524 ; X64-FreeBSD-LABEL: test_fastcc_large_with_ecx_arg:
1525 ; X64-FreeBSD:       # %bb.0:
1526 ; X64-FreeBSD-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
1527 ; X64-FreeBSD-NEXT:    cmpq %fs:24, %r11
1528 ; X64-FreeBSD-NEXT:    jbe .LBB5_1
1529 ; X64-FreeBSD-NEXT:  .LBB5_2:
1530 ; X64-FreeBSD-NEXT:    subq $40008, %rsp # imm = 0x9C48
1531 ; X64-FreeBSD-NEXT:    .cfi_def_cfa_offset 40016
1532 ; X64-FreeBSD-NEXT:    movl %edi, %esi
1533 ; X64-FreeBSD-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
1534 ; X64-FreeBSD-NEXT:    callq dummy_use@PLT
1535 ; X64-FreeBSD-NEXT:    addq $40008, %rsp # imm = 0x9C48
1536 ; X64-FreeBSD-NEXT:    .cfi_def_cfa_offset 8
1537 ; X64-FreeBSD-NEXT:    retq
1538 ; X64-FreeBSD-NEXT:  .LBB5_1:
1539 ; X64-FreeBSD-NEXT:    movl $40008, %r10d # imm = 0x9C48
1540 ; X64-FreeBSD-NEXT:    movl $0, %r11d
1541 ; X64-FreeBSD-NEXT:    callq __morestack
1542 ; X64-FreeBSD-NEXT:    retq
1543 ; X64-FreeBSD-NEXT:    jmp .LBB5_2
1545 ; X86-DFlyBSD-LABEL: test_fastcc_large_with_ecx_arg:
1546 ; X86-DFlyBSD:       # %bb.0:
1547 ; X86-DFlyBSD-NEXT:    leal -{{[0-9]+}}(%esp), %eax
1548 ; X86-DFlyBSD-NEXT:    cmpl %fs:16, %eax
1549 ; X86-DFlyBSD-NEXT:    jbe .LBB5_1
1550 ; X86-DFlyBSD-NEXT:  .LBB5_2:
1551 ; X86-DFlyBSD-NEXT:    subl $40000, %esp # imm = 0x9C40
1552 ; X86-DFlyBSD-NEXT:    .cfi_def_cfa_offset 40004
1553 ; X86-DFlyBSD-NEXT:    movl %esp, %eax
1554 ; X86-DFlyBSD-NEXT:    pushl %ecx
1555 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset 4
1556 ; X86-DFlyBSD-NEXT:    pushl %eax
1557 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset 4
1558 ; X86-DFlyBSD-NEXT:    calll dummy_use@PLT
1559 ; X86-DFlyBSD-NEXT:    addl $40008, %esp # imm = 0x9C48
1560 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset -40008
1561 ; X86-DFlyBSD-NEXT:    retl
1562 ; X86-DFlyBSD-NEXT:  .LBB5_1:
1563 ; X86-DFlyBSD-NEXT:    pushl $0
1564 ; X86-DFlyBSD-NEXT:    pushl $40000 # imm = 0x9C40
1565 ; X86-DFlyBSD-NEXT:    calll __morestack
1566 ; X86-DFlyBSD-NEXT:    retl
1567 ; X86-DFlyBSD-NEXT:    jmp .LBB5_2
1569 ; X64-DFlyBSD-LABEL: test_fastcc_large_with_ecx_arg:
1570 ; X64-DFlyBSD:       # %bb.0:
1571 ; X64-DFlyBSD-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
1572 ; X64-DFlyBSD-NEXT:    cmpq %fs:32, %r11
1573 ; X64-DFlyBSD-NEXT:    jbe .LBB5_1
1574 ; X64-DFlyBSD-NEXT:  .LBB5_2:
1575 ; X64-DFlyBSD-NEXT:    subq $40008, %rsp # imm = 0x9C48
1576 ; X64-DFlyBSD-NEXT:    .cfi_def_cfa_offset 40016
1577 ; X64-DFlyBSD-NEXT:    movl %edi, %esi
1578 ; X64-DFlyBSD-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi
1579 ; X64-DFlyBSD-NEXT:    callq dummy_use@PLT
1580 ; X64-DFlyBSD-NEXT:    addq $40008, %rsp # imm = 0x9C48
1581 ; X64-DFlyBSD-NEXT:    .cfi_def_cfa_offset 8
1582 ; X64-DFlyBSD-NEXT:    retq
1583 ; X64-DFlyBSD-NEXT:  .LBB5_1:
1584 ; X64-DFlyBSD-NEXT:    movl $40008, %r10d # imm = 0x9C48
1585 ; X64-DFlyBSD-NEXT:    movl $0, %r11d
1586 ; X64-DFlyBSD-NEXT:    callq __morestack
1587 ; X64-DFlyBSD-NEXT:    retq
1588 ; X64-DFlyBSD-NEXT:    jmp .LBB5_2
1590 ; X64-MinGW-LABEL: test_fastcc_large_with_ecx_arg:
1591 ; X64-MinGW:       # %bb.0:
1592 ; X64-MinGW-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
1593 ; X64-MinGW-NEXT:    cmpq %gs:40, %r11
1594 ; X64-MinGW-NEXT:    jbe .LBB5_1
1595 ; X64-MinGW-NEXT:  .LBB5_2:
1596 ; X64-MinGW-NEXT:    movl $40040, %eax # imm = 0x9C68
1597 ; X64-MinGW-NEXT:    callq ___chkstk_ms
1598 ; X64-MinGW-NEXT:    subq %rax, %rsp
1599 ; X64-MinGW-NEXT:    .seh_stackalloc 40040
1600 ; X64-MinGW-NEXT:    .seh_endprologue
1601 ; X64-MinGW-NEXT:    movl %ecx, %edx
1602 ; X64-MinGW-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx
1603 ; X64-MinGW-NEXT:    callq dummy_use
1604 ; X64-MinGW-NEXT:    nop
1605 ; X64-MinGW-NEXT:    addq $40040, %rsp # imm = 0x9C68
1606 ; X64-MinGW-NEXT:    retq
1607 ; X64-MinGW-NEXT:  .LBB5_1:
1608 ; X64-MinGW-NEXT:    movl $40040, %r10d # imm = 0x9C68
1609 ; X64-MinGW-NEXT:    movl $32, %r11d
1610 ; X64-MinGW-NEXT:    callq __morestack
1611 ; X64-MinGW-NEXT:    retq
1612 ; X64-MinGW-NEXT:    jmp .LBB5_2
1613 ; X64-MinGW-NEXT:    .seh_endproc
1614         %mem = alloca i32, i32 10000
1615         call void @dummy_use (ptr %mem, i32 %a)
1616         ret void
1619 define void @test_nostack() #0 {
1620 ; X86-Linux-LABEL: test_nostack:
1621 ; X86-Linux:       # %bb.0:
1622 ; X86-Linux-NEXT:    retl
1624 ; X64-Linux-LABEL: test_nostack:
1625 ; X64-Linux:       # %bb.0:
1626 ; X64-Linux-NEXT:    retq
1628 ; X64-Linux-Large-LABEL: test_nostack:
1629 ; X64-Linux-Large:       # %bb.0:
1630 ; X64-Linux-Large-NEXT:    retq
1632 ; X32ABI-LABEL: test_nostack:
1633 ; X32ABI:       # %bb.0:
1634 ; X32ABI-NEXT:    retq
1636 ; X86-Darwin-LABEL: test_nostack:
1637 ; X86-Darwin:       ## %bb.0:
1638 ; X86-Darwin-NEXT:    retl
1640 ; X64-Darwin-LABEL: test_nostack:
1641 ; X64-Darwin:       ## %bb.0:
1642 ; X64-Darwin-NEXT:    retq
1644 ; X86-MinGW-LABEL: test_nostack:
1645 ; X86-MinGW:       # %bb.0:
1646 ; X86-MinGW-NEXT:    retl
1648 ; X64-FreeBSD-LABEL: test_nostack:
1649 ; X64-FreeBSD:       # %bb.0:
1650 ; X64-FreeBSD-NEXT:    retq
1652 ; X86-DFlyBSD-LABEL: test_nostack:
1653 ; X86-DFlyBSD:       # %bb.0:
1654 ; X86-DFlyBSD-NEXT:    retl
1656 ; X64-DFlyBSD-LABEL: test_nostack:
1657 ; X64-DFlyBSD:       # %bb.0:
1658 ; X64-DFlyBSD-NEXT:    retq
1660 ; X64-MinGW-LABEL: test_nostack:
1661 ; X64-MinGW:       # %bb.0:
1662 ; X64-MinGW-NEXT:    retq
1663         ret void
1666 define void @test_nosplitstck() {
1667 ; X86-Linux-LABEL: test_nosplitstck:
1668 ; X86-Linux:       # %bb.0:
1669 ; X86-Linux-NEXT:    retl
1671 ; X64-Linux-LABEL: test_nosplitstck:
1672 ; X64-Linux:       # %bb.0:
1673 ; X64-Linux-NEXT:    retq
1675 ; X64-Linux-Large-LABEL: test_nosplitstck:
1676 ; X64-Linux-Large:       # %bb.0:
1677 ; X64-Linux-Large-NEXT:    retq
1679 ; X32ABI-LABEL: test_nosplitstck:
1680 ; X32ABI:       # %bb.0:
1681 ; X32ABI-NEXT:    retq
1683 ; X86-Darwin-LABEL: test_nosplitstck:
1684 ; X86-Darwin:       ## %bb.0:
1685 ; X86-Darwin-NEXT:    retl
1687 ; X64-Darwin-LABEL: test_nosplitstck:
1688 ; X64-Darwin:       ## %bb.0:
1689 ; X64-Darwin-NEXT:    retq
1691 ; X86-MinGW-LABEL: test_nosplitstck:
1692 ; X86-MinGW:       # %bb.0:
1693 ; X86-MinGW-NEXT:    retl
1695 ; X64-FreeBSD-LABEL: test_nosplitstck:
1696 ; X64-FreeBSD:       # %bb.0:
1697 ; X64-FreeBSD-NEXT:    retq
1699 ; X86-DFlyBSD-LABEL: test_nosplitstck:
1700 ; X86-DFlyBSD:       # %bb.0:
1701 ; X86-DFlyBSD-NEXT:    retl
1703 ; X64-DFlyBSD-LABEL: test_nosplitstck:
1704 ; X64-DFlyBSD:       # %bb.0:
1705 ; X64-DFlyBSD-NEXT:    retq
1707 ; X64-MinGW-LABEL: test_nosplitstck:
1708 ; X64-MinGW:       # %bb.0:
1709 ; X64-MinGW-NEXT:    retq
1710         ret void
1713 ; Test to make sure that a morestack call is generated if there is a
1714 ; sibling call, even if the function in question has no stack frame
1715 ; (PR37807).
1717 declare i32 @callee(i32)
1719 define i32 @test_sibling_call_empty_frame(i32 %x) #0 {
1720 ; X86-Linux-LABEL: test_sibling_call_empty_frame:
1721 ; X86-Linux:       # %bb.0:
1722 ; X86-Linux-NEXT:    cmpl %gs:48, %esp
1723 ; X86-Linux-NEXT:    ja callee@PLT # TAILCALL
1724 ; X86-Linux-NEXT:  # %bb.1:
1725 ; X86-Linux-NEXT:    pushl $4
1726 ; X86-Linux-NEXT:    pushl $0
1727 ; X86-Linux-NEXT:    calll __morestack
1728 ; X86-Linux-NEXT:    retl
1729 ; X86-Linux-NEXT:    jmp callee@PLT # TAILCALL
1731 ; X64-Linux-LABEL: test_sibling_call_empty_frame:
1732 ; X64-Linux:       # %bb.0:
1733 ; X64-Linux-NEXT:    cmpq %fs:112, %rsp
1734 ; X64-Linux-NEXT:    ja callee@PLT # TAILCALL
1735 ; X64-Linux-NEXT:  # %bb.1:
1736 ; X64-Linux-NEXT:    movl $0, %r10d
1737 ; X64-Linux-NEXT:    movl $0, %r11d
1738 ; X64-Linux-NEXT:    callq __morestack
1739 ; X64-Linux-NEXT:    retq
1740 ; X64-Linux-NEXT:    jmp callee@PLT # TAILCALL
1742 ; X64-Linux-Large-LABEL: test_sibling_call_empty_frame:
1743 ; X64-Linux-Large:       # %bb.0:
1744 ; X64-Linux-Large-NEXT:    cmpq %fs:112, %rsp
1745 ; X64-Linux-Large-NEXT:    jbe .LBB8_1
1746 ; X64-Linux-Large-NEXT:  # %bb.2:
1747 ; X64-Linux-Large-NEXT:    movabsq $callee, %rax
1748 ; X64-Linux-Large-NEXT:    jmpq *%rax # TAILCALL
1749 ; X64-Linux-Large-NEXT:  .LBB8_1:
1750 ; X64-Linux-Large-NEXT:    movl $0, %r10d
1751 ; X64-Linux-Large-NEXT:    movl $0, %r11d
1752 ; X64-Linux-Large-NEXT:    callq *__morestack_addr(%rip)
1753 ; X64-Linux-Large-NEXT:    retq
1754 ; X64-Linux-Large-NEXT:    movabsq $callee, %rax
1755 ; X64-Linux-Large-NEXT:    jmpq *%rax # TAILCALL
1757 ; X32ABI-LABEL: test_sibling_call_empty_frame:
1758 ; X32ABI:       # %bb.0:
1759 ; X32ABI-NEXT:    cmpl %fs:64, %esp
1760 ; X32ABI-NEXT:    ja callee@PLT # TAILCALL
1761 ; X32ABI-NEXT:  # %bb.1:
1762 ; X32ABI-NEXT:    movl $0, %r10d
1763 ; X32ABI-NEXT:    movl $0, %r11d
1764 ; X32ABI-NEXT:    callq __morestack
1765 ; X32ABI-NEXT:    retq
1766 ; X32ABI-NEXT:    jmp callee@PLT # TAILCALL
1768 ; X86-Darwin-LABEL: test_sibling_call_empty_frame:
1769 ; X86-Darwin:       ## %bb.0:
1770 ; X86-Darwin-NEXT:    movl $432, %ecx ## imm = 0x1B0
1771 ; X86-Darwin-NEXT:    cmpl %gs:(%ecx), %esp
1772 ; X86-Darwin-NEXT:    ja _callee ## TAILCALL
1773 ; X86-Darwin-NEXT:  ## %bb.1:
1774 ; X86-Darwin-NEXT:    pushl $4
1775 ; X86-Darwin-NEXT:    pushl $0
1776 ; X86-Darwin-NEXT:    calll ___morestack
1777 ; X86-Darwin-NEXT:    retl
1778 ; X86-Darwin-NEXT:    jmp _callee ## TAILCALL
1780 ; X64-Darwin-LABEL: test_sibling_call_empty_frame:
1781 ; X64-Darwin:       ## %bb.0:
1782 ; X64-Darwin-NEXT:    cmpq %gs:816, %rsp
1783 ; X64-Darwin-NEXT:    ja _callee ## TAILCALL
1784 ; X64-Darwin-NEXT:  ## %bb.1:
1785 ; X64-Darwin-NEXT:    movl $0, %r10d
1786 ; X64-Darwin-NEXT:    movl $0, %r11d
1787 ; X64-Darwin-NEXT:    callq ___morestack
1788 ; X64-Darwin-NEXT:    retq
1789 ; X64-Darwin-NEXT:    jmp _callee ## TAILCALL
1791 ; X86-MinGW-LABEL: test_sibling_call_empty_frame:
1792 ; X86-MinGW:       # %bb.0:
1793 ; X86-MinGW-NEXT:    cmpl %fs:20, %esp
1794 ; X86-MinGW-NEXT:    ja _callee # TAILCALL
1795 ; X86-MinGW-NEXT:  # %bb.1:
1796 ; X86-MinGW-NEXT:    pushl $4
1797 ; X86-MinGW-NEXT:    pushl $0
1798 ; X86-MinGW-NEXT:    calll ___morestack
1799 ; X86-MinGW-NEXT:    retl
1800 ; X86-MinGW-NEXT:    jmp _callee # TAILCALL
1802 ; X64-FreeBSD-LABEL: test_sibling_call_empty_frame:
1803 ; X64-FreeBSD:       # %bb.0:
1804 ; X64-FreeBSD-NEXT:    cmpq %fs:24, %rsp
1805 ; X64-FreeBSD-NEXT:    ja callee@PLT # TAILCALL
1806 ; X64-FreeBSD-NEXT:  # %bb.1:
1807 ; X64-FreeBSD-NEXT:    movl $0, %r10d
1808 ; X64-FreeBSD-NEXT:    movl $0, %r11d
1809 ; X64-FreeBSD-NEXT:    callq __morestack
1810 ; X64-FreeBSD-NEXT:    retq
1811 ; X64-FreeBSD-NEXT:    jmp callee@PLT # TAILCALL
1813 ; X86-DFlyBSD-LABEL: test_sibling_call_empty_frame:
1814 ; X86-DFlyBSD:       # %bb.0:
1815 ; X86-DFlyBSD-NEXT:    cmpl %fs:16, %esp
1816 ; X86-DFlyBSD-NEXT:    ja callee@PLT # TAILCALL
1817 ; X86-DFlyBSD-NEXT:  # %bb.1:
1818 ; X86-DFlyBSD-NEXT:    pushl $4
1819 ; X86-DFlyBSD-NEXT:    pushl $0
1820 ; X86-DFlyBSD-NEXT:    calll __morestack
1821 ; X86-DFlyBSD-NEXT:    retl
1822 ; X86-DFlyBSD-NEXT:    jmp callee@PLT # TAILCALL
1824 ; X64-DFlyBSD-LABEL: test_sibling_call_empty_frame:
1825 ; X64-DFlyBSD:       # %bb.0:
1826 ; X64-DFlyBSD-NEXT:    cmpq %fs:32, %rsp
1827 ; X64-DFlyBSD-NEXT:    ja callee@PLT # TAILCALL
1828 ; X64-DFlyBSD-NEXT:  # %bb.1:
1829 ; X64-DFlyBSD-NEXT:    movl $0, %r10d
1830 ; X64-DFlyBSD-NEXT:    movl $0, %r11d
1831 ; X64-DFlyBSD-NEXT:    callq __morestack
1832 ; X64-DFlyBSD-NEXT:    retq
1833 ; X64-DFlyBSD-NEXT:    jmp callee@PLT # TAILCALL
1835 ; X64-MinGW-LABEL: test_sibling_call_empty_frame:
1836 ; X64-MinGW:       # %bb.0:
1837 ; X64-MinGW-NEXT:    cmpq %gs:40, %rsp
1838 ; X64-MinGW-NEXT:    ja callee # TAILCALL
1839 ; X64-MinGW-NEXT:  # %bb.1:
1840 ; X64-MinGW-NEXT:    movl $0, %r10d
1841 ; X64-MinGW-NEXT:    movl $32, %r11d
1842 ; X64-MinGW-NEXT:    callq __morestack
1843 ; X64-MinGW-NEXT:    retq
1844 ; X64-MinGW-NEXT:    jmp callee # TAILCALL
1845   %call = tail call i32 @callee(i32 %x) #0
1846   ret i32 %call
1849 ; Test that unused nested argument doesn't need saving/restoring.
1851 define i32 @test_nested_unused(ptr nest %unused) #0 {
1852 ; X86-Linux-LABEL: test_nested_unused:
1853 ; X86-Linux:       # %bb.0:
1854 ; X86-Linux-NEXT:    cmpl %gs:48, %esp
1855 ; X86-Linux-NEXT:    jbe .LBB9_1
1856 ; X86-Linux-NEXT:  .LBB9_2:
1857 ; X86-Linux-NEXT:    subl $52, %esp
1858 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 52
1859 ; X86-Linux-NEXT:    leal {{[0-9]+}}(%esp), %eax
1860 ; X86-Linux-NEXT:    pushl $10
1861 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 4
1862 ; X86-Linux-NEXT:    pushl %eax
1863 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset 4
1864 ; X86-Linux-NEXT:    calll dummy_use@PLT
1865 ; X86-Linux-NEXT:    addl $16, %esp
1866 ; X86-Linux-NEXT:    .cfi_adjust_cfa_offset -16
1867 ; X86-Linux-NEXT:    movl $123, %eax
1868 ; X86-Linux-NEXT:    addl $44, %esp
1869 ; X86-Linux-NEXT:    .cfi_def_cfa_offset 4
1870 ; X86-Linux-NEXT:    retl
1871 ; X86-Linux-NEXT:  .LBB9_1:
1872 ; X86-Linux-NEXT:    pushl $0
1873 ; X86-Linux-NEXT:    pushl $44
1874 ; X86-Linux-NEXT:    calll __morestack
1875 ; X86-Linux-NEXT:    retl
1876 ; X86-Linux-NEXT:    jmp .LBB9_2
1878 ; X64-Linux-LABEL: test_nested_unused:
1879 ; X64-Linux:       # %bb.0:
1880 ; X64-Linux-NEXT:    cmpq %fs:112, %rsp
1881 ; X64-Linux-NEXT:    jbe .LBB9_1
1882 ; X64-Linux-NEXT:  .LBB9_2:
1883 ; X64-Linux-NEXT:    subq $40, %rsp
1884 ; X64-Linux-NEXT:    .cfi_def_cfa_offset 48
1885 ; X64-Linux-NEXT:    movq %rsp, %rdi
1886 ; X64-Linux-NEXT:    movl $10, %esi
1887 ; X64-Linux-NEXT:    callq dummy_use@PLT
1888 ; X64-Linux-NEXT:    movl $123, %eax
1889 ; X64-Linux-NEXT:    addq $40, %rsp
1890 ; X64-Linux-NEXT:    .cfi_def_cfa_offset 8
1891 ; X64-Linux-NEXT:    retq
1892 ; X64-Linux-NEXT:  .LBB9_1:
1893 ; X64-Linux-NEXT:    movl $40, %r10d
1894 ; X64-Linux-NEXT:    movl $0, %r11d
1895 ; X64-Linux-NEXT:    callq __morestack
1896 ; X64-Linux-NEXT:    retq
1897 ; X64-Linux-NEXT:    jmp .LBB9_2
1899 ; X64-Linux-Large-LABEL: test_nested_unused:
1900 ; X64-Linux-Large:       # %bb.0:
1901 ; X64-Linux-Large-NEXT:    cmpq %fs:112, %rsp
1902 ; X64-Linux-Large-NEXT:    jbe .LBB9_1
1903 ; X64-Linux-Large-NEXT:  .LBB9_2:
1904 ; X64-Linux-Large-NEXT:    subq $40, %rsp
1905 ; X64-Linux-Large-NEXT:    .cfi_def_cfa_offset 48
1906 ; X64-Linux-Large-NEXT:    movabsq $dummy_use, %rax
1907 ; X64-Linux-Large-NEXT:    movq %rsp, %rdi
1908 ; X64-Linux-Large-NEXT:    movl $10, %esi
1909 ; X64-Linux-Large-NEXT:    callq *%rax
1910 ; X64-Linux-Large-NEXT:    movl $123, %eax
1911 ; X64-Linux-Large-NEXT:    addq $40, %rsp
1912 ; X64-Linux-Large-NEXT:    .cfi_def_cfa_offset 8
1913 ; X64-Linux-Large-NEXT:    retq
1914 ; X64-Linux-Large-NEXT:  .LBB9_1:
1915 ; X64-Linux-Large-NEXT:    movl $40, %r10d
1916 ; X64-Linux-Large-NEXT:    movl $0, %r11d
1917 ; X64-Linux-Large-NEXT:    callq *__morestack_addr(%rip)
1918 ; X64-Linux-Large-NEXT:    retq
1919 ; X64-Linux-Large-NEXT:    jmp .LBB9_2
1921 ; X32ABI-LABEL: test_nested_unused:
1922 ; X32ABI:       # %bb.0:
1923 ; X32ABI-NEXT:    cmpl %fs:64, %esp
1924 ; X32ABI-NEXT:    jbe .LBB9_1
1925 ; X32ABI-NEXT:  .LBB9_2:
1926 ; X32ABI-NEXT:    subl $40, %esp
1927 ; X32ABI-NEXT:    .cfi_def_cfa_offset 48
1928 ; X32ABI-NEXT:    movl %esp, %edi
1929 ; X32ABI-NEXT:    movl $10, %esi
1930 ; X32ABI-NEXT:    callq dummy_use@PLT
1931 ; X32ABI-NEXT:    movl $123, %eax
1932 ; X32ABI-NEXT:    addl $40, %esp
1933 ; X32ABI-NEXT:    .cfi_def_cfa_offset 8
1934 ; X32ABI-NEXT:    retq
1935 ; X32ABI-NEXT:  .LBB9_1:
1936 ; X32ABI-NEXT:    movl $40, %r10d
1937 ; X32ABI-NEXT:    movl $0, %r11d
1938 ; X32ABI-NEXT:    callq __morestack
1939 ; X32ABI-NEXT:    retq
1940 ; X32ABI-NEXT:    jmp .LBB9_2
1942 ; X86-Darwin-LABEL: test_nested_unused:
1943 ; X86-Darwin:       ## %bb.0:
1944 ; X86-Darwin-NEXT:    movl $432, %ecx ## imm = 0x1B0
1945 ; X86-Darwin-NEXT:    cmpl %gs:(%ecx), %esp
1946 ; X86-Darwin-NEXT:    jbe LBB9_1
1947 ; X86-Darwin-NEXT:  LBB9_2:
1948 ; X86-Darwin-NEXT:    subl $60, %esp
1949 ; X86-Darwin-NEXT:    .cfi_def_cfa_offset 64
1950 ; X86-Darwin-NEXT:    leal {{[0-9]+}}(%esp), %eax
1951 ; X86-Darwin-NEXT:    movl %eax, (%esp)
1952 ; X86-Darwin-NEXT:    movl $10, {{[0-9]+}}(%esp)
1953 ; X86-Darwin-NEXT:    calll _dummy_use
1954 ; X86-Darwin-NEXT:    movl $123, %eax
1955 ; X86-Darwin-NEXT:    addl $60, %esp
1956 ; X86-Darwin-NEXT:    retl
1957 ; X86-Darwin-NEXT:  LBB9_1:
1958 ; X86-Darwin-NEXT:    pushl $0
1959 ; X86-Darwin-NEXT:    pushl $60
1960 ; X86-Darwin-NEXT:    calll ___morestack
1961 ; X86-Darwin-NEXT:    retl
1962 ; X86-Darwin-NEXT:    jmp LBB9_2
1964 ; X64-Darwin-LABEL: test_nested_unused:
1965 ; X64-Darwin:       ## %bb.0:
1966 ; X64-Darwin-NEXT:    cmpq %gs:816, %rsp
1967 ; X64-Darwin-NEXT:    jbe LBB9_1
1968 ; X64-Darwin-NEXT:  LBB9_2:
1969 ; X64-Darwin-NEXT:    subq $40, %rsp
1970 ; X64-Darwin-NEXT:    .cfi_def_cfa_offset 48
1971 ; X64-Darwin-NEXT:    movq %rsp, %rdi
1972 ; X64-Darwin-NEXT:    movl $10, %esi
1973 ; X64-Darwin-NEXT:    callq _dummy_use
1974 ; X64-Darwin-NEXT:    movl $123, %eax
1975 ; X64-Darwin-NEXT:    addq $40, %rsp
1976 ; X64-Darwin-NEXT:    retq
1977 ; X64-Darwin-NEXT:  LBB9_1:
1978 ; X64-Darwin-NEXT:    movl $40, %r10d
1979 ; X64-Darwin-NEXT:    movl $0, %r11d
1980 ; X64-Darwin-NEXT:    callq ___morestack
1981 ; X64-Darwin-NEXT:    retq
1982 ; X64-Darwin-NEXT:    jmp LBB9_2
1984 ; X86-MinGW-LABEL: test_nested_unused:
1985 ; X86-MinGW:       # %bb.0:
1986 ; X86-MinGW-NEXT:    cmpl %fs:20, %esp
1987 ; X86-MinGW-NEXT:    jbe LBB9_1
1988 ; X86-MinGW-NEXT:  LBB9_2:
1989 ; X86-MinGW-NEXT:    subl $40, %esp
1990 ; X86-MinGW-NEXT:    .cfi_def_cfa_offset 44
1991 ; X86-MinGW-NEXT:    movl %esp, %eax
1992 ; X86-MinGW-NEXT:    pushl $10
1993 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset 4
1994 ; X86-MinGW-NEXT:    pushl %eax
1995 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset 4
1996 ; X86-MinGW-NEXT:    calll _dummy_use
1997 ; X86-MinGW-NEXT:    addl $8, %esp
1998 ; X86-MinGW-NEXT:    .cfi_adjust_cfa_offset -8
1999 ; X86-MinGW-NEXT:    movl $123, %eax
2000 ; X86-MinGW-NEXT:    addl $40, %esp
2001 ; X86-MinGW-NEXT:    retl
2002 ; X86-MinGW-NEXT:  LBB9_1:
2003 ; X86-MinGW-NEXT:    .cfi_def_cfa_offset 4
2004 ; X86-MinGW-NEXT:    pushl $0
2005 ; X86-MinGW-NEXT:    pushl $40
2006 ; X86-MinGW-NEXT:    calll ___morestack
2007 ; X86-MinGW-NEXT:    retl
2008 ; X86-MinGW-NEXT:    jmp LBB9_2
2010 ; X64-FreeBSD-LABEL: test_nested_unused:
2011 ; X64-FreeBSD:       # %bb.0:
2012 ; X64-FreeBSD-NEXT:    cmpq %fs:24, %rsp
2013 ; X64-FreeBSD-NEXT:    jbe .LBB9_1
2014 ; X64-FreeBSD-NEXT:  .LBB9_2:
2015 ; X64-FreeBSD-NEXT:    subq $40, %rsp
2016 ; X64-FreeBSD-NEXT:    .cfi_def_cfa_offset 48
2017 ; X64-FreeBSD-NEXT:    movq %rsp, %rdi
2018 ; X64-FreeBSD-NEXT:    movl $10, %esi
2019 ; X64-FreeBSD-NEXT:    callq dummy_use@PLT
2020 ; X64-FreeBSD-NEXT:    movl $123, %eax
2021 ; X64-FreeBSD-NEXT:    addq $40, %rsp
2022 ; X64-FreeBSD-NEXT:    .cfi_def_cfa_offset 8
2023 ; X64-FreeBSD-NEXT:    retq
2024 ; X64-FreeBSD-NEXT:  .LBB9_1:
2025 ; X64-FreeBSD-NEXT:    movl $40, %r10d
2026 ; X64-FreeBSD-NEXT:    movl $0, %r11d
2027 ; X64-FreeBSD-NEXT:    callq __morestack
2028 ; X64-FreeBSD-NEXT:    retq
2029 ; X64-FreeBSD-NEXT:    jmp .LBB9_2
2031 ; X86-DFlyBSD-LABEL: test_nested_unused:
2032 ; X86-DFlyBSD:       # %bb.0:
2033 ; X86-DFlyBSD-NEXT:    cmpl %fs:16, %esp
2034 ; X86-DFlyBSD-NEXT:    jbe .LBB9_1
2035 ; X86-DFlyBSD-NEXT:  .LBB9_2:
2036 ; X86-DFlyBSD-NEXT:    subl $40, %esp
2037 ; X86-DFlyBSD-NEXT:    .cfi_def_cfa_offset 44
2038 ; X86-DFlyBSD-NEXT:    movl %esp, %eax
2039 ; X86-DFlyBSD-NEXT:    pushl $10
2040 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset 4
2041 ; X86-DFlyBSD-NEXT:    pushl %eax
2042 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset 4
2043 ; X86-DFlyBSD-NEXT:    calll dummy_use@PLT
2044 ; X86-DFlyBSD-NEXT:    addl $8, %esp
2045 ; X86-DFlyBSD-NEXT:    .cfi_adjust_cfa_offset -8
2046 ; X86-DFlyBSD-NEXT:    movl $123, %eax
2047 ; X86-DFlyBSD-NEXT:    addl $40, %esp
2048 ; X86-DFlyBSD-NEXT:    .cfi_def_cfa_offset 4
2049 ; X86-DFlyBSD-NEXT:    retl
2050 ; X86-DFlyBSD-NEXT:  .LBB9_1:
2051 ; X86-DFlyBSD-NEXT:    pushl $0
2052 ; X86-DFlyBSD-NEXT:    pushl $40
2053 ; X86-DFlyBSD-NEXT:    calll __morestack
2054 ; X86-DFlyBSD-NEXT:    retl
2055 ; X86-DFlyBSD-NEXT:    jmp .LBB9_2
2057 ; X64-DFlyBSD-LABEL: test_nested_unused:
2058 ; X64-DFlyBSD:       # %bb.0:
2059 ; X64-DFlyBSD-NEXT:    cmpq %fs:32, %rsp
2060 ; X64-DFlyBSD-NEXT:    jbe .LBB9_1
2061 ; X64-DFlyBSD-NEXT:  .LBB9_2:
2062 ; X64-DFlyBSD-NEXT:    subq $40, %rsp
2063 ; X64-DFlyBSD-NEXT:    .cfi_def_cfa_offset 48
2064 ; X64-DFlyBSD-NEXT:    movq %rsp, %rdi
2065 ; X64-DFlyBSD-NEXT:    movl $10, %esi
2066 ; X64-DFlyBSD-NEXT:    callq dummy_use@PLT
2067 ; X64-DFlyBSD-NEXT:    movl $123, %eax
2068 ; X64-DFlyBSD-NEXT:    addq $40, %rsp
2069 ; X64-DFlyBSD-NEXT:    .cfi_def_cfa_offset 8
2070 ; X64-DFlyBSD-NEXT:    retq
2071 ; X64-DFlyBSD-NEXT:  .LBB9_1:
2072 ; X64-DFlyBSD-NEXT:    movl $40, %r10d
2073 ; X64-DFlyBSD-NEXT:    movl $0, %r11d
2074 ; X64-DFlyBSD-NEXT:    callq __morestack
2075 ; X64-DFlyBSD-NEXT:    retq
2076 ; X64-DFlyBSD-NEXT:    jmp .LBB9_2
2078 ; X64-MinGW-LABEL: test_nested_unused:
2079 ; X64-MinGW:       # %bb.0:
2080 ; X64-MinGW-NEXT:    cmpq %gs:40, %rsp
2081 ; X64-MinGW-NEXT:    jbe .LBB9_1
2082 ; X64-MinGW-NEXT:  .LBB9_2:
2083 ; X64-MinGW-NEXT:    subq $72, %rsp
2084 ; X64-MinGW-NEXT:    .seh_stackalloc 72
2085 ; X64-MinGW-NEXT:    .seh_endprologue
2086 ; X64-MinGW-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx
2087 ; X64-MinGW-NEXT:    movl $10, %edx
2088 ; X64-MinGW-NEXT:    callq dummy_use
2089 ; X64-MinGW-NEXT:    movl $123, %eax
2090 ; X64-MinGW-NEXT:    addq $72, %rsp
2091 ; X64-MinGW-NEXT:    retq
2092 ; X64-MinGW-NEXT:  .LBB9_1:
2093 ; X64-MinGW-NEXT:    movl $72, %r10d
2094 ; X64-MinGW-NEXT:    movl $32, %r11d
2095 ; X64-MinGW-NEXT:    callq __morestack
2096 ; X64-MinGW-NEXT:    retq
2097 ; X64-MinGW-NEXT:    jmp .LBB9_2
2098 ; X64-MinGW-NEXT:    .seh_endproc
2099        %mem = alloca i32, i32 10
2100        call void @dummy_use (ptr %mem, i32 10)
2101        ret i32 123
2104 attributes #0 = { "split-stack" }
2106 ; X64-Linux-Large: .section ".note.GNU-split-stack","",@progbits
2107 ; X64-Linux-Large-NEXT: .section ".note.GNU-no-split-stack","",@progbits
2108 ; X64-Linux-Large-NEXT: .section        ".note.GNU-stack","",@progbits
2109 ; X64-Linux-Large-NEXT: .rodata
2110 ; X64-Linux-Large-NEXT: __morestack_addr:
2111 ; X64-Linux-Large-NEXT: .quad   __morestack
2113 ; X86-Linux: .section ".note.GNU-split-stack","",@progbits
2114 ; X86-Linux: .section ".note.GNU-no-split-stack","",@progbits
2116 ; X64-Linux: .section ".note.GNU-split-stack","",@progbits
2117 ; X64-Linux: .section ".note.GNU-no-split-stack","",@progbits
2119 ; X64-FreeBSD: .section ".note.GNU-split-stack","",@progbits
2120 ; X64-FreeBSD: .section ".note.GNU-no-split-stack","",@progbits
2122 ; X86-DFlyBSD: .section ".note.GNU-split-stack","",@progbits
2123 ; X86-DFlyBSD: .section ".note.GNU-no-split-stack","",@progbits
2125 ; X64-DFlyBSD: .section ".note.GNU-split-stack","",@progbits
2126 ; X64-DFlyBSD: .section ".note.GNU-no-split-stack","",@progbits