1; This test is attempting to detect that the compiler correctly generates stack
2; probe calls when the size of the local variables exceeds the specified stack
3; probe size.
4;
5; Testing the default value of 4096 bytes makes sense, because the default
6; stack probe size equals the page size (4096 bytes for all x86 targets), and
7; this is unlikely to change in the future.
8;
9; RUN: llc < %s | FileCheck %s
10
11target datalayout = "e-m:w-p:32:32-i64:64-f80:32-n8:16:32-S32"
12target triple = "i686-pc-windows-msvc"
13
14define i32 @test1() "stack-probe-size"="0" {
15  %buffer = alloca [4095 x i8]
16
17  ret i32 0
18
19; CHECK-LABEL: _test1:
20; CHECK-NOT: subl $4095, %esp
21; CHECK: movl $4095, %eax
22; CHECK: calll __chkstk
23}
24
25define i32 @test2() {
26  %buffer = alloca [4095 x i8]
27
28  ret i32 0
29
30; CHECK-LABEL: _test2:
31; CHECK-NOT: movl $4095, %eax
32; CHECK: subl $4095, %esp
33; CHECK-NOT: calll __chkstk
34}
35
36define i32 @test3() "stack-probe-size"="8192" {
37  %buffer = alloca [4095 x i8]
38
39  ret i32 0
40
41; CHECK-LABEL: _test3:
42; CHECK-NOT: movl $4095, %eax
43; CHECK: subl $4095, %esp
44; CHECK-NOT: calll __chkstk
45}
46
47define i32 @test4() "stack-probe-size"="0" {
48  %buffer = alloca [4096 x i8]
49
50  ret i32 0
51
52; CHECK-LABEL: _test4:
53; CHECK-NOT: subl $4096, %esp
54; CHECK: movl $4096, %eax
55; CHECK: calll __chkstk
56}
57
58define i32 @test5() {
59  %buffer = alloca [4096 x i8]
60
61  ret i32 0
62
63; CHECK-LABEL: _test5:
64; CHECK-NOT: subl $4096, %esp
65; CHECK: movl $4096, %eax
66; CHECK: calll __chkstk
67}
68
69define i32 @test6() "stack-probe-size"="8192" {
70  %buffer = alloca [4096 x i8]
71
72  ret i32 0
73
74; CGECK-LABEL: _test6:
75; CGECK-NOT: movl $4096, %eax
76; CGECK: subl $4096, %esp
77; CGECK-NOT: calll __chkstk
78}
79