; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc < %s -mcpu=generic -mtriple=i686-linux -verify-machineinstrs | FileCheck %s -check-prefix=X86-Linux ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -verify-machineinstrs | FileCheck %s -check-prefix=X64-Linux ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -code-model=large -verify-machineinstrs | FileCheck %s -check-prefix=X64-Linux-Large ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnux32 -verify-machineinstrs | FileCheck %s -check-prefix=X32ABI ; RUN: llc < %s -mcpu=generic -mtriple=i686-darwin -verify-machineinstrs | FileCheck %s -check-prefix=X86-Darwin ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-darwin -verify-machineinstrs | FileCheck %s -check-prefix=X64-Darwin ; RUN: llc < %s -mcpu=generic -mtriple=i686-mingw32 -verify-machineinstrs | FileCheck %s -check-prefix=X86-MinGW ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-freebsd -verify-machineinstrs | FileCheck %s -check-prefix=X64-FreeBSD ; RUN: llc < %s -mcpu=generic -mtriple=i686-dragonfly -verify-machineinstrs | FileCheck %s -check-prefix=X86-DFlyBSD ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-dragonfly -verify-machineinstrs | FileCheck %s -check-prefix=X64-DFlyBSD ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-mingw32 -verify-machineinstrs | FileCheck %s -check-prefix=X64-MinGW ; We used to crash with filetype=obj ; RUN: llc < %s -mcpu=generic -mtriple=i686-linux -filetype=obj -o /dev/null ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -filetype=obj -o /dev/null ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnux32 -filetype=obj -o /dev/null ; RUN: llc < %s -mcpu=generic -mtriple=i686-darwin -filetype=obj -o /dev/null ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-darwin -filetype=obj -o /dev/null ; RUN: llc < %s -mcpu=generic -mtriple=i686-mingw32 -filetype=obj -o /dev/null ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-freebsd -filetype=obj -o /dev/null ; RUN: llc < %s -mcpu=generic -mtriple=i686-dragonfly -filetype=obj -o /dev/null ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-dragonfly -filetype=obj -o /dev/null ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-mingw32 -filetype=obj -o /dev/null ; RUN: not --crash llc < %s -mcpu=generic -mtriple=x86_64-solaris 2> %t.log ; RUN: FileCheck %s -input-file=%t.log -check-prefix=X64-Solaris ; RUN: not --crash llc < %s -mcpu=generic -mtriple=i686-freebsd 2> %t.log ; RUN: FileCheck %s -input-file=%t.log -check-prefix=X86-FreeBSD ; X64-Solaris: Segmented stacks not supported on this platform ; X86-FreeBSD: Segmented stacks not supported on FreeBSD i386 ; Just to prevent the alloca from being optimized away declare void @dummy_use(ptr, i32) define void @test_basic() #0 { ; X86-Linux-LABEL: test_basic: ; X86-Linux: # %bb.0: ; X86-Linux-NEXT: cmpl %gs:48, %esp ; X86-Linux-NEXT: jbe .LBB0_1 ; X86-Linux-NEXT: .LBB0_2: ; X86-Linux-NEXT: subl $52, %esp ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 52 ; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax ; X86-Linux-NEXT: pushl $10 ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 ; X86-Linux-NEXT: pushl %eax ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 ; X86-Linux-NEXT: calll dummy_use@PLT ; X86-Linux-NEXT: addl $60, %esp ; X86-Linux-NEXT: .cfi_adjust_cfa_offset -60 ; X86-Linux-NEXT: retl ; X86-Linux-NEXT: .LBB0_1: ; X86-Linux-NEXT: pushl $0 ; X86-Linux-NEXT: pushl $44 ; X86-Linux-NEXT: calll __morestack ; X86-Linux-NEXT: retl ; X86-Linux-NEXT: jmp .LBB0_2 ; ; X64-Linux-LABEL: test_basic: ; X64-Linux: # %bb.0: ; X64-Linux-NEXT: cmpq %fs:112, %rsp ; X64-Linux-NEXT: jbe .LBB0_1 ; X64-Linux-NEXT: .LBB0_2: ; X64-Linux-NEXT: subq $40, %rsp ; X64-Linux-NEXT: .cfi_def_cfa_offset 48 ; X64-Linux-NEXT: movq %rsp, %rdi ; X64-Linux-NEXT: movl $10, %esi ; X64-Linux-NEXT: callq dummy_use@PLT ; X64-Linux-NEXT: addq $40, %rsp ; X64-Linux-NEXT: .cfi_def_cfa_offset 8 ; X64-Linux-NEXT: retq ; X64-Linux-NEXT: .LBB0_1: ; X64-Linux-NEXT: movl $40, %r10d ; X64-Linux-NEXT: movl $0, %r11d ; X64-Linux-NEXT: callq __morestack ; X64-Linux-NEXT: retq ; X64-Linux-NEXT: jmp .LBB0_2 ; ; X64-Linux-Large-LABEL: test_basic: ; X64-Linux-Large: # %bb.0: ; X64-Linux-Large-NEXT: cmpq %fs:112, %rsp ; X64-Linux-Large-NEXT: jbe .LBB0_1 ; X64-Linux-Large-NEXT: .LBB0_2: ; X64-Linux-Large-NEXT: subq $40, %rsp ; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 48 ; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax ; X64-Linux-Large-NEXT: movq %rsp, %rdi ; X64-Linux-Large-NEXT: movl $10, %esi ; X64-Linux-Large-NEXT: callq *%rax ; X64-Linux-Large-NEXT: addq $40, %rsp ; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8 ; X64-Linux-Large-NEXT: retq ; X64-Linux-Large-NEXT: .LBB0_1: ; X64-Linux-Large-NEXT: movl $40, %r10d ; X64-Linux-Large-NEXT: movl $0, %r11d ; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) ; X64-Linux-Large-NEXT: retq ; X64-Linux-Large-NEXT: jmp .LBB0_2 ; ; X32ABI-LABEL: test_basic: ; X32ABI: # %bb.0: ; X32ABI-NEXT: cmpl %fs:64, %esp ; X32ABI-NEXT: jbe .LBB0_1 ; X32ABI-NEXT: .LBB0_2: ; X32ABI-NEXT: subl $40, %esp ; X32ABI-NEXT: .cfi_def_cfa_offset 48 ; X32ABI-NEXT: movl %esp, %edi ; X32ABI-NEXT: movl $10, %esi ; X32ABI-NEXT: callq dummy_use@PLT ; X32ABI-NEXT: addl $40, %esp ; X32ABI-NEXT: .cfi_def_cfa_offset 8 ; X32ABI-NEXT: retq ; X32ABI-NEXT: .LBB0_1: ; X32ABI-NEXT: movl $40, %r10d ; X32ABI-NEXT: movl $0, %r11d ; X32ABI-NEXT: callq __morestack ; X32ABI-NEXT: retq ; X32ABI-NEXT: jmp .LBB0_2 ; ; X86-Darwin-LABEL: test_basic: ; X86-Darwin: ## %bb.0: ; X86-Darwin-NEXT: movl $432, %ecx ## imm = 0x1B0 ; X86-Darwin-NEXT: cmpl %gs:(%ecx), %esp ; X86-Darwin-NEXT: jbe LBB0_1 ; X86-Darwin-NEXT: LBB0_2: ; X86-Darwin-NEXT: subl $60, %esp ; X86-Darwin-NEXT: .cfi_def_cfa_offset 64 ; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax ; X86-Darwin-NEXT: movl %eax, (%esp) ; X86-Darwin-NEXT: movl $10, {{[0-9]+}}(%esp) ; X86-Darwin-NEXT: calll _dummy_use ; X86-Darwin-NEXT: addl $60, %esp ; X86-Darwin-NEXT: retl ; X86-Darwin-NEXT: LBB0_1: ; X86-Darwin-NEXT: pushl $0 ; X86-Darwin-NEXT: pushl $60 ; X86-Darwin-NEXT: calll ___morestack ; X86-Darwin-NEXT: retl ; X86-Darwin-NEXT: jmp LBB0_2 ; ; X64-Darwin-LABEL: test_basic: ; X64-Darwin: ## %bb.0: ; X64-Darwin-NEXT: cmpq %gs:816, %rsp ; X64-Darwin-NEXT: jbe LBB0_1 ; X64-Darwin-NEXT: LBB0_2: ; X64-Darwin-NEXT: subq $40, %rsp ; X64-Darwin-NEXT: .cfi_def_cfa_offset 48 ; X64-Darwin-NEXT: movq %rsp, %rdi ; X64-Darwin-NEXT: movl $10, %esi ; X64-Darwin-NEXT: callq _dummy_use ; X64-Darwin-NEXT: addq $40, %rsp ; X64-Darwin-NEXT: retq ; X64-Darwin-NEXT: LBB0_1: ; X64-Darwin-NEXT: movl $40, %r10d ; X64-Darwin-NEXT: movl $0, %r11d ; X64-Darwin-NEXT: callq ___morestack ; X64-Darwin-NEXT: retq ; X64-Darwin-NEXT: jmp LBB0_2 ; ; X86-MinGW-LABEL: test_basic: ; X86-MinGW: # %bb.0: ; X86-MinGW-NEXT: cmpl %fs:20, %esp ; X86-MinGW-NEXT: jbe LBB0_1 ; X86-MinGW-NEXT: LBB0_2: ; X86-MinGW-NEXT: subl $40, %esp ; X86-MinGW-NEXT: .cfi_def_cfa_offset 44 ; X86-MinGW-NEXT: movl %esp, %eax ; X86-MinGW-NEXT: pushl $10 ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 ; X86-MinGW-NEXT: pushl %eax ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 ; X86-MinGW-NEXT: calll _dummy_use ; X86-MinGW-NEXT: addl $48, %esp ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -48 ; X86-MinGW-NEXT: retl ; X86-MinGW-NEXT: LBB0_1: ; X86-MinGW-NEXT: pushl $0 ; X86-MinGW-NEXT: pushl $40 ; X86-MinGW-NEXT: calll ___morestack ; X86-MinGW-NEXT: retl ; X86-MinGW-NEXT: jmp LBB0_2 ; ; X64-FreeBSD-LABEL: test_basic: ; X64-FreeBSD: # %bb.0: ; X64-FreeBSD-NEXT: cmpq %fs:24, %rsp ; X64-FreeBSD-NEXT: jbe .LBB0_1 ; X64-FreeBSD-NEXT: .LBB0_2: ; X64-FreeBSD-NEXT: subq $40, %rsp ; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 48 ; X64-FreeBSD-NEXT: movq %rsp, %rdi ; X64-FreeBSD-NEXT: movl $10, %esi ; X64-FreeBSD-NEXT: callq dummy_use@PLT ; X64-FreeBSD-NEXT: addq $40, %rsp ; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8 ; X64-FreeBSD-NEXT: retq ; X64-FreeBSD-NEXT: .LBB0_1: ; X64-FreeBSD-NEXT: movl $40, %r10d ; X64-FreeBSD-NEXT: movl $0, %r11d ; X64-FreeBSD-NEXT: callq __morestack ; X64-FreeBSD-NEXT: retq ; X64-FreeBSD-NEXT: jmp .LBB0_2 ; ; X86-DFlyBSD-LABEL: test_basic: ; X86-DFlyBSD: # %bb.0: ; X86-DFlyBSD-NEXT: cmpl %fs:16, %esp ; X86-DFlyBSD-NEXT: jbe .LBB0_1 ; X86-DFlyBSD-NEXT: .LBB0_2: ; X86-DFlyBSD-NEXT: subl $40, %esp ; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 44 ; X86-DFlyBSD-NEXT: movl %esp, %eax ; X86-DFlyBSD-NEXT: pushl $10 ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 ; X86-DFlyBSD-NEXT: pushl %eax ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 ; X86-DFlyBSD-NEXT: calll dummy_use@PLT ; X86-DFlyBSD-NEXT: addl $48, %esp ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -48 ; X86-DFlyBSD-NEXT: retl ; X86-DFlyBSD-NEXT: .LBB0_1: ; X86-DFlyBSD-NEXT: pushl $0 ; X86-DFlyBSD-NEXT: pushl $40 ; X86-DFlyBSD-NEXT: calll __morestack ; X86-DFlyBSD-NEXT: retl ; X86-DFlyBSD-NEXT: jmp .LBB0_2 ; ; X64-DFlyBSD-LABEL: test_basic: ; X64-DFlyBSD: # %bb.0: ; X64-DFlyBSD-NEXT: cmpq %fs:32, %rsp ; X64-DFlyBSD-NEXT: jbe .LBB0_1 ; X64-DFlyBSD-NEXT: .LBB0_2: ; X64-DFlyBSD-NEXT: subq $40, %rsp ; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 48 ; X64-DFlyBSD-NEXT: movq %rsp, %rdi ; X64-DFlyBSD-NEXT: movl $10, %esi ; X64-DFlyBSD-NEXT: callq dummy_use@PLT ; X64-DFlyBSD-NEXT: addq $40, %rsp ; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 ; X64-DFlyBSD-NEXT: retq ; X64-DFlyBSD-NEXT: .LBB0_1: ; X64-DFlyBSD-NEXT: movl $40, %r10d ; X64-DFlyBSD-NEXT: movl $0, %r11d ; X64-DFlyBSD-NEXT: callq __morestack ; X64-DFlyBSD-NEXT: retq ; X64-DFlyBSD-NEXT: jmp .LBB0_2 ; ; X64-MinGW-LABEL: test_basic: ; X64-MinGW: # %bb.0: ; X64-MinGW-NEXT: cmpq %gs:40, %rsp ; X64-MinGW-NEXT: jbe .LBB0_1 ; X64-MinGW-NEXT: .LBB0_2: ; X64-MinGW-NEXT: subq $72, %rsp ; X64-MinGW-NEXT: .seh_stackalloc 72 ; X64-MinGW-NEXT: .seh_endprologue ; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx ; X64-MinGW-NEXT: movl $10, %edx ; X64-MinGW-NEXT: callq dummy_use ; X64-MinGW-NEXT: nop ; X64-MinGW-NEXT: addq $72, %rsp ; X64-MinGW-NEXT: retq ; X64-MinGW-NEXT: .LBB0_1: ; X64-MinGW-NEXT: movl $72, %r10d ; X64-MinGW-NEXT: movl $32, %r11d ; X64-MinGW-NEXT: callq __morestack ; X64-MinGW-NEXT: retq ; X64-MinGW-NEXT: jmp .LBB0_2 ; X64-MinGW-NEXT: .seh_endproc %mem = alloca i32, i32 10 call void @dummy_use (ptr %mem, i32 10) ret void } define i32 @test_nested(ptr nest %closure, i32 %other) #0 { ; X86-Linux-LABEL: test_nested: ; X86-Linux: # %bb.0: ; X86-Linux-NEXT: cmpl %gs:48, %esp ; X86-Linux-NEXT: jbe .LBB1_1 ; X86-Linux-NEXT: .LBB1_2: ; X86-Linux-NEXT: pushl %esi ; X86-Linux-NEXT: .cfi_def_cfa_offset 8 ; X86-Linux-NEXT: subl $40, %esp ; X86-Linux-NEXT: .cfi_def_cfa_offset 48 ; X86-Linux-NEXT: .cfi_offset %esi, -8 ; X86-Linux-NEXT: movl {{[0-9]+}}(%esp), %esi ; X86-Linux-NEXT: addl (%ecx), %esi ; X86-Linux-NEXT: subl $8, %esp ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 8 ; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax ; X86-Linux-NEXT: pushl $10 ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 ; X86-Linux-NEXT: pushl %eax ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 ; X86-Linux-NEXT: calll dummy_use@PLT ; X86-Linux-NEXT: addl $16, %esp ; X86-Linux-NEXT: .cfi_adjust_cfa_offset -16 ; X86-Linux-NEXT: movl %esi, %eax ; X86-Linux-NEXT: addl $40, %esp ; X86-Linux-NEXT: .cfi_def_cfa_offset 8 ; X86-Linux-NEXT: popl %esi ; X86-Linux-NEXT: .cfi_def_cfa_offset 4 ; X86-Linux-NEXT: retl ; X86-Linux-NEXT: .LBB1_1: ; X86-Linux-NEXT: .cfi_restore %esi ; X86-Linux-NEXT: pushl $4 ; X86-Linux-NEXT: pushl $44 ; X86-Linux-NEXT: calll __morestack ; X86-Linux-NEXT: retl ; X86-Linux-NEXT: jmp .LBB1_2 ; ; X64-Linux-LABEL: test_nested: ; X64-Linux: # %bb.0: ; X64-Linux-NEXT: cmpq %fs:112, %rsp ; X64-Linux-NEXT: jbe .LBB1_1 ; X64-Linux-NEXT: .LBB1_2: ; X64-Linux-NEXT: pushq %rbx ; X64-Linux-NEXT: .cfi_def_cfa_offset 16 ; X64-Linux-NEXT: subq $48, %rsp ; X64-Linux-NEXT: .cfi_def_cfa_offset 64 ; X64-Linux-NEXT: .cfi_offset %rbx, -16 ; X64-Linux-NEXT: movl %edi, %ebx ; X64-Linux-NEXT: addl (%r10), %ebx ; X64-Linux-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-Linux-NEXT: movl $10, %esi ; X64-Linux-NEXT: callq dummy_use@PLT ; X64-Linux-NEXT: movl %ebx, %eax ; X64-Linux-NEXT: addq $48, %rsp ; X64-Linux-NEXT: .cfi_def_cfa_offset 16 ; X64-Linux-NEXT: popq %rbx ; X64-Linux-NEXT: .cfi_def_cfa_offset 8 ; X64-Linux-NEXT: retq ; X64-Linux-NEXT: .LBB1_1: ; X64-Linux-NEXT: .cfi_restore %rbx ; X64-Linux-NEXT: movq %r10, %rax ; X64-Linux-NEXT: movl $56, %r10d ; X64-Linux-NEXT: movl $0, %r11d ; X64-Linux-NEXT: callq __morestack ; X64-Linux-NEXT: retq ; X64-Linux-NEXT: movq %rax, %r10 ; X64-Linux-NEXT: jmp .LBB1_2 ; ; X64-Linux-Large-LABEL: test_nested: ; X64-Linux-Large: # %bb.0: ; X64-Linux-Large-NEXT: cmpq %fs:112, %rsp ; X64-Linux-Large-NEXT: jbe .LBB1_1 ; X64-Linux-Large-NEXT: .LBB1_2: ; X64-Linux-Large-NEXT: pushq %rbx ; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 16 ; X64-Linux-Large-NEXT: subq $48, %rsp ; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 64 ; X64-Linux-Large-NEXT: .cfi_offset %rbx, -16 ; X64-Linux-Large-NEXT: movl %edi, %ebx ; X64-Linux-Large-NEXT: addl (%r10), %ebx ; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax ; X64-Linux-Large-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-Linux-Large-NEXT: movl $10, %esi ; X64-Linux-Large-NEXT: callq *%rax ; X64-Linux-Large-NEXT: movl %ebx, %eax ; X64-Linux-Large-NEXT: addq $48, %rsp ; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 16 ; X64-Linux-Large-NEXT: popq %rbx ; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8 ; X64-Linux-Large-NEXT: retq ; X64-Linux-Large-NEXT: .LBB1_1: ; X64-Linux-Large-NEXT: .cfi_restore %rbx ; X64-Linux-Large-NEXT: movq %r10, %rax ; X64-Linux-Large-NEXT: movl $56, %r10d ; X64-Linux-Large-NEXT: movl $0, %r11d ; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) ; X64-Linux-Large-NEXT: retq ; X64-Linux-Large-NEXT: movq %rax, %r10 ; X64-Linux-Large-NEXT: jmp .LBB1_2 ; ; X32ABI-LABEL: test_nested: ; X32ABI: # %bb.0: ; X32ABI-NEXT: cmpl %fs:64, %esp ; X32ABI-NEXT: jbe .LBB1_1 ; X32ABI-NEXT: .LBB1_2: ; X32ABI-NEXT: pushq %rbx ; X32ABI-NEXT: .cfi_def_cfa_offset 16 ; X32ABI-NEXT: subl $48, %esp ; X32ABI-NEXT: .cfi_def_cfa_offset 64 ; X32ABI-NEXT: .cfi_offset %rbx, -16 ; X32ABI-NEXT: movl %edi, %ebx ; X32ABI-NEXT: addl (%r10d), %ebx ; X32ABI-NEXT: leal {{[0-9]+}}(%rsp), %edi ; X32ABI-NEXT: movl $10, %esi ; X32ABI-NEXT: callq dummy_use@PLT ; X32ABI-NEXT: movl %ebx, %eax ; X32ABI-NEXT: addl $48, %esp ; X32ABI-NEXT: .cfi_def_cfa_offset 16 ; X32ABI-NEXT: popq %rbx ; X32ABI-NEXT: .cfi_def_cfa_offset 8 ; X32ABI-NEXT: retq ; X32ABI-NEXT: .LBB1_1: ; X32ABI-NEXT: .cfi_restore %rbx ; X32ABI-NEXT: movl %r10d, %eax ; X32ABI-NEXT: movl $56, %r10d ; X32ABI-NEXT: movl $0, %r11d ; X32ABI-NEXT: callq __morestack ; X32ABI-NEXT: retq ; X32ABI-NEXT: movq %rax, %r10 ; X32ABI-NEXT: jmp .LBB1_2 ; ; X86-Darwin-LABEL: test_nested: ; X86-Darwin: ## %bb.0: ; X86-Darwin-NEXT: movl $432, %edx ## imm = 0x1B0 ; X86-Darwin-NEXT: cmpl %gs:(%edx), %esp ; X86-Darwin-NEXT: jbe LBB1_1 ; X86-Darwin-NEXT: LBB1_2: ; X86-Darwin-NEXT: pushl %esi ; X86-Darwin-NEXT: .cfi_def_cfa_offset 8 ; X86-Darwin-NEXT: subl $56, %esp ; X86-Darwin-NEXT: .cfi_def_cfa_offset 64 ; X86-Darwin-NEXT: .cfi_offset %esi, -8 ; X86-Darwin-NEXT: movl {{[0-9]+}}(%esp), %esi ; X86-Darwin-NEXT: addl (%ecx), %esi ; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax ; X86-Darwin-NEXT: movl %eax, (%esp) ; X86-Darwin-NEXT: movl $10, {{[0-9]+}}(%esp) ; X86-Darwin-NEXT: calll _dummy_use ; X86-Darwin-NEXT: movl %esi, %eax ; X86-Darwin-NEXT: addl $56, %esp ; X86-Darwin-NEXT: popl %esi ; X86-Darwin-NEXT: retl ; X86-Darwin-NEXT: LBB1_1: ; X86-Darwin-NEXT: pushl $4 ; X86-Darwin-NEXT: pushl $60 ; X86-Darwin-NEXT: calll ___morestack ; X86-Darwin-NEXT: retl ; X86-Darwin-NEXT: jmp LBB1_2 ; ; X64-Darwin-LABEL: test_nested: ; X64-Darwin: ## %bb.0: ; X64-Darwin-NEXT: cmpq %gs:816, %rsp ; X64-Darwin-NEXT: jbe LBB1_1 ; X64-Darwin-NEXT: LBB1_2: ; X64-Darwin-NEXT: pushq %rbx ; X64-Darwin-NEXT: .cfi_def_cfa_offset 16 ; X64-Darwin-NEXT: subq $48, %rsp ; X64-Darwin-NEXT: .cfi_def_cfa_offset 64 ; X64-Darwin-NEXT: .cfi_offset %rbx, -16 ; X64-Darwin-NEXT: movl %edi, %ebx ; X64-Darwin-NEXT: addl (%r10), %ebx ; X64-Darwin-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-Darwin-NEXT: movl $10, %esi ; X64-Darwin-NEXT: callq _dummy_use ; X64-Darwin-NEXT: movl %ebx, %eax ; X64-Darwin-NEXT: addq $48, %rsp ; X64-Darwin-NEXT: popq %rbx ; X64-Darwin-NEXT: retq ; X64-Darwin-NEXT: LBB1_1: ; X64-Darwin-NEXT: movq %r10, %rax ; X64-Darwin-NEXT: movl $56, %r10d ; X64-Darwin-NEXT: movl $0, %r11d ; X64-Darwin-NEXT: callq ___morestack ; X64-Darwin-NEXT: retq ; X64-Darwin-NEXT: movq %rax, %r10 ; X64-Darwin-NEXT: jmp LBB1_2 ; ; X86-MinGW-LABEL: test_nested: ; X86-MinGW: # %bb.0: ; X86-MinGW-NEXT: cmpl %fs:20, %esp ; X86-MinGW-NEXT: jbe LBB1_1 ; X86-MinGW-NEXT: LBB1_2: ; X86-MinGW-NEXT: pushl %esi ; X86-MinGW-NEXT: .cfi_def_cfa_offset 8 ; X86-MinGW-NEXT: subl $40, %esp ; X86-MinGW-NEXT: .cfi_def_cfa_offset 48 ; X86-MinGW-NEXT: .cfi_offset %esi, -8 ; X86-MinGW-NEXT: movl {{[0-9]+}}(%esp), %esi ; X86-MinGW-NEXT: addl (%ecx), %esi ; X86-MinGW-NEXT: movl %esp, %eax ; X86-MinGW-NEXT: pushl $10 ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 ; X86-MinGW-NEXT: pushl %eax ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 ; X86-MinGW-NEXT: calll _dummy_use ; X86-MinGW-NEXT: addl $8, %esp ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -8 ; X86-MinGW-NEXT: movl %esi, %eax ; X86-MinGW-NEXT: addl $40, %esp ; X86-MinGW-NEXT: popl %esi ; X86-MinGW-NEXT: retl ; X86-MinGW-NEXT: LBB1_1: ; X86-MinGW-NEXT: .cfi_def_cfa_offset 4 ; X86-MinGW-NEXT: .cfi_restore %esi ; X86-MinGW-NEXT: pushl $4 ; X86-MinGW-NEXT: pushl $44 ; X86-MinGW-NEXT: calll ___morestack ; X86-MinGW-NEXT: retl ; X86-MinGW-NEXT: jmp LBB1_2 ; ; X64-FreeBSD-LABEL: test_nested: ; X64-FreeBSD: # %bb.0: ; X64-FreeBSD-NEXT: cmpq %fs:24, %rsp ; X64-FreeBSD-NEXT: jbe .LBB1_1 ; X64-FreeBSD-NEXT: .LBB1_2: ; X64-FreeBSD-NEXT: pushq %rbx ; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 16 ; X64-FreeBSD-NEXT: subq $48, %rsp ; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 64 ; X64-FreeBSD-NEXT: .cfi_offset %rbx, -16 ; X64-FreeBSD-NEXT: movl %edi, %ebx ; X64-FreeBSD-NEXT: addl (%r10), %ebx ; X64-FreeBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-FreeBSD-NEXT: movl $10, %esi ; X64-FreeBSD-NEXT: callq dummy_use@PLT ; X64-FreeBSD-NEXT: movl %ebx, %eax ; X64-FreeBSD-NEXT: addq $48, %rsp ; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 16 ; X64-FreeBSD-NEXT: popq %rbx ; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8 ; X64-FreeBSD-NEXT: retq ; X64-FreeBSD-NEXT: .LBB1_1: ; X64-FreeBSD-NEXT: .cfi_restore %rbx ; X64-FreeBSD-NEXT: movq %r10, %rax ; X64-FreeBSD-NEXT: movl $56, %r10d ; X64-FreeBSD-NEXT: movl $0, %r11d ; X64-FreeBSD-NEXT: callq __morestack ; X64-FreeBSD-NEXT: retq ; X64-FreeBSD-NEXT: movq %rax, %r10 ; X64-FreeBSD-NEXT: jmp .LBB1_2 ; ; X86-DFlyBSD-LABEL: test_nested: ; X86-DFlyBSD: # %bb.0: ; X86-DFlyBSD-NEXT: cmpl %fs:16, %esp ; X86-DFlyBSD-NEXT: jbe .LBB1_1 ; X86-DFlyBSD-NEXT: .LBB1_2: ; X86-DFlyBSD-NEXT: pushl %esi ; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 ; X86-DFlyBSD-NEXT: subl $40, %esp ; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 48 ; X86-DFlyBSD-NEXT: .cfi_offset %esi, -8 ; X86-DFlyBSD-NEXT: movl {{[0-9]+}}(%esp), %esi ; X86-DFlyBSD-NEXT: addl (%ecx), %esi ; X86-DFlyBSD-NEXT: movl %esp, %eax ; X86-DFlyBSD-NEXT: pushl $10 ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 ; X86-DFlyBSD-NEXT: pushl %eax ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 ; X86-DFlyBSD-NEXT: calll dummy_use@PLT ; X86-DFlyBSD-NEXT: addl $8, %esp ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -8 ; X86-DFlyBSD-NEXT: movl %esi, %eax ; X86-DFlyBSD-NEXT: addl $40, %esp ; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 ; X86-DFlyBSD-NEXT: popl %esi ; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 4 ; X86-DFlyBSD-NEXT: retl ; X86-DFlyBSD-NEXT: .LBB1_1: ; X86-DFlyBSD-NEXT: .cfi_restore %esi ; X86-DFlyBSD-NEXT: pushl $4 ; X86-DFlyBSD-NEXT: pushl $44 ; X86-DFlyBSD-NEXT: calll __morestack ; X86-DFlyBSD-NEXT: retl ; X86-DFlyBSD-NEXT: jmp .LBB1_2 ; ; X64-DFlyBSD-LABEL: test_nested: ; X64-DFlyBSD: # %bb.0: ; X64-DFlyBSD-NEXT: cmpq %fs:32, %rsp ; X64-DFlyBSD-NEXT: jbe .LBB1_1 ; X64-DFlyBSD-NEXT: .LBB1_2: ; X64-DFlyBSD-NEXT: pushq %rbx ; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 16 ; X64-DFlyBSD-NEXT: subq $48, %rsp ; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 64 ; X64-DFlyBSD-NEXT: .cfi_offset %rbx, -16 ; X64-DFlyBSD-NEXT: movl %edi, %ebx ; X64-DFlyBSD-NEXT: addl (%r10), %ebx ; X64-DFlyBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-DFlyBSD-NEXT: movl $10, %esi ; X64-DFlyBSD-NEXT: callq dummy_use@PLT ; X64-DFlyBSD-NEXT: movl %ebx, %eax ; X64-DFlyBSD-NEXT: addq $48, %rsp ; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 16 ; X64-DFlyBSD-NEXT: popq %rbx ; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 ; X64-DFlyBSD-NEXT: retq ; X64-DFlyBSD-NEXT: .LBB1_1: ; X64-DFlyBSD-NEXT: .cfi_restore %rbx ; X64-DFlyBSD-NEXT: movq %r10, %rax ; X64-DFlyBSD-NEXT: movl $56, %r10d ; X64-DFlyBSD-NEXT: movl $0, %r11d ; X64-DFlyBSD-NEXT: callq __morestack ; X64-DFlyBSD-NEXT: retq ; X64-DFlyBSD-NEXT: movq %rax, %r10 ; X64-DFlyBSD-NEXT: jmp .LBB1_2 ; ; X64-MinGW-LABEL: test_nested: ; X64-MinGW: # %bb.0: ; X64-MinGW-NEXT: cmpq %gs:40, %rsp ; X64-MinGW-NEXT: jbe .LBB1_1 ; X64-MinGW-NEXT: .LBB1_2: ; X64-MinGW-NEXT: pushq %rsi ; X64-MinGW-NEXT: .seh_pushreg %rsi ; X64-MinGW-NEXT: subq $80, %rsp ; X64-MinGW-NEXT: .seh_stackalloc 80 ; X64-MinGW-NEXT: .seh_endprologue ; X64-MinGW-NEXT: movl %ecx, %esi ; X64-MinGW-NEXT: addl (%r10), %esi ; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx ; X64-MinGW-NEXT: movl $10, %edx ; X64-MinGW-NEXT: callq dummy_use ; X64-MinGW-NEXT: movl %esi, %eax ; X64-MinGW-NEXT: addq $80, %rsp ; X64-MinGW-NEXT: popq %rsi ; X64-MinGW-NEXT: retq ; X64-MinGW-NEXT: .LBB1_1: ; X64-MinGW-NEXT: movq %r10, %rax ; X64-MinGW-NEXT: movl $88, %r10d ; X64-MinGW-NEXT: movl $32, %r11d ; X64-MinGW-NEXT: callq __morestack ; X64-MinGW-NEXT: retq ; X64-MinGW-NEXT: movq %rax, %r10 ; X64-MinGW-NEXT: jmp .LBB1_2 ; X64-MinGW-NEXT: .seh_endproc %addend = load i32 , ptr %closure %result = add i32 %other, %addend %mem = alloca i32, i32 10 call void @dummy_use (ptr %mem, i32 10) ret i32 %result } define void @test_large() #0 { ; X86-Linux-LABEL: test_large: ; X86-Linux: # %bb.0: ; X86-Linux-NEXT: leal -{{[0-9]+}}(%esp), %ecx ; X86-Linux-NEXT: cmpl %gs:48, %ecx ; X86-Linux-NEXT: jbe .LBB2_1 ; X86-Linux-NEXT: .LBB2_2: ; X86-Linux-NEXT: subl $40020, %esp # imm = 0x9C54 ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 40020 ; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax ; X86-Linux-NEXT: pushl $3 ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 ; X86-Linux-NEXT: pushl %eax ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 ; X86-Linux-NEXT: calll dummy_use@PLT ; X86-Linux-NEXT: addl $40028, %esp # imm = 0x9C5C ; X86-Linux-NEXT: .cfi_adjust_cfa_offset -40028 ; X86-Linux-NEXT: retl ; X86-Linux-NEXT: .LBB2_1: ; X86-Linux-NEXT: pushl $0 ; X86-Linux-NEXT: pushl $40012 # imm = 0x9C4C ; X86-Linux-NEXT: calll __morestack ; X86-Linux-NEXT: retl ; X86-Linux-NEXT: jmp .LBB2_2 ; ; X64-Linux-LABEL: test_large: ; X64-Linux: # %bb.0: ; X64-Linux-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-Linux-NEXT: cmpq %fs:112, %r11 ; X64-Linux-NEXT: jbe .LBB2_1 ; X64-Linux-NEXT: .LBB2_2: ; X64-Linux-NEXT: subq $40008, %rsp # imm = 0x9C48 ; X64-Linux-NEXT: .cfi_def_cfa_offset 40016 ; X64-Linux-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-Linux-NEXT: movl $3, %esi ; X64-Linux-NEXT: callq dummy_use@PLT ; X64-Linux-NEXT: addq $40008, %rsp # imm = 0x9C48 ; X64-Linux-NEXT: .cfi_def_cfa_offset 8 ; X64-Linux-NEXT: retq ; X64-Linux-NEXT: .LBB2_1: ; X64-Linux-NEXT: movl $40008, %r10d # imm = 0x9C48 ; X64-Linux-NEXT: movl $0, %r11d ; X64-Linux-NEXT: callq __morestack ; X64-Linux-NEXT: retq ; X64-Linux-NEXT: jmp .LBB2_2 ; ; X64-Linux-Large-LABEL: test_large: ; X64-Linux-Large: # %bb.0: ; X64-Linux-Large-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-Linux-Large-NEXT: cmpq %fs:112, %r11 ; X64-Linux-Large-NEXT: jbe .LBB2_1 ; X64-Linux-Large-NEXT: .LBB2_2: ; X64-Linux-Large-NEXT: subq $40008, %rsp # imm = 0x9C48 ; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 40016 ; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax ; X64-Linux-Large-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-Linux-Large-NEXT: movl $3, %esi ; X64-Linux-Large-NEXT: callq *%rax ; X64-Linux-Large-NEXT: addq $40008, %rsp # imm = 0x9C48 ; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8 ; X64-Linux-Large-NEXT: retq ; X64-Linux-Large-NEXT: .LBB2_1: ; X64-Linux-Large-NEXT: movl $40008, %r10d # imm = 0x9C48 ; X64-Linux-Large-NEXT: movl $0, %r11d ; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) ; X64-Linux-Large-NEXT: retq ; X64-Linux-Large-NEXT: jmp .LBB2_2 ; ; X32ABI-LABEL: test_large: ; X32ABI: # %bb.0: ; X32ABI-NEXT: leal -{{[0-9]+}}(%rsp), %r11d ; X32ABI-NEXT: cmpl %fs:64, %r11d ; X32ABI-NEXT: jbe .LBB2_1 ; X32ABI-NEXT: .LBB2_2: ; X32ABI-NEXT: subl $40008, %esp # imm = 0x9C48 ; X32ABI-NEXT: .cfi_def_cfa_offset 40016 ; X32ABI-NEXT: leal {{[0-9]+}}(%rsp), %edi ; X32ABI-NEXT: movl $3, %esi ; X32ABI-NEXT: callq dummy_use@PLT ; X32ABI-NEXT: addl $40008, %esp # imm = 0x9C48 ; X32ABI-NEXT: .cfi_def_cfa_offset 8 ; X32ABI-NEXT: retq ; X32ABI-NEXT: .LBB2_1: ; X32ABI-NEXT: movl $40008, %r10d # imm = 0x9C48 ; X32ABI-NEXT: movl $0, %r11d ; X32ABI-NEXT: callq __morestack ; X32ABI-NEXT: retq ; X32ABI-NEXT: jmp .LBB2_2 ; ; X86-Darwin-LABEL: test_large: ; X86-Darwin: ## %bb.0: ; X86-Darwin-NEXT: leal -{{[0-9]+}}(%esp), %ecx ; X86-Darwin-NEXT: movl $432, %eax ## imm = 0x1B0 ; X86-Darwin-NEXT: cmpl %gs:(%eax), %ecx ; X86-Darwin-NEXT: jbe LBB2_1 ; X86-Darwin-NEXT: LBB2_2: ; X86-Darwin-NEXT: subl $40012, %esp ## imm = 0x9C4C ; X86-Darwin-NEXT: .cfi_def_cfa_offset 40016 ; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax ; X86-Darwin-NEXT: movl %eax, (%esp) ; X86-Darwin-NEXT: movl $3, {{[0-9]+}}(%esp) ; X86-Darwin-NEXT: calll _dummy_use ; X86-Darwin-NEXT: addl $40012, %esp ## imm = 0x9C4C ; X86-Darwin-NEXT: retl ; X86-Darwin-NEXT: LBB2_1: ; X86-Darwin-NEXT: pushl $0 ; X86-Darwin-NEXT: pushl $40012 ## imm = 0x9C4C ; X86-Darwin-NEXT: calll ___morestack ; X86-Darwin-NEXT: retl ; X86-Darwin-NEXT: jmp LBB2_2 ; ; X64-Darwin-LABEL: test_large: ; X64-Darwin: ## %bb.0: ; X64-Darwin-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-Darwin-NEXT: cmpq %gs:816, %r11 ; X64-Darwin-NEXT: jbe LBB2_1 ; X64-Darwin-NEXT: LBB2_2: ; X64-Darwin-NEXT: subq $40008, %rsp ## imm = 0x9C48 ; X64-Darwin-NEXT: .cfi_def_cfa_offset 40016 ; X64-Darwin-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-Darwin-NEXT: movl $3, %esi ; X64-Darwin-NEXT: callq _dummy_use ; X64-Darwin-NEXT: addq $40008, %rsp ## imm = 0x9C48 ; X64-Darwin-NEXT: retq ; X64-Darwin-NEXT: LBB2_1: ; X64-Darwin-NEXT: movl $40008, %r10d ## imm = 0x9C48 ; X64-Darwin-NEXT: movl $0, %r11d ; X64-Darwin-NEXT: callq ___morestack ; X64-Darwin-NEXT: retq ; X64-Darwin-NEXT: jmp LBB2_2 ; ; X86-MinGW-LABEL: test_large: ; X86-MinGW: # %bb.0: ; X86-MinGW-NEXT: leal -{{[0-9]+}}(%esp), %ecx ; X86-MinGW-NEXT: cmpl %fs:20, %ecx ; X86-MinGW-NEXT: jbe LBB2_1 ; X86-MinGW-NEXT: LBB2_2: ; X86-MinGW-NEXT: movl $40000, %eax # imm = 0x9C40 ; X86-MinGW-NEXT: calll __alloca ; X86-MinGW-NEXT: .cfi_def_cfa_offset 40004 ; X86-MinGW-NEXT: movl %esp, %eax ; X86-MinGW-NEXT: pushl $3 ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 ; X86-MinGW-NEXT: pushl %eax ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 ; X86-MinGW-NEXT: calll _dummy_use ; X86-MinGW-NEXT: addl $40008, %esp # imm = 0x9C48 ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -40008 ; X86-MinGW-NEXT: retl ; X86-MinGW-NEXT: LBB2_1: ; X86-MinGW-NEXT: pushl $0 ; X86-MinGW-NEXT: pushl $40000 # imm = 0x9C40 ; X86-MinGW-NEXT: calll ___morestack ; X86-MinGW-NEXT: retl ; X86-MinGW-NEXT: jmp LBB2_2 ; ; X64-FreeBSD-LABEL: test_large: ; X64-FreeBSD: # %bb.0: ; X64-FreeBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-FreeBSD-NEXT: cmpq %fs:24, %r11 ; X64-FreeBSD-NEXT: jbe .LBB2_1 ; X64-FreeBSD-NEXT: .LBB2_2: ; X64-FreeBSD-NEXT: subq $40008, %rsp # imm = 0x9C48 ; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 40016 ; X64-FreeBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-FreeBSD-NEXT: movl $3, %esi ; X64-FreeBSD-NEXT: callq dummy_use@PLT ; X64-FreeBSD-NEXT: addq $40008, %rsp # imm = 0x9C48 ; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8 ; X64-FreeBSD-NEXT: retq ; X64-FreeBSD-NEXT: .LBB2_1: ; X64-FreeBSD-NEXT: movl $40008, %r10d # imm = 0x9C48 ; X64-FreeBSD-NEXT: movl $0, %r11d ; X64-FreeBSD-NEXT: callq __morestack ; X64-FreeBSD-NEXT: retq ; X64-FreeBSD-NEXT: jmp .LBB2_2 ; ; X86-DFlyBSD-LABEL: test_large: ; X86-DFlyBSD: # %bb.0: ; X86-DFlyBSD-NEXT: leal -{{[0-9]+}}(%esp), %ecx ; X86-DFlyBSD-NEXT: cmpl %fs:16, %ecx ; X86-DFlyBSD-NEXT: jbe .LBB2_1 ; X86-DFlyBSD-NEXT: .LBB2_2: ; X86-DFlyBSD-NEXT: subl $40000, %esp # imm = 0x9C40 ; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 40004 ; X86-DFlyBSD-NEXT: movl %esp, %eax ; X86-DFlyBSD-NEXT: pushl $3 ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 ; X86-DFlyBSD-NEXT: pushl %eax ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 ; X86-DFlyBSD-NEXT: calll dummy_use@PLT ; X86-DFlyBSD-NEXT: addl $40008, %esp # imm = 0x9C48 ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -40008 ; X86-DFlyBSD-NEXT: retl ; X86-DFlyBSD-NEXT: .LBB2_1: ; X86-DFlyBSD-NEXT: pushl $0 ; X86-DFlyBSD-NEXT: pushl $40000 # imm = 0x9C40 ; X86-DFlyBSD-NEXT: calll __morestack ; X86-DFlyBSD-NEXT: retl ; X86-DFlyBSD-NEXT: jmp .LBB2_2 ; ; X64-DFlyBSD-LABEL: test_large: ; X64-DFlyBSD: # %bb.0: ; X64-DFlyBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-DFlyBSD-NEXT: cmpq %fs:32, %r11 ; X64-DFlyBSD-NEXT: jbe .LBB2_1 ; X64-DFlyBSD-NEXT: .LBB2_2: ; X64-DFlyBSD-NEXT: subq $40008, %rsp # imm = 0x9C48 ; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 40016 ; X64-DFlyBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-DFlyBSD-NEXT: movl $3, %esi ; X64-DFlyBSD-NEXT: callq dummy_use@PLT ; X64-DFlyBSD-NEXT: addq $40008, %rsp # imm = 0x9C48 ; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 ; X64-DFlyBSD-NEXT: retq ; X64-DFlyBSD-NEXT: .LBB2_1: ; X64-DFlyBSD-NEXT: movl $40008, %r10d # imm = 0x9C48 ; X64-DFlyBSD-NEXT: movl $0, %r11d ; X64-DFlyBSD-NEXT: callq __morestack ; X64-DFlyBSD-NEXT: retq ; X64-DFlyBSD-NEXT: jmp .LBB2_2 ; ; X64-MinGW-LABEL: test_large: ; X64-MinGW: # %bb.0: ; X64-MinGW-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-MinGW-NEXT: cmpq %gs:40, %r11 ; X64-MinGW-NEXT: jbe .LBB2_1 ; X64-MinGW-NEXT: .LBB2_2: ; X64-MinGW-NEXT: movl $40040, %eax # imm = 0x9C68 ; X64-MinGW-NEXT: callq ___chkstk_ms ; X64-MinGW-NEXT: subq %rax, %rsp ; X64-MinGW-NEXT: .seh_stackalloc 40040 ; X64-MinGW-NEXT: .seh_endprologue ; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx ; X64-MinGW-NEXT: movl $3, %edx ; X64-MinGW-NEXT: callq dummy_use ; X64-MinGW-NEXT: nop ; X64-MinGW-NEXT: addq $40040, %rsp # imm = 0x9C68 ; X64-MinGW-NEXT: retq ; X64-MinGW-NEXT: .LBB2_1: ; X64-MinGW-NEXT: movl $40040, %r10d # imm = 0x9C68 ; X64-MinGW-NEXT: movl $32, %r11d ; X64-MinGW-NEXT: callq __morestack ; X64-MinGW-NEXT: retq ; X64-MinGW-NEXT: jmp .LBB2_2 ; X64-MinGW-NEXT: .seh_endproc %mem = alloca i32, i32 10000 call void @dummy_use (ptr %mem, i32 3) ret void } define fastcc void @test_fastcc() #0 { ; X86-Linux-LABEL: test_fastcc: ; X86-Linux: # %bb.0: ; X86-Linux-NEXT: cmpl %gs:48, %esp ; X86-Linux-NEXT: jbe .LBB3_1 ; X86-Linux-NEXT: .LBB3_2: ; X86-Linux-NEXT: subl $52, %esp ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 52 ; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax ; X86-Linux-NEXT: pushl $10 ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 ; X86-Linux-NEXT: pushl %eax ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 ; X86-Linux-NEXT: calll dummy_use@PLT ; X86-Linux-NEXT: addl $60, %esp ; X86-Linux-NEXT: .cfi_adjust_cfa_offset -60 ; X86-Linux-NEXT: retl ; X86-Linux-NEXT: .LBB3_1: ; X86-Linux-NEXT: pushl $0 ; X86-Linux-NEXT: pushl $44 ; X86-Linux-NEXT: calll __morestack ; X86-Linux-NEXT: retl ; X86-Linux-NEXT: jmp .LBB3_2 ; ; X64-Linux-LABEL: test_fastcc: ; X64-Linux: # %bb.0: ; X64-Linux-NEXT: cmpq %fs:112, %rsp ; X64-Linux-NEXT: jbe .LBB3_1 ; X64-Linux-NEXT: .LBB3_2: ; X64-Linux-NEXT: subq $40, %rsp ; X64-Linux-NEXT: .cfi_def_cfa_offset 48 ; X64-Linux-NEXT: movq %rsp, %rdi ; X64-Linux-NEXT: movl $10, %esi ; X64-Linux-NEXT: callq dummy_use@PLT ; X64-Linux-NEXT: addq $40, %rsp ; X64-Linux-NEXT: .cfi_def_cfa_offset 8 ; X64-Linux-NEXT: retq ; X64-Linux-NEXT: .LBB3_1: ; X64-Linux-NEXT: movl $40, %r10d ; X64-Linux-NEXT: movl $0, %r11d ; X64-Linux-NEXT: callq __morestack ; X64-Linux-NEXT: retq ; X64-Linux-NEXT: jmp .LBB3_2 ; ; X64-Linux-Large-LABEL: test_fastcc: ; X64-Linux-Large: # %bb.0: ; X64-Linux-Large-NEXT: cmpq %fs:112, %rsp ; X64-Linux-Large-NEXT: jbe .LBB3_1 ; X64-Linux-Large-NEXT: .LBB3_2: ; X64-Linux-Large-NEXT: subq $40, %rsp ; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 48 ; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax ; X64-Linux-Large-NEXT: movq %rsp, %rdi ; X64-Linux-Large-NEXT: movl $10, %esi ; X64-Linux-Large-NEXT: callq *%rax ; X64-Linux-Large-NEXT: addq $40, %rsp ; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8 ; X64-Linux-Large-NEXT: retq ; X64-Linux-Large-NEXT: .LBB3_1: ; X64-Linux-Large-NEXT: movl $40, %r10d ; X64-Linux-Large-NEXT: movl $0, %r11d ; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) ; X64-Linux-Large-NEXT: retq ; X64-Linux-Large-NEXT: jmp .LBB3_2 ; ; X32ABI-LABEL: test_fastcc: ; X32ABI: # %bb.0: ; X32ABI-NEXT: cmpl %fs:64, %esp ; X32ABI-NEXT: jbe .LBB3_1 ; X32ABI-NEXT: .LBB3_2: ; X32ABI-NEXT: subl $40, %esp ; X32ABI-NEXT: .cfi_def_cfa_offset 48 ; X32ABI-NEXT: movl %esp, %edi ; X32ABI-NEXT: movl $10, %esi ; X32ABI-NEXT: callq dummy_use@PLT ; X32ABI-NEXT: addl $40, %esp ; X32ABI-NEXT: .cfi_def_cfa_offset 8 ; X32ABI-NEXT: retq ; X32ABI-NEXT: .LBB3_1: ; X32ABI-NEXT: movl $40, %r10d ; X32ABI-NEXT: movl $0, %r11d ; X32ABI-NEXT: callq __morestack ; X32ABI-NEXT: retq ; X32ABI-NEXT: jmp .LBB3_2 ; ; X86-Darwin-LABEL: test_fastcc: ; X86-Darwin: ## %bb.0: ; X86-Darwin-NEXT: movl $432, %eax ## imm = 0x1B0 ; X86-Darwin-NEXT: cmpl %gs:(%eax), %esp ; X86-Darwin-NEXT: jbe LBB3_1 ; X86-Darwin-NEXT: LBB3_2: ; X86-Darwin-NEXT: subl $60, %esp ; X86-Darwin-NEXT: .cfi_def_cfa_offset 64 ; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax ; X86-Darwin-NEXT: movl %eax, (%esp) ; X86-Darwin-NEXT: movl $10, {{[0-9]+}}(%esp) ; X86-Darwin-NEXT: calll _dummy_use ; X86-Darwin-NEXT: addl $60, %esp ; X86-Darwin-NEXT: retl ; X86-Darwin-NEXT: LBB3_1: ; X86-Darwin-NEXT: pushl $0 ; X86-Darwin-NEXT: pushl $60 ; X86-Darwin-NEXT: calll ___morestack ; X86-Darwin-NEXT: retl ; X86-Darwin-NEXT: jmp LBB3_2 ; ; X64-Darwin-LABEL: test_fastcc: ; X64-Darwin: ## %bb.0: ; X64-Darwin-NEXT: cmpq %gs:816, %rsp ; X64-Darwin-NEXT: jbe LBB3_1 ; X64-Darwin-NEXT: LBB3_2: ; X64-Darwin-NEXT: subq $40, %rsp ; X64-Darwin-NEXT: .cfi_def_cfa_offset 48 ; X64-Darwin-NEXT: movq %rsp, %rdi ; X64-Darwin-NEXT: movl $10, %esi ; X64-Darwin-NEXT: callq _dummy_use ; X64-Darwin-NEXT: addq $40, %rsp ; X64-Darwin-NEXT: retq ; X64-Darwin-NEXT: LBB3_1: ; X64-Darwin-NEXT: movl $40, %r10d ; X64-Darwin-NEXT: movl $0, %r11d ; X64-Darwin-NEXT: callq ___morestack ; X64-Darwin-NEXT: retq ; X64-Darwin-NEXT: jmp LBB3_2 ; ; X86-MinGW-LABEL: test_fastcc: ; X86-MinGW: # %bb.0: ; X86-MinGW-NEXT: cmpl %fs:20, %esp ; X86-MinGW-NEXT: jbe LBB3_1 ; X86-MinGW-NEXT: LBB3_2: ; X86-MinGW-NEXT: subl $40, %esp ; X86-MinGW-NEXT: .cfi_def_cfa_offset 44 ; X86-MinGW-NEXT: movl %esp, %eax ; X86-MinGW-NEXT: pushl $10 ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 ; X86-MinGW-NEXT: pushl %eax ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 ; X86-MinGW-NEXT: calll _dummy_use ; X86-MinGW-NEXT: addl $48, %esp ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -48 ; X86-MinGW-NEXT: retl ; X86-MinGW-NEXT: LBB3_1: ; X86-MinGW-NEXT: pushl $0 ; X86-MinGW-NEXT: pushl $40 ; X86-MinGW-NEXT: calll ___morestack ; X86-MinGW-NEXT: retl ; X86-MinGW-NEXT: jmp LBB3_2 ; ; X64-FreeBSD-LABEL: test_fastcc: ; X64-FreeBSD: # %bb.0: ; X64-FreeBSD-NEXT: cmpq %fs:24, %rsp ; X64-FreeBSD-NEXT: jbe .LBB3_1 ; X64-FreeBSD-NEXT: .LBB3_2: ; X64-FreeBSD-NEXT: subq $40, %rsp ; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 48 ; X64-FreeBSD-NEXT: movq %rsp, %rdi ; X64-FreeBSD-NEXT: movl $10, %esi ; X64-FreeBSD-NEXT: callq dummy_use@PLT ; X64-FreeBSD-NEXT: addq $40, %rsp ; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8 ; X64-FreeBSD-NEXT: retq ; X64-FreeBSD-NEXT: .LBB3_1: ; X64-FreeBSD-NEXT: movl $40, %r10d ; X64-FreeBSD-NEXT: movl $0, %r11d ; X64-FreeBSD-NEXT: callq __morestack ; X64-FreeBSD-NEXT: retq ; X64-FreeBSD-NEXT: jmp .LBB3_2 ; ; X86-DFlyBSD-LABEL: test_fastcc: ; X86-DFlyBSD: # %bb.0: ; X86-DFlyBSD-NEXT: cmpl %fs:16, %esp ; X86-DFlyBSD-NEXT: jbe .LBB3_1 ; X86-DFlyBSD-NEXT: .LBB3_2: ; X86-DFlyBSD-NEXT: subl $40, %esp ; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 44 ; X86-DFlyBSD-NEXT: movl %esp, %eax ; X86-DFlyBSD-NEXT: pushl $10 ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 ; X86-DFlyBSD-NEXT: pushl %eax ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 ; X86-DFlyBSD-NEXT: calll dummy_use@PLT ; X86-DFlyBSD-NEXT: addl $48, %esp ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -48 ; X86-DFlyBSD-NEXT: retl ; X86-DFlyBSD-NEXT: .LBB3_1: ; X86-DFlyBSD-NEXT: pushl $0 ; X86-DFlyBSD-NEXT: pushl $40 ; X86-DFlyBSD-NEXT: calll __morestack ; X86-DFlyBSD-NEXT: retl ; X86-DFlyBSD-NEXT: jmp .LBB3_2 ; ; X64-DFlyBSD-LABEL: test_fastcc: ; X64-DFlyBSD: # %bb.0: ; X64-DFlyBSD-NEXT: cmpq %fs:32, %rsp ; X64-DFlyBSD-NEXT: jbe .LBB3_1 ; X64-DFlyBSD-NEXT: .LBB3_2: ; X64-DFlyBSD-NEXT: subq $40, %rsp ; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 48 ; X64-DFlyBSD-NEXT: movq %rsp, %rdi ; X64-DFlyBSD-NEXT: movl $10, %esi ; X64-DFlyBSD-NEXT: callq dummy_use@PLT ; X64-DFlyBSD-NEXT: addq $40, %rsp ; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 ; X64-DFlyBSD-NEXT: retq ; X64-DFlyBSD-NEXT: .LBB3_1: ; X64-DFlyBSD-NEXT: movl $40, %r10d ; X64-DFlyBSD-NEXT: movl $0, %r11d ; X64-DFlyBSD-NEXT: callq __morestack ; X64-DFlyBSD-NEXT: retq ; X64-DFlyBSD-NEXT: jmp .LBB3_2 ; ; X64-MinGW-LABEL: test_fastcc: ; X64-MinGW: # %bb.0: ; X64-MinGW-NEXT: cmpq %gs:40, %rsp ; X64-MinGW-NEXT: jbe .LBB3_1 ; X64-MinGW-NEXT: .LBB3_2: ; X64-MinGW-NEXT: subq $72, %rsp ; X64-MinGW-NEXT: .seh_stackalloc 72 ; X64-MinGW-NEXT: .seh_endprologue ; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx ; X64-MinGW-NEXT: movl $10, %edx ; X64-MinGW-NEXT: callq dummy_use ; X64-MinGW-NEXT: nop ; X64-MinGW-NEXT: addq $72, %rsp ; X64-MinGW-NEXT: retq ; X64-MinGW-NEXT: .LBB3_1: ; X64-MinGW-NEXT: movl $72, %r10d ; X64-MinGW-NEXT: movl $32, %r11d ; X64-MinGW-NEXT: callq __morestack ; X64-MinGW-NEXT: retq ; X64-MinGW-NEXT: jmp .LBB3_2 ; X64-MinGW-NEXT: .seh_endproc %mem = alloca i32, i32 10 call void @dummy_use (ptr %mem, i32 10) ret void } define fastcc void @test_fastcc_large() #0 { ; X86-Linux-LABEL: test_fastcc_large: ; X86-Linux: # %bb.0: ; X86-Linux-NEXT: leal -{{[0-9]+}}(%esp), %eax ; X86-Linux-NEXT: cmpl %gs:48, %eax ; X86-Linux-NEXT: jbe .LBB4_1 ; X86-Linux-NEXT: .LBB4_2: ; X86-Linux-NEXT: subl $40020, %esp # imm = 0x9C54 ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 40020 ; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax ; X86-Linux-NEXT: pushl $3 ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 ; X86-Linux-NEXT: pushl %eax ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 ; X86-Linux-NEXT: calll dummy_use@PLT ; X86-Linux-NEXT: addl $40028, %esp # imm = 0x9C5C ; X86-Linux-NEXT: .cfi_adjust_cfa_offset -40028 ; X86-Linux-NEXT: retl ; X86-Linux-NEXT: .LBB4_1: ; X86-Linux-NEXT: pushl $0 ; X86-Linux-NEXT: pushl $40012 # imm = 0x9C4C ; X86-Linux-NEXT: calll __morestack ; X86-Linux-NEXT: retl ; X86-Linux-NEXT: jmp .LBB4_2 ; ; X64-Linux-LABEL: test_fastcc_large: ; X64-Linux: # %bb.0: ; X64-Linux-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-Linux-NEXT: cmpq %fs:112, %r11 ; X64-Linux-NEXT: jbe .LBB4_1 ; X64-Linux-NEXT: .LBB4_2: ; X64-Linux-NEXT: subq $40008, %rsp # imm = 0x9C48 ; X64-Linux-NEXT: .cfi_def_cfa_offset 40016 ; X64-Linux-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-Linux-NEXT: movl $3, %esi ; X64-Linux-NEXT: callq dummy_use@PLT ; X64-Linux-NEXT: addq $40008, %rsp # imm = 0x9C48 ; X64-Linux-NEXT: .cfi_def_cfa_offset 8 ; X64-Linux-NEXT: retq ; X64-Linux-NEXT: .LBB4_1: ; X64-Linux-NEXT: movl $40008, %r10d # imm = 0x9C48 ; X64-Linux-NEXT: movl $0, %r11d ; X64-Linux-NEXT: callq __morestack ; X64-Linux-NEXT: retq ; X64-Linux-NEXT: jmp .LBB4_2 ; ; X64-Linux-Large-LABEL: test_fastcc_large: ; X64-Linux-Large: # %bb.0: ; X64-Linux-Large-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-Linux-Large-NEXT: cmpq %fs:112, %r11 ; X64-Linux-Large-NEXT: jbe .LBB4_1 ; X64-Linux-Large-NEXT: .LBB4_2: ; X64-Linux-Large-NEXT: subq $40008, %rsp # imm = 0x9C48 ; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 40016 ; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax ; X64-Linux-Large-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-Linux-Large-NEXT: movl $3, %esi ; X64-Linux-Large-NEXT: callq *%rax ; X64-Linux-Large-NEXT: addq $40008, %rsp # imm = 0x9C48 ; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8 ; X64-Linux-Large-NEXT: retq ; X64-Linux-Large-NEXT: .LBB4_1: ; X64-Linux-Large-NEXT: movl $40008, %r10d # imm = 0x9C48 ; X64-Linux-Large-NEXT: movl $0, %r11d ; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) ; X64-Linux-Large-NEXT: retq ; X64-Linux-Large-NEXT: jmp .LBB4_2 ; ; X32ABI-LABEL: test_fastcc_large: ; X32ABI: # %bb.0: ; X32ABI-NEXT: leal -{{[0-9]+}}(%rsp), %r11d ; X32ABI-NEXT: cmpl %fs:64, %r11d ; X32ABI-NEXT: jbe .LBB4_1 ; X32ABI-NEXT: .LBB4_2: ; X32ABI-NEXT: subl $40008, %esp # imm = 0x9C48 ; X32ABI-NEXT: .cfi_def_cfa_offset 40016 ; X32ABI-NEXT: leal {{[0-9]+}}(%rsp), %edi ; X32ABI-NEXT: movl $3, %esi ; X32ABI-NEXT: callq dummy_use@PLT ; X32ABI-NEXT: addl $40008, %esp # imm = 0x9C48 ; X32ABI-NEXT: .cfi_def_cfa_offset 8 ; X32ABI-NEXT: retq ; X32ABI-NEXT: .LBB4_1: ; X32ABI-NEXT: movl $40008, %r10d # imm = 0x9C48 ; X32ABI-NEXT: movl $0, %r11d ; X32ABI-NEXT: callq __morestack ; X32ABI-NEXT: retq ; X32ABI-NEXT: jmp .LBB4_2 ; ; X86-Darwin-LABEL: test_fastcc_large: ; X86-Darwin: ## %bb.0: ; X86-Darwin-NEXT: leal -{{[0-9]+}}(%esp), %eax ; X86-Darwin-NEXT: movl $432, %ecx ## imm = 0x1B0 ; X86-Darwin-NEXT: cmpl %gs:(%ecx), %eax ; X86-Darwin-NEXT: jbe LBB4_1 ; X86-Darwin-NEXT: LBB4_2: ; X86-Darwin-NEXT: subl $40012, %esp ## imm = 0x9C4C ; X86-Darwin-NEXT: .cfi_def_cfa_offset 40016 ; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax ; X86-Darwin-NEXT: movl %eax, (%esp) ; X86-Darwin-NEXT: movl $3, {{[0-9]+}}(%esp) ; X86-Darwin-NEXT: calll _dummy_use ; X86-Darwin-NEXT: addl $40012, %esp ## imm = 0x9C4C ; X86-Darwin-NEXT: retl ; X86-Darwin-NEXT: LBB4_1: ; X86-Darwin-NEXT: pushl $0 ; X86-Darwin-NEXT: pushl $40012 ## imm = 0x9C4C ; X86-Darwin-NEXT: calll ___morestack ; X86-Darwin-NEXT: retl ; X86-Darwin-NEXT: jmp LBB4_2 ; ; X64-Darwin-LABEL: test_fastcc_large: ; X64-Darwin: ## %bb.0: ; X64-Darwin-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-Darwin-NEXT: cmpq %gs:816, %r11 ; X64-Darwin-NEXT: jbe LBB4_1 ; X64-Darwin-NEXT: LBB4_2: ; X64-Darwin-NEXT: subq $40008, %rsp ## imm = 0x9C48 ; X64-Darwin-NEXT: .cfi_def_cfa_offset 40016 ; X64-Darwin-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-Darwin-NEXT: movl $3, %esi ; X64-Darwin-NEXT: callq _dummy_use ; X64-Darwin-NEXT: addq $40008, %rsp ## imm = 0x9C48 ; X64-Darwin-NEXT: retq ; X64-Darwin-NEXT: LBB4_1: ; X64-Darwin-NEXT: movl $40008, %r10d ## imm = 0x9C48 ; X64-Darwin-NEXT: movl $0, %r11d ; X64-Darwin-NEXT: callq ___morestack ; X64-Darwin-NEXT: retq ; X64-Darwin-NEXT: jmp LBB4_2 ; ; X86-MinGW-LABEL: test_fastcc_large: ; X86-MinGW: # %bb.0: ; X86-MinGW-NEXT: leal -{{[0-9]+}}(%esp), %eax ; X86-MinGW-NEXT: cmpl %fs:20, %eax ; X86-MinGW-NEXT: jbe LBB4_1 ; X86-MinGW-NEXT: LBB4_2: ; X86-MinGW-NEXT: movl $40000, %eax # imm = 0x9C40 ; X86-MinGW-NEXT: calll __alloca ; X86-MinGW-NEXT: .cfi_def_cfa_offset 40004 ; X86-MinGW-NEXT: movl %esp, %eax ; X86-MinGW-NEXT: pushl $3 ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 ; X86-MinGW-NEXT: pushl %eax ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 ; X86-MinGW-NEXT: calll _dummy_use ; X86-MinGW-NEXT: addl $40008, %esp # imm = 0x9C48 ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -40008 ; X86-MinGW-NEXT: retl ; X86-MinGW-NEXT: LBB4_1: ; X86-MinGW-NEXT: pushl $0 ; X86-MinGW-NEXT: pushl $40000 # imm = 0x9C40 ; X86-MinGW-NEXT: calll ___morestack ; X86-MinGW-NEXT: retl ; X86-MinGW-NEXT: jmp LBB4_2 ; ; X64-FreeBSD-LABEL: test_fastcc_large: ; X64-FreeBSD: # %bb.0: ; X64-FreeBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-FreeBSD-NEXT: cmpq %fs:24, %r11 ; X64-FreeBSD-NEXT: jbe .LBB4_1 ; X64-FreeBSD-NEXT: .LBB4_2: ; X64-FreeBSD-NEXT: subq $40008, %rsp # imm = 0x9C48 ; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 40016 ; X64-FreeBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-FreeBSD-NEXT: movl $3, %esi ; X64-FreeBSD-NEXT: callq dummy_use@PLT ; X64-FreeBSD-NEXT: addq $40008, %rsp # imm = 0x9C48 ; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8 ; X64-FreeBSD-NEXT: retq ; X64-FreeBSD-NEXT: .LBB4_1: ; X64-FreeBSD-NEXT: movl $40008, %r10d # imm = 0x9C48 ; X64-FreeBSD-NEXT: movl $0, %r11d ; X64-FreeBSD-NEXT: callq __morestack ; X64-FreeBSD-NEXT: retq ; X64-FreeBSD-NEXT: jmp .LBB4_2 ; ; X86-DFlyBSD-LABEL: test_fastcc_large: ; X86-DFlyBSD: # %bb.0: ; X86-DFlyBSD-NEXT: leal -{{[0-9]+}}(%esp), %eax ; X86-DFlyBSD-NEXT: cmpl %fs:16, %eax ; X86-DFlyBSD-NEXT: jbe .LBB4_1 ; X86-DFlyBSD-NEXT: .LBB4_2: ; X86-DFlyBSD-NEXT: subl $40000, %esp # imm = 0x9C40 ; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 40004 ; X86-DFlyBSD-NEXT: movl %esp, %eax ; X86-DFlyBSD-NEXT: pushl $3 ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 ; X86-DFlyBSD-NEXT: pushl %eax ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 ; X86-DFlyBSD-NEXT: calll dummy_use@PLT ; X86-DFlyBSD-NEXT: addl $40008, %esp # imm = 0x9C48 ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -40008 ; X86-DFlyBSD-NEXT: retl ; X86-DFlyBSD-NEXT: .LBB4_1: ; X86-DFlyBSD-NEXT: pushl $0 ; X86-DFlyBSD-NEXT: pushl $40000 # imm = 0x9C40 ; X86-DFlyBSD-NEXT: calll __morestack ; X86-DFlyBSD-NEXT: retl ; X86-DFlyBSD-NEXT: jmp .LBB4_2 ; ; X64-DFlyBSD-LABEL: test_fastcc_large: ; X64-DFlyBSD: # %bb.0: ; X64-DFlyBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-DFlyBSD-NEXT: cmpq %fs:32, %r11 ; X64-DFlyBSD-NEXT: jbe .LBB4_1 ; X64-DFlyBSD-NEXT: .LBB4_2: ; X64-DFlyBSD-NEXT: subq $40008, %rsp # imm = 0x9C48 ; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 40016 ; X64-DFlyBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-DFlyBSD-NEXT: movl $3, %esi ; X64-DFlyBSD-NEXT: callq dummy_use@PLT ; X64-DFlyBSD-NEXT: addq $40008, %rsp # imm = 0x9C48 ; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 ; X64-DFlyBSD-NEXT: retq ; X64-DFlyBSD-NEXT: .LBB4_1: ; X64-DFlyBSD-NEXT: movl $40008, %r10d # imm = 0x9C48 ; X64-DFlyBSD-NEXT: movl $0, %r11d ; X64-DFlyBSD-NEXT: callq __morestack ; X64-DFlyBSD-NEXT: retq ; X64-DFlyBSD-NEXT: jmp .LBB4_2 ; ; X64-MinGW-LABEL: test_fastcc_large: ; X64-MinGW: # %bb.0: ; X64-MinGW-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-MinGW-NEXT: cmpq %gs:40, %r11 ; X64-MinGW-NEXT: jbe .LBB4_1 ; X64-MinGW-NEXT: .LBB4_2: ; X64-MinGW-NEXT: movl $40040, %eax # imm = 0x9C68 ; X64-MinGW-NEXT: callq ___chkstk_ms ; X64-MinGW-NEXT: subq %rax, %rsp ; X64-MinGW-NEXT: .seh_stackalloc 40040 ; X64-MinGW-NEXT: .seh_endprologue ; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx ; X64-MinGW-NEXT: movl $3, %edx ; X64-MinGW-NEXT: callq dummy_use ; X64-MinGW-NEXT: nop ; X64-MinGW-NEXT: addq $40040, %rsp # imm = 0x9C68 ; X64-MinGW-NEXT: retq ; X64-MinGW-NEXT: .LBB4_1: ; X64-MinGW-NEXT: movl $40040, %r10d # imm = 0x9C68 ; X64-MinGW-NEXT: movl $32, %r11d ; X64-MinGW-NEXT: callq __morestack ; X64-MinGW-NEXT: retq ; X64-MinGW-NEXT: jmp .LBB4_2 ; X64-MinGW-NEXT: .seh_endproc %mem = alloca i32, i32 10000 call void @dummy_use (ptr %mem, i32 3) ret void } ; This is testing that the Mac implementation preserves ecx define fastcc void @test_fastcc_large_with_ecx_arg(i32 %a) #0 { ; X86-Linux-LABEL: test_fastcc_large_with_ecx_arg: ; X86-Linux: # %bb.0: ; X86-Linux-NEXT: leal -{{[0-9]+}}(%esp), %eax ; X86-Linux-NEXT: cmpl %gs:48, %eax ; X86-Linux-NEXT: jbe .LBB5_1 ; X86-Linux-NEXT: .LBB5_2: ; X86-Linux-NEXT: subl $40020, %esp # imm = 0x9C54 ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 40020 ; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax ; X86-Linux-NEXT: pushl %ecx ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 ; X86-Linux-NEXT: pushl %eax ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 ; X86-Linux-NEXT: calll dummy_use@PLT ; X86-Linux-NEXT: addl $40028, %esp # imm = 0x9C5C ; X86-Linux-NEXT: .cfi_adjust_cfa_offset -40028 ; X86-Linux-NEXT: retl ; X86-Linux-NEXT: .LBB5_1: ; X86-Linux-NEXT: pushl $0 ; X86-Linux-NEXT: pushl $40012 # imm = 0x9C4C ; X86-Linux-NEXT: calll __morestack ; X86-Linux-NEXT: retl ; X86-Linux-NEXT: jmp .LBB5_2 ; ; X64-Linux-LABEL: test_fastcc_large_with_ecx_arg: ; X64-Linux: # %bb.0: ; X64-Linux-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-Linux-NEXT: cmpq %fs:112, %r11 ; X64-Linux-NEXT: jbe .LBB5_1 ; X64-Linux-NEXT: .LBB5_2: ; X64-Linux-NEXT: subq $40008, %rsp # imm = 0x9C48 ; X64-Linux-NEXT: .cfi_def_cfa_offset 40016 ; X64-Linux-NEXT: movl %edi, %esi ; X64-Linux-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-Linux-NEXT: callq dummy_use@PLT ; X64-Linux-NEXT: addq $40008, %rsp # imm = 0x9C48 ; X64-Linux-NEXT: .cfi_def_cfa_offset 8 ; X64-Linux-NEXT: retq ; X64-Linux-NEXT: .LBB5_1: ; X64-Linux-NEXT: movl $40008, %r10d # imm = 0x9C48 ; X64-Linux-NEXT: movl $0, %r11d ; X64-Linux-NEXT: callq __morestack ; X64-Linux-NEXT: retq ; X64-Linux-NEXT: jmp .LBB5_2 ; ; X64-Linux-Large-LABEL: test_fastcc_large_with_ecx_arg: ; X64-Linux-Large: # %bb.0: ; X64-Linux-Large-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-Linux-Large-NEXT: cmpq %fs:112, %r11 ; X64-Linux-Large-NEXT: jbe .LBB5_1 ; X64-Linux-Large-NEXT: .LBB5_2: ; X64-Linux-Large-NEXT: subq $40008, %rsp # imm = 0x9C48 ; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 40016 ; X64-Linux-Large-NEXT: movl %edi, %esi ; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax ; X64-Linux-Large-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-Linux-Large-NEXT: callq *%rax ; X64-Linux-Large-NEXT: addq $40008, %rsp # imm = 0x9C48 ; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8 ; X64-Linux-Large-NEXT: retq ; X64-Linux-Large-NEXT: .LBB5_1: ; X64-Linux-Large-NEXT: movl $40008, %r10d # imm = 0x9C48 ; X64-Linux-Large-NEXT: movl $0, %r11d ; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) ; X64-Linux-Large-NEXT: retq ; X64-Linux-Large-NEXT: jmp .LBB5_2 ; ; X32ABI-LABEL: test_fastcc_large_with_ecx_arg: ; X32ABI: # %bb.0: ; X32ABI-NEXT: leal -{{[0-9]+}}(%rsp), %r11d ; X32ABI-NEXT: cmpl %fs:64, %r11d ; X32ABI-NEXT: jbe .LBB5_1 ; X32ABI-NEXT: .LBB5_2: ; X32ABI-NEXT: subl $40008, %esp # imm = 0x9C48 ; X32ABI-NEXT: .cfi_def_cfa_offset 40016 ; X32ABI-NEXT: movl %edi, %esi ; X32ABI-NEXT: leal {{[0-9]+}}(%rsp), %edi ; X32ABI-NEXT: callq dummy_use@PLT ; X32ABI-NEXT: addl $40008, %esp # imm = 0x9C48 ; X32ABI-NEXT: .cfi_def_cfa_offset 8 ; X32ABI-NEXT: retq ; X32ABI-NEXT: .LBB5_1: ; X32ABI-NEXT: movl $40008, %r10d # imm = 0x9C48 ; X32ABI-NEXT: movl $0, %r11d ; X32ABI-NEXT: callq __morestack ; X32ABI-NEXT: retq ; X32ABI-NEXT: jmp .LBB5_2 ; ; X86-Darwin-LABEL: test_fastcc_large_with_ecx_arg: ; X86-Darwin: ## %bb.0: ; X86-Darwin-NEXT: leal -{{[0-9]+}}(%esp), %eax ; X86-Darwin-NEXT: pushl %ecx ; X86-Darwin-NEXT: movl $432, %ecx ## imm = 0x1B0 ; X86-Darwin-NEXT: cmpl %gs:(%ecx), %eax ; X86-Darwin-NEXT: popl %ecx ; X86-Darwin-NEXT: jbe LBB5_1 ; X86-Darwin-NEXT: LBB5_2: ; X86-Darwin-NEXT: subl $40012, %esp ## imm = 0x9C4C ; X86-Darwin-NEXT: .cfi_def_cfa_offset 40016 ; X86-Darwin-NEXT: movl %ecx, {{[0-9]+}}(%esp) ; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax ; X86-Darwin-NEXT: movl %eax, (%esp) ; X86-Darwin-NEXT: calll _dummy_use ; X86-Darwin-NEXT: addl $40012, %esp ## imm = 0x9C4C ; X86-Darwin-NEXT: retl ; X86-Darwin-NEXT: LBB5_1: ; X86-Darwin-NEXT: pushl $0 ; X86-Darwin-NEXT: pushl $40012 ## imm = 0x9C4C ; X86-Darwin-NEXT: calll ___morestack ; X86-Darwin-NEXT: retl ; X86-Darwin-NEXT: jmp LBB5_2 ; ; X64-Darwin-LABEL: test_fastcc_large_with_ecx_arg: ; X64-Darwin: ## %bb.0: ; X64-Darwin-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-Darwin-NEXT: cmpq %gs:816, %r11 ; X64-Darwin-NEXT: jbe LBB5_1 ; X64-Darwin-NEXT: LBB5_2: ; X64-Darwin-NEXT: subq $40008, %rsp ## imm = 0x9C48 ; X64-Darwin-NEXT: .cfi_def_cfa_offset 40016 ; X64-Darwin-NEXT: movl %edi, %esi ; X64-Darwin-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-Darwin-NEXT: callq _dummy_use ; X64-Darwin-NEXT: addq $40008, %rsp ## imm = 0x9C48 ; X64-Darwin-NEXT: retq ; X64-Darwin-NEXT: LBB5_1: ; X64-Darwin-NEXT: movl $40008, %r10d ## imm = 0x9C48 ; X64-Darwin-NEXT: movl $0, %r11d ; X64-Darwin-NEXT: callq ___morestack ; X64-Darwin-NEXT: retq ; X64-Darwin-NEXT: jmp LBB5_2 ; ; X86-MinGW-LABEL: test_fastcc_large_with_ecx_arg: ; X86-MinGW: # %bb.0: ; X86-MinGW-NEXT: leal -{{[0-9]+}}(%esp), %eax ; X86-MinGW-NEXT: cmpl %fs:20, %eax ; X86-MinGW-NEXT: jbe LBB5_1 ; X86-MinGW-NEXT: LBB5_2: ; X86-MinGW-NEXT: movl $40000, %eax # imm = 0x9C40 ; X86-MinGW-NEXT: calll __alloca ; X86-MinGW-NEXT: .cfi_def_cfa_offset 40004 ; X86-MinGW-NEXT: movl %esp, %eax ; X86-MinGW-NEXT: pushl %ecx ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 ; X86-MinGW-NEXT: pushl %eax ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 ; X86-MinGW-NEXT: calll _dummy_use ; X86-MinGW-NEXT: addl $40008, %esp # imm = 0x9C48 ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -40008 ; X86-MinGW-NEXT: retl ; X86-MinGW-NEXT: LBB5_1: ; X86-MinGW-NEXT: pushl $0 ; X86-MinGW-NEXT: pushl $40000 # imm = 0x9C40 ; X86-MinGW-NEXT: calll ___morestack ; X86-MinGW-NEXT: retl ; X86-MinGW-NEXT: jmp LBB5_2 ; ; X64-FreeBSD-LABEL: test_fastcc_large_with_ecx_arg: ; X64-FreeBSD: # %bb.0: ; X64-FreeBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-FreeBSD-NEXT: cmpq %fs:24, %r11 ; X64-FreeBSD-NEXT: jbe .LBB5_1 ; X64-FreeBSD-NEXT: .LBB5_2: ; X64-FreeBSD-NEXT: subq $40008, %rsp # imm = 0x9C48 ; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 40016 ; X64-FreeBSD-NEXT: movl %edi, %esi ; X64-FreeBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-FreeBSD-NEXT: callq dummy_use@PLT ; X64-FreeBSD-NEXT: addq $40008, %rsp # imm = 0x9C48 ; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8 ; X64-FreeBSD-NEXT: retq ; X64-FreeBSD-NEXT: .LBB5_1: ; X64-FreeBSD-NEXT: movl $40008, %r10d # imm = 0x9C48 ; X64-FreeBSD-NEXT: movl $0, %r11d ; X64-FreeBSD-NEXT: callq __morestack ; X64-FreeBSD-NEXT: retq ; X64-FreeBSD-NEXT: jmp .LBB5_2 ; ; X86-DFlyBSD-LABEL: test_fastcc_large_with_ecx_arg: ; X86-DFlyBSD: # %bb.0: ; X86-DFlyBSD-NEXT: leal -{{[0-9]+}}(%esp), %eax ; X86-DFlyBSD-NEXT: cmpl %fs:16, %eax ; X86-DFlyBSD-NEXT: jbe .LBB5_1 ; X86-DFlyBSD-NEXT: .LBB5_2: ; X86-DFlyBSD-NEXT: subl $40000, %esp # imm = 0x9C40 ; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 40004 ; X86-DFlyBSD-NEXT: movl %esp, %eax ; X86-DFlyBSD-NEXT: pushl %ecx ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 ; X86-DFlyBSD-NEXT: pushl %eax ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 ; X86-DFlyBSD-NEXT: calll dummy_use@PLT ; X86-DFlyBSD-NEXT: addl $40008, %esp # imm = 0x9C48 ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -40008 ; X86-DFlyBSD-NEXT: retl ; X86-DFlyBSD-NEXT: .LBB5_1: ; X86-DFlyBSD-NEXT: pushl $0 ; X86-DFlyBSD-NEXT: pushl $40000 # imm = 0x9C40 ; X86-DFlyBSD-NEXT: calll __morestack ; X86-DFlyBSD-NEXT: retl ; X86-DFlyBSD-NEXT: jmp .LBB5_2 ; ; X64-DFlyBSD-LABEL: test_fastcc_large_with_ecx_arg: ; X64-DFlyBSD: # %bb.0: ; X64-DFlyBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-DFlyBSD-NEXT: cmpq %fs:32, %r11 ; X64-DFlyBSD-NEXT: jbe .LBB5_1 ; X64-DFlyBSD-NEXT: .LBB5_2: ; X64-DFlyBSD-NEXT: subq $40008, %rsp # imm = 0x9C48 ; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 40016 ; X64-DFlyBSD-NEXT: movl %edi, %esi ; X64-DFlyBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; X64-DFlyBSD-NEXT: callq dummy_use@PLT ; X64-DFlyBSD-NEXT: addq $40008, %rsp # imm = 0x9C48 ; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 ; X64-DFlyBSD-NEXT: retq ; X64-DFlyBSD-NEXT: .LBB5_1: ; X64-DFlyBSD-NEXT: movl $40008, %r10d # imm = 0x9C48 ; X64-DFlyBSD-NEXT: movl $0, %r11d ; X64-DFlyBSD-NEXT: callq __morestack ; X64-DFlyBSD-NEXT: retq ; X64-DFlyBSD-NEXT: jmp .LBB5_2 ; ; X64-MinGW-LABEL: test_fastcc_large_with_ecx_arg: ; X64-MinGW: # %bb.0: ; X64-MinGW-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 ; X64-MinGW-NEXT: cmpq %gs:40, %r11 ; X64-MinGW-NEXT: jbe .LBB5_1 ; X64-MinGW-NEXT: .LBB5_2: ; X64-MinGW-NEXT: movl $40040, %eax # imm = 0x9C68 ; X64-MinGW-NEXT: callq ___chkstk_ms ; X64-MinGW-NEXT: subq %rax, %rsp ; X64-MinGW-NEXT: .seh_stackalloc 40040 ; X64-MinGW-NEXT: .seh_endprologue ; X64-MinGW-NEXT: movl %ecx, %edx ; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx ; X64-MinGW-NEXT: callq dummy_use ; X64-MinGW-NEXT: nop ; X64-MinGW-NEXT: addq $40040, %rsp # imm = 0x9C68 ; X64-MinGW-NEXT: retq ; X64-MinGW-NEXT: .LBB5_1: ; X64-MinGW-NEXT: movl $40040, %r10d # imm = 0x9C68 ; X64-MinGW-NEXT: movl $32, %r11d ; X64-MinGW-NEXT: callq __morestack ; X64-MinGW-NEXT: retq ; X64-MinGW-NEXT: jmp .LBB5_2 ; X64-MinGW-NEXT: .seh_endproc %mem = alloca i32, i32 10000 call void @dummy_use (ptr %mem, i32 %a) ret void } define void @test_nostack() #0 { ; X86-Linux-LABEL: test_nostack: ; X86-Linux: # %bb.0: ; X86-Linux-NEXT: retl ; ; X64-Linux-LABEL: test_nostack: ; X64-Linux: # %bb.0: ; X64-Linux-NEXT: retq ; ; X64-Linux-Large-LABEL: test_nostack: ; X64-Linux-Large: # %bb.0: ; X64-Linux-Large-NEXT: retq ; ; X32ABI-LABEL: test_nostack: ; X32ABI: # %bb.0: ; X32ABI-NEXT: retq ; ; X86-Darwin-LABEL: test_nostack: ; X86-Darwin: ## %bb.0: ; X86-Darwin-NEXT: retl ; ; X64-Darwin-LABEL: test_nostack: ; X64-Darwin: ## %bb.0: ; X64-Darwin-NEXT: retq ; ; X86-MinGW-LABEL: test_nostack: ; X86-MinGW: # %bb.0: ; X86-MinGW-NEXT: retl ; ; X64-FreeBSD-LABEL: test_nostack: ; X64-FreeBSD: # %bb.0: ; X64-FreeBSD-NEXT: retq ; ; X86-DFlyBSD-LABEL: test_nostack: ; X86-DFlyBSD: # %bb.0: ; X86-DFlyBSD-NEXT: retl ; ; X64-DFlyBSD-LABEL: test_nostack: ; X64-DFlyBSD: # %bb.0: ; X64-DFlyBSD-NEXT: retq ; ; X64-MinGW-LABEL: test_nostack: ; X64-MinGW: # %bb.0: ; X64-MinGW-NEXT: retq ret void } define void @test_nosplitstck() { ; X86-Linux-LABEL: test_nosplitstck: ; X86-Linux: # %bb.0: ; X86-Linux-NEXT: retl ; ; X64-Linux-LABEL: test_nosplitstck: ; X64-Linux: # %bb.0: ; X64-Linux-NEXT: retq ; ; X64-Linux-Large-LABEL: test_nosplitstck: ; X64-Linux-Large: # %bb.0: ; X64-Linux-Large-NEXT: retq ; ; X32ABI-LABEL: test_nosplitstck: ; X32ABI: # %bb.0: ; X32ABI-NEXT: retq ; ; X86-Darwin-LABEL: test_nosplitstck: ; X86-Darwin: ## %bb.0: ; X86-Darwin-NEXT: retl ; ; X64-Darwin-LABEL: test_nosplitstck: ; X64-Darwin: ## %bb.0: ; X64-Darwin-NEXT: retq ; ; X86-MinGW-LABEL: test_nosplitstck: ; X86-MinGW: # %bb.0: ; X86-MinGW-NEXT: retl ; ; X64-FreeBSD-LABEL: test_nosplitstck: ; X64-FreeBSD: # %bb.0: ; X64-FreeBSD-NEXT: retq ; ; X86-DFlyBSD-LABEL: test_nosplitstck: ; X86-DFlyBSD: # %bb.0: ; X86-DFlyBSD-NEXT: retl ; ; X64-DFlyBSD-LABEL: test_nosplitstck: ; X64-DFlyBSD: # %bb.0: ; X64-DFlyBSD-NEXT: retq ; ; X64-MinGW-LABEL: test_nosplitstck: ; X64-MinGW: # %bb.0: ; X64-MinGW-NEXT: retq ret void } ; Test to make sure that a morestack call is generated if there is a ; sibling call, even if the function in question has no stack frame ; (PR37807). declare i32 @callee(i32) define i32 @test_sibling_call_empty_frame(i32 %x) #0 { ; X86-Linux-LABEL: test_sibling_call_empty_frame: ; X86-Linux: # %bb.0: ; X86-Linux-NEXT: cmpl %gs:48, %esp ; X86-Linux-NEXT: jbe .LBB8_1 ; X86-Linux-NEXT: # %bb.2: ; X86-Linux-NEXT: jmp callee@PLT # TAILCALL ; X86-Linux-NEXT: .LBB8_1: ; X86-Linux-NEXT: pushl $4 ; X86-Linux-NEXT: pushl $0 ; X86-Linux-NEXT: calll __morestack ; X86-Linux-NEXT: retl ; X86-Linux-NEXT: jmp callee@PLT # TAILCALL ; ; X64-Linux-LABEL: test_sibling_call_empty_frame: ; X64-Linux: # %bb.0: ; X64-Linux-NEXT: cmpq %fs:112, %rsp ; X64-Linux-NEXT: jbe .LBB8_1 ; X64-Linux-NEXT: # %bb.2: ; X64-Linux-NEXT: jmp callee@PLT # TAILCALL ; X64-Linux-NEXT: .LBB8_1: ; X64-Linux-NEXT: movl $0, %r10d ; X64-Linux-NEXT: movl $0, %r11d ; X64-Linux-NEXT: callq __morestack ; X64-Linux-NEXT: retq ; X64-Linux-NEXT: jmp callee@PLT # TAILCALL ; ; X64-Linux-Large-LABEL: test_sibling_call_empty_frame: ; X64-Linux-Large: # %bb.0: ; X64-Linux-Large-NEXT: cmpq %fs:112, %rsp ; X64-Linux-Large-NEXT: jbe .LBB8_1 ; X64-Linux-Large-NEXT: # %bb.2: ; X64-Linux-Large-NEXT: movabsq $callee, %rax ; X64-Linux-Large-NEXT: jmpq *%rax # TAILCALL ; X64-Linux-Large-NEXT: .LBB8_1: ; X64-Linux-Large-NEXT: movl $0, %r10d ; X64-Linux-Large-NEXT: movl $0, %r11d ; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) ; X64-Linux-Large-NEXT: retq ; X64-Linux-Large-NEXT: movabsq $callee, %rax ; X64-Linux-Large-NEXT: jmpq *%rax # TAILCALL ; ; X32ABI-LABEL: test_sibling_call_empty_frame: ; X32ABI: # %bb.0: ; X32ABI-NEXT: cmpl %fs:64, %esp ; X32ABI-NEXT: jbe .LBB8_1 ; X32ABI-NEXT: # %bb.2: ; X32ABI-NEXT: jmp callee@PLT # TAILCALL ; X32ABI-NEXT: .LBB8_1: ; X32ABI-NEXT: movl $0, %r10d ; X32ABI-NEXT: movl $0, %r11d ; X32ABI-NEXT: callq __morestack ; X32ABI-NEXT: retq ; X32ABI-NEXT: jmp callee@PLT # TAILCALL ; ; X86-Darwin-LABEL: test_sibling_call_empty_frame: ; X86-Darwin: ## %bb.0: ; X86-Darwin-NEXT: movl $432, %ecx ## imm = 0x1B0 ; X86-Darwin-NEXT: cmpl %gs:(%ecx), %esp ; X86-Darwin-NEXT: jbe LBB8_1 ; X86-Darwin-NEXT: ## %bb.2: ; X86-Darwin-NEXT: jmp _callee ## TAILCALL ; X86-Darwin-NEXT: LBB8_1: ; X86-Darwin-NEXT: pushl $4 ; X86-Darwin-NEXT: pushl $0 ; X86-Darwin-NEXT: calll ___morestack ; X86-Darwin-NEXT: retl ; X86-Darwin-NEXT: jmp _callee ## TAILCALL ; ; X64-Darwin-LABEL: test_sibling_call_empty_frame: ; X64-Darwin: ## %bb.0: ; X64-Darwin-NEXT: cmpq %gs:816, %rsp ; X64-Darwin-NEXT: jbe LBB8_1 ; X64-Darwin-NEXT: ## %bb.2: ; X64-Darwin-NEXT: jmp _callee ## TAILCALL ; X64-Darwin-NEXT: LBB8_1: ; X64-Darwin-NEXT: movl $0, %r10d ; X64-Darwin-NEXT: movl $0, %r11d ; X64-Darwin-NEXT: callq ___morestack ; X64-Darwin-NEXT: retq ; X64-Darwin-NEXT: jmp _callee ## TAILCALL ; ; X86-MinGW-LABEL: test_sibling_call_empty_frame: ; X86-MinGW: # %bb.0: ; X86-MinGW-NEXT: cmpl %fs:20, %esp ; X86-MinGW-NEXT: jbe LBB8_1 ; X86-MinGW-NEXT: # %bb.2: ; X86-MinGW-NEXT: jmp _callee # TAILCALL ; X86-MinGW-NEXT: LBB8_1: ; X86-MinGW-NEXT: pushl $4 ; X86-MinGW-NEXT: pushl $0 ; X86-MinGW-NEXT: calll ___morestack ; X86-MinGW-NEXT: retl ; X86-MinGW-NEXT: jmp _callee # TAILCALL ; ; X64-FreeBSD-LABEL: test_sibling_call_empty_frame: ; X64-FreeBSD: # %bb.0: ; X64-FreeBSD-NEXT: cmpq %fs:24, %rsp ; X64-FreeBSD-NEXT: jbe .LBB8_1 ; X64-FreeBSD-NEXT: # %bb.2: ; X64-FreeBSD-NEXT: jmp callee@PLT # TAILCALL ; X64-FreeBSD-NEXT: .LBB8_1: ; X64-FreeBSD-NEXT: movl $0, %r10d ; X64-FreeBSD-NEXT: movl $0, %r11d ; X64-FreeBSD-NEXT: callq __morestack ; X64-FreeBSD-NEXT: retq ; X64-FreeBSD-NEXT: jmp callee@PLT # TAILCALL ; ; X86-DFlyBSD-LABEL: test_sibling_call_empty_frame: ; X86-DFlyBSD: # %bb.0: ; X86-DFlyBSD-NEXT: cmpl %fs:16, %esp ; X86-DFlyBSD-NEXT: jbe .LBB8_1 ; X86-DFlyBSD-NEXT: # %bb.2: ; X86-DFlyBSD-NEXT: jmp callee@PLT # TAILCALL ; X86-DFlyBSD-NEXT: .LBB8_1: ; X86-DFlyBSD-NEXT: pushl $4 ; X86-DFlyBSD-NEXT: pushl $0 ; X86-DFlyBSD-NEXT: calll __morestack ; X86-DFlyBSD-NEXT: retl ; X86-DFlyBSD-NEXT: jmp callee@PLT # TAILCALL ; ; X64-DFlyBSD-LABEL: test_sibling_call_empty_frame: ; X64-DFlyBSD: # %bb.0: ; X64-DFlyBSD-NEXT: cmpq %fs:32, %rsp ; X64-DFlyBSD-NEXT: jbe .LBB8_1 ; X64-DFlyBSD-NEXT: # %bb.2: ; X64-DFlyBSD-NEXT: jmp callee@PLT # TAILCALL ; X64-DFlyBSD-NEXT: .LBB8_1: ; X64-DFlyBSD-NEXT: movl $0, %r10d ; X64-DFlyBSD-NEXT: movl $0, %r11d ; X64-DFlyBSD-NEXT: callq __morestack ; X64-DFlyBSD-NEXT: retq ; X64-DFlyBSD-NEXT: jmp callee@PLT # TAILCALL ; ; X64-MinGW-LABEL: test_sibling_call_empty_frame: ; X64-MinGW: # %bb.0: ; X64-MinGW-NEXT: cmpq %gs:40, %rsp ; X64-MinGW-NEXT: jbe .LBB8_1 ; X64-MinGW-NEXT: # %bb.2: ; X64-MinGW-NEXT: jmp callee # TAILCALL ; X64-MinGW-NEXT: .LBB8_1: ; X64-MinGW-NEXT: movl $0, %r10d ; X64-MinGW-NEXT: movl $32, %r11d ; X64-MinGW-NEXT: callq __morestack ; X64-MinGW-NEXT: retq ; X64-MinGW-NEXT: jmp callee # TAILCALL %call = tail call i32 @callee(i32 %x) #0 ret i32 %call } ; Test that unused nested argument doesn't need saving/restoring. define i32 @test_nested_unused(ptr nest %unused) #0 { ; X86-Linux-LABEL: test_nested_unused: ; X86-Linux: # %bb.0: ; X86-Linux-NEXT: cmpl %gs:48, %esp ; X86-Linux-NEXT: jbe .LBB9_1 ; X86-Linux-NEXT: .LBB9_2: ; X86-Linux-NEXT: subl $52, %esp ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 52 ; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax ; X86-Linux-NEXT: pushl $10 ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 ; X86-Linux-NEXT: pushl %eax ; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 ; X86-Linux-NEXT: calll dummy_use@PLT ; X86-Linux-NEXT: addl $16, %esp ; X86-Linux-NEXT: .cfi_adjust_cfa_offset -16 ; X86-Linux-NEXT: movl $123, %eax ; X86-Linux-NEXT: addl $44, %esp ; X86-Linux-NEXT: .cfi_def_cfa_offset 4 ; X86-Linux-NEXT: retl ; X86-Linux-NEXT: .LBB9_1: ; X86-Linux-NEXT: pushl $0 ; X86-Linux-NEXT: pushl $44 ; X86-Linux-NEXT: calll __morestack ; X86-Linux-NEXT: retl ; X86-Linux-NEXT: jmp .LBB9_2 ; ; X64-Linux-LABEL: test_nested_unused: ; X64-Linux: # %bb.0: ; X64-Linux-NEXT: cmpq %fs:112, %rsp ; X64-Linux-NEXT: jbe .LBB9_1 ; X64-Linux-NEXT: .LBB9_2: ; X64-Linux-NEXT: subq $40, %rsp ; X64-Linux-NEXT: .cfi_def_cfa_offset 48 ; X64-Linux-NEXT: movq %rsp, %rdi ; X64-Linux-NEXT: movl $10, %esi ; X64-Linux-NEXT: callq dummy_use@PLT ; X64-Linux-NEXT: movl $123, %eax ; X64-Linux-NEXT: addq $40, %rsp ; X64-Linux-NEXT: .cfi_def_cfa_offset 8 ; X64-Linux-NEXT: retq ; X64-Linux-NEXT: .LBB9_1: ; X64-Linux-NEXT: movl $40, %r10d ; X64-Linux-NEXT: movl $0, %r11d ; X64-Linux-NEXT: callq __morestack ; X64-Linux-NEXT: retq ; X64-Linux-NEXT: jmp .LBB9_2 ; ; X64-Linux-Large-LABEL: test_nested_unused: ; X64-Linux-Large: # %bb.0: ; X64-Linux-Large-NEXT: cmpq %fs:112, %rsp ; X64-Linux-Large-NEXT: jbe .LBB9_1 ; X64-Linux-Large-NEXT: .LBB9_2: ; X64-Linux-Large-NEXT: subq $40, %rsp ; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 48 ; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax ; X64-Linux-Large-NEXT: movq %rsp, %rdi ; X64-Linux-Large-NEXT: movl $10, %esi ; X64-Linux-Large-NEXT: callq *%rax ; X64-Linux-Large-NEXT: movl $123, %eax ; X64-Linux-Large-NEXT: addq $40, %rsp ; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8 ; X64-Linux-Large-NEXT: retq ; X64-Linux-Large-NEXT: .LBB9_1: ; X64-Linux-Large-NEXT: movl $40, %r10d ; X64-Linux-Large-NEXT: movl $0, %r11d ; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) ; X64-Linux-Large-NEXT: retq ; X64-Linux-Large-NEXT: jmp .LBB9_2 ; ; X32ABI-LABEL: test_nested_unused: ; X32ABI: # %bb.0: ; X32ABI-NEXT: cmpl %fs:64, %esp ; X32ABI-NEXT: jbe .LBB9_1 ; X32ABI-NEXT: .LBB9_2: ; X32ABI-NEXT: subl $40, %esp ; X32ABI-NEXT: .cfi_def_cfa_offset 48 ; X32ABI-NEXT: movl %esp, %edi ; X32ABI-NEXT: movl $10, %esi ; X32ABI-NEXT: callq dummy_use@PLT ; X32ABI-NEXT: movl $123, %eax ; X32ABI-NEXT: addl $40, %esp ; X32ABI-NEXT: .cfi_def_cfa_offset 8 ; X32ABI-NEXT: retq ; X32ABI-NEXT: .LBB9_1: ; X32ABI-NEXT: movl $40, %r10d ; X32ABI-NEXT: movl $0, %r11d ; X32ABI-NEXT: callq __morestack ; X32ABI-NEXT: retq ; X32ABI-NEXT: jmp .LBB9_2 ; ; X86-Darwin-LABEL: test_nested_unused: ; X86-Darwin: ## %bb.0: ; X86-Darwin-NEXT: movl $432, %ecx ## imm = 0x1B0 ; X86-Darwin-NEXT: cmpl %gs:(%ecx), %esp ; X86-Darwin-NEXT: jbe LBB9_1 ; X86-Darwin-NEXT: LBB9_2: ; X86-Darwin-NEXT: subl $60, %esp ; X86-Darwin-NEXT: .cfi_def_cfa_offset 64 ; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax ; X86-Darwin-NEXT: movl %eax, (%esp) ; X86-Darwin-NEXT: movl $10, {{[0-9]+}}(%esp) ; X86-Darwin-NEXT: calll _dummy_use ; X86-Darwin-NEXT: movl $123, %eax ; X86-Darwin-NEXT: addl $60, %esp ; X86-Darwin-NEXT: retl ; X86-Darwin-NEXT: LBB9_1: ; X86-Darwin-NEXT: pushl $0 ; X86-Darwin-NEXT: pushl $60 ; X86-Darwin-NEXT: calll ___morestack ; X86-Darwin-NEXT: retl ; X86-Darwin-NEXT: jmp LBB9_2 ; ; X64-Darwin-LABEL: test_nested_unused: ; X64-Darwin: ## %bb.0: ; X64-Darwin-NEXT: cmpq %gs:816, %rsp ; X64-Darwin-NEXT: jbe LBB9_1 ; X64-Darwin-NEXT: LBB9_2: ; X64-Darwin-NEXT: subq $40, %rsp ; X64-Darwin-NEXT: .cfi_def_cfa_offset 48 ; X64-Darwin-NEXT: movq %rsp, %rdi ; X64-Darwin-NEXT: movl $10, %esi ; X64-Darwin-NEXT: callq _dummy_use ; X64-Darwin-NEXT: movl $123, %eax ; X64-Darwin-NEXT: addq $40, %rsp ; X64-Darwin-NEXT: retq ; X64-Darwin-NEXT: LBB9_1: ; X64-Darwin-NEXT: movl $40, %r10d ; X64-Darwin-NEXT: movl $0, %r11d ; X64-Darwin-NEXT: callq ___morestack ; X64-Darwin-NEXT: retq ; X64-Darwin-NEXT: jmp LBB9_2 ; ; X86-MinGW-LABEL: test_nested_unused: ; X86-MinGW: # %bb.0: ; X86-MinGW-NEXT: cmpl %fs:20, %esp ; X86-MinGW-NEXT: jbe LBB9_1 ; X86-MinGW-NEXT: LBB9_2: ; X86-MinGW-NEXT: subl $40, %esp ; X86-MinGW-NEXT: .cfi_def_cfa_offset 44 ; X86-MinGW-NEXT: movl %esp, %eax ; X86-MinGW-NEXT: pushl $10 ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 ; X86-MinGW-NEXT: pushl %eax ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 ; X86-MinGW-NEXT: calll _dummy_use ; X86-MinGW-NEXT: addl $8, %esp ; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -8 ; X86-MinGW-NEXT: movl $123, %eax ; X86-MinGW-NEXT: addl $40, %esp ; X86-MinGW-NEXT: retl ; X86-MinGW-NEXT: LBB9_1: ; X86-MinGW-NEXT: .cfi_def_cfa_offset 4 ; X86-MinGW-NEXT: pushl $0 ; X86-MinGW-NEXT: pushl $40 ; X86-MinGW-NEXT: calll ___morestack ; X86-MinGW-NEXT: retl ; X86-MinGW-NEXT: jmp LBB9_2 ; ; X64-FreeBSD-LABEL: test_nested_unused: ; X64-FreeBSD: # %bb.0: ; X64-FreeBSD-NEXT: cmpq %fs:24, %rsp ; X64-FreeBSD-NEXT: jbe .LBB9_1 ; X64-FreeBSD-NEXT: .LBB9_2: ; X64-FreeBSD-NEXT: subq $40, %rsp ; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 48 ; X64-FreeBSD-NEXT: movq %rsp, %rdi ; X64-FreeBSD-NEXT: movl $10, %esi ; X64-FreeBSD-NEXT: callq dummy_use@PLT ; X64-FreeBSD-NEXT: movl $123, %eax ; X64-FreeBSD-NEXT: addq $40, %rsp ; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8 ; X64-FreeBSD-NEXT: retq ; X64-FreeBSD-NEXT: .LBB9_1: ; X64-FreeBSD-NEXT: movl $40, %r10d ; X64-FreeBSD-NEXT: movl $0, %r11d ; X64-FreeBSD-NEXT: callq __morestack ; X64-FreeBSD-NEXT: retq ; X64-FreeBSD-NEXT: jmp .LBB9_2 ; ; X86-DFlyBSD-LABEL: test_nested_unused: ; X86-DFlyBSD: # %bb.0: ; X86-DFlyBSD-NEXT: cmpl %fs:16, %esp ; X86-DFlyBSD-NEXT: jbe .LBB9_1 ; X86-DFlyBSD-NEXT: .LBB9_2: ; X86-DFlyBSD-NEXT: subl $40, %esp ; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 44 ; X86-DFlyBSD-NEXT: movl %esp, %eax ; X86-DFlyBSD-NEXT: pushl $10 ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 ; X86-DFlyBSD-NEXT: pushl %eax ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 ; X86-DFlyBSD-NEXT: calll dummy_use@PLT ; X86-DFlyBSD-NEXT: addl $8, %esp ; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -8 ; X86-DFlyBSD-NEXT: movl $123, %eax ; X86-DFlyBSD-NEXT: addl $40, %esp ; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 4 ; X86-DFlyBSD-NEXT: retl ; X86-DFlyBSD-NEXT: .LBB9_1: ; X86-DFlyBSD-NEXT: pushl $0 ; X86-DFlyBSD-NEXT: pushl $40 ; X86-DFlyBSD-NEXT: calll __morestack ; X86-DFlyBSD-NEXT: retl ; X86-DFlyBSD-NEXT: jmp .LBB9_2 ; ; X64-DFlyBSD-LABEL: test_nested_unused: ; X64-DFlyBSD: # %bb.0: ; X64-DFlyBSD-NEXT: cmpq %fs:32, %rsp ; X64-DFlyBSD-NEXT: jbe .LBB9_1 ; X64-DFlyBSD-NEXT: .LBB9_2: ; X64-DFlyBSD-NEXT: subq $40, %rsp ; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 48 ; X64-DFlyBSD-NEXT: movq %rsp, %rdi ; X64-DFlyBSD-NEXT: movl $10, %esi ; X64-DFlyBSD-NEXT: callq dummy_use@PLT ; X64-DFlyBSD-NEXT: movl $123, %eax ; X64-DFlyBSD-NEXT: addq $40, %rsp ; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 ; X64-DFlyBSD-NEXT: retq ; X64-DFlyBSD-NEXT: .LBB9_1: ; X64-DFlyBSD-NEXT: movl $40, %r10d ; X64-DFlyBSD-NEXT: movl $0, %r11d ; X64-DFlyBSD-NEXT: callq __morestack ; X64-DFlyBSD-NEXT: retq ; X64-DFlyBSD-NEXT: jmp .LBB9_2 ; ; X64-MinGW-LABEL: test_nested_unused: ; X64-MinGW: # %bb.0: ; X64-MinGW-NEXT: cmpq %gs:40, %rsp ; X64-MinGW-NEXT: jbe .LBB9_1 ; X64-MinGW-NEXT: .LBB9_2: ; X64-MinGW-NEXT: subq $72, %rsp ; X64-MinGW-NEXT: .seh_stackalloc 72 ; X64-MinGW-NEXT: .seh_endprologue ; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx ; X64-MinGW-NEXT: movl $10, %edx ; X64-MinGW-NEXT: callq dummy_use ; X64-MinGW-NEXT: movl $123, %eax ; X64-MinGW-NEXT: addq $72, %rsp ; X64-MinGW-NEXT: retq ; X64-MinGW-NEXT: .LBB9_1: ; X64-MinGW-NEXT: movl $72, %r10d ; X64-MinGW-NEXT: movl $32, %r11d ; X64-MinGW-NEXT: callq __morestack ; X64-MinGW-NEXT: retq ; X64-MinGW-NEXT: jmp .LBB9_2 ; X64-MinGW-NEXT: .seh_endproc %mem = alloca i32, i32 10 call void @dummy_use (ptr %mem, i32 10) ret i32 123 } attributes #0 = { "split-stack" } ; X64-Linux-Large: .section ".note.GNU-split-stack","",@progbits ; X64-Linux-Large-NEXT: .section ".note.GNU-no-split-stack","",@progbits ; X64-Linux-Large-NEXT: .section ".note.GNU-stack","",@progbits ; X64-Linux-Large-NEXT: .rodata ; X64-Linux-Large-NEXT: __morestack_addr: ; X64-Linux-Large-NEXT: .quad __morestack ; X86-Linux: .section ".note.GNU-split-stack","",@progbits ; X86-Linux: .section ".note.GNU-no-split-stack","",@progbits ; X64-Linux: .section ".note.GNU-split-stack","",@progbits ; X64-Linux: .section ".note.GNU-no-split-stack","",@progbits ; X64-FreeBSD: .section ".note.GNU-split-stack","",@progbits ; X64-FreeBSD: .section ".note.GNU-no-split-stack","",@progbits ; X86-DFlyBSD: .section ".note.GNU-split-stack","",@progbits ; X86-DFlyBSD: .section ".note.GNU-no-split-stack","",@progbits ; X64-DFlyBSD: .section ".note.GNU-split-stack","",@progbits ; X64-DFlyBSD: .section ".note.GNU-no-split-stack","",@progbits