@@ -5,8 +5,188 @@ target datalayout = "A5"
55
66; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
77
8- define amdgpu_kernel void @test_dynamic_stackalloc ( ptr addrspace ( 1 ) %out , i32 %n ) {
8+ define amdgpu_kernel void @test_dynamic_stackalloc_kernel_uniform ( i32 %n ) {
99 %alloca = alloca i32 , i32 %n , addrspace (5 )
10- store volatile i32 0 , ptr addrspace (5 ) %alloca
10+ store volatile i32 123 , ptr addrspace (5 ) %alloca
11+ ret void
12+ }
13+
14+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
15+
16+ define amdgpu_kernel void @test_dynamic_stackalloc_kernel_uniform_over_aligned (i32 %n ) {
17+ %alloca = alloca i32 , i32 %n , align 128 , addrspace (5 )
18+ store volatile i32 10 , ptr addrspace (5 ) %alloca
19+ ret void
20+ }
21+
22+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
23+
24+ define amdgpu_kernel void @test_dynamic_stackalloc_kernel_uniform_under_aligned (i32 %n ) {
25+ %alloca = alloca i32 , i32 %n , align 2 , addrspace (5 )
26+ store volatile i32 22 , ptr addrspace (5 ) %alloca
27+ ret void
28+ }
29+
30+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
31+
32+ define amdgpu_kernel void @test_dynamic_stackalloc_kernel_divergent () {
33+ %idx = call i32 @llvm.amdgcn.workitem.id.x ()
34+ %alloca = alloca float , i32 %idx , addrspace (5 )
35+ store volatile i32 123 , ptr addrspace (5 ) %alloca
36+ ret void
37+ }
38+
39+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
40+
41+ define amdgpu_kernel void @test_dynamic_stackalloc_kernel_divergent_over_aligned () {
42+ %idx = call i32 @llvm.amdgcn.workitem.id.x ()
43+ %alloca = alloca i32 , i32 %idx , align 128 , addrspace (5 )
44+ store volatile i32 444 , ptr addrspace (5 ) %alloca
45+ ret void
46+ }
47+
48+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
49+
50+ define amdgpu_kernel void @test_dynamic_stackalloc_kernel_divergent_under_aligned () {
51+ %idx = call i32 @llvm.amdgcn.workitem.id.x ()
52+ %alloca = alloca i128 , i32 %idx , align 2 , addrspace (5 )
53+ store volatile i32 666 , ptr addrspace (5 ) %alloca
54+ ret void
55+ }
56+
57+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
58+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
59+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
60+
61+ define amdgpu_kernel void @test_dynamic_stackalloc_kernel_multiple_allocas (i32 %n , i32 %m ) {
62+ entry:
63+ %cond = icmp eq i32 %n , 0
64+ %alloca1 = alloca i32 , i32 8 , addrspace (5 )
65+ %alloca2 = alloca i17 , i32 %n , addrspace (5 )
66+ br i1 %cond , label %bb.0 , label %bb.1
67+ bb.0 :
68+ %idx = call i32 @llvm.amdgcn.workitem.id.x ()
69+ %alloca3 = alloca i32 , i32 %m , align 64 , addrspace (5 )
70+ %alloca4 = alloca i32 , i32 %idx , align 4 , addrspace (5 )
71+ store volatile i32 3 , ptr addrspace (5 ) %alloca3
72+ store volatile i32 4 , ptr addrspace (5 ) %alloca4
73+ br label %bb.1
74+ bb.1 :
75+ store volatile i32 1 , ptr addrspace (5 ) %alloca1
76+ store volatile i32 2 , ptr addrspace (5 ) %alloca2
77+ ret void
78+ }
79+
80+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
81+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
82+
83+ define amdgpu_kernel void @test_dynamic_stackalloc_kernel_control_flow (i32 %n , i32 %m ) {
84+ entry:
85+ %cond = icmp eq i32 %n , 0
86+ br i1 %cond , label %bb.0 , label %bb.1
87+ bb.0 :
88+ %alloca2 = alloca i32 , i32 %m , align 64 , addrspace (5 )
89+ store volatile i32 2 , ptr addrspace (5 ) %alloca2
90+ br label %bb.2
91+ bb.1 :
92+ %idx = call i32 @llvm.amdgcn.workitem.id.x ()
93+ %alloca1 = alloca i32 , i32 %idx , align 4 , addrspace (5 )
94+ store volatile i32 1 , ptr addrspace (5 ) %alloca1
95+ br label %bb.2
96+ bb.2 :
97+ ret void
98+ }
99+
100+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
101+
102+ define void @test_dynamic_stackalloc_device_uniform (i32 %n ) {
103+ %alloca = alloca i32 , i32 %n , addrspace (5 )
104+ store volatile i32 123 , ptr addrspace (5 ) %alloca
105+ ret void
106+ }
107+
108+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
109+
110+ define void @test_dynamic_stackalloc_device_uniform_over_aligned (i32 %n ) {
111+ %alloca = alloca i32 , i32 %n , align 128 , addrspace (5 )
112+ store volatile i32 10 , ptr addrspace (5 ) %alloca
113+ ret void
114+ }
115+
116+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
117+
118+ define void @test_dynamic_stackalloc_device_uniform_under_aligned (i32 %n ) {
119+ %alloca = alloca i32 , i32 %n , align 2 , addrspace (5 )
120+ store volatile i32 22 , ptr addrspace (5 ) %alloca
121+ ret void
122+ }
123+
124+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
125+
126+ define void @test_dynamic_stackalloc_device_divergent () {
127+ %idx = call i32 @llvm.amdgcn.workitem.id.x ()
128+ %alloca = alloca i32 , i32 %idx , addrspace (5 )
129+ store volatile i32 123 , ptr addrspace (5 ) %alloca
130+ ret void
131+ }
132+
133+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
134+
135+ define void @test_dynamic_stackalloc_device_divergent_over_aligned () {
136+ %idx = call i32 @llvm.amdgcn.workitem.id.x ()
137+ %alloca = alloca i32 , i32 %idx , align 128 , addrspace (5 )
138+ store volatile i32 444 , ptr addrspace (5 ) %alloca
139+ ret void
140+ }
141+
142+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
143+
144+ define void @test_dynamic_stackalloc_device_divergent_under_aligned () {
145+ %idx = call i32 @llvm.amdgcn.workitem.id.x ()
146+ %alloca = alloca i32 , i32 %idx , align 2 , addrspace (5 )
147+ store volatile i32 666 , ptr addrspace (5 ) %alloca
148+ ret void
149+ }
150+
151+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
152+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
153+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
154+
155+ define void @test_dynamic_stackalloc_device_multiple_allocas (i32 %n , i32 %m ) {
156+ entry:
157+ %cond = icmp eq i32 %n , 0
158+ %alloca1 = alloca i32 , i32 8 , addrspace (5 )
159+ %alloca2 = alloca i32 , i32 %n , addrspace (5 )
160+ br i1 %cond , label %bb.0 , label %bb.1
161+ bb.0 :
162+ %idx = call i32 @llvm.amdgcn.workitem.id.x ()
163+ %alloca3 = alloca i32 , i32 %m , align 64 , addrspace (5 )
164+ %alloca4 = alloca i32 , i32 %idx , align 4 , addrspace (5 )
165+ store volatile i32 3 , ptr addrspace (5 ) %alloca3
166+ store volatile i32 4 , ptr addrspace (5 ) %alloca4
167+ br label %bb.1
168+ bb.1 :
169+ store volatile i32 1 , ptr addrspace (5 ) %alloca1
170+ store volatile i32 2 , ptr addrspace (5 ) %alloca2
171+ ret void
172+ }
173+
174+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
175+ ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
176+
177+ define void @test_dynamic_stackalloc_device_control_flow (i32 %n , i32 %m ) {
178+ entry:
179+ %cond = icmp eq i32 %n , 0
180+ br i1 %cond , label %bb.0 , label %bb.1
181+ bb.0 :
182+ %idx = call i32 @llvm.amdgcn.workitem.id.x ()
183+ %alloca1 = alloca i32 , i32 %idx , align 4 , addrspace (5 )
184+ store volatile i32 1 , ptr addrspace (5 ) %alloca1
185+ br label %bb.2
186+ bb.1 :
187+ %alloca2 = alloca i32 , i32 %m , align 64 , addrspace (5 )
188+ store volatile i32 2 , ptr addrspace (5 ) %alloca2
189+ br label %bb.2
190+ bb.2 :
11191 ret void
12192}
0 commit comments