Although targeting CoreCLR is similar to targeting MSVC, there are certain important differences that the backend must be aware of (e.g. differences in stack probes, EH, and library calls). Differential Revision: http://reviews.llvm.org/D11012 llvm-svn: 245115
79 lines
1.7 KiB
LLVM
79 lines
1.7 KiB
LLVM
; This test is attempting to detect that the compiler correctly generates stack
|
|
; probe calls when the size of the local variables exceeds the specified stack
|
|
; probe size.
|
|
;
|
|
; Testing the default value of 4096 bytes makes sense, because the default
|
|
; stack probe size equals the page size (4096 bytes for all x86 targets), and
|
|
; this is unlikely to change in the future.
|
|
;
|
|
; RUN: llc -mtriple=i686-windows-msvc < %s | FileCheck %s
|
|
; RUN: llc -mtriple=i686-windows-coreclr < %s | FileCheck %s
|
|
|
|
target datalayout = "e-m:w-p:32:32-i64:64-f80:32-n8:16:32-S32"
|
|
|
|
define i32 @test1() "stack-probe-size"="0" {
|
|
%buffer = alloca [4095 x i8]
|
|
|
|
ret i32 0
|
|
|
|
; CHECK-LABEL: _test1:
|
|
; CHECK-NOT: subl $4095, %esp
|
|
; CHECK: movl $4095, %eax
|
|
; CHECK: calll __chkstk
|
|
}
|
|
|
|
define i32 @test2() {
|
|
%buffer = alloca [4095 x i8]
|
|
|
|
ret i32 0
|
|
|
|
; CHECK-LABEL: _test2:
|
|
; CHECK-NOT: movl $4095, %eax
|
|
; CHECK: subl $4095, %esp
|
|
; CHECK-NOT: calll __chkstk
|
|
}
|
|
|
|
define i32 @test3() "stack-probe-size"="8192" {
|
|
%buffer = alloca [4095 x i8]
|
|
|
|
ret i32 0
|
|
|
|
; CHECK-LABEL: _test3:
|
|
; CHECK-NOT: movl $4095, %eax
|
|
; CHECK: subl $4095, %esp
|
|
; CHECK-NOT: calll __chkstk
|
|
}
|
|
|
|
define i32 @test4() "stack-probe-size"="0" {
|
|
%buffer = alloca [4096 x i8]
|
|
|
|
ret i32 0
|
|
|
|
; CHECK-LABEL: _test4:
|
|
; CHECK-NOT: subl $4096, %esp
|
|
; CHECK: movl $4096, %eax
|
|
; CHECK: calll __chkstk
|
|
}
|
|
|
|
define i32 @test5() {
|
|
%buffer = alloca [4096 x i8]
|
|
|
|
ret i32 0
|
|
|
|
; CHECK-LABEL: _test5:
|
|
; CHECK-NOT: subl $4096, %esp
|
|
; CHECK: movl $4096, %eax
|
|
; CHECK: calll __chkstk
|
|
}
|
|
|
|
define i32 @test6() "stack-probe-size"="8192" {
|
|
%buffer = alloca [4096 x i8]
|
|
|
|
ret i32 0
|
|
|
|
; CGECK-LABEL: _test6:
|
|
; CGECK-NOT: movl $4096, %eax
|
|
; CGECK: subl $4096, %esp
|
|
; CGECK-NOT: calll __chkstk
|
|
}
|