1; RUN: llc -march=amdgcn -mcpu=gfx900 < %s | FileCheck --check-prefixes=GCN,GFX9 %s
2; RUN: llc -march=amdgcn -mcpu=gfx1010 < %s | FileCheck --check-prefixes=GCN,GFX1010,GFX1010W32 %s
3; RUN: llc -march=amdgcn -mcpu=gfx1010 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX1010,GFX1010W64 %s
4
5; GCN-LABEL: {{^}}max_occupancy:
6; GFX9:       ; Occupancy: 10
7; GFX1010:    ; Occupancy: 20
8define amdgpu_kernel void @max_occupancy() {
9  ret void
10}
11
12; GCN-LABEL: {{^}}limited_occupancy_3:
13; GFX9:       ; Occupancy: 3
14; GFX1010W64: ; Occupancy: 3
15; GFX1010W32: ; Occupancy: 4
16define amdgpu_kernel void @limited_occupancy_3() #0 {
17  ret void
18}
19
20; GCN-LABEL: {{^}}limited_occupancy_18:
21; GFX9:       ; Occupancy: 10
22; GFX1010:    ; Occupancy: 18
23define amdgpu_kernel void @limited_occupancy_18() #1 {
24  ret void
25}
26
27; GCN-LABEL: {{^}}limited_occupancy_19:
28; GFX9:       ; Occupancy: 10
29; GFX1010:    ; Occupancy: 18
30define amdgpu_kernel void @limited_occupancy_19() #2 {
31  ret void
32}
33
34; GCN-LABEL: {{^}}used_24_vgprs:
35; GFX9:       ; Occupancy: 10
36; GFX1010:    ; Occupancy: 20
37define amdgpu_kernel void @used_24_vgprs() {
38  call void asm sideeffect "", "~{v23}" ()
39  ret void
40}
41
42; GCN-LABEL: {{^}}used_28_vgprs:
43; GFX9:       ; Occupancy: 9
44; GFX1010W64: ; Occupancy: 18
45; GFX1010W32: ; Occupancy: 20
46define amdgpu_kernel void @used_28_vgprs() {
47  call void asm sideeffect "", "~{v27}" ()
48  ret void
49}
50
51; GCN-LABEL: {{^}}used_32_vgprs:
52; GFX9:       ; Occupancy: 8
53; GFX1010W64: ; Occupancy: 16
54; GFX1010W32: ; Occupancy: 20
55define amdgpu_kernel void @used_32_vgprs() {
56  call void asm sideeffect "", "~{v31}" ()
57  ret void
58}
59
60; GCN-LABEL: {{^}}used_36_vgprs:
61; GFX9:       ; Occupancy: 7
62; GFX1010W64: ; Occupancy: 14
63; GFX1010W32: ; Occupancy: 20
64define amdgpu_kernel void @used_36_vgprs() {
65  call void asm sideeffect "", "~{v35}" ()
66  ret void
67}
68
69; GCN-LABEL: {{^}}used_40_vgprs:
70; GFX9:       ; Occupancy: 6
71; GFX1010W64: ; Occupancy: 12
72; GFX1010W32: ; Occupancy: 20
73define amdgpu_kernel void @used_40_vgprs() {
74  call void asm sideeffect "", "~{v39}" ()
75  ret void
76}
77
78; GCN-LABEL: {{^}}used_44_vgprs:
79; GFX9:       ; Occupancy: 5
80; GFX1010W64: ; Occupancy: 11
81; GFX1010W32: ; Occupancy: 20
82define amdgpu_kernel void @used_44_vgprs() {
83  call void asm sideeffect "", "~{v43}" ()
84  ret void
85}
86
87; GCN-LABEL: {{^}}used_48_vgprs:
88; GFX9:       ; Occupancy: 5
89; GFX1010W64: ; Occupancy: 10
90; GFX1010W32: ; Occupancy: 20
91define amdgpu_kernel void @used_48_vgprs() {
92  call void asm sideeffect "", "~{v47}" ()
93  ret void
94}
95
96; GCN-LABEL: {{^}}used_56_vgprs:
97; GFX9:       ; Occupancy: 4
98; GFX1010W64: ; Occupancy: 9
99; GFX1010W32: ; Occupancy: 18
100define amdgpu_kernel void @used_56_vgprs() {
101  call void asm sideeffect "", "~{v55}" ()
102  ret void
103}
104
105; GCN-LABEL: {{^}}used_64_vgprs:
106; GFX9:       ; Occupancy: 4
107; GFX1010W64: ; Occupancy: 8
108; GFX1010W32: ; Occupancy: 16
109define amdgpu_kernel void @used_64_vgprs() {
110  call void asm sideeffect "", "~{v63}" ()
111  ret void
112}
113
114; GCN-LABEL: {{^}}used_72_vgprs:
115; GFX9:       ; Occupancy: 3
116; GFX1010W64: ; Occupancy: 7
117; GFX1010W32: ; Occupancy: 14
118define amdgpu_kernel void @used_72_vgprs() {
119  call void asm sideeffect "", "~{v71}" ()
120  ret void
121}
122
123; GCN-LABEL: {{^}}used_80_vgprs:
124; GFX9:       ; Occupancy: 3
125; GFX1010W64: ; Occupancy: 6
126; GFX1010W32: ; Occupancy: 12
127define amdgpu_kernel void @used_80_vgprs() {
128  call void asm sideeffect "", "~{v79}" ()
129  ret void
130}
131
132; GCN-LABEL: {{^}}used_84_vgprs:
133; GFX9:       ; Occupancy: 3
134; GFX1010W64: ; Occupancy: 6
135; GFX1010W32: ; Occupancy: 11
136define amdgpu_kernel void @used_84_vgprs() {
137  call void asm sideeffect "", "~{v83}" ()
138  ret void
139}
140
141; GCN-LABEL: {{^}}used_88_vgprs:
142; GFX9:       ; Occupancy: 2
143; GFX1010W64: ; Occupancy: 5
144; GFX1010W32: ; Occupancy: 11
145define amdgpu_kernel void @used_88_vgprs() {
146  call void asm sideeffect "", "~{v87}" ()
147  ret void
148}
149
150; GCN-LABEL: {{^}}used_96_vgprs:
151; GFX9:       ; Occupancy: 2
152; GFX1010W64: ; Occupancy: 5
153; GFX1010W32: ; Occupancy: 10
154define amdgpu_kernel void @used_96_vgprs() {
155  call void asm sideeffect "", "~{v95}" ()
156  ret void
157}
158
159; GCN-LABEL: {{^}}used_100_vgprs:
160; GFX9:       ; Occupancy: 2
161; GFX1010W64: ; Occupancy: 5
162; GFX1010W32: ; Occupancy: 9
163define amdgpu_kernel void @used_100_vgprs() {
164  call void asm sideeffect "", "~{v99}" ()
165  ret void
166}
167
168; GCN-LABEL: {{^}}used_112_vgprs:
169; GFX9:       ; Occupancy: 2
170; GFX1010W64: ; Occupancy: 4
171; GFX1010W32: ; Occupancy: 9
172define amdgpu_kernel void @used_112_vgprs() {
173  call void asm sideeffect "", "~{v111}" ()
174  ret void
175}
176
177; GCN-LABEL: {{^}}used_128_vgprs:
178; GFX9:       ; Occupancy: 2
179; GFX1010W64: ; Occupancy: 4
180; GFX1010W32: ; Occupancy: 8
181define amdgpu_kernel void @used_128_vgprs() {
182  call void asm sideeffect "", "~{v127}" ()
183  ret void
184}
185
186; GCN-LABEL: {{^}}used_144_vgprs:
187; GFX9:       ; Occupancy: 1
188; GFX1010W64: ; Occupancy: 3
189; GFX1010W32: ; Occupancy: 7
190define amdgpu_kernel void @used_144_vgprs() {
191  call void asm sideeffect "", "~{v143}" ()
192  ret void
193}
194
195; GCN-LABEL: {{^}}used_168_vgprs:
196; GFX9:       ; Occupancy: 1
197; GFX1010W64: ; Occupancy: 3
198; GFX1010W32: ; Occupancy: 6
199define amdgpu_kernel void @used_168_vgprs() {
200  call void asm sideeffect "", "~{v167}" ()
201  ret void
202}
203
204; GCN-LABEL: {{^}}used_200_vgprs:
205; GFX9:       ; Occupancy: 1
206; GFX1010W64: ; Occupancy: 2
207; GFX1010W32: ; Occupancy: 5
208define amdgpu_kernel void @used_200_vgprs() {
209  call void asm sideeffect "", "~{v199}" ()
210  ret void
211}
212
213; GCN-LABEL: {{^}}used_256_vgprs:
214; GFX9:       ; Occupancy: 1
215; GFX1010W64: ; Occupancy: 2
216; GFX1010W32: ; Occupancy: 4
217define amdgpu_kernel void @used_256_vgprs() {
218  call void asm sideeffect "", "~{v255}" ()
219  ret void
220}
221
222; GCN-LABEL: {{^}}used_80_sgprs:
223; GFX9:       ; Occupancy: 10
224; GFX1010:    ; Occupancy: 20
225define amdgpu_kernel void @used_80_sgprs() {
226  call void asm sideeffect "", "~{s79}" ()
227  ret void
228}
229
230; GCN-LABEL: {{^}}used_88_sgprs:
231; GFX9:       ; Occupancy: 9
232; GFX1010:    ; Occupancy: 20
233define amdgpu_kernel void @used_88_sgprs() {
234  call void asm sideeffect "", "~{s87}" ()
235  ret void
236}
237
238; GCN-LABEL: {{^}}used_100_sgprs:
239; GFX9:       ; Occupancy: 8
240; GFX1010:    ; Occupancy: 20
241define amdgpu_kernel void @used_100_sgprs() {
242  call void asm sideeffect "", "~{s99}" ()
243  ret void
244}
245
246; GCN-LABEL: {{^}}used_101_sgprs:
247; GFX9:       ; Occupancy: 7
248; GFX1010:    ; Occupancy: 20
249define amdgpu_kernel void @used_101_sgprs() {
250  call void asm sideeffect "", "~{s100}" ()
251  ret void
252}
253
254; GCN-LABEL: {{^}}used_lds_6552:
255; GFX9:       ; Occupancy: 10
256; GFX1010:    ; Occupancy: 20
257@lds6552 = internal addrspace(3) global [6552 x i8] undef, align 4
258define amdgpu_kernel void @used_lds_6552() {
259  %p = bitcast [6552 x i8] addrspace(3)* @lds6552 to i8 addrspace(3)*
260  store volatile i8 1, i8 addrspace(3)* %p
261  ret void
262}
263
264; GCN-LABEL: {{^}}used_lds_6556:
265; GFX9:       ; Occupancy: 9
266; GFX1010W64: ; Occupancy: 19
267; GFX1010W32: ; Occupancy: 20
268@lds6556 = internal addrspace(3) global [6556 x i8] undef, align 4
269define amdgpu_kernel void @used_lds_6556() {
270  %p = bitcast [6556 x i8] addrspace(3)* @lds6556 to i8 addrspace(3)*
271  store volatile i8 1, i8 addrspace(3)* %p
272  ret void
273}
274
275; GCN-LABEL: {{^}}used_lds_13112:
276; GFX9:       ; Occupancy: 4
277; GFX1010W64: ; Occupancy: 9
278; GFX1010W32: ; Occupancy: 19
279@lds13112 = internal addrspace(3) global [13112 x i8] undef, align 4
280define amdgpu_kernel void @used_lds_13112() {
281  %p = bitcast [13112 x i8] addrspace(3)* @lds13112 to i8 addrspace(3)*
282  store volatile i8 1, i8 addrspace(3)* %p
283  ret void
284}
285
286attributes #0 = { "amdgpu-waves-per-eu"="2,3" }
287attributes #1 = { "amdgpu-waves-per-eu"="18,18" }
288attributes #2 = { "amdgpu-waves-per-eu"="19,19" }
289