1; RUN: not llc -march=amdgcn < %s 2>&1 | FileCheck -check-prefix=ERROR %s
2; RUN: not llc -march=amdgcn < %s | FileCheck -check-prefix=GCN %s
3
4declare void @llvm.memset.p5i8.i32(i8 addrspace(5)* nocapture, i8, i32, i32, i1) #1
5
6; ERROR: error: stack size limit exceeded (131061) in stack_size_limit_wave64
7; GCN: ; ScratchSize: 131061
8define amdgpu_kernel void @stack_size_limit_wave64() #0 {
9entry:
10  %alloca = alloca [131057 x i8], align 1, addrspace(5)
11  %alloca.bc = bitcast [131057 x i8] addrspace(5)* %alloca to i8 addrspace(5)*
12  call void @llvm.memset.p5i8.i32(i8 addrspace(5)* %alloca.bc, i8 9, i32 131057, i32 1, i1 true)
13  ret void
14}
15
16; ERROR: error: stack size limit exceeded (262117) in stack_size_limit_wave32
17; GCN: ; ScratchSize: 262117
18define amdgpu_kernel void @stack_size_limit_wave32() #1 {
19entry:
20  %alloca = alloca [262113 x i8], align 1, addrspace(5)
21  %alloca.bc = bitcast [262113 x i8] addrspace(5)* %alloca to i8 addrspace(5)*
22  call void @llvm.memset.p5i8.i32(i8 addrspace(5)* %alloca.bc, i8 9, i32 262113, i32 1, i1 true)
23  ret void
24}
25
26; ERROR-NOT: error:
27; GCN: ; ScratchSize: 131056
28define amdgpu_kernel void @max_stack_size_wave64() #0 {
29entry:
30  %alloca = alloca [131052 x i8], align 1, addrspace(5)
31  %alloca.bc = bitcast [131052 x i8] addrspace(5)* %alloca to i8 addrspace(5)*
32  call void @llvm.memset.p5i8.i32(i8 addrspace(5)* %alloca.bc, i8 9, i32 131052, i32 1, i1 true)
33  ret void
34}
35
36; ERROR-NOT: error:
37; GCN: ; ScratchSize: 262112
38define amdgpu_kernel void @max_stack_size_wave32() #1 {
39entry:
40  %alloca = alloca [262108 x i8], align 1, addrspace(5)
41  %alloca.bc = bitcast [262108 x i8] addrspace(5)* %alloca to i8 addrspace(5)*
42  call void @llvm.memset.p5i8.i32(i8 addrspace(5)* %alloca.bc, i8 9, i32 262108, i32 1, i1 true)
43  ret void
44}
45
46attributes #0 = { "target-cpu" = "gfx900" }
47attributes #1 = { "target-cpu" = "gfx1010" }
48