diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2011-12-03 09:32:07 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2011-12-03 09:32:07 +0000 |
commit | 199ce33b3bfa0b6293946c1b835da2a1fbc8cab4 (patch) | |
tree | 43997dc62087bd036a23c4db902e1af675fc7049 /test/CodeGen/X86/segmented-stacks.ll | |
parent | 40f8222e1e6d273062e3c1234baa57db3c5705cf (diff) | |
download | external_llvm-199ce33b3bfa0b6293946c1b835da2a1fbc8cab4.zip external_llvm-199ce33b3bfa0b6293946c1b835da2a1fbc8cab4.tar.gz external_llvm-199ce33b3bfa0b6293946c1b835da2a1fbc8cab4.tar.bz2 |
Check for stack space more intelligently.
libgcc sets the stack limit field in TCB to 256 bytes above the actual
allocated stack limit. This means if the function's stack frame needs
less than 256 bytes, we can just compare the stack pointer with the
stack limit. This should result in lesser calls to __morestack.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145766 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/X86/segmented-stacks.ll')
-rw-r--r-- | test/CodeGen/X86/segmented-stacks.ll | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/test/CodeGen/X86/segmented-stacks.ll b/test/CodeGen/X86/segmented-stacks.ll index c28c319..4f529c1 100644 --- a/test/CodeGen/X86/segmented-stacks.ll +++ b/test/CodeGen/X86/segmented-stacks.ll @@ -20,8 +20,7 @@ false: ; X32: test_basic: -; X32: leal -12(%esp), %ecx -; X32-NEXT: cmpl %gs:48, %ecx +; X32: cmpl %gs:48, %esp ; X32: pushl $4 ; X32-NEXT: pushl $12 @@ -41,8 +40,7 @@ false: ; X64: test_basic: -; X64: leaq -24(%rsp), %r11 -; X64-NEXT: cmpq %fs:112, %r11 +; X64: cmpq %fs:112, %rsp ; X64: movabsq $24, %r10 ; X64-NEXT: movabsq $0, %r11 @@ -66,17 +64,14 @@ define i32 @test_nested(i32 * nest %closure, i32 %other) { %result = add i32 %other, %addend ret i32 %result -; X32: leal (%esp), %edx -; X32-NEXT: cmpl %gs:48, %edx - +; X32: cmpl %gs:48, %esp ; X32: pushl $4 ; X32-NEXT: pushl $0 ; X32-NEXT: calll __morestack ; X32-NEXT: ret -; X64: leaq (%rsp), %r11 -; X64-NEXT: cmpq %fs:112, %r11 +; X64: cmpq %fs:112, %rsp ; X64: movq %r10, %rax ; X64-NEXT: movabsq $0, %r10 @@ -86,3 +81,26 @@ define i32 @test_nested(i32 * nest %closure, i32 %other) { ; X64-NEXT: movq %rax, %r10 } + +define void @test_large() { + %mem = alloca i32, i32 10000 + call void @dummy_use (i32* %mem, i32 0) + ret void + +; X32: leal -40012(%esp), %ecx +; X32-NEXT: cmpl %gs:48, %ecx + +; X32: pushl $0 +; X32-NEXT: pushl $40012 +; X32-NEXT: calll __morestack +; X32-NEXT: ret + +; X64: leaq -40008(%rsp), %r11 +; X64-NEXT: cmpq %fs:112, %r11 + +; X64: movabsq $40008, %r10 +; X64-NEXT: movabsq $0, %r11 +; X64-NEXT: callq __morestack +; X64-NEXT: ret + +} |