Mercurial > hg > CbC > CbC_llvm
diff test/CodeGen/X86/segmented-stacks.ll @ 83:60c9769439b8 LLVM3.7
LLVM 3.7
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 18 Feb 2015 14:55:36 +0900 |
parents | 54457678186b |
children | afa8332a0e37 |
line wrap: on
line diff
--- a/test/CodeGen/X86/segmented-stacks.ll Mon Sep 08 22:07:30 2014 +0900 +++ b/test/CodeGen/X86/segmented-stacks.ll Wed Feb 18 14:55:36 2015 +0900 @@ -1,18 +1,25 @@ ; RUN: llc < %s -mcpu=generic -mtriple=i686-linux -verify-machineinstrs | FileCheck %s -check-prefix=X32-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=X32-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=X32-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=X32-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 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -filetype=obj +; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnux32 -filetype=obj ; RUN: llc < %s -mcpu=generic -mtriple=i686-darwin -filetype=obj ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-darwin -filetype=obj ; RUN: llc < %s -mcpu=generic -mtriple=i686-mingw32 -filetype=obj ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-freebsd -filetype=obj +; RUN: llc < %s -mcpu=generic -mtriple=i686-dragonfly -filetype=obj +; RUN: llc < %s -mcpu=generic -mtriple=x86_64-dragonfly -filetype=obj ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-mingw32 -filetype=obj ; RUN: not llc < %s -mcpu=generic -mtriple=x86_64-solaris 2> %t.log @@ -51,6 +58,26 @@ ; X64-Linux-NEXT: callq __morestack ; X64-Linux-NEXT: ret +; X64-Linux-Large-LABEL: test_basic: + +; X64-Linux-Large: cmpq %fs:112, %rsp +; X64-Linux-Large-NEXT: ja .LBB0_2 + +; X64-Linux-Large: movabsq $40, %r10 +; X64-Linux-Large-NEXT: movabsq $0, %r11 +; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) +; X64-Linux-Large-NEXT: ret + +; X32ABI-LABEL: test_basic: + +; X32ABI: cmpl %fs:64, %esp +; X32ABI-NEXT: ja .LBB0_2 + +; X32ABI: movl $40, %r10d +; X32ABI-NEXT: movl $0, %r11d +; X32ABI-NEXT: callq __morestack +; X32ABI-NEXT: ret + ; X32-Darwin-LABEL: test_basic: ; X32-Darwin: movl $432, %ecx @@ -102,6 +129,26 @@ ; X64-FreeBSD-NEXT: callq __morestack ; X64-FreeBSD-NEXT: ret +; X32-DFlyBSD-LABEL: test_basic: + +; X32-DFlyBSD: cmpl %fs:16, %esp +; X32-DFlyBSD-NEXT: ja .LBB0_2 + +; X32-DFlyBSD: pushl $0 +; X32-DFlyBSD-NEXT: pushl $48 +; X32-DFlyBSD-NEXT: calll __morestack +; X32-DFlyBSD-NEXT: ret + +; X64-DFlyBSD-LABEL: test_basic: + +; X64-DFlyBSD: cmpq %fs:32, %rsp +; X64-DFlyBSD-NEXT: ja .LBB0_2 + +; X64-DFlyBSD: movabsq $40, %r10 +; X64-DFlyBSD-NEXT: movabsq $0, %r11 +; X64-DFlyBSD-NEXT: callq __morestack +; X64-DFlyBSD-NEXT: ret + } define i32 @test_nested(i32 * nest %closure, i32 %other) #0 { @@ -129,6 +176,16 @@ ; X64-Linux-NEXT: ret ; X64-Linux-NEXT: movq %rax, %r10 +; X32ABI: cmpl %fs:64, %esp +; X32ABI-NEXT: ja .LBB1_2 + +; X32ABI: movl %r10d, %eax +; X32ABI-NEXT: movl $56, %r10d +; X32ABI-NEXT: movl $0, %r11d +; X32ABI-NEXT: callq __morestack +; X32ABI-NEXT: ret +; X32ABI-NEXT: movq %rax, %r10 + ; X32-Darwin: movl $432, %edx ; X32-Darwin-NEXT: cmpl %gs:(%edx), %esp ; X32-Darwin-NEXT: ja LBB1_2 @@ -177,6 +234,24 @@ ; X64-FreeBSD-NEXT: ret ; X64-FreeBSD-NEXT: movq %rax, %r10 +; X32-DFlyBSD: cmpl %fs:16, %esp +; X32-DFlyBSD-NEXT: ja .LBB1_2 + +; X32-DFlyBSD: pushl $4 +; X32-DFlyBSD-NEXT: pushl $52 +; X32-DFlyBSD-NEXT: calll __morestack +; X32-DFlyBSD-NEXT: ret + +; X64-DFlyBSD: cmpq %fs:32, %rsp +; X64-DFlyBSD-NEXT: ja .LBB1_2 + +; X64-DFlyBSD: movq %r10, %rax +; X64-DFlyBSD-NEXT: movabsq $56, %r10 +; X64-DFlyBSD-NEXT: movabsq $0, %r11 +; X64-DFlyBSD-NEXT: callq __morestack +; X64-DFlyBSD-NEXT: ret +; X64-DFlyBSD-NEXT: movq %rax, %r10 + } define void @test_large() #0 { @@ -202,6 +277,15 @@ ; X64-Linux-NEXT: callq __morestack ; X64-Linux-NEXT: ret +; X32ABI: leal -40008(%rsp), %r11d +; X32ABI-NEXT: cmpl %fs:64, %r11d +; X32ABI-NEXT: ja .LBB2_2 + +; X32ABI: movl $40008, %r10d +; X32ABI-NEXT: movl $0, %r11d +; X32ABI-NEXT: callq __morestack +; X32ABI-NEXT: ret + ; X32-Darwin: leal -40012(%esp), %ecx ; X32-Darwin-NEXT: movl $432, %eax ; X32-Darwin-NEXT: cmpl %gs:(%eax), %ecx @@ -249,6 +333,24 @@ ; X64-FreeBSD-NEXT: callq __morestack ; X64-FreeBSD-NEXT: ret +; X32-DFlyBSD: leal -40008(%esp), %ecx +; X32-DFlyBSD-NEXT: cmpl %fs:16, %ecx +; X32-DFlyBSD-NEXT: ja .LBB2_2 + +; X32-DFlyBSD: pushl $0 +; X32-DFlyBSD-NEXT: pushl $40008 +; X32-DFlyBSD-NEXT: calll __morestack +; X32-DFlyBSD-NEXT: ret + +; X64-DFlyBSD: leaq -40008(%rsp), %r11 +; X64-DFlyBSD-NEXT: cmpq %fs:32, %r11 +; X64-DFlyBSD-NEXT: ja .LBB2_2 + +; X64-DFlyBSD: movabsq $40008, %r10 +; X64-DFlyBSD-NEXT: movabsq $0, %r11 +; X64-DFlyBSD-NEXT: callq __morestack +; X64-DFlyBSD-NEXT: ret + } define fastcc void @test_fastcc() #0 { @@ -276,6 +378,16 @@ ; X64-Linux-NEXT: callq __morestack ; X64-Linux-NEXT: ret +; X32ABI-LABEL: test_fastcc: + +; X32ABI: cmpl %fs:64, %esp +; X32ABI-NEXT: ja .LBB3_2 + +; X32ABI: movl $40, %r10d +; X32ABI-NEXT: movl $0, %r11d +; X32ABI-NEXT: callq __morestack +; X32ABI-NEXT: ret + ; X32-Darwin-LABEL: test_fastcc: ; X32-Darwin: movl $432, %eax @@ -327,6 +439,26 @@ ; X64-FreeBSD-NEXT: callq __morestack ; X64-FreeBSD-NEXT: ret +; X32-DFlyBSD-LABEL: test_fastcc: + +; X32-DFlyBSD: cmpl %fs:16, %esp +; X32-DFlyBSD-NEXT: ja .LBB3_2 + +; X32-DFlyBSD: pushl $0 +; X32-DFlyBSD-NEXT: pushl $48 +; X32-DFlyBSD-NEXT: calll __morestack +; X32-DFlyBSD-NEXT: ret + +; X64-DFlyBSD-LABEL: test_fastcc: + +; X64-DFlyBSD: cmpq %fs:32, %rsp +; X64-DFlyBSD-NEXT: ja .LBB3_2 + +; X64-DFlyBSD: movabsq $40, %r10 +; X64-DFlyBSD-NEXT: movabsq $0, %r11 +; X64-DFlyBSD-NEXT: callq __morestack +; X64-DFlyBSD-NEXT: ret + } define fastcc void @test_fastcc_large() #0 { @@ -356,6 +488,17 @@ ; X64-Linux-NEXT: callq __morestack ; X64-Linux-NEXT: ret +; X32ABI-LABEL: test_fastcc_large: + +; X32ABI: leal -40008(%rsp), %r11d +; X32ABI-NEXT: cmpl %fs:64, %r11d +; X32ABI-NEXT: ja .LBB4_2 + +; X32ABI: movl $40008, %r10d +; X32ABI-NEXT: movl $0, %r11d +; X32ABI-NEXT: callq __morestack +; X32ABI-NEXT: ret + ; X32-Darwin-LABEL: test_fastcc_large: ; X32-Darwin: leal -40012(%esp), %eax @@ -412,6 +555,28 @@ ; X64-FreeBSD-NEXT: callq __morestack ; X64-FreeBSD-NEXT: ret +; X32-DFlyBSD-LABEL: test_fastcc_large: + +; X32-DFlyBSD: leal -40008(%esp), %eax +; X32-DFlyBSD-NEXT: cmpl %fs:16, %eax +; X32-DFlyBSD-NEXT: ja .LBB4_2 + +; X32-DFlyBSD: pushl $0 +; X32-DFlyBSD-NEXT: pushl $40008 +; X32-DFlyBSD-NEXT: calll __morestack +; X32-DFlyBSD-NEXT: ret + +; X64-DFlyBSD-LABEL: test_fastcc_large: + +; X64-DFlyBSD: leaq -40008(%rsp), %r11 +; X64-DFlyBSD-NEXT: cmpq %fs:32, %r11 +; X64-DFlyBSD-NEXT: ja .LBB4_2 + +; X64-DFlyBSD: movabsq $40008, %r10 +; X64-DFlyBSD-NEXT: movabsq $0, %r11 +; X64-DFlyBSD-NEXT: callq __morestack +; X64-DFlyBSD-NEXT: ret + } define fastcc void @test_fastcc_large_with_ecx_arg(i32 %a) #0 { @@ -446,6 +611,9 @@ ; X64-Linux-LABEL: test_nostack: ; X32-Linux-NOT: callq __morestack +; X32ABI-LABEL: test_nostack: +; X32ABI-NOT: callq __morestack + ; X32-Darwin-LABEL: test_nostack: ; X32-Darwin-NOT: calll __morestack @@ -460,6 +628,16 @@ ; X64-FreeBSD-LABEL: test_nostack: ; X64-FreeBSD-NOT: callq __morestack + +; X32-DFlyBSD-LABEL: test_nostack: +; X32-DFlyBSD-NOT: calll __morestack + +; X64-DFlyBSD-LABEL: test_nostack: +; X64-DFlyBSD-NOT: callq __morestack } attributes #0 = { "split-stack" } + +; X64-Linux-Large: .rodata +; X64-Linux-Large-NEXT: __morestack_addr: +; X64-Linux-Large-NEXT: .quad __morestack