xref: /llvm-project/llvm/test/CodeGen/AMDGPU/occupancy-levels.ll (revision 076aac59acbe7555b922e77886e4428f1aa1cd0b)
1; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -mattr=-xnack < %s | FileCheck --check-prefixes=GCN,GFX9 %s
2; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -mattr=-xnack < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W32,GFX1010,GFX1010W32 %s
3; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -mattr=-xnack -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W64,GFX1010,GFX1010W64 %s
4; RUN: llc -mtriple=amdgcn -mcpu=gfx1030 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W32,GFX1030,GFX1030W32 %s
5; RUN: llc -mtriple=amdgcn -mcpu=gfx1030 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W64,GFX1030,GFX1030W64 %s
6; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W32 %s
7; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W64 %s
8; RUN: llc -mtriple=amdgcn -mcpu=gfx1101 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W32 %s
9; RUN: llc -mtriple=amdgcn -mcpu=gfx1101 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W64 %s
10; RUN: llc -mtriple=amdgcn -mcpu=gfx1102 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W32,GFX1030,GFX1030W32 %s
11; RUN: llc -mtriple=amdgcn -mcpu=gfx1102 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W64,GFX1030,GFX1030W64 %s
12; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W32,GFX1030,GFX1030W32 %s
13; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W64,GFX1030,GFX1030W64 %s
14; RUN: llc -mtriple=amdgcn -mcpu=gfx1151 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W32 %s
15; RUN: llc -mtriple=amdgcn -mcpu=gfx1151 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W64 %s
16; RUN: llc -mtriple=amdgcn -mcpu=gfx1152 < %s | FileCheck --check-prefixes=GCN,GFX1030,GFX1030W32 %s
17; RUN: llc -mtriple=amdgcn -mcpu=gfx1152 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX1030,GFX1030W64 %s
18; RUN: llc -mtriple=amdgcn -mcpu=gfx1153 < %s | FileCheck --check-prefixes=GCN,GFX1030,GFX1030W32 %s
19; RUN: llc -mtriple=amdgcn -mcpu=gfx1153 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX1030,GFX1030W64 %s
20; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W32 %s
21; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W64 %s
22
23; GCN-LABEL: {{^}}max_occupancy:
24; GFX9:       ; Occupancy: 10
25; GFX1010:    ; Occupancy: 20
26; GFX1030:    ; Occupancy: 16
27; GFX1100:    ; Occupancy: 16
28define amdgpu_kernel void @max_occupancy() #10 {
29  ret void
30}
31
32; GCN-LABEL: {{^}}limited_occupancy_3:
33; GFX9:       ; Occupancy: 3
34; GFX10W64:   ; Occupancy: 3
35; GFX10W32:   ; Occupancy: 4
36; GFX1100W64: ; Occupancy: 3
37; GFX1100W32: ; Occupancy: 5
38define amdgpu_kernel void @limited_occupancy_3() #0 {
39  ret void
40}
41
42; GCN-LABEL: {{^}}limited_occupancy_18:
43; GFX9:       ; Occupancy: 10
44; GFX1010:    ; Occupancy: 18
45; GFX1030:    ; Occupancy: 16
46; GFX1100:    ; Occupancy: 16
47define amdgpu_kernel void @limited_occupancy_18() #1 {
48  ret void
49}
50
51; GCN-LABEL: {{^}}limited_occupancy_19:
52; GFX9:       ; Occupancy: 10
53; GFX1010:    ; Occupancy: 20
54; GFX1030:    ; Occupancy: 16
55; GFX1100:    ; Occupancy: 16
56define amdgpu_kernel void @limited_occupancy_19() #2 {
57  ret void
58}
59
60; GCN-LABEL: {{^}}used_24_vgprs:
61; GFX9:       ; Occupancy: 10
62; GFX1010:    ; Occupancy: 20
63; GFX1030:    ; Occupancy: 16
64; GFX1100:    ; Occupancy: 16
65define amdgpu_kernel void @used_24_vgprs() #10 {
66  call void asm sideeffect "", "~{v23}" ()
67  ret void
68}
69
70; GCN-LABEL: {{^}}used_28_vgprs:
71; GFX9:       ; Occupancy: 9
72; GFX1010W64: ; Occupancy: 18
73; GFX1010W32: ; Occupancy: 20
74; GFX1030:    ; Occupancy: 16
75; GFX1100:    ; Occupancy: 16
76define amdgpu_kernel void @used_28_vgprs() #10 {
77  call void asm sideeffect "", "~{v27}" ()
78  ret void
79}
80
81; GCN-LABEL: {{^}}used_32_vgprs:
82; GFX9:       ; Occupancy: 8
83; GFX10W64:   ; Occupancy: 16
84; GFX1010W32: ; Occupancy: 20
85; GFX1030W32: ; Occupancy: 16
86; GFX1100:    ; Occupancy: 16
87define amdgpu_kernel void @used_32_vgprs() #10 {
88  call void asm sideeffect "", "~{v31}" ()
89  ret void
90}
91
92; GCN-LABEL: {{^}}used_36_vgprs:
93; GFX9:       ; Occupancy: 7
94; GFX1010W64: ; Occupancy: 14
95; GFX1010W32: ; Occupancy: 20
96; GFX1030W64: ; Occupancy: 12
97; GFX1030W32: ; Occupancy: 16
98; GFX1100:    ; Occupancy: 16
99define amdgpu_kernel void @used_36_vgprs() #10 {
100  call void asm sideeffect "", "~{v35}" ()
101  ret void
102}
103
104; GCN-LABEL: {{^}}used_40_vgprs:
105; GFX9:       ; Occupancy: 6
106; GFX10W64:   ; Occupancy: 12
107; GFX1010W32: ; Occupancy: 20
108; GFX1030W32: ; Occupancy: 16
109; GFX1100:    ; Occupancy: 16
110define amdgpu_kernel void @used_40_vgprs() #10 {
111  call void asm sideeffect "", "~{v39}" ()
112  ret void
113}
114
115; GCN-LABEL: {{^}}used_44_vgprs:
116; GFX9:       ; Occupancy: 5
117; GFX1010W64: ; Occupancy: 11
118; GFX1010W32: ; Occupancy: 20
119; GFX1030W64: ; Occupancy: 10
120; GFX1030W32: ; Occupancy: 16
121; GFX1100:    ; Occupancy: 16
122define amdgpu_kernel void @used_44_vgprs() #10 {
123  call void asm sideeffect "", "~{v43}" ()
124  ret void
125}
126
127; GCN-LABEL: {{^}}used_48_vgprs:
128; GFX9:       ; Occupancy: 5
129; GFX10W64:   ; Occupancy: 10
130; GFX1010W32: ; Occupancy: 20
131; GFX1030W32: ; Occupancy: 16
132; GFX1100:    ; Occupancy: 16
133define amdgpu_kernel void @used_48_vgprs() #10 {
134  call void asm sideeffect "", "~{v47}" ()
135  ret void
136}
137
138; GCN-LABEL: {{^}}used_56_vgprs:
139; GFX9:       ; Occupancy: 4
140; GFX10W64:   ; Occupancy: 9
141; GFX1010W32: ; Occupancy: 18
142; GFX1030W32: ; Occupancy: 16
143; GFX1100W64: ; Occupancy: 12
144; GFX1100W32: ; Occupancy: 16
145define amdgpu_kernel void @used_56_vgprs() #10 {
146  call void asm sideeffect "", "~{v55}" ()
147  ret void
148}
149
150; GCN-LABEL: {{^}}used_64_vgprs:
151; GFX9:       ; Occupancy: 4
152; GFX10W64:   ; Occupancy: 8
153; GFX10W32:   ; Occupancy: 16
154; GFX1100W64: ; Occupancy: 10
155; GFX1100W32: ; Occupancy: 16
156define amdgpu_kernel void @used_64_vgprs() #10 {
157  call void asm sideeffect "", "~{v63}" ()
158  ret void
159}
160
161; GCN-LABEL: {{^}}used_72_vgprs:
162; GFX9:       ; Occupancy: 3
163; GFX10W64:   ; Occupancy: 7
164; GFX1010W32: ; Occupancy: 14
165; GFX1030W32: ; Occupancy: 12
166; GFX1100W64: ; Occupancy: 10
167; GFX1100W32: ; Occupancy: 16
168define amdgpu_kernel void @used_72_vgprs() #10 {
169  call void asm sideeffect "", "~{v71}" ()
170  ret void
171}
172
173; GCN-LABEL: {{^}}used_80_vgprs:
174; GFX9:       ; Occupancy: 3
175; GFX10W64:   ; Occupancy: 6
176; GFX10W32:   ; Occupancy: 12
177; GFX1100W64: ; Occupancy: 9
178; GFX1100W32: ; Occupancy: 16
179define amdgpu_kernel void @used_80_vgprs() #10 {
180  call void asm sideeffect "", "~{v79}" ()
181  ret void
182}
183
184; GCN-LABEL: {{^}}used_84_vgprs:
185; GFX9:       ; Occupancy: 3
186; GFX1010W64: ; Occupancy: 6
187; GFX1010W32: ; Occupancy: 11
188; GFX1030W64: ; Occupancy: 5
189; GFX1030W32: ; Occupancy: 10
190; GFX1100W64: ; Occupancy: 9
191; GFX1100W32: ; Occupancy: 16
192define amdgpu_kernel void @used_84_vgprs() #10 {
193  call void asm sideeffect "", "~{v83}" ()
194  ret void
195}
196
197; GCN-LABEL: {{^}}used_88_vgprs:
198; GFX9:       ; Occupancy: 2
199; GFX10W64:   ; Occupancy: 5
200; GFX1010W32: ; Occupancy: 11
201; GFX1030W32: ; Occupancy: 10
202; GFX1100W64: ; Occupancy: 8
203; GFX1100W32: ; Occupancy: 16
204define amdgpu_kernel void @used_88_vgprs() #10 {
205  call void asm sideeffect "", "~{v87}" ()
206  ret void
207}
208
209; GCN-LABEL: {{^}}used_96_vgprs:
210; GFX9:       ; Occupancy: 2
211; GFX10W64:   ; Occupancy: 5
212; GFX10W32:   ; Occupancy: 10
213; GFX1100W64: ; Occupancy: 8
214; GFX1100W32: ; Occupancy: 16
215define amdgpu_kernel void @used_96_vgprs() #10 {
216  call void asm sideeffect "", "~{v95}" ()
217  ret void
218}
219
220; GCN-LABEL: {{^}}used_100_vgprs:
221; GFX9:       ; Occupancy: 2
222; GFX1010W64: ; Occupancy: 5
223; GFX1030W64: ; Occupancy: 4
224; GFX10W32:   ; Occupancy: 9
225; GFX1100W64: ; Occupancy: 7
226; GFX1100W32: ; Occupancy: 12
227define amdgpu_kernel void @used_100_vgprs() #10 {
228  call void asm sideeffect "", "~{v99}" ()
229  ret void
230}
231
232; GCN-LABEL: {{^}}used_112_vgprs:
233; GFX9:       ; Occupancy: 2
234; GFX10W64:   ; Occupancy: 4
235; GFX10W32:   ; Occupancy: 9
236; GFX1100W64: ; Occupancy: 6
237; GFX1100W32: ; Occupancy: 12
238define amdgpu_kernel void @used_112_vgprs() #10 {
239  call void asm sideeffect "", "~{v111}" ()
240  ret void
241}
242
243; GCN-LABEL: {{^}}used_128_vgprs:
244; GFX9:       ; Occupancy: 2
245; GFX10W64:   ; Occupancy: 4
246; GFX10W32:   ; Occupancy: 8
247; GFX1100W64: ; Occupancy: 5
248; GFX1100W32: ; Occupancy: 10
249define amdgpu_kernel void @used_128_vgprs() #10 {
250  call void asm sideeffect "", "~{v127}" ()
251  ret void
252}
253
254; GCN-LABEL: {{^}}used_144_vgprs:
255; GFX9:       ; Occupancy: 1
256; GFX10W64:   ; Occupancy: 3
257; GFX10W32:   ; Occupancy: 7
258; GFX1100W64: ; Occupancy: 5
259; GFX1100W32: ; Occupancy: 10
260define amdgpu_kernel void @used_144_vgprs() #10 {
261  call void asm sideeffect "", "~{v143}" ()
262  ret void
263}
264
265; GCN-LABEL: {{^}}used_168_vgprs:
266; GFX9:       ; Occupancy: 1
267; GFX10W64:   ; Occupancy: 3
268; GFX1010W32: ; Occupancy: 6
269; GFX1030W32: ; Occupancy: 5
270; GFX1100W64: ; Occupancy: 4
271; GFX1100W32: ; Occupancy: 9
272define amdgpu_kernel void @used_168_vgprs() #10 {
273  call void asm sideeffect "", "~{v167}" ()
274  ret void
275}
276
277; GCN-LABEL: {{^}}used_200_vgprs:
278; GFX9:       ; Occupancy: 1
279; GFX10W64:   ; Occupancy: 2
280; GFX1010W32: ; Occupancy: 5
281; GFX1030W32: ; Occupancy: 4
282; GFX1100W64: ; Occupancy: 3
283; GFX1100W32: ; Occupancy: 7
284define amdgpu_kernel void @used_200_vgprs() #10 {
285  call void asm sideeffect "", "~{v199}" ()
286  ret void
287}
288
289; GCN-LABEL: {{^}}used_256_vgprs:
290; GFX9:       ; Occupancy: 1
291; GFX10W64:   ; Occupancy: 2
292; GFX10W32:   ; Occupancy: 4
293; GFX1100W64: ; Occupancy: 2
294; GFX1100W32: ; Occupancy: 5
295define amdgpu_kernel void @used_256_vgprs() #10 {
296  call void asm sideeffect "", "~{v255}" ()
297  ret void
298}
299
300; GCN-LABEL: {{^}}used_80_sgprs:
301; GFX9:       ; Occupancy: 10
302; GFX1010:    ; Occupancy: 20
303; GFX1030:    ; Occupancy: 16
304; GFX1100:    ; Occupancy: 16
305define amdgpu_kernel void @used_80_sgprs() #10 {
306  call void asm sideeffect "", "~{s79}" ()
307  ret void
308}
309
310; GCN-LABEL: {{^}}used_88_sgprs:
311; GFX9:       ; Occupancy: 9
312; GFX1010:    ; Occupancy: 20
313; GFX1030:    ; Occupancy: 16
314; GFX1100:    ; Occupancy: 16
315define amdgpu_kernel void @used_88_sgprs() #10 {
316  call void asm sideeffect "", "~{s87}" ()
317  ret void
318}
319
320; GCN-LABEL: {{^}}used_100_sgprs:
321; GFX9:       ; Occupancy: 8
322; GFX1010:    ; Occupancy: 20
323; GFX1030:    ; Occupancy: 16
324; GFX1100:    ; Occupancy: 16
325define amdgpu_kernel void @used_100_sgprs() #10 {
326  call void asm sideeffect "", "~{s99}" ()
327  ret void
328}
329
330; GCN-LABEL: {{^}}used_101_sgprs:
331; GFX9:       ; Occupancy: 7
332; GFX1010:    ; Occupancy: 20
333; GFX1030:    ; Occupancy: 16
334; GFX1100:    ; Occupancy: 16
335define amdgpu_kernel void @used_101_sgprs() #10 {
336  call void asm sideeffect "", "~{s100}" ()
337  ret void
338}
339
340; GCN-LABEL: {{^}}used_lds_6552:
341; GFX9:       ; Occupancy: 8
342; GFX1010W64: ; Occupancy: 20
343; GFX1030W64: ; Occupancy: 16
344; GFX10W32:   ; Occupancy: 16
345; GFX1100:    ; Occupancy: 16
346@lds6552 = internal addrspace(3) global [6552 x i8] undef, align 4
347define amdgpu_kernel void @used_lds_6552() {
348  store volatile i8 1, ptr addrspace(3) @lds6552
349  ret void
350}
351
352; GCN-LABEL: {{^}}used_lds_6556:
353; GFX9:       ; Occupancy: 8
354; GFX1010W64: ; Occupancy: 20
355; GFX1030W64: ; Occupancy: 16
356; GFX10W32:   ; Occupancy: 16
357; GFX1100:    ; Occupancy: 16
358@lds6556 = internal addrspace(3) global [6556 x i8] undef, align 4
359define amdgpu_kernel void @used_lds_6556() {
360  store volatile i8 1, ptr addrspace(3) @lds6556
361  ret void
362}
363
364; GCN-LABEL: {{^}}used_lds_13112:
365; GFX9:       ; Occupancy: 8
366; GFX1010W64: ; Occupancy: 20
367; GFX1030W64: ; Occupancy: 16
368; GFX10W32:   ; Occupancy: 16
369; GFX1100:    ; Occupancy: 16
370@lds13112 = internal addrspace(3) global [13112 x i8] undef, align 4
371define amdgpu_kernel void @used_lds_13112() {
372  store volatile i8 1, ptr addrspace(3) @lds13112
373  ret void
374}
375
376; GCN-LABEL: {{^}}used_lds_8252_max_group_size_64:
377; GFX9:       ; Occupancy: 2{{$}}
378; GFX10W64:   ; Occupancy: 4{{$}}
379; GFX10W32:   ; Occupancy: 8{{$}}
380; GFX1100W64: ; Occupancy: 4{{$}}
381; GFX1100W32: ; Occupancy: 8{{$}}
382@lds8252 = internal addrspace(3) global [8252 x i8] undef, align 4
383define amdgpu_kernel void @used_lds_8252_max_group_size_64() #3 {
384  store volatile i8 1, ptr addrspace(3) @lds8252
385  ret void
386}
387
388; GCN-LABEL: {{^}}used_lds_8252_max_group_size_96:
389; GFX9:       ; Occupancy: 4{{$}}
390; GFX10W64:   ; Occupancy: 8{{$}}
391; GFX10W32:   ; Occupancy: 12{{$}}
392; GFX1100W64: ; Occupancy: 8{{$}}
393; GFX1100W32: ; Occupancy: 12{{$}}
394define amdgpu_kernel void @used_lds_8252_max_group_size_96() #4 {
395  store volatile i8 1, ptr addrspace(3) @lds8252
396  ret void
397}
398
399; GCN-LABEL: {{^}}used_lds_8252_max_group_size_128:
400; GFX9:       ; Occupancy: 4{{$}}
401; GFX10W64:   ; Occupancy: 8{{$}}
402; GFX10W32:   ; Occupancy: 15{{$}}
403; GFX1100W64: ; Occupancy: 8{{$}}
404; GFX1100W32: ; Occupancy: 15{{$}}
405define amdgpu_kernel void @used_lds_8252_max_group_size_128() #5 {
406  store volatile i8 1, ptr addrspace(3) @lds8252
407  ret void
408}
409
410; GCN-LABEL: {{^}}used_lds_8252_max_group_size_192:
411; GFX9:       ; Occupancy: 6{{$}}
412; GFX10W64:   ; Occupancy: 12{{$}}
413; GFX1010W32: ; Occupancy: 20{{$}}
414; GFX1030W32: ; Occupancy: 15{{$}}
415; GFX1100W64: ; Occupancy: 12{{$}}
416; GFX1100W32: ; Occupancy: 15{{$}}
417define amdgpu_kernel void @used_lds_8252_max_group_size_192() #6 {
418  store volatile i8 1, ptr addrspace(3) @lds8252
419  ret void
420}
421
422; GCN-LABEL: {{^}}used_lds_8252_max_group_size_256:
423; GFX9:       ; Occupancy: 7{{$}}
424; GFX10W64:   ; Occupancy: 15{{$}}
425; GFX1010W32: ; Occupancy: 20{{$}}
426; GFX1030W32: ; Occupancy: 16{{$}}
427; GFX1100W64: ; Occupancy: 15{{$}}
428; GFX1100W32: ; Occupancy: 16{{$}}
429define amdgpu_kernel void @used_lds_8252_max_group_size_256() #7 {
430  store volatile i8 1, ptr addrspace(3) @lds8252
431  ret void
432}
433
434; GCN-LABEL: {{^}}used_lds_8252_max_group_size_512:
435; GFX9:       ; Occupancy: 10{{$}}
436; GFX1010:    ; Occupancy: 20{{$}}
437; GFX1030:    ; Occupancy: 16{{$}}
438; GFX1100:    ; Occupancy: 16{{$}}
439define amdgpu_kernel void @used_lds_8252_max_group_size_512() #8 {
440  store volatile i8 1, ptr addrspace(3) @lds8252
441  ret void
442}
443
444; GCN-LABEL: {{^}}used_lds_8252_max_group_size_1024:
445; GFX9:       ; Occupancy: 8{{$}}
446; GFX1010W32: ; Occupancy: 16{{$}}
447; GFX1010W64: ; Occupancy: 20{{$}}
448; GFX1030:    ; Occupancy: 16{{$}}
449; GFX1100:    ; Occupancy: 16{{$}}
450define amdgpu_kernel void @used_lds_8252_max_group_size_1024() #9 {
451  store volatile i8 1, ptr addrspace(3) @lds8252
452  ret void
453}
454
455; GCN-LABEL: {{^}}used_lds_8252_max_group_size_32:
456; GFX9:       ; Occupancy: 2{{$}}
457; GFX10:      ; Occupancy: 4{{$}}
458; GFX1100:    ; Occupancy: 4{{$}}
459define amdgpu_kernel void @used_lds_8252_max_group_size_32() #10 {
460  store volatile i8 1, ptr addrspace(3) @lds8252
461  ret void
462}
463
464attributes #0 = { "amdgpu-waves-per-eu"="2,3" "amdgpu-flat-work-group-size"="1,64" }
465attributes #1 = { "amdgpu-waves-per-eu"="18,18" "amdgpu-flat-work-group-size"="1,32" }
466attributes #2 = { "amdgpu-waves-per-eu"="19,19" "amdgpu-flat-work-group-size"="1,32" }
467attributes #3 = { "amdgpu-flat-work-group-size"="1,64" }
468attributes #4 = { "amdgpu-flat-work-group-size"="1,96" }
469attributes #5 = { "amdgpu-flat-work-group-size"="1,128" }
470attributes #6 = { "amdgpu-flat-work-group-size"="1,192" }
471attributes #7 = { "amdgpu-flat-work-group-size"="1,256" }
472attributes #8 = { "amdgpu-flat-work-group-size"="1,512" }
473attributes #9 = { "amdgpu-flat-work-group-size"="1,1024" }
474attributes #10 = { "amdgpu-flat-work-group-size"="1,32" }
475