xref: /llvm-project/llvm/test/CodeGen/AMDGPU/function-resource-usage.ll (revision 9a5e5e28eca97ca06adc0cc60273dcf6cd61e32f)
1c897c13dSJanek van Oirschot; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -enable-ipra=0 < %s | FileCheck -check-prefix=GCN %s
2c897c13dSJanek van Oirschot
3c897c13dSJanek van Oirschot; Functions that don't make calls should have constants as its resource usage as no resource information has to be propagated.
4c897c13dSJanek van Oirschot
5c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}use_vcc:
6c897c13dSJanek van Oirschot; GCN: .set use_vcc.num_vgpr, 0
7c897c13dSJanek van Oirschot; GCN: .set use_vcc.num_agpr, 0
8c897c13dSJanek van Oirschot; GCN: .set use_vcc.numbered_sgpr, 32
9c897c13dSJanek van Oirschot; GCN: .set use_vcc.private_seg_size, 0
10c897c13dSJanek van Oirschot; GCN: .set use_vcc.uses_vcc, 1
11c897c13dSJanek van Oirschot; GCN: .set use_vcc.uses_flat_scratch, 0
12c897c13dSJanek van Oirschot; GCN: .set use_vcc.has_dyn_sized_stack, 0
13c897c13dSJanek van Oirschot; GCN: .set use_vcc.has_recursion, 0
14c897c13dSJanek van Oirschot; GCN: .set use_vcc.has_indirect_call, 0
15c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 36
16c897c13dSJanek van Oirschot; GCN: NumVgprs: 0
17c897c13dSJanek van Oirschot; GCN: ScratchSize: 0
18c897c13dSJanek van Oirschotdefine void @use_vcc() #1 {
19c897c13dSJanek van Oirschot  call void asm sideeffect "", "~{vcc}" () #0
20c897c13dSJanek van Oirschot  ret void
21c897c13dSJanek van Oirschot}
22c897c13dSJanek van Oirschot
23c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}indirect_use_vcc:
24c897c13dSJanek van Oirschot; GCN: .set indirect_use_vcc.num_vgpr, max(41, use_vcc.num_vgpr)
25c897c13dSJanek van Oirschot; GCN: .set indirect_use_vcc.num_agpr, max(0, use_vcc.num_agpr)
26c897c13dSJanek van Oirschot; GCN: .set indirect_use_vcc.numbered_sgpr, max(34, use_vcc.numbered_sgpr)
27c897c13dSJanek van Oirschot; GCN: .set indirect_use_vcc.private_seg_size, 16+(max(use_vcc.private_seg_size))
28c897c13dSJanek van Oirschot; GCN: .set indirect_use_vcc.uses_vcc, or(1, use_vcc.uses_vcc)
29c897c13dSJanek van Oirschot; GCN: .set indirect_use_vcc.uses_flat_scratch, or(0, use_vcc.uses_flat_scratch)
30c897c13dSJanek van Oirschot; GCN: .set indirect_use_vcc.has_dyn_sized_stack, or(0, use_vcc.has_dyn_sized_stack)
31c897c13dSJanek van Oirschot; GCN: .set indirect_use_vcc.has_recursion, or(0, use_vcc.has_recursion)
32c897c13dSJanek van Oirschot; GCN: .set indirect_use_vcc.has_indirect_call, or(0, use_vcc.has_indirect_call)
33c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 38
34c897c13dSJanek van Oirschot; GCN: NumVgprs: 41
35c897c13dSJanek van Oirschot; GCN: ScratchSize: 16
36c897c13dSJanek van Oirschotdefine void @indirect_use_vcc() #1 {
37c897c13dSJanek van Oirschot  call void @use_vcc()
38c897c13dSJanek van Oirschot  ret void
39c897c13dSJanek van Oirschot}
40c897c13dSJanek van Oirschot
41c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}indirect_2level_use_vcc_kernel:
42c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_vcc_kernel.num_vgpr, max(32, indirect_use_vcc.num_vgpr)
43c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_vcc_kernel.num_agpr, max(0, indirect_use_vcc.num_agpr)
44c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_vcc_kernel.numbered_sgpr, max(33, indirect_use_vcc.numbered_sgpr)
45c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_vcc_kernel.private_seg_size, 0+(max(indirect_use_vcc.private_seg_size))
46c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_vcc_kernel.uses_vcc, or(1, indirect_use_vcc.uses_vcc)
47c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_vcc_kernel.uses_flat_scratch, or(1, indirect_use_vcc.uses_flat_scratch)
48c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_vcc_kernel.has_dyn_sized_stack, or(0, indirect_use_vcc.has_dyn_sized_stack)
49c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_vcc_kernel.has_recursion, or(0, indirect_use_vcc.has_recursion)
50c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_vcc_kernel.has_indirect_call, or(0, indirect_use_vcc.has_indirect_call)
51c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 40
52c897c13dSJanek van Oirschot; GCN: NumVgprs: 41
53c897c13dSJanek van Oirschot; GCN: ScratchSize: 16
54c897c13dSJanek van Oirschotdefine amdgpu_kernel void @indirect_2level_use_vcc_kernel(ptr addrspace(1) %out) #0 {
55c897c13dSJanek van Oirschot  call void @indirect_use_vcc()
56c897c13dSJanek van Oirschot  ret void
57c897c13dSJanek van Oirschot}
58c897c13dSJanek van Oirschot
59c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}use_flat_scratch:
60c897c13dSJanek van Oirschot; GCN: .set use_flat_scratch.num_vgpr, 0
61c897c13dSJanek van Oirschot; GCN: .set use_flat_scratch.num_agpr, 0
62c897c13dSJanek van Oirschot; GCN: .set use_flat_scratch.numbered_sgpr, 32
63c897c13dSJanek van Oirschot; GCN: .set use_flat_scratch.private_seg_size, 0
64c897c13dSJanek van Oirschot; GCN: .set use_flat_scratch.uses_vcc, 0
65c897c13dSJanek van Oirschot; GCN: .set use_flat_scratch.uses_flat_scratch, 1
66c897c13dSJanek van Oirschot; GCN: .set use_flat_scratch.has_dyn_sized_stack, 0
67c897c13dSJanek van Oirschot; GCN: .set use_flat_scratch.has_recursion, 0
68c897c13dSJanek van Oirschot; GCN: .set use_flat_scratch.has_indirect_call, 0
69c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 38
70c897c13dSJanek van Oirschot; GCN: NumVgprs: 0
71c897c13dSJanek van Oirschot; GCN: ScratchSize: 0
72c897c13dSJanek van Oirschotdefine void @use_flat_scratch() #1 {
73c897c13dSJanek van Oirschot  call void asm sideeffect "", "~{flat_scratch}" () #0
74c897c13dSJanek van Oirschot  ret void
75c897c13dSJanek van Oirschot}
76c897c13dSJanek van Oirschot
77c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}indirect_use_flat_scratch:
78c897c13dSJanek van Oirschot; GCN: .set indirect_use_flat_scratch.num_vgpr, max(41, use_flat_scratch.num_vgpr)
79c897c13dSJanek van Oirschot; GCN: .set indirect_use_flat_scratch.num_agpr, max(0, use_flat_scratch.num_agpr)
80c897c13dSJanek van Oirschot; GCN: .set indirect_use_flat_scratch.numbered_sgpr, max(34, use_flat_scratch.numbered_sgpr)
81c897c13dSJanek van Oirschot; GCN: .set indirect_use_flat_scratch.private_seg_size, 16+(max(use_flat_scratch.private_seg_size))
82c897c13dSJanek van Oirschot; GCN: .set indirect_use_flat_scratch.uses_vcc, or(1, use_flat_scratch.uses_vcc)
83c897c13dSJanek van Oirschot; GCN: .set indirect_use_flat_scratch.uses_flat_scratch, or(0, use_flat_scratch.uses_flat_scratch)
84c897c13dSJanek van Oirschot; GCN: .set indirect_use_flat_scratch.has_dyn_sized_stack, or(0, use_flat_scratch.has_dyn_sized_stack)
85c897c13dSJanek van Oirschot; GCN: .set indirect_use_flat_scratch.has_recursion, or(0, use_flat_scratch.has_recursion)
86c897c13dSJanek van Oirschot; GCN: .set indirect_use_flat_scratch.has_indirect_call, or(0, use_flat_scratch.has_indirect_call)
87c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 40
88c897c13dSJanek van Oirschot; GCN: NumVgprs: 41
89c897c13dSJanek van Oirschot; GCN: ScratchSize: 16
90c897c13dSJanek van Oirschotdefine void @indirect_use_flat_scratch() #1 {
91c897c13dSJanek van Oirschot  call void @use_flat_scratch()
92c897c13dSJanek van Oirschot  ret void
93c897c13dSJanek van Oirschot}
94c897c13dSJanek van Oirschot
95c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}indirect_2level_use_flat_scratch_kernel:
96c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_flat_scratch_kernel.num_vgpr, max(32, indirect_use_flat_scratch.num_vgpr)
97c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_flat_scratch_kernel.num_agpr, max(0, indirect_use_flat_scratch.num_agpr)
98c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_flat_scratch_kernel.numbered_sgpr, max(33, indirect_use_flat_scratch.numbered_sgpr)
99c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_flat_scratch_kernel.private_seg_size, 0+(max(indirect_use_flat_scratch.private_seg_size))
100c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_flat_scratch_kernel.uses_vcc, or(1, indirect_use_flat_scratch.uses_vcc)
101c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_flat_scratch_kernel.uses_flat_scratch, or(1, indirect_use_flat_scratch.uses_flat_scratch)
102c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_flat_scratch_kernel.has_dyn_sized_stack, or(0, indirect_use_flat_scratch.has_dyn_sized_stack)
103c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_flat_scratch_kernel.has_recursion, or(0, indirect_use_flat_scratch.has_recursion)
104c897c13dSJanek van Oirschot; GCN: .set indirect_2level_use_flat_scratch_kernel.has_indirect_call, or(0, indirect_use_flat_scratch.has_indirect_call)
105c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 40
106c897c13dSJanek van Oirschot; GCN: NumVgprs: 41
107c897c13dSJanek van Oirschot; GCN: ScratchSize: 16
108c897c13dSJanek van Oirschotdefine amdgpu_kernel void @indirect_2level_use_flat_scratch_kernel(ptr addrspace(1) %out) #0 {
109c897c13dSJanek van Oirschot  call void @indirect_use_flat_scratch()
110c897c13dSJanek van Oirschot  ret void
111c897c13dSJanek van Oirschot}
112c897c13dSJanek van Oirschot
113c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}use_10_vgpr:
114c897c13dSJanek van Oirschot; GCN: .set use_10_vgpr.num_vgpr, 10
115c897c13dSJanek van Oirschot; GCN: .set use_10_vgpr.num_agpr, 0
116c897c13dSJanek van Oirschot; GCN: .set use_10_vgpr.numbered_sgpr, 32
117c897c13dSJanek van Oirschot; GCN: .set use_10_vgpr.private_seg_size, 0
118c897c13dSJanek van Oirschot; GCN: .set use_10_vgpr.uses_vcc, 0
119c897c13dSJanek van Oirschot; GCN: .set use_10_vgpr.uses_flat_scratch, 0
120c897c13dSJanek van Oirschot; GCN: .set use_10_vgpr.has_dyn_sized_stack, 0
121c897c13dSJanek van Oirschot; GCN: .set use_10_vgpr.has_recursion, 0
122c897c13dSJanek van Oirschot; GCN: .set use_10_vgpr.has_indirect_call, 0
123c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 36
124c897c13dSJanek van Oirschot; GCN: NumVgprs: 10
125c897c13dSJanek van Oirschot; GCN: ScratchSize: 0
126c897c13dSJanek van Oirschotdefine void @use_10_vgpr() #1 {
127c897c13dSJanek van Oirschot  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4}"() #0
128c897c13dSJanek van Oirschot  call void asm sideeffect "", "~{v5},~{v6},~{v7},~{v8},~{v9}"() #0
129c897c13dSJanek van Oirschot  ret void
130c897c13dSJanek van Oirschot}
131c897c13dSJanek van Oirschot
132c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}indirect_use_10_vgpr:
133c897c13dSJanek van Oirschot; GCN: .set indirect_use_10_vgpr.num_vgpr, max(41, use_10_vgpr.num_vgpr)
134c897c13dSJanek van Oirschot; GCN: .set indirect_use_10_vgpr.num_agpr, max(0, use_10_vgpr.num_agpr)
135c897c13dSJanek van Oirschot; GCN: .set indirect_use_10_vgpr.numbered_sgpr, max(34, use_10_vgpr.numbered_sgpr)
136c897c13dSJanek van Oirschot; GCN: .set indirect_use_10_vgpr.private_seg_size, 16+(max(use_10_vgpr.private_seg_size))
137c897c13dSJanek van Oirschot; GCN: .set indirect_use_10_vgpr.uses_vcc, or(1, use_10_vgpr.uses_vcc)
138c897c13dSJanek van Oirschot; GCN: .set indirect_use_10_vgpr.uses_flat_scratch, or(0, use_10_vgpr.uses_flat_scratch)
139c897c13dSJanek van Oirschot; GCN: .set indirect_use_10_vgpr.has_dyn_sized_stack, or(0, use_10_vgpr.has_dyn_sized_stack)
140c897c13dSJanek van Oirschot; GCN: .set indirect_use_10_vgpr.has_recursion, or(0, use_10_vgpr.has_recursion)
141c897c13dSJanek van Oirschot; GCN: .set indirect_use_10_vgpr.has_indirect_call, or(0, use_10_vgpr.has_indirect_call)
142c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 38
143c897c13dSJanek van Oirschot; GCN: NumVgprs: 41
144c897c13dSJanek van Oirschot; GCN: ScratchSize: 16
145c897c13dSJanek van Oirschotdefine void @indirect_use_10_vgpr() #0 {
146c897c13dSJanek van Oirschot  call void @use_10_vgpr()
147c897c13dSJanek van Oirschot  ret void
148c897c13dSJanek van Oirschot}
149c897c13dSJanek van Oirschot
150c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}indirect_2_level_use_10_vgpr:
151c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_10_vgpr.num_vgpr, max(32, indirect_use_10_vgpr.num_vgpr)
152c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_10_vgpr.num_agpr, max(0, indirect_use_10_vgpr.num_agpr)
153c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_10_vgpr.numbered_sgpr, max(33, indirect_use_10_vgpr.numbered_sgpr)
154c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_10_vgpr.private_seg_size, 0+(max(indirect_use_10_vgpr.private_seg_size))
155c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_10_vgpr.uses_vcc, or(1, indirect_use_10_vgpr.uses_vcc)
156c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_10_vgpr.uses_flat_scratch, or(1, indirect_use_10_vgpr.uses_flat_scratch)
157c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_10_vgpr.has_dyn_sized_stack, or(0, indirect_use_10_vgpr.has_dyn_sized_stack)
158c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_10_vgpr.has_recursion, or(0, indirect_use_10_vgpr.has_recursion)
159c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_10_vgpr.has_indirect_call, or(0, indirect_use_10_vgpr.has_indirect_call)
160c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 40
161c897c13dSJanek van Oirschot; GCN: NumVgprs: 41
162c897c13dSJanek van Oirschot; GCN: ScratchSize: 16
163c897c13dSJanek van Oirschotdefine amdgpu_kernel void @indirect_2_level_use_10_vgpr() #0 {
164c897c13dSJanek van Oirschot  call void @indirect_use_10_vgpr()
165c897c13dSJanek van Oirschot  ret void
166c897c13dSJanek van Oirschot}
167c897c13dSJanek van Oirschot
168c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}use_50_vgpr:
169c897c13dSJanek van Oirschot; GCN:	.set use_50_vgpr.num_vgpr, 50
170c897c13dSJanek van Oirschot; GCN:	.set use_50_vgpr.num_agpr, 0
171c897c13dSJanek van Oirschot; GCN:	.set use_50_vgpr.numbered_sgpr, 32
172c897c13dSJanek van Oirschot; GCN:	.set use_50_vgpr.private_seg_size, 0
173c897c13dSJanek van Oirschot; GCN:	.set use_50_vgpr.uses_vcc, 0
174c897c13dSJanek van Oirschot; GCN:	.set use_50_vgpr.uses_flat_scratch, 0
175c897c13dSJanek van Oirschot; GCN:	.set use_50_vgpr.has_dyn_sized_stack, 0
176c897c13dSJanek van Oirschot; GCN:	.set use_50_vgpr.has_recursion, 0
177c897c13dSJanek van Oirschot; GCN:	.set use_50_vgpr.has_indirect_call, 0
178c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 36
179c897c13dSJanek van Oirschot; GCN: NumVgprs: 50
180c897c13dSJanek van Oirschot; GCN: ScratchSize: 0
181c897c13dSJanek van Oirschotdefine void @use_50_vgpr() #1 {
182c897c13dSJanek van Oirschot  call void asm sideeffect "", "~{v49}"() #0
183c897c13dSJanek van Oirschot  ret void
184c897c13dSJanek van Oirschot}
185c897c13dSJanek van Oirschot
186c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}indirect_use_50_vgpr:
187c897c13dSJanek van Oirschot; GCN:	.set indirect_use_50_vgpr.num_vgpr, max(41, use_50_vgpr.num_vgpr)
188c897c13dSJanek van Oirschot; GCN:	.set indirect_use_50_vgpr.num_agpr, max(0, use_50_vgpr.num_agpr)
189c897c13dSJanek van Oirschot; GCN:	.set indirect_use_50_vgpr.numbered_sgpr, max(34, use_50_vgpr.numbered_sgpr)
190c897c13dSJanek van Oirschot; GCN:	.set indirect_use_50_vgpr.private_seg_size, 16+(max(use_50_vgpr.private_seg_size))
191c897c13dSJanek van Oirschot; GCN:	.set indirect_use_50_vgpr.uses_vcc, or(1, use_50_vgpr.uses_vcc)
192c897c13dSJanek van Oirschot; GCN:	.set indirect_use_50_vgpr.uses_flat_scratch, or(0, use_50_vgpr.uses_flat_scratch)
193c897c13dSJanek van Oirschot; GCN:	.set indirect_use_50_vgpr.has_dyn_sized_stack, or(0, use_50_vgpr.has_dyn_sized_stack)
194c897c13dSJanek van Oirschot; GCN:	.set indirect_use_50_vgpr.has_recursion, or(0, use_50_vgpr.has_recursion)
195c897c13dSJanek van Oirschot; GCN:	.set indirect_use_50_vgpr.has_indirect_call, or(0, use_50_vgpr.has_indirect_call)
196c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 38
197c897c13dSJanek van Oirschot; GCN: NumVgprs: 50
198c897c13dSJanek van Oirschot; GCN: ScratchSize: 16
199c897c13dSJanek van Oirschotdefine void @indirect_use_50_vgpr() #0 {
200c897c13dSJanek van Oirschot  call void @use_50_vgpr()
201c897c13dSJanek van Oirschot  ret void
202c897c13dSJanek van Oirschot}
203c897c13dSJanek van Oirschot
204c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}use_80_sgpr:
205c897c13dSJanek van Oirschot; GCN:	.set use_80_sgpr.num_vgpr, 1
206c897c13dSJanek van Oirschot; GCN:	.set use_80_sgpr.num_agpr, 0
207c897c13dSJanek van Oirschot; GCN:	.set use_80_sgpr.numbered_sgpr, 80
208c897c13dSJanek van Oirschot; GCN:	.set use_80_sgpr.private_seg_size, 8
209c897c13dSJanek van Oirschot; GCN:	.set use_80_sgpr.uses_vcc, 0
210c897c13dSJanek van Oirschot; GCN:	.set use_80_sgpr.uses_flat_scratch, 0
211c897c13dSJanek van Oirschot; GCN:	.set use_80_sgpr.has_dyn_sized_stack, 0
212c897c13dSJanek van Oirschot; GCN:	.set use_80_sgpr.has_recursion, 0
213c897c13dSJanek van Oirschot; GCN:	.set use_80_sgpr.has_indirect_call, 0
214c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 84
215c897c13dSJanek van Oirschot; GCN: NumVgprs: 1
216c897c13dSJanek van Oirschot; GCN: ScratchSize: 8
217c897c13dSJanek van Oirschotdefine void @use_80_sgpr() #1 {
218c897c13dSJanek van Oirschot  call void asm sideeffect "", "~{s79}"() #0
219c897c13dSJanek van Oirschot  ret void
220c897c13dSJanek van Oirschot}
221c897c13dSJanek van Oirschot
222c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}indirect_use_80_sgpr:
223c897c13dSJanek van Oirschot; GCN:	.set indirect_use_80_sgpr.num_vgpr, max(41, use_80_sgpr.num_vgpr)
224c897c13dSJanek van Oirschot; GCN:	.set indirect_use_80_sgpr.num_agpr, max(0, use_80_sgpr.num_agpr)
225c897c13dSJanek van Oirschot; GCN:	.set indirect_use_80_sgpr.numbered_sgpr, max(34, use_80_sgpr.numbered_sgpr)
226c897c13dSJanek van Oirschot; GCN:	.set indirect_use_80_sgpr.private_seg_size, 16+(max(use_80_sgpr.private_seg_size))
227c897c13dSJanek van Oirschot; GCN:	.set indirect_use_80_sgpr.uses_vcc, or(1, use_80_sgpr.uses_vcc)
228c897c13dSJanek van Oirschot; GCN:	.set indirect_use_80_sgpr.uses_flat_scratch, or(0, use_80_sgpr.uses_flat_scratch)
229c897c13dSJanek van Oirschot; GCN:	.set indirect_use_80_sgpr.has_dyn_sized_stack, or(0, use_80_sgpr.has_dyn_sized_stack)
230c897c13dSJanek van Oirschot; GCN:	.set indirect_use_80_sgpr.has_recursion, or(0, use_80_sgpr.has_recursion)
231c897c13dSJanek van Oirschot; GCN:	.set indirect_use_80_sgpr.has_indirect_call, or(0, use_80_sgpr.has_indirect_call)
232c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 84
233c897c13dSJanek van Oirschot; GCN: NumVgprs: 41
234c897c13dSJanek van Oirschot; GCN: ScratchSize: 24
235c897c13dSJanek van Oirschotdefine void @indirect_use_80_sgpr() #1 {
236c897c13dSJanek van Oirschot  call void @use_80_sgpr()
237c897c13dSJanek van Oirschot  ret void
238c897c13dSJanek van Oirschot}
239c897c13dSJanek van Oirschot
240c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}indirect_2_level_use_80_sgpr:
241c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_80_sgpr.num_vgpr, max(32, indirect_use_80_sgpr.num_vgpr)
242c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_80_sgpr.num_agpr, max(0, indirect_use_80_sgpr.num_agpr)
243c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_80_sgpr.numbered_sgpr, max(33, indirect_use_80_sgpr.numbered_sgpr)
244c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_80_sgpr.private_seg_size, 0+(max(indirect_use_80_sgpr.private_seg_size))
245c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_80_sgpr.uses_vcc, or(1, indirect_use_80_sgpr.uses_vcc)
246c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_80_sgpr.uses_flat_scratch, or(1, indirect_use_80_sgpr.uses_flat_scratch)
247c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_80_sgpr.has_dyn_sized_stack, or(0, indirect_use_80_sgpr.has_dyn_sized_stack)
248c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_80_sgpr.has_recursion, or(0, indirect_use_80_sgpr.has_recursion)
249c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_80_sgpr.has_indirect_call, or(0, indirect_use_80_sgpr.has_indirect_call)
250c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 86
251c897c13dSJanek van Oirschot; GCN: NumVgprs: 41
252c897c13dSJanek van Oirschot; GCN: ScratchSize: 24
253c897c13dSJanek van Oirschotdefine amdgpu_kernel void @indirect_2_level_use_80_sgpr() #0 {
254c897c13dSJanek van Oirschot  call void @indirect_use_80_sgpr()
255c897c13dSJanek van Oirschot  ret void
256c897c13dSJanek van Oirschot}
257c897c13dSJanek van Oirschot
258c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}use_stack0:
259c897c13dSJanek van Oirschot; GCN:	.set use_stack0.num_vgpr, 1
260c897c13dSJanek van Oirschot; GCN:	.set use_stack0.num_agpr, 0
261c897c13dSJanek van Oirschot; GCN:	.set use_stack0.numbered_sgpr, 33
262c897c13dSJanek van Oirschot; GCN:	.set use_stack0.private_seg_size, 2052
263c897c13dSJanek van Oirschot; GCN:	.set use_stack0.uses_vcc, 0
264c897c13dSJanek van Oirschot; GCN:	.set use_stack0.uses_flat_scratch, 0
265c897c13dSJanek van Oirschot; GCN:	.set use_stack0.has_dyn_sized_stack, 0
266c897c13dSJanek van Oirschot; GCN:	.set use_stack0.has_recursion, 0
267c897c13dSJanek van Oirschot; GCN:	.set use_stack0.has_indirect_call, 0
268c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 37
269c897c13dSJanek van Oirschot; GCN: NumVgprs: 1
270c897c13dSJanek van Oirschot; GCN: ScratchSize: 2052
271c897c13dSJanek van Oirschotdefine void @use_stack0() #1 {
272c897c13dSJanek van Oirschot  %alloca = alloca [512 x i32], align 4, addrspace(5)
273c897c13dSJanek van Oirschot  call void asm sideeffect "; use $0", "v"(ptr addrspace(5) %alloca) #0
274c897c13dSJanek van Oirschot  ret void
275c897c13dSJanek van Oirschot}
276c897c13dSJanek van Oirschot
277c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}use_stack1:
278c897c13dSJanek van Oirschot; GCN:	.set use_stack1.num_vgpr, 1
279c897c13dSJanek van Oirschot; GCN:	.set use_stack1.num_agpr, 0
280c897c13dSJanek van Oirschot; GCN:	.set use_stack1.numbered_sgpr, 33
281c897c13dSJanek van Oirschot; GCN:	.set use_stack1.private_seg_size, 404
282c897c13dSJanek van Oirschot; GCN:	.set use_stack1.uses_vcc, 0
283c897c13dSJanek van Oirschot; GCN:	.set use_stack1.uses_flat_scratch, 0
284c897c13dSJanek van Oirschot; GCN:	.set use_stack1.has_dyn_sized_stack, 0
285c897c13dSJanek van Oirschot; GCN:	.set use_stack1.has_recursion, 0
286c897c13dSJanek van Oirschot; GCN:	.set use_stack1.has_indirect_call, 0
287c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 37
288c897c13dSJanek van Oirschot; GCN: NumVgprs: 1
289c897c13dSJanek van Oirschot; GCN: ScratchSize: 404
290c897c13dSJanek van Oirschotdefine void @use_stack1() #1 {
291c897c13dSJanek van Oirschot  %alloca = alloca [100 x i32], align 4, addrspace(5)
292c897c13dSJanek van Oirschot  call void asm sideeffect "; use $0", "v"(ptr addrspace(5) %alloca) #0
293c897c13dSJanek van Oirschot  ret void
294c897c13dSJanek van Oirschot}
295c897c13dSJanek van Oirschot
296c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}indirect_use_stack:
297c897c13dSJanek van Oirschot; GCN:	.set indirect_use_stack.num_vgpr, max(41, use_stack0.num_vgpr)
298c897c13dSJanek van Oirschot; GCN:	.set indirect_use_stack.num_agpr, max(0, use_stack0.num_agpr)
299c897c13dSJanek van Oirschot; GCN:	.set indirect_use_stack.numbered_sgpr, max(34, use_stack0.numbered_sgpr)
300c897c13dSJanek van Oirschot; GCN:	.set indirect_use_stack.private_seg_size, 80+(max(use_stack0.private_seg_size))
301c897c13dSJanek van Oirschot; GCN:	.set indirect_use_stack.uses_vcc, or(1, use_stack0.uses_vcc)
302c897c13dSJanek van Oirschot; GCN:	.set indirect_use_stack.uses_flat_scratch, or(0, use_stack0.uses_flat_scratch)
303c897c13dSJanek van Oirschot; GCN:	.set indirect_use_stack.has_dyn_sized_stack, or(0, use_stack0.has_dyn_sized_stack)
304c897c13dSJanek van Oirschot; GCN:	.set indirect_use_stack.has_recursion, or(0, use_stack0.has_recursion)
305c897c13dSJanek van Oirschot; GCN:	.set indirect_use_stack.has_indirect_call, or(0, use_stack0.has_indirect_call)
306c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 38
307c897c13dSJanek van Oirschot; GCN: NumVgprs: 41
308c897c13dSJanek van Oirschot; GCN: ScratchSize: 2132
309c897c13dSJanek van Oirschotdefine void @indirect_use_stack() #1 {
310c897c13dSJanek van Oirschot  %alloca = alloca [16 x i32], align 4, addrspace(5)
311c897c13dSJanek van Oirschot  call void asm sideeffect "; use $0", "v"(ptr addrspace(5) %alloca) #0
312c897c13dSJanek van Oirschot  call void @use_stack0()
313c897c13dSJanek van Oirschot  ret void
314c897c13dSJanek van Oirschot}
315c897c13dSJanek van Oirschot
316c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}indirect_2_level_use_stack:
317c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_stack.num_vgpr, max(32, indirect_use_stack.num_vgpr)
318c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_stack.num_agpr, max(0, indirect_use_stack.num_agpr)
319c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_stack.numbered_sgpr, max(33, indirect_use_stack.numbered_sgpr)
320c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_stack.private_seg_size, 0+(max(indirect_use_stack.private_seg_size))
321c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_stack.uses_vcc, or(1, indirect_use_stack.uses_vcc)
322c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_stack.uses_flat_scratch, or(1, indirect_use_stack.uses_flat_scratch)
323c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_stack.has_dyn_sized_stack, or(0, indirect_use_stack.has_dyn_sized_stack)
324c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_stack.has_recursion, or(0, indirect_use_stack.has_recursion)
325c897c13dSJanek van Oirschot; GCN:	.set indirect_2_level_use_stack.has_indirect_call, or(0, indirect_use_stack.has_indirect_call)
326c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 40
327c897c13dSJanek van Oirschot; GCN: NumVgprs: 41
328c897c13dSJanek van Oirschot; GCN: ScratchSize: 2132
329c897c13dSJanek van Oirschotdefine amdgpu_kernel void @indirect_2_level_use_stack() #0 {
330c897c13dSJanek van Oirschot  call void @indirect_use_stack()
331c897c13dSJanek van Oirschot  ret void
332c897c13dSJanek van Oirschot}
333c897c13dSJanek van Oirschot
334c897c13dSJanek van Oirschot
335c897c13dSJanek van Oirschot; Should be maximum of callee usage
336c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}multi_call_use_use_stack:
337c897c13dSJanek van Oirschot; GCN:	.set multi_call_use_use_stack.num_vgpr, max(41, use_stack0.num_vgpr, use_stack1.num_vgpr)
338c897c13dSJanek van Oirschot; GCN:	.set multi_call_use_use_stack.num_agpr, max(0, use_stack0.num_agpr, use_stack1.num_agpr)
3396548b635SShilei Tian; GCN:	.set multi_call_use_use_stack.numbered_sgpr, max(44, use_stack0.numbered_sgpr, use_stack1.numbered_sgpr)
340c897c13dSJanek van Oirschot; GCN:	.set multi_call_use_use_stack.private_seg_size, 0+(max(use_stack0.private_seg_size, use_stack1.private_seg_size))
341c897c13dSJanek van Oirschot; GCN:	.set multi_call_use_use_stack.uses_vcc, or(1, use_stack0.uses_vcc, use_stack1.uses_vcc)
342c897c13dSJanek van Oirschot; GCN:	.set multi_call_use_use_stack.uses_flat_scratch, or(1, use_stack0.uses_flat_scratch, use_stack1.uses_flat_scratch)
343c897c13dSJanek van Oirschot; GCN:	.set multi_call_use_use_stack.has_dyn_sized_stack, or(0, use_stack0.has_dyn_sized_stack, use_stack1.has_dyn_sized_stack)
344c897c13dSJanek van Oirschot; GCN:	.set multi_call_use_use_stack.has_recursion, or(0, use_stack0.has_recursion, use_stack1.has_recursion)
345c897c13dSJanek van Oirschot; GCN:	.set multi_call_use_use_stack.has_indirect_call, or(0, use_stack0.has_indirect_call, use_stack1.has_indirect_call)
3466548b635SShilei Tian; GCN: TotalNumSgprs: 50
347c897c13dSJanek van Oirschot; GCN: NumVgprs: 41
348c897c13dSJanek van Oirschot; GCN: ScratchSize: 2052
349c897c13dSJanek van Oirschotdefine amdgpu_kernel void @multi_call_use_use_stack() #0 {
350c897c13dSJanek van Oirschot  call void @use_stack0()
351c897c13dSJanek van Oirschot  call void @use_stack1()
352c897c13dSJanek van Oirschot  ret void
353c897c13dSJanek van Oirschot}
354c897c13dSJanek van Oirschot
355c897c13dSJanek van Oirschotdeclare void @external() #0
356c897c13dSJanek van Oirschot
357c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}multi_call_with_external:
358c897c13dSJanek van Oirschot; GCN:	.set multi_call_with_external.num_vgpr, max(41, amdgpu.max_num_vgpr)
359c897c13dSJanek van Oirschot; GCN:	.set multi_call_with_external.num_agpr, max(0, amdgpu.max_num_agpr)
3606548b635SShilei Tian; GCN:	.set multi_call_with_external.numbered_sgpr, max(44, amdgpu.max_num_sgpr)
361e3531952SJanek van Oirschot; GCN:	.set multi_call_with_external.private_seg_size, 0+(max(use_stack0.private_seg_size, use_stack1.private_seg_size))
362c897c13dSJanek van Oirschot; GCN:	.set multi_call_with_external.uses_vcc, 1
363c897c13dSJanek van Oirschot; GCN:	.set multi_call_with_external.uses_flat_scratch, 1
364c897c13dSJanek van Oirschot; GCN:	.set multi_call_with_external.has_dyn_sized_stack, 1
365c897c13dSJanek van Oirschot; GCN:	.set multi_call_with_external.has_recursion, 0
366c897c13dSJanek van Oirschot; GCN:	.set multi_call_with_external.has_indirect_call, 1
367c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: multi_call_with_external.numbered_sgpr+6
368c897c13dSJanek van Oirschot; GCN: NumVgprs: multi_call_with_external.num_vgpr
369e3531952SJanek van Oirschot; GCN: ScratchSize: 2052
370c897c13dSJanek van Oirschotdefine amdgpu_kernel void @multi_call_with_external() #0 {
371c897c13dSJanek van Oirschot  call void @use_stack0()
372c897c13dSJanek van Oirschot  call void @use_stack1()
373c897c13dSJanek van Oirschot  call void @external()
374c897c13dSJanek van Oirschot  ret void
375c897c13dSJanek van Oirschot}
376c897c13dSJanek van Oirschot
377e3531952SJanek van Oirschot; GCN-LABEL: {{^}}multi_call_with_external_and_duplicates:
378e3531952SJanek van Oirschot; GCN:	.set multi_call_with_external_and_duplicates.num_vgpr, max(41, amdgpu.max_num_vgpr)
379e3531952SJanek van Oirschot; GCN:	.set multi_call_with_external_and_duplicates.num_agpr, max(0, amdgpu.max_num_agpr)
3806548b635SShilei Tian; GCN:	.set multi_call_with_external_and_duplicates.numbered_sgpr, max(46, amdgpu.max_num_sgpr)
381e3531952SJanek van Oirschot; GCN:	.set multi_call_with_external_and_duplicates.private_seg_size, 0+(max(use_stack0.private_seg_size, use_stack1.private_seg_size))
382e3531952SJanek van Oirschot; GCN:	.set multi_call_with_external_and_duplicates.uses_vcc, 1
383e3531952SJanek van Oirschot; GCN:	.set multi_call_with_external_and_duplicates.uses_flat_scratch, 1
384e3531952SJanek van Oirschot; GCN:	.set multi_call_with_external_and_duplicates.has_dyn_sized_stack, 1
385e3531952SJanek van Oirschot; GCN:	.set multi_call_with_external_and_duplicates.has_recursion, 0
386e3531952SJanek van Oirschot; GCN:	.set multi_call_with_external_and_duplicates.has_indirect_call, 1
387e3531952SJanek van Oirschot; GCN: TotalNumSgprs: multi_call_with_external_and_duplicates.numbered_sgpr+6
388e3531952SJanek van Oirschot; GCN: NumVgprs: multi_call_with_external_and_duplicates.num_vgpr
389e3531952SJanek van Oirschot; GCN: ScratchSize: 2052
390e3531952SJanek van Oirschotdefine amdgpu_kernel void @multi_call_with_external_and_duplicates() #0 {
391e3531952SJanek van Oirschot  call void @use_stack0()
392e3531952SJanek van Oirschot  call void @use_stack0()
393e3531952SJanek van Oirschot  call void @use_stack1()
394e3531952SJanek van Oirschot  call void @use_stack1()
395e3531952SJanek van Oirschot  call void @external()
396e3531952SJanek van Oirschot  call void @external()
397e3531952SJanek van Oirschot  ret void
398e3531952SJanek van Oirschot}
399e3531952SJanek van Oirschot
400c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}usage_external:
401c897c13dSJanek van Oirschot; GCN:	.set usage_external.num_vgpr, max(32, amdgpu.max_num_vgpr)
402c897c13dSJanek van Oirschot; GCN:	.set usage_external.num_agpr, max(0, amdgpu.max_num_agpr)
403c897c13dSJanek van Oirschot; GCN:	.set usage_external.numbered_sgpr, max(33, amdgpu.max_num_sgpr)
404c897c13dSJanek van Oirschot; GCN:	.set usage_external.private_seg_size, 0
405c897c13dSJanek van Oirschot; GCN:	.set usage_external.uses_vcc, 1
406c897c13dSJanek van Oirschot; GCN:	.set usage_external.uses_flat_scratch, 1
407c897c13dSJanek van Oirschot; GCN:	.set usage_external.has_dyn_sized_stack, 1
408c897c13dSJanek van Oirschot; GCN:	.set usage_external.has_recursion, 0
409c897c13dSJanek van Oirschot; GCN:	.set usage_external.has_indirect_call, 1
410c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: usage_external.numbered_sgpr+6
411c897c13dSJanek van Oirschot; GCN: NumVgprs: usage_external.num_vgpr
412c897c13dSJanek van Oirschot; GCN: ScratchSize: 0
413c897c13dSJanek van Oirschotdefine amdgpu_kernel void @usage_external() #0 {
414c897c13dSJanek van Oirschot  call void @external()
415c897c13dSJanek van Oirschot  ret void
416c897c13dSJanek van Oirschot}
417c897c13dSJanek van Oirschot
418c897c13dSJanek van Oirschotdeclare void @external_recurse() #2
419c897c13dSJanek van Oirschot
420c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}usage_external_recurse:
421c897c13dSJanek van Oirschot; GCN:	.set usage_external_recurse.num_vgpr, max(32, amdgpu.max_num_vgpr)
422c897c13dSJanek van Oirschot; GCN:	.set usage_external_recurse.num_agpr, max(0, amdgpu.max_num_agpr)
423c897c13dSJanek van Oirschot; GCN:	.set usage_external_recurse.numbered_sgpr, max(33, amdgpu.max_num_sgpr)
424c897c13dSJanek van Oirschot; GCN:	.set usage_external_recurse.private_seg_size, 0
425c897c13dSJanek van Oirschot; GCN:	.set usage_external_recurse.uses_vcc, 1
426c897c13dSJanek van Oirschot; GCN:	.set usage_external_recurse.uses_flat_scratch, 1
427c897c13dSJanek van Oirschot; GCN:	.set usage_external_recurse.has_dyn_sized_stack, 1
428c897c13dSJanek van Oirschot; GCN:	.set usage_external_recurse.has_recursion, 1
429c897c13dSJanek van Oirschot; GCN:	.set usage_external_recurse.has_indirect_call, 1
430c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: usage_external_recurse.numbered_sgpr+6
431c897c13dSJanek van Oirschot; GCN: NumVgprs: usage_external_recurse.num_vgpr
432c897c13dSJanek van Oirschot; GCN: ScratchSize: 0
433c897c13dSJanek van Oirschotdefine amdgpu_kernel void @usage_external_recurse() #0 {
434c897c13dSJanek van Oirschot  call void @external_recurse()
435c897c13dSJanek van Oirschot  ret void
436c897c13dSJanek van Oirschot}
437c897c13dSJanek van Oirschot
438c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}direct_recursion_use_stack:
439c897c13dSJanek van Oirschot; GCN: .set direct_recursion_use_stack.num_vgpr, 41
440c897c13dSJanek van Oirschot; GCN: .set direct_recursion_use_stack.num_agpr, 0
441c897c13dSJanek van Oirschot; GCN: .set direct_recursion_use_stack.numbered_sgpr, 36
442c897c13dSJanek van Oirschot; GCN: .set direct_recursion_use_stack.private_seg_size, 2064
443c897c13dSJanek van Oirschot; GCN: .set direct_recursion_use_stack.uses_vcc, 1
444c897c13dSJanek van Oirschot; GCN: .set direct_recursion_use_stack.uses_flat_scratch, 0
445c897c13dSJanek van Oirschot; GCN: .set direct_recursion_use_stack.has_dyn_sized_stack, 0
446c897c13dSJanek van Oirschot; GCN: .set direct_recursion_use_stack.has_recursion, 1
447c897c13dSJanek van Oirschot; GCN: .set direct_recursion_use_stack.has_indirect_call, 0
448c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 40
449c897c13dSJanek van Oirschot; GCN: NumVgprs: 41
450c897c13dSJanek van Oirschot; GCN: ScratchSize: 2064
451c897c13dSJanek van Oirschotdefine void @direct_recursion_use_stack(i32 %val) #2 {
452c897c13dSJanek van Oirschot  %alloca = alloca [512 x i32], align 4, addrspace(5)
453c897c13dSJanek van Oirschot  call void asm sideeffect "; use $0", "v"(ptr addrspace(5) %alloca) #0
454c897c13dSJanek van Oirschot  %cmp = icmp eq i32 %val, 0
455c897c13dSJanek van Oirschot  br i1 %cmp, label %ret, label %call
456c897c13dSJanek van Oirschot
457c897c13dSJanek van Oirschotcall:
458c897c13dSJanek van Oirschot  %val.sub1 = sub i32 %val, 1
459c897c13dSJanek van Oirschot  call void @direct_recursion_use_stack(i32 %val.sub1)
460c897c13dSJanek van Oirschot  br label %ret
461c897c13dSJanek van Oirschot
462c897c13dSJanek van Oirschotret:
463c897c13dSJanek van Oirschot  ret void
464c897c13dSJanek van Oirschot}
465c897c13dSJanek van Oirschot
466c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}usage_direct_recursion:
467c897c13dSJanek van Oirschot; GCN:  .set usage_direct_recursion.num_vgpr, max(32, direct_recursion_use_stack.num_vgpr)
468c897c13dSJanek van Oirschot; GCN:  .set usage_direct_recursion.num_agpr, max(0, direct_recursion_use_stack.num_agpr)
469c897c13dSJanek van Oirschot; GCN:  .set usage_direct_recursion.numbered_sgpr, max(33, direct_recursion_use_stack.numbered_sgpr)
470c897c13dSJanek van Oirschot; GCN:  .set usage_direct_recursion.private_seg_size, 0+(max(direct_recursion_use_stack.private_seg_size))
471c897c13dSJanek van Oirschot; GCN:  .set usage_direct_recursion.uses_vcc, or(1, direct_recursion_use_stack.uses_vcc)
472c897c13dSJanek van Oirschot; GCN:  .set usage_direct_recursion.uses_flat_scratch, or(1, direct_recursion_use_stack.uses_flat_scratch)
473c897c13dSJanek van Oirschot; GCN:  .set usage_direct_recursion.has_dyn_sized_stack, or(0, direct_recursion_use_stack.has_dyn_sized_stack)
474c897c13dSJanek van Oirschot; GCN:  .set usage_direct_recursion.has_recursion, or(1, direct_recursion_use_stack.has_recursion)
475c897c13dSJanek van Oirschot; GCN:  .set usage_direct_recursion.has_indirect_call, or(0, direct_recursion_use_stack.has_indirect_call)
476c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: 42
477c897c13dSJanek van Oirschot; GCN: NumVgprs: 41
478c897c13dSJanek van Oirschot; GCN: ScratchSize: 2064
479c897c13dSJanek van Oirschotdefine amdgpu_kernel void @usage_direct_recursion(i32 %n) #0 {
480c897c13dSJanek van Oirschot  call void @direct_recursion_use_stack(i32 %n)
481c897c13dSJanek van Oirschot  ret void
482c897c13dSJanek van Oirschot}
483c897c13dSJanek van Oirschot
484bd9145c8SJanek van Oirschot; GCN-LABEL: {{^}}multi_stage_recurse2:
485bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse2.num_vgpr, max(43, multi_stage_recurse1.num_vgpr)
486bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse2.num_agpr, max(0, multi_stage_recurse1.num_agpr)
487bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse2.numbered_sgpr, max(34, multi_stage_recurse1.numbered_sgpr)
488bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse2.private_seg_size, 16+(max(multi_stage_recurse1.private_seg_size))
489bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse2.uses_vcc, or(1, multi_stage_recurse1.uses_vcc)
490bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse2.uses_flat_scratch, or(0, multi_stage_recurse1.uses_flat_scratch)
491bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse2.has_dyn_sized_stack, or(0, multi_stage_recurse1.has_dyn_sized_stack)
492bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse2.has_recursion, or(1, multi_stage_recurse1.has_recursion)
493bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse2.has_indirect_call, or(0, multi_stage_recurse1.has_indirect_call)
494bd9145c8SJanek van Oirschot; GCN: TotalNumSgprs: multi_stage_recurse2.numbered_sgpr+(extrasgprs(multi_stage_recurse2.uses_vcc, multi_stage_recurse2.uses_flat_scratch, 1))
495bd9145c8SJanek van Oirschot; GCN: NumVgprs: max(43, multi_stage_recurse1.num_vgpr)
496bd9145c8SJanek van Oirschot; GCN: ScratchSize: 16+(max(multi_stage_recurse1.private_seg_size))
497bd9145c8SJanek van Oirschot; GCN-LABEL: {{^}}multi_stage_recurse1:
498bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse1.num_vgpr, max(48, amdgpu.max_num_vgpr)
499bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse1.num_agpr, max(0, amdgpu.max_num_agpr)
500bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse1.numbered_sgpr, max(34, amdgpu.max_num_sgpr)
501bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse1.private_seg_size, 16
502bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse1.uses_vcc, 1
503bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse1.uses_flat_scratch, 0
504bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse1.has_dyn_sized_stack, 0
505bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse1.has_recursion, 1
506bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse1.has_indirect_call, 0
507bd9145c8SJanek van Oirschot; GCN: TotalNumSgprs: multi_stage_recurse1.numbered_sgpr+4
508bd9145c8SJanek van Oirschot; GCN: NumVgprs: max(48, amdgpu.max_num_vgpr)
509bd9145c8SJanek van Oirschot; GCN: ScratchSize: 16
510bd9145c8SJanek van Oirschotdefine void @multi_stage_recurse1(i32 %val) #2 {
511bd9145c8SJanek van Oirschot  call void @multi_stage_recurse2(i32 %val)
512bd9145c8SJanek van Oirschot  call void asm sideeffect "", "~{v47}"() #0
513bd9145c8SJanek van Oirschot  ret void
514bd9145c8SJanek van Oirschot}
515bd9145c8SJanek van Oirschotdefine void @multi_stage_recurse2(i32 %val) #2 {
516bd9145c8SJanek van Oirschot  call void @multi_stage_recurse1(i32 %val)
517bd9145c8SJanek van Oirschot  call void asm sideeffect "", "~{v42}"() #0
518bd9145c8SJanek van Oirschot  ret void
519bd9145c8SJanek van Oirschot}
520bd9145c8SJanek van Oirschot
521bd9145c8SJanek van Oirschot; GCN-LABEL: {{^}}usage_multi_stage_recurse:
522bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse.num_vgpr, max(32, multi_stage_recurse1.num_vgpr)
523bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse.num_agpr, max(0, multi_stage_recurse1.num_agpr)
524bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse.numbered_sgpr, max(33, multi_stage_recurse1.numbered_sgpr)
525bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse.private_seg_size, 0+(max(multi_stage_recurse1.private_seg_size))
526bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse.uses_vcc, or(1, multi_stage_recurse1.uses_vcc)
527bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse.uses_flat_scratch, or(1, multi_stage_recurse1.uses_flat_scratch)
528bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse.has_dyn_sized_stack, or(0, multi_stage_recurse1.has_dyn_sized_stack)
529bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse.has_recursion, or(1, multi_stage_recurse1.has_recursion)
530bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse.has_indirect_call, or(0, multi_stage_recurse1.has_indirect_call)
531bd9145c8SJanek van Oirschot; GCN: TotalNumSgprs: usage_multi_stage_recurse.numbered_sgpr+6
532bd9145c8SJanek van Oirschot; GCN: NumVgprs: usage_multi_stage_recurse.num_vgpr
533bd9145c8SJanek van Oirschot; GCN: ScratchSize: 16
534bd9145c8SJanek van Oirschotdefine amdgpu_kernel void @usage_multi_stage_recurse(i32 %n) #0 {
535bd9145c8SJanek van Oirschot  call void @multi_stage_recurse1(i32 %n)
536bd9145c8SJanek van Oirschot  ret void
537bd9145c8SJanek van Oirschot}
538bd9145c8SJanek van Oirschot
539bd9145c8SJanek van Oirschot; GCN-LABEL: {{^}}multi_stage_recurse_noattr2:
540bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr2.num_vgpr, max(41, multi_stage_recurse_noattr1.num_vgpr)
541bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr2.num_agpr, max(0, multi_stage_recurse_noattr1.num_agpr)
542bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr2.numbered_sgpr, max(54, multi_stage_recurse_noattr1.numbered_sgpr)
543bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr2.private_seg_size, 16+(max(multi_stage_recurse_noattr1.private_seg_size))
544bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr2.uses_vcc, or(1, multi_stage_recurse_noattr1.uses_vcc)
545bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr2.uses_flat_scratch, or(0, multi_stage_recurse_noattr1.uses_flat_scratch)
546bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr2.has_dyn_sized_stack, or(0, multi_stage_recurse_noattr1.has_dyn_sized_stack)
547bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr2.has_recursion, or(0, multi_stage_recurse_noattr1.has_recursion)
548bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr2.has_indirect_call, or(0, multi_stage_recurse_noattr1.has_indirect_call)
549bd9145c8SJanek van Oirschot; GCN: TotalNumSgprs: multi_stage_recurse_noattr2.numbered_sgpr+(extrasgprs(multi_stage_recurse_noattr2.uses_vcc, multi_stage_recurse_noattr2.uses_flat_scratch, 1))
550bd9145c8SJanek van Oirschot; GCN: NumVgprs: max(41, multi_stage_recurse_noattr1.num_vgpr)
551bd9145c8SJanek van Oirschot; GCN: ScratchSize: 16+(max(multi_stage_recurse_noattr1.private_seg_size))
552bd9145c8SJanek van Oirschot; GCN-LABEL: {{^}}multi_stage_recurse_noattr1:
553bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr1.num_vgpr, max(41, amdgpu.max_num_vgpr)
554bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr1.num_agpr, max(0, amdgpu.max_num_agpr)
555bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr1.numbered_sgpr, max(57, amdgpu.max_num_sgpr)
556bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr1.private_seg_size, 16
557bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr1.uses_vcc, 1
558bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr1.uses_flat_scratch, 0
559bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr1.has_dyn_sized_stack, 0
560bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr1.has_recursion, 0
561bd9145c8SJanek van Oirschot; GCN: .set multi_stage_recurse_noattr1.has_indirect_call, 0
562bd9145c8SJanek van Oirschot; GCN: TotalNumSgprs: multi_stage_recurse_noattr1.numbered_sgpr+4
563bd9145c8SJanek van Oirschot; GCN: NumVgprs: max(41, amdgpu.max_num_vgpr)
564bd9145c8SJanek van Oirschot; GCN: ScratchSize: 16
565bd9145c8SJanek van Oirschotdefine void @multi_stage_recurse_noattr1(i32 %val) #0 {
566bd9145c8SJanek van Oirschot  call void @multi_stage_recurse_noattr2(i32 %val)
567bd9145c8SJanek van Oirschot  call void asm sideeffect "", "~{s56}"() #0
568bd9145c8SJanek van Oirschot  ret void
569bd9145c8SJanek van Oirschot}
570bd9145c8SJanek van Oirschotdefine void @multi_stage_recurse_noattr2(i32 %val) #0 {
571bd9145c8SJanek van Oirschot  call void @multi_stage_recurse_noattr1(i32 %val)
572bd9145c8SJanek van Oirschot  call void asm sideeffect "", "~{s53}"() #0
573bd9145c8SJanek van Oirschot  ret void
574bd9145c8SJanek van Oirschot}
575bd9145c8SJanek van Oirschot
576bd9145c8SJanek van Oirschot; GCN-LABEL: {{^}}usage_multi_stage_recurse_noattrs:
577bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse_noattrs.num_vgpr, max(32, multi_stage_recurse_noattr1.num_vgpr)
578bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse_noattrs.num_agpr, max(0, multi_stage_recurse_noattr1.num_agpr)
579bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse_noattrs.numbered_sgpr, max(33, multi_stage_recurse_noattr1.numbered_sgpr)
580bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse_noattrs.private_seg_size, 0+(max(multi_stage_recurse_noattr1.private_seg_size))
581bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse_noattrs.uses_vcc, or(1, multi_stage_recurse_noattr1.uses_vcc)
582bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse_noattrs.uses_flat_scratch, or(1, multi_stage_recurse_noattr1.uses_flat_scratch)
583bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse_noattrs.has_dyn_sized_stack, or(0, multi_stage_recurse_noattr1.has_dyn_sized_stack)
584bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse_noattrs.has_recursion, or(0, multi_stage_recurse_noattr1.has_recursion)
585bd9145c8SJanek van Oirschot; GCN: .set usage_multi_stage_recurse_noattrs.has_indirect_call, or(0, multi_stage_recurse_noattr1.has_indirect_call)
586bd9145c8SJanek van Oirschot; GCN: TotalNumSgprs: usage_multi_stage_recurse_noattrs.numbered_sgpr+6
587bd9145c8SJanek van Oirschot; GCN: NumVgprs: usage_multi_stage_recurse_noattrs.num_vgpr
588bd9145c8SJanek van Oirschot; GCN: ScratchSize: 16
589bd9145c8SJanek van Oirschotdefine amdgpu_kernel void @usage_multi_stage_recurse_noattrs(i32 %n) #0 {
590bd9145c8SJanek van Oirschot  call void @multi_stage_recurse_noattr1(i32 %n)
591bd9145c8SJanek van Oirschot  ret void
592bd9145c8SJanek van Oirschot}
593bd9145c8SJanek van Oirschot
594bd9145c8SJanek van Oirschot; GCN-LABEL: {{^}}multi_call_with_multi_stage_recurse:
595bd9145c8SJanek van Oirschot; GCN:  .set multi_call_with_multi_stage_recurse.num_vgpr, max(41, use_stack0.num_vgpr, use_stack1.num_vgpr, multi_stage_recurse1.num_vgpr)
596bd9145c8SJanek van Oirschot; GCN:  .set multi_call_with_multi_stage_recurse.num_agpr, max(0, use_stack0.num_agpr, use_stack1.num_agpr, multi_stage_recurse1.num_agpr)
597*9a5e5e28SJanek van Oirschot; GCN:  .set multi_call_with_multi_stage_recurse.numbered_sgpr, max(45, use_stack0.numbered_sgpr, use_stack1.numbered_sgpr, multi_stage_recurse1.numbered_sgpr)
598bd9145c8SJanek van Oirschot; GCN:  .set multi_call_with_multi_stage_recurse.private_seg_size, 0+(max(use_stack0.private_seg_size, use_stack1.private_seg_size, multi_stage_recurse1.private_seg_size))
599bd9145c8SJanek van Oirschot; GCN:  .set multi_call_with_multi_stage_recurse.uses_vcc, or(1, use_stack0.uses_vcc, use_stack1.uses_vcc, multi_stage_recurse1.uses_vcc)
600bd9145c8SJanek van Oirschot; GCN:  .set multi_call_with_multi_stage_recurse.uses_flat_scratch, or(1, use_stack0.uses_flat_scratch, use_stack1.uses_flat_scratch, multi_stage_recurse1.uses_flat_scratch)
601bd9145c8SJanek van Oirschot; GCN:  .set multi_call_with_multi_stage_recurse.has_dyn_sized_stack, or(0, use_stack0.has_dyn_sized_stack, use_stack1.has_dyn_sized_stack, multi_stage_recurse1.has_dyn_sized_stack)
602bd9145c8SJanek van Oirschot; GCN:  .set multi_call_with_multi_stage_recurse.has_recursion, or(1, use_stack0.has_recursion, use_stack1.has_recursion, multi_stage_recurse1.has_recursion)
603bd9145c8SJanek van Oirschot; GCN:  .set multi_call_with_multi_stage_recurse.has_indirect_call, or(0, use_stack0.has_indirect_call, use_stack1.has_indirect_call, multi_stage_recurse1.has_indirect_call)
604bd9145c8SJanek van Oirschot; GCN: TotalNumSgprs: multi_call_with_multi_stage_recurse.numbered_sgpr+6
605bd9145c8SJanek van Oirschot; GCN: NumVgprs:  multi_call_with_multi_stage_recurse.num_vgpr
606bd9145c8SJanek van Oirschot; GCN: ScratchSize: 2052
607bd9145c8SJanek van Oirschotdefine amdgpu_kernel void @multi_call_with_multi_stage_recurse(i32 %n) #0 {
608bd9145c8SJanek van Oirschot  call void @use_stack0()
609bd9145c8SJanek van Oirschot  call void @use_stack1()
610bd9145c8SJanek van Oirschot  call void @multi_stage_recurse1(i32 %n)
611bd9145c8SJanek van Oirschot  ret void
612bd9145c8SJanek van Oirschot}
613bd9145c8SJanek van Oirschot
614c897c13dSJanek van Oirschot; Make sure there's no assert when a sgpr96 is used.
615c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}count_use_sgpr96_external_call
616c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr96_external_call.num_vgpr, max(32, amdgpu.max_num_vgpr)
617c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr96_external_call.num_agpr, max(0, amdgpu.max_num_agpr)
618c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr96_external_call.numbered_sgpr, max(33, amdgpu.max_num_sgpr)
619c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr96_external_call.private_seg_size, 0
620c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr96_external_call.uses_vcc, 1
621c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr96_external_call.uses_flat_scratch, 1
622c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr96_external_call.has_dyn_sized_stack, 1
623c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr96_external_call.has_recursion, 0
624c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr96_external_call.has_indirect_call, 1
625c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: count_use_sgpr96_external_call.numbered_sgpr+6
626c897c13dSJanek van Oirschot; GCN: NumVgprs: count_use_sgpr96_external_call.num_vgpr
627c897c13dSJanek van Oirschot; GCN: ScratchSize: 0
628c897c13dSJanek van Oirschotdefine amdgpu_kernel void @count_use_sgpr96_external_call()  {
629c897c13dSJanek van Oirschotentry:
630c897c13dSJanek van Oirschot  tail call void asm sideeffect "; sgpr96 $0", "s"(<3 x i32> <i32 10, i32 11, i32 12>) #1
631c897c13dSJanek van Oirschot  call void @external()
632c897c13dSJanek van Oirschot  ret void
633c897c13dSJanek van Oirschot}
634c897c13dSJanek van Oirschot
635c897c13dSJanek van Oirschot; Make sure there's no assert when a sgpr160 is used.
636c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}count_use_sgpr160_external_call
637c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr160_external_call.num_vgpr, max(32, amdgpu.max_num_vgpr)
638c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr160_external_call.num_agpr, max(0, amdgpu.max_num_agpr)
639c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr160_external_call.numbered_sgpr, max(33, amdgpu.max_num_sgpr)
640c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr160_external_call.private_seg_size, 0
641c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr160_external_call.uses_vcc, 1
642c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr160_external_call.uses_flat_scratch, 1
643c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr160_external_call.has_dyn_sized_stack, 1
644c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr160_external_call.has_recursion, 0
645c897c13dSJanek van Oirschot; GCN:	.set count_use_sgpr160_external_call.has_indirect_call, 1
646c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: count_use_sgpr160_external_call.numbered_sgpr+6
647c897c13dSJanek van Oirschot; GCN: NumVgprs: count_use_sgpr160_external_call.num_vgpr
648c897c13dSJanek van Oirschot; GCN: ScratchSize: 0
649c897c13dSJanek van Oirschotdefine amdgpu_kernel void @count_use_sgpr160_external_call()  {
650c897c13dSJanek van Oirschotentry:
651c897c13dSJanek van Oirschot  tail call void asm sideeffect "; sgpr160 $0", "s"(<5 x i32> <i32 10, i32 11, i32 12, i32 13, i32 14>) #1
652c897c13dSJanek van Oirschot  call void @external()
653c897c13dSJanek van Oirschot  ret void
654c897c13dSJanek van Oirschot}
655c897c13dSJanek van Oirschot
656c897c13dSJanek van Oirschot; Make sure there's no assert when a vgpr160 is used.
657c897c13dSJanek van Oirschot; GCN-LABEL: {{^}}count_use_vgpr160_external_call
658c897c13dSJanek van Oirschot; GCN:	.set count_use_vgpr160_external_call.num_vgpr, max(32, amdgpu.max_num_vgpr)
659c897c13dSJanek van Oirschot; GCN:	.set count_use_vgpr160_external_call.num_agpr, max(0, amdgpu.max_num_agpr)
660c897c13dSJanek van Oirschot; GCN:	.set count_use_vgpr160_external_call.numbered_sgpr, max(33, amdgpu.max_num_sgpr)
661c897c13dSJanek van Oirschot; GCN:	.set count_use_vgpr160_external_call.private_seg_size, 0
662c897c13dSJanek van Oirschot; GCN:	.set count_use_vgpr160_external_call.uses_vcc, 1
663c897c13dSJanek van Oirschot; GCN:	.set count_use_vgpr160_external_call.uses_flat_scratch, 1
664c897c13dSJanek van Oirschot; GCN:	.set count_use_vgpr160_external_call.has_dyn_sized_stack, 1
665c897c13dSJanek van Oirschot; GCN:	.set count_use_vgpr160_external_call.has_recursion, 0
666c897c13dSJanek van Oirschot; GCN:	.set count_use_vgpr160_external_call.has_indirect_call, 1
667c897c13dSJanek van Oirschot; GCN: TotalNumSgprs: count_use_vgpr160_external_call.numbered_sgpr+6
668c897c13dSJanek van Oirschot; GCN: NumVgprs: count_use_vgpr160_external_call.num_vgpr
669c897c13dSJanek van Oirschot; GCN: ScratchSize: 0
670c897c13dSJanek van Oirschotdefine amdgpu_kernel void @count_use_vgpr160_external_call()  {
671c897c13dSJanek van Oirschotentry:
672c897c13dSJanek van Oirschot  tail call void asm sideeffect "; vgpr160 $0", "v"(<5 x i32> <i32 10, i32 11, i32 12, i32 13, i32 14>) #1
673c897c13dSJanek van Oirschot  call void @external()
674c897c13dSJanek van Oirschot  ret void
675c897c13dSJanek van Oirschot}
676c897c13dSJanek van Oirschot
677c897c13dSJanek van Oirschot; Added at the of the .s are the module level maximums
678c897c13dSJanek van Oirschot; GCN:	.set amdgpu.max_num_vgpr, 50
679c897c13dSJanek van Oirschot; GCN:	.set amdgpu.max_num_agpr, 0
680c897c13dSJanek van Oirschot; GCN:	.set amdgpu.max_num_sgpr, 80
681c897c13dSJanek van Oirschot
682c897c13dSJanek van Oirschotattributes #0 = { nounwind noinline norecurse }
683c897c13dSJanek van Oirschotattributes #1 = { nounwind noinline norecurse }
684c897c13dSJanek van Oirschotattributes #2 = { nounwind noinline }
685