@@ -5,8 +5,188 @@ target datalayout = "A5"
5
5
6
6
; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
7
7
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 ) {
9
9
%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 :
11
191
ret void
12
192
}
0 commit comments