1 ; RUN: llc -march=amdgcn -mcpu=gfx900 -mattr=-xnack < %s | FileCheck --check-prefixes=GCN,GFX9 %s
2 ; RUN: llc -march=amdgcn -mcpu=gfx1010 -mattr=-xnack < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W32,GFX1010,GFX1010W32 %s
3 ; RUN: llc -march=amdgcn -mcpu=gfx1010 -mattr=-xnack -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W64,GFX1010,GFX1010W64 %s
4 ; RUN: llc -march=amdgcn -mcpu=gfx1030 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W32,GFX1030,GFX1030W32 %s
5 ; RUN: llc -march=amdgcn -mcpu=gfx1030 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W64,GFX1030,GFX1030W64 %s
6 ; RUN: llc -march=amdgcn -mcpu=gfx1100 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W32 %s
7 ; RUN: llc -march=amdgcn -mcpu=gfx1100 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W64 %s
8 ; RUN: llc -march=amdgcn -mcpu=gfx1101 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W32 %s
9 ; RUN: llc -march=amdgcn -mcpu=gfx1101 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W64 %s
10 ; RUN: llc -march=amdgcn -mcpu=gfx1102 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W32,GFX1030,GFX1030W32 %s
11 ; RUN: llc -march=amdgcn -mcpu=gfx1102 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W64,GFX1030,GFX1030W64 %s
12 ; RUN: llc -march=amdgcn -mcpu=gfx1150 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W32,GFX1030,GFX1030W32 %s
13 ; RUN: llc -march=amdgcn -mcpu=gfx1150 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W64,GFX1030,GFX1030W64 %s
14 ; RUN: llc -march=amdgcn -mcpu=gfx1151 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W32 %s
15 ; RUN: llc -march=amdgcn -mcpu=gfx1151 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W64 %s
17 ; GCN-LABEL: {{^}}max_occupancy:
18 ; GFX9: ; Occupancy: 10
19 ; GFX1010: ; Occupancy: 20
20 ; GFX1030: ; Occupancy: 16
21 ; GFX1100: ; Occupancy: 16
22 define amdgpu_kernel void @max_occupancy() #10 {
26 ; GCN-LABEL: {{^}}limited_occupancy_3:
27 ; GFX9: ; Occupancy: 3
28 ; GFX10W64: ; Occupancy: 3
29 ; GFX10W32: ; Occupancy: 4
30 ; GFX1100W64: ; Occupancy: 3
31 ; GFX1100W32: ; Occupancy: 5
32 define amdgpu_kernel void @limited_occupancy_3() #0 {
36 ; GCN-LABEL: {{^}}limited_occupancy_18:
37 ; GFX9: ; Occupancy: 10
38 ; GFX1010: ; Occupancy: 18
39 ; GFX1030: ; Occupancy: 16
40 ; GFX1100: ; Occupancy: 16
41 define amdgpu_kernel void @limited_occupancy_18() #1 {
45 ; GCN-LABEL: {{^}}limited_occupancy_19:
46 ; GFX9: ; Occupancy: 10
47 ; GFX1010: ; Occupancy: 20
48 ; GFX1030: ; Occupancy: 16
49 ; GFX1100: ; Occupancy: 16
50 define amdgpu_kernel void @limited_occupancy_19() #2 {
54 ; GCN-LABEL: {{^}}used_24_vgprs:
55 ; GFX9: ; Occupancy: 10
56 ; GFX1010: ; Occupancy: 20
57 ; GFX1030: ; Occupancy: 16
58 ; GFX1100: ; Occupancy: 16
59 define amdgpu_kernel void @used_24_vgprs() #10 {
60 call void asm sideeffect "", "~{v23}" ()
64 ; GCN-LABEL: {{^}}used_28_vgprs:
65 ; GFX9: ; Occupancy: 9
66 ; GFX1010W64: ; Occupancy: 18
67 ; GFX1010W32: ; Occupancy: 20
68 ; GFX1030: ; Occupancy: 16
69 ; GFX1100: ; Occupancy: 16
70 define amdgpu_kernel void @used_28_vgprs() #10 {
71 call void asm sideeffect "", "~{v27}" ()
75 ; GCN-LABEL: {{^}}used_32_vgprs:
76 ; GFX9: ; Occupancy: 8
77 ; GFX10W64: ; Occupancy: 16
78 ; GFX1010W32: ; Occupancy: 20
79 ; GFX1030W32: ; Occupancy: 16
80 ; GFX1100: ; Occupancy: 16
81 define amdgpu_kernel void @used_32_vgprs() #10 {
82 call void asm sideeffect "", "~{v31}" ()
86 ; GCN-LABEL: {{^}}used_36_vgprs:
87 ; GFX9: ; Occupancy: 7
88 ; GFX1010W64: ; Occupancy: 14
89 ; GFX1010W32: ; Occupancy: 20
90 ; GFX1030W64: ; Occupancy: 12
91 ; GFX1030W32: ; Occupancy: 16
92 ; GFX1100: ; Occupancy: 16
93 define amdgpu_kernel void @used_36_vgprs() #10 {
94 call void asm sideeffect "", "~{v35}" ()
98 ; GCN-LABEL: {{^}}used_40_vgprs:
99 ; GFX9: ; Occupancy: 6
100 ; GFX10W64: ; Occupancy: 12
101 ; GFX1010W32: ; Occupancy: 20
102 ; GFX1030W32: ; Occupancy: 16
103 ; GFX1100: ; Occupancy: 16
104 define amdgpu_kernel void @used_40_vgprs() #10 {
105 call void asm sideeffect "", "~{v39}" ()
109 ; GCN-LABEL: {{^}}used_44_vgprs:
110 ; GFX9: ; Occupancy: 5
111 ; GFX1010W64: ; Occupancy: 11
112 ; GFX1010W32: ; Occupancy: 20
113 ; GFX1030W64: ; Occupancy: 10
114 ; GFX1030W32: ; Occupancy: 16
115 ; GFX1100: ; Occupancy: 16
116 define amdgpu_kernel void @used_44_vgprs() #10 {
117 call void asm sideeffect "", "~{v43}" ()
121 ; GCN-LABEL: {{^}}used_48_vgprs:
122 ; GFX9: ; Occupancy: 5
123 ; GFX10W64: ; Occupancy: 10
124 ; GFX1010W32: ; Occupancy: 20
125 ; GFX1030W32: ; Occupancy: 16
126 ; GFX1100: ; Occupancy: 16
127 define amdgpu_kernel void @used_48_vgprs() #10 {
128 call void asm sideeffect "", "~{v47}" ()
132 ; GCN-LABEL: {{^}}used_56_vgprs:
133 ; GFX9: ; Occupancy: 4
134 ; GFX10W64: ; Occupancy: 9
135 ; GFX1010W32: ; Occupancy: 18
136 ; GFX1030W32: ; Occupancy: 16
137 ; GFX1100W64: ; Occupancy: 12
138 ; GFX1100W32: ; Occupancy: 16
139 define amdgpu_kernel void @used_56_vgprs() #10 {
140 call void asm sideeffect "", "~{v55}" ()
144 ; GCN-LABEL: {{^}}used_64_vgprs:
145 ; GFX9: ; Occupancy: 4
146 ; GFX10W64: ; Occupancy: 8
147 ; GFX10W32: ; Occupancy: 16
148 ; GFX1100W64: ; Occupancy: 10
149 ; GFX1100W32: ; Occupancy: 16
150 define amdgpu_kernel void @used_64_vgprs() #10 {
151 call void asm sideeffect "", "~{v63}" ()
155 ; GCN-LABEL: {{^}}used_72_vgprs:
156 ; GFX9: ; Occupancy: 3
157 ; GFX10W64: ; Occupancy: 7
158 ; GFX1010W32: ; Occupancy: 14
159 ; GFX1030W32: ; Occupancy: 12
160 ; GFX1100W64: ; Occupancy: 10
161 ; GFX1100W32: ; Occupancy: 16
162 define amdgpu_kernel void @used_72_vgprs() #10 {
163 call void asm sideeffect "", "~{v71}" ()
167 ; GCN-LABEL: {{^}}used_80_vgprs:
168 ; GFX9: ; Occupancy: 3
169 ; GFX10W64: ; Occupancy: 6
170 ; GFX10W32: ; Occupancy: 12
171 ; GFX1100W64: ; Occupancy: 9
172 ; GFX1100W32: ; Occupancy: 16
173 define amdgpu_kernel void @used_80_vgprs() #10 {
174 call void asm sideeffect "", "~{v79}" ()
178 ; GCN-LABEL: {{^}}used_84_vgprs:
179 ; GFX9: ; Occupancy: 3
180 ; GFX1010W64: ; Occupancy: 6
181 ; GFX1010W32: ; Occupancy: 11
182 ; GFX1030W64: ; Occupancy: 5
183 ; GFX1030W32: ; Occupancy: 10
184 ; GFX1100W64: ; Occupancy: 9
185 ; GFX1100W32: ; Occupancy: 16
186 define amdgpu_kernel void @used_84_vgprs() #10 {
187 call void asm sideeffect "", "~{v83}" ()
191 ; GCN-LABEL: {{^}}used_88_vgprs:
192 ; GFX9: ; Occupancy: 2
193 ; GFX10W64: ; Occupancy: 5
194 ; GFX1010W32: ; Occupancy: 11
195 ; GFX1030W32: ; Occupancy: 10
196 ; GFX1100W64: ; Occupancy: 8
197 ; GFX1100W32: ; Occupancy: 16
198 define amdgpu_kernel void @used_88_vgprs() #10 {
199 call void asm sideeffect "", "~{v87}" ()
203 ; GCN-LABEL: {{^}}used_96_vgprs:
204 ; GFX9: ; Occupancy: 2
205 ; GFX10W64: ; Occupancy: 5
206 ; GFX10W32: ; Occupancy: 10
207 ; GFX1100W64: ; Occupancy: 8
208 ; GFX1100W32: ; Occupancy: 16
209 define amdgpu_kernel void @used_96_vgprs() #10 {
210 call void asm sideeffect "", "~{v95}" ()
214 ; GCN-LABEL: {{^}}used_100_vgprs:
215 ; GFX9: ; Occupancy: 2
216 ; GFX1010W64: ; Occupancy: 5
217 ; GFX1030W64: ; Occupancy: 4
218 ; GFX10W32: ; Occupancy: 9
219 ; GFX1100W64: ; Occupancy: 7
220 ; GFX1100W32: ; Occupancy: 12
221 define amdgpu_kernel void @used_100_vgprs() #10 {
222 call void asm sideeffect "", "~{v99}" ()
226 ; GCN-LABEL: {{^}}used_112_vgprs:
227 ; GFX9: ; Occupancy: 2
228 ; GFX10W64: ; Occupancy: 4
229 ; GFX10W32: ; Occupancy: 9
230 ; GFX1100W64: ; Occupancy: 6
231 ; GFX1100W32: ; Occupancy: 12
232 define amdgpu_kernel void @used_112_vgprs() #10 {
233 call void asm sideeffect "", "~{v111}" ()
237 ; GCN-LABEL: {{^}}used_128_vgprs:
238 ; GFX9: ; Occupancy: 2
239 ; GFX10W64: ; Occupancy: 4
240 ; GFX10W32: ; Occupancy: 8
241 ; GFX1100W64: ; Occupancy: 5
242 ; GFX1100W32: ; Occupancy: 10
243 define amdgpu_kernel void @used_128_vgprs() #10 {
244 call void asm sideeffect "", "~{v127}" ()
248 ; GCN-LABEL: {{^}}used_144_vgprs:
249 ; GFX9: ; Occupancy: 1
250 ; GFX10W64: ; Occupancy: 3
251 ; GFX10W32: ; Occupancy: 7
252 ; GFX1100W64: ; Occupancy: 5
253 ; GFX1100W32: ; Occupancy: 10
254 define amdgpu_kernel void @used_144_vgprs() #10 {
255 call void asm sideeffect "", "~{v143}" ()
259 ; GCN-LABEL: {{^}}used_168_vgprs:
260 ; GFX9: ; Occupancy: 1
261 ; GFX10W64: ; Occupancy: 3
262 ; GFX1010W32: ; Occupancy: 6
263 ; GFX1030W32: ; Occupancy: 5
264 ; GFX1100W64: ; Occupancy: 4
265 ; GFX1100W32: ; Occupancy: 9
266 define amdgpu_kernel void @used_168_vgprs() #10 {
267 call void asm sideeffect "", "~{v167}" ()
271 ; GCN-LABEL: {{^}}used_200_vgprs:
272 ; GFX9: ; Occupancy: 1
273 ; GFX10W64: ; Occupancy: 2
274 ; GFX1010W32: ; Occupancy: 5
275 ; GFX1030W32: ; Occupancy: 4
276 ; GFX1100W64: ; Occupancy: 3
277 ; GFX1100W32: ; Occupancy: 7
278 define amdgpu_kernel void @used_200_vgprs() #10 {
279 call void asm sideeffect "", "~{v199}" ()
283 ; GCN-LABEL: {{^}}used_256_vgprs:
284 ; GFX9: ; Occupancy: 1
285 ; GFX10W64: ; Occupancy: 2
286 ; GFX10W32: ; Occupancy: 4
287 ; GFX1100W64: ; Occupancy: 2
288 ; GFX1100W32: ; Occupancy: 5
289 define amdgpu_kernel void @used_256_vgprs() #10 {
290 call void asm sideeffect "", "~{v255}" ()
294 ; GCN-LABEL: {{^}}used_80_sgprs:
295 ; GFX9: ; Occupancy: 10
296 ; GFX1010: ; Occupancy: 20
297 ; GFX1030: ; Occupancy: 16
298 ; GFX1100: ; Occupancy: 16
299 define amdgpu_kernel void @used_80_sgprs() #10 {
300 call void asm sideeffect "", "~{s79}" ()
304 ; GCN-LABEL: {{^}}used_88_sgprs:
305 ; GFX9: ; Occupancy: 9
306 ; GFX1010: ; Occupancy: 20
307 ; GFX1030: ; Occupancy: 16
308 ; GFX1100: ; Occupancy: 16
309 define amdgpu_kernel void @used_88_sgprs() #10 {
310 call void asm sideeffect "", "~{s87}" ()
314 ; GCN-LABEL: {{^}}used_100_sgprs:
315 ; GFX9: ; Occupancy: 8
316 ; GFX1010: ; Occupancy: 20
317 ; GFX1030: ; Occupancy: 16
318 ; GFX1100: ; Occupancy: 16
319 define amdgpu_kernel void @used_100_sgprs() #10 {
320 call void asm sideeffect "", "~{s99}" ()
324 ; GCN-LABEL: {{^}}used_101_sgprs:
325 ; GFX9: ; Occupancy: 7
326 ; GFX1010: ; Occupancy: 20
327 ; GFX1030: ; Occupancy: 16
328 ; GFX1100: ; Occupancy: 16
329 define amdgpu_kernel void @used_101_sgprs() #10 {
330 call void asm sideeffect "", "~{s100}" ()
334 ; GCN-LABEL: {{^}}used_lds_6552:
335 ; GFX9: ; Occupancy: 8
336 ; GFX1010W64: ; Occupancy: 20
337 ; GFX1030W64: ; Occupancy: 16
338 ; GFX10W32: ; Occupancy: 16
339 ; GFX1100: ; Occupancy: 16
340 @lds6552 = internal addrspace(3) global [6552 x i8] undef, align 4
341 define amdgpu_kernel void @used_lds_6552() {
342 store volatile i8 1, ptr addrspace(3) @lds6552
346 ; GCN-LABEL: {{^}}used_lds_6556:
347 ; GFX9: ; Occupancy: 8
348 ; GFX1010W64: ; Occupancy: 20
349 ; GFX1030W64: ; Occupancy: 16
350 ; GFX10W32: ; Occupancy: 16
351 ; GFX1100: ; Occupancy: 16
352 @lds6556 = internal addrspace(3) global [6556 x i8] undef, align 4
353 define amdgpu_kernel void @used_lds_6556() {
354 store volatile i8 1, ptr addrspace(3) @lds6556
358 ; GCN-LABEL: {{^}}used_lds_13112:
359 ; GFX9: ; Occupancy: 8
360 ; GFX1010W64: ; Occupancy: 20
361 ; GFX1030W64: ; Occupancy: 16
362 ; GFX10W32: ; Occupancy: 16
363 ; GFX1100: ; Occupancy: 16
364 @lds13112 = internal addrspace(3) global [13112 x i8] undef, align 4
365 define amdgpu_kernel void @used_lds_13112() {
366 store volatile i8 1, ptr addrspace(3) @lds13112
370 ; GCN-LABEL: {{^}}used_lds_8252_max_group_size_64:
371 ; GFX9: ; Occupancy: 2{{$}}
372 ; GFX10W64: ; Occupancy: 4{{$}}
373 ; GFX10W32: ; Occupancy: 8{{$}}
374 ; GFX1100W64: ; Occupancy: 4{{$}}
375 ; GFX1100W32: ; Occupancy: 8{{$}}
376 @lds8252 = internal addrspace(3) global [8252 x i8] undef, align 4
377 define amdgpu_kernel void @used_lds_8252_max_group_size_64() #3 {
378 store volatile i8 1, ptr addrspace(3) @lds8252
382 ; GCN-LABEL: {{^}}used_lds_8252_max_group_size_96:
383 ; GFX9: ; Occupancy: 4{{$}}
384 ; GFX10W64: ; Occupancy: 8{{$}}
385 ; GFX10W32: ; Occupancy: 12{{$}}
386 ; GFX1100W64: ; Occupancy: 8{{$}}
387 ; GFX1100W32: ; Occupancy: 12{{$}}
388 define amdgpu_kernel void @used_lds_8252_max_group_size_96() #4 {
389 store volatile i8 1, ptr addrspace(3) @lds8252
393 ; GCN-LABEL: {{^}}used_lds_8252_max_group_size_128:
394 ; GFX9: ; Occupancy: 4{{$}}
395 ; GFX10W64: ; Occupancy: 8{{$}}
396 ; GFX10W32: ; Occupancy: 15{{$}}
397 ; GFX1100W64: ; Occupancy: 8{{$}}
398 ; GFX1100W32: ; Occupancy: 15{{$}}
399 define amdgpu_kernel void @used_lds_8252_max_group_size_128() #5 {
400 store volatile i8 1, ptr addrspace(3) @lds8252
404 ; GCN-LABEL: {{^}}used_lds_8252_max_group_size_192:
405 ; GFX9: ; Occupancy: 6{{$}}
406 ; GFX10W64: ; Occupancy: 12{{$}}
407 ; GFX1010W32: ; Occupancy: 20{{$}}
408 ; GFX1030W32: ; Occupancy: 15{{$}}
409 ; GFX1100W64: ; Occupancy: 12{{$}}
410 ; GFX1100W32: ; Occupancy: 15{{$}}
411 define amdgpu_kernel void @used_lds_8252_max_group_size_192() #6 {
412 store volatile i8 1, ptr addrspace(3) @lds8252
416 ; GCN-LABEL: {{^}}used_lds_8252_max_group_size_256:
417 ; GFX9: ; Occupancy: 7{{$}}
418 ; GFX10W64: ; Occupancy: 15{{$}}
419 ; GFX1010W32: ; Occupancy: 20{{$}}
420 ; GFX1030W32: ; Occupancy: 16{{$}}
421 ; GFX1100W64: ; Occupancy: 15{{$}}
422 ; GFX1100W32: ; Occupancy: 16{{$}}
423 define amdgpu_kernel void @used_lds_8252_max_group_size_256() #7 {
424 store volatile i8 1, ptr addrspace(3) @lds8252
428 ; GCN-LABEL: {{^}}used_lds_8252_max_group_size_512:
429 ; GFX9: ; Occupancy: 10{{$}}
430 ; GFX1010: ; Occupancy: 20{{$}}
431 ; GFX1030: ; Occupancy: 16{{$}}
432 ; GFX1100: ; Occupancy: 16{{$}}
433 define amdgpu_kernel void @used_lds_8252_max_group_size_512() #8 {
434 store volatile i8 1, ptr addrspace(3) @lds8252
438 ; GCN-LABEL: {{^}}used_lds_8252_max_group_size_1024:
439 ; GFX9: ; Occupancy: 8{{$}}
440 ; GFX1010W32: ; Occupancy: 16{{$}}
441 ; GFX1010W64: ; Occupancy: 20{{$}}
442 ; GFX1030: ; Occupancy: 16{{$}}
443 ; GFX1100: ; Occupancy: 16{{$}}
444 define amdgpu_kernel void @used_lds_8252_max_group_size_1024() #9 {
445 store volatile i8 1, ptr addrspace(3) @lds8252
449 ; GCN-LABEL: {{^}}used_lds_8252_max_group_size_32:
450 ; GFX9: ; Occupancy: 2{{$}}
451 ; GFX10: ; Occupancy: 4{{$}}
452 ; GFX1100: ; Occupancy: 4{{$}}
453 define amdgpu_kernel void @used_lds_8252_max_group_size_32() #10 {
454 store volatile i8 1, ptr addrspace(3) @lds8252
458 attributes #0 = { "amdgpu-waves-per-eu"="2,3" "amdgpu-flat-work-group-size"="1,64" }
459 attributes #1 = { "amdgpu-waves-per-eu"="18,18" "amdgpu-flat-work-group-size"="1,32" }
460 attributes #2 = { "amdgpu-waves-per-eu"="19,19" "amdgpu-flat-work-group-size"="1,32" }
461 attributes #3 = { "amdgpu-flat-work-group-size"="1,64" }
462 attributes #4 = { "amdgpu-flat-work-group-size"="1,96" }
463 attributes #5 = { "amdgpu-flat-work-group-size"="1,128" }
464 attributes #6 = { "amdgpu-flat-work-group-size"="1,192" }
465 attributes #7 = { "amdgpu-flat-work-group-size"="1,256" }
466 attributes #8 = { "amdgpu-flat-work-group-size"="1,512" }
467 attributes #9 = { "amdgpu-flat-work-group-size"="1,1024" }
468 attributes #10 = { "amdgpu-flat-work-group-size"="1,32" }