6
6
; use-after-free if the assignment operator invokes a DenseMap growth.
7
7
8
8
; CHECK-LABEL: I_Quit:
9
+ ; CHECK: .set I_Quit.num_vgpr, max(41, amdgpu.max_num_vgpr)
10
+ ; CHECK: .set I_Quit.num_agpr, max(0, amdgpu.max_num_agpr)
11
+ ; CHECK: .set I_Quit.numbered_sgpr, max(48, amdgpu.max_num_sgpr)
12
+ ; CHECK: .set I_Quit.private_seg_size, 16
13
+ ; CHECK: .set I_Quit.uses_vcc, 1
14
+ ; CHECK: .set I_Quit.uses_flat_scratch, 1
15
+ ; CHECK: .set I_Quit.has_dyn_sized_stack, 1
16
+ ; CHECK: .set I_Quit.has_recursion, 1
17
+ ; CHECK: .set I_Quit.has_indirect_call, 1
9
18
define void @I_Quit () {
10
19
%fptr = load ptr , ptr null , align 8
11
20
tail call void %fptr ()
12
21
ret void
13
22
}
14
23
15
24
; CHECK-LABEL: P_RemoveMobj:
25
+ ; CHECK: .set P_RemoveMobj.num_vgpr, 0
26
+ ; CHECK: .set P_RemoveMobj.num_agpr, 0
27
+ ; CHECK: .set P_RemoveMobj.numbered_sgpr, 32
28
+ ; CHECK: .set P_RemoveMobj.private_seg_size, 0
29
+ ; CHECK: .set P_RemoveMobj.uses_vcc, 0
30
+ ; CHECK: .set P_RemoveMobj.uses_flat_scratch, 0
31
+ ; CHECK: .set P_RemoveMobj.has_dyn_sized_stack, 0
32
+ ; CHECK: .set P_RemoveMobj.has_recursion, 0
33
+ ; CHECK: .set P_RemoveMobj.has_indirect_call, 0
16
34
define void @P_RemoveMobj () {
17
35
ret void
18
36
}
19
37
20
38
; CHECK-LABEL: P_SpawnMobj:
39
+ ; CHECK: .set P_SpawnMobj.num_vgpr, 0
40
+ ; CHECK: .set P_SpawnMobj.num_agpr, 0
41
+ ; CHECK: .set P_SpawnMobj.numbered_sgpr, 32
42
+ ; CHECK: .set P_SpawnMobj.private_seg_size, 0
43
+ ; CHECK: .set P_SpawnMobj.uses_vcc, 0
44
+ ; CHECK: .set P_SpawnMobj.uses_flat_scratch, 0
45
+ ; CHECK: .set P_SpawnMobj.has_dyn_sized_stack, 0
46
+ ; CHECK: .set P_SpawnMobj.has_recursion, 0
47
+ ; CHECK: .set P_SpawnMobj.has_indirect_call, 0
21
48
define void @P_SpawnMobj () {
22
49
ret void
23
50
}
24
51
25
52
; CHECK-LABEL: G_PlayerReborn:
53
+ ; CHECK: .set G_PlayerReborn.num_vgpr, 0
54
+ ; CHECK: .set G_PlayerReborn.num_agpr, 0
55
+ ; CHECK: .set G_PlayerReborn.numbered_sgpr, 32
56
+ ; CHECK: .set G_PlayerReborn.private_seg_size, 0
57
+ ; CHECK: .set G_PlayerReborn.uses_vcc, 0
58
+ ; CHECK: .set G_PlayerReborn.uses_flat_scratch, 0
59
+ ; CHECK: .set G_PlayerReborn.has_dyn_sized_stack, 0
60
+ ; CHECK: .set G_PlayerReborn.has_recursion, 0
61
+ ; CHECK: .set G_PlayerReborn.has_indirect_call, 0
26
62
define void @G_PlayerReborn () {
27
63
ret void
28
64
}
29
65
30
66
; CHECK-LABEL: P_SetThingPosition:
67
+ ; CHECK: .set P_SetThingPosition.num_vgpr, 0
68
+ ; CHECK: .set P_SetThingPosition.num_agpr, 0
69
+ ; CHECK: .set P_SetThingPosition.numbered_sgpr, 32
70
+ ; CHECK: .set P_SetThingPosition.private_seg_size, 0
71
+ ; CHECK: .set P_SetThingPosition.uses_vcc, 0
72
+ ; CHECK: .set P_SetThingPosition.uses_flat_scratch, 0
73
+ ; CHECK: .set P_SetThingPosition.has_dyn_sized_stack, 0
74
+ ; CHECK: .set P_SetThingPosition.has_recursion, 0
75
+ ; CHECK: .set P_SetThingPosition.has_indirect_call, 0
31
76
define void @P_SetThingPosition () {
32
77
ret void
33
78
}
34
79
35
80
; CHECK-LABEL: P_SetupPsprites:
81
+ ; CHECK: .set P_SetupPsprites.num_vgpr, max(41, amdgpu.max_num_vgpr)
82
+ ; CHECK: .set P_SetupPsprites.num_agpr, max(0, amdgpu.max_num_agpr)
83
+ ; CHECK: .set P_SetupPsprites.numbered_sgpr, max(48, amdgpu.max_num_sgpr)
84
+ ; CHECK: .set P_SetupPsprites.private_seg_size, 16
85
+ ; CHECK: .set P_SetupPsprites.uses_vcc, 1
86
+ ; CHECK: .set P_SetupPsprites.uses_flat_scratch, 1
87
+ ; CHECK: .set P_SetupPsprites.has_dyn_sized_stack, 1
88
+ ; CHECK: .set P_SetupPsprites.has_recursion, 1
89
+ ; CHECK: .set P_SetupPsprites.has_indirect_call, 1
36
90
define void @P_SetupPsprites (ptr addrspace (1 ) %i ) {
37
91
%fptr = load ptr , ptr addrspace (1 ) %i , align 8
38
92
tail call void %fptr ()
39
93
ret void
40
94
}
41
95
42
96
; CHECK-LABEL: HU_Start:
97
+ ; CHECK: .set HU_Start.num_vgpr, 0
98
+ ; CHECK: .set HU_Start.num_agpr, 0
99
+ ; CHECK: .set HU_Start.numbered_sgpr, 32
100
+ ; CHECK: .set HU_Start.private_seg_size, 0
101
+ ; CHECK: .set HU_Start.uses_vcc, 0
102
+ ; CHECK: .set HU_Start.uses_flat_scratch, 0
103
+ ; CHECK: .set HU_Start.has_dyn_sized_stack, 0
104
+ ; CHECK: .set HU_Start.has_recursion, 0
105
+ ; CHECK: .set HU_Start.has_indirect_call, 0
43
106
define void @HU_Start () {
44
107
ret void
45
108
}
46
109
47
110
; CHECK-LABEL: P_SpawnPlayer:
111
+ ; CHECK: .set P_SpawnPlayer.num_vgpr, max(43, G_PlayerReborn.num_vgpr, P_SetThingPosition.num_vgpr, P_SetupPsprites.num_vgpr, HU_Start.num_vgpr)
112
+ ; CHECK: .set P_SpawnPlayer.num_agpr, max(0, G_PlayerReborn.num_agpr, P_SetThingPosition.num_agpr, P_SetupPsprites.num_agpr, HU_Start.num_agpr)
113
+ ; CHECK: .set P_SpawnPlayer.numbered_sgpr, max(60, G_PlayerReborn.numbered_sgpr, P_SetThingPosition.numbered_sgpr, P_SetupPsprites.numbered_sgpr, HU_Start.numbered_sgpr)
114
+ ; CHECK: .set P_SpawnPlayer.private_seg_size, 16+(max(G_PlayerReborn.private_seg_size, P_SetThingPosition.private_seg_size, P_SetupPsprites.private_seg_size, HU_Start.private_seg_size))
115
+ ; CHECK: .set P_SpawnPlayer.uses_vcc, or(1, G_PlayerReborn.uses_vcc, P_SetThingPosition.uses_vcc, P_SetupPsprites.uses_vcc, HU_Start.uses_vcc)
116
+ ; CHECK: .set P_SpawnPlayer.uses_flat_scratch, or(0, G_PlayerReborn.uses_flat_scratch, P_SetThingPosition.uses_flat_scratch, P_SetupPsprites.uses_flat_scratch, HU_Start.uses_flat_scratch)
117
+ ; CHECK: .set P_SpawnPlayer.has_dyn_sized_stack, or(0, G_PlayerReborn.has_dyn_sized_stack, P_SetThingPosition.has_dyn_sized_stack, P_SetupPsprites.has_dyn_sized_stack, HU_Start.has_dyn_sized_stack)
118
+ ; CHECK: .set P_SpawnPlayer.has_recursion, or(1, G_PlayerReborn.has_recursion, P_SetThingPosition.has_recursion, P_SetupPsprites.has_recursion, HU_Start.has_recursion)
119
+ ; CHECK: .set P_SpawnPlayer.has_indirect_call, or(0, G_PlayerReborn.has_indirect_call, P_SetThingPosition.has_indirect_call, P_SetupPsprites.has_indirect_call, HU_Start.has_indirect_call)
48
120
define void @P_SpawnPlayer () {
49
121
call void @G_PlayerReborn ()
50
122
call void @P_SetThingPosition ()
@@ -54,13 +126,31 @@ define void @P_SpawnPlayer() {
54
126
}
55
127
56
128
; CHECK-LABEL: I_Error:
129
+ ; CHECK: .set I_Error.num_vgpr, max(41, amdgpu.max_num_vgpr)
130
+ ; CHECK: .set I_Error.num_agpr, max(0, amdgpu.max_num_agpr)
131
+ ; CHECK: .set I_Error.numbered_sgpr, max(48, amdgpu.max_num_sgpr)
132
+ ; CHECK: .set I_Error.private_seg_size, 16
133
+ ; CHECK: .set I_Error.uses_vcc, 1
134
+ ; CHECK: .set I_Error.uses_flat_scratch, 1
135
+ ; CHECK: .set I_Error.has_dyn_sized_stack, 1
136
+ ; CHECK: .set I_Error.has_recursion, 1
137
+ ; CHECK: .set I_Error.has_indirect_call, 1
57
138
define void @I_Error (...) {
58
139
%fptr = load ptr , ptr null , align 8
59
140
call void %fptr ()
60
141
ret void
61
142
}
62
143
63
144
; CHECK-LABEL: G_DoReborn:
145
+ ; CHECK: .set G_DoReborn.num_vgpr, max(44, P_RemoveMobj.num_vgpr, P_SpawnMobj.num_vgpr, P_SpawnPlayer.num_vgpr, I_Error.num_vgpr)
146
+ ; CHECK: .set G_DoReborn.num_agpr, max(0, P_RemoveMobj.num_agpr, P_SpawnMobj.num_agpr, P_SpawnPlayer.num_agpr, I_Error.num_agpr)
147
+ ; CHECK: .set G_DoReborn.numbered_sgpr, max(72, P_RemoveMobj.numbered_sgpr, P_SpawnMobj.numbered_sgpr, P_SpawnPlayer.numbered_sgpr, I_Error.numbered_sgpr)
148
+ ; CHECK: .set G_DoReborn.private_seg_size, 32+(max(P_RemoveMobj.private_seg_size, P_SpawnMobj.private_seg_size, P_SpawnPlayer.private_seg_size, I_Error.private_seg_size))
149
+ ; CHECK: .set G_DoReborn.uses_vcc, or(1, P_RemoveMobj.uses_vcc, P_SpawnMobj.uses_vcc, P_SpawnPlayer.uses_vcc, I_Error.uses_vcc)
150
+ ; CHECK: .set G_DoReborn.uses_flat_scratch, or(0, P_RemoveMobj.uses_flat_scratch, P_SpawnMobj.uses_flat_scratch, P_SpawnPlayer.uses_flat_scratch, I_Error.uses_flat_scratch)
151
+ ; CHECK: .set G_DoReborn.has_dyn_sized_stack, or(0, P_RemoveMobj.has_dyn_sized_stack, P_SpawnMobj.has_dyn_sized_stack, P_SpawnPlayer.has_dyn_sized_stack, I_Error.has_dyn_sized_stack)
152
+ ; CHECK: .set G_DoReborn.has_recursion, or(1, P_RemoveMobj.has_recursion, P_SpawnMobj.has_recursion, P_SpawnPlayer.has_recursion, I_Error.has_recursion)
153
+ ; CHECK: .set G_DoReborn.has_indirect_call, or(0, P_RemoveMobj.has_indirect_call, P_SpawnMobj.has_indirect_call, P_SpawnPlayer.has_indirect_call, I_Error.has_indirect_call)
64
154
define void @G_DoReborn () {
65
155
call void @P_RemoveMobj ()
66
156
call void @P_SpawnMobj ()
@@ -70,26 +160,71 @@ define void @G_DoReborn() {
70
160
}
71
161
72
162
; CHECK-LABEL: AM_Stop:
163
+ ; CHECK: .set AM_Stop.num_vgpr, 0
164
+ ; CHECK: .set AM_Stop.num_agpr, 0
165
+ ; CHECK: .set AM_Stop.numbered_sgpr, 32
166
+ ; CHECK: .set AM_Stop.private_seg_size, 0
167
+ ; CHECK: .set AM_Stop.uses_vcc, 0
168
+ ; CHECK: .set AM_Stop.uses_flat_scratch, 0
169
+ ; CHECK: .set AM_Stop.has_dyn_sized_stack, 0
170
+ ; CHECK: .set AM_Stop.has_recursion, 0
171
+ ; CHECK: .set AM_Stop.has_indirect_call, 0
73
172
define void @AM_Stop () {
74
173
ret void
75
174
}
76
175
77
176
; CHECK-LABEL: D_AdvanceDemo:
177
+ ; CHECK: .set D_AdvanceDemo.num_vgpr, 0
178
+ ; CHECK: .set D_AdvanceDemo.num_agpr, 0
179
+ ; CHECK: .set D_AdvanceDemo.numbered_sgpr, 32
180
+ ; CHECK: .set D_AdvanceDemo.private_seg_size, 0
181
+ ; CHECK: .set D_AdvanceDemo.uses_vcc, 0
182
+ ; CHECK: .set D_AdvanceDemo.uses_flat_scratch, 0
183
+ ; CHECK: .set D_AdvanceDemo.has_dyn_sized_stack, 0
184
+ ; CHECK: .set D_AdvanceDemo.has_recursion, 0
185
+ ; CHECK: .set D_AdvanceDemo.has_indirect_call, 0
78
186
define void @D_AdvanceDemo () {
79
187
ret void
80
188
}
81
189
82
190
; CHECK-LABEL: F_StartFinale:
191
+ ; CHECK: .set F_StartFinale.num_vgpr, 0
192
+ ; CHECK: .set F_StartFinale.num_agpr, 0
193
+ ; CHECK: .set F_StartFinale.numbered_sgpr, 32
194
+ ; CHECK: .set F_StartFinale.private_seg_size, 0
195
+ ; CHECK: .set F_StartFinale.uses_vcc, 0
196
+ ; CHECK: .set F_StartFinale.uses_flat_scratch, 0
197
+ ; CHECK: .set F_StartFinale.has_dyn_sized_stack, 0
198
+ ; CHECK: .set F_StartFinale.has_recursion, 0
199
+ ; CHECK: .set F_StartFinale.has_indirect_call, 0
83
200
define void @F_StartFinale () {
84
201
ret void
85
202
}
86
203
87
204
; CHECK-LABEL: F_Ticker:
205
+ ; CHECK: .set F_Ticker.num_vgpr, 0
206
+ ; CHECK: .set F_Ticker.num_agpr, 0
207
+ ; CHECK: .set F_Ticker.numbered_sgpr, 32
208
+ ; CHECK: .set F_Ticker.private_seg_size, 0
209
+ ; CHECK: .set F_Ticker.uses_vcc, 0
210
+ ; CHECK: .set F_Ticker.uses_flat_scratch, 0
211
+ ; CHECK: .set F_Ticker.has_dyn_sized_stack, 0
212
+ ; CHECK: .set F_Ticker.has_recursion, 0
213
+ ; CHECK: .set F_Ticker.has_indirect_call, 0
88
214
define void @F_Ticker () {
89
215
ret void
90
216
}
91
217
92
218
; CHECK-LABEL: G_CheckDemoStatus:
219
+ ; CHECK: .set G_CheckDemoStatus.num_vgpr, max(43, I_Quit.num_vgpr, D_AdvanceDemo.num_vgpr, I_Error.num_vgpr)
220
+ ; CHECK: .set G_CheckDemoStatus.num_agpr, max(0, I_Quit.num_agpr, D_AdvanceDemo.num_agpr, I_Error.num_agpr)
221
+ ; CHECK: .set G_CheckDemoStatus.numbered_sgpr, max(60, I_Quit.numbered_sgpr, D_AdvanceDemo.numbered_sgpr, I_Error.numbered_sgpr)
222
+ ; CHECK: .set G_CheckDemoStatus.private_seg_size, 32+(max(I_Quit.private_seg_size, D_AdvanceDemo.private_seg_size, I_Error.private_seg_size))
223
+ ; CHECK: .set G_CheckDemoStatus.uses_vcc, or(1, I_Quit.uses_vcc, D_AdvanceDemo.uses_vcc, I_Error.uses_vcc)
224
+ ; CHECK: .set G_CheckDemoStatus.uses_flat_scratch, or(0, I_Quit.uses_flat_scratch, D_AdvanceDemo.uses_flat_scratch, I_Error.uses_flat_scratch)
225
+ ; CHECK: .set G_CheckDemoStatus.has_dyn_sized_stack, or(0, I_Quit.has_dyn_sized_stack, D_AdvanceDemo.has_dyn_sized_stack, I_Error.has_dyn_sized_stack)
226
+ ; CHECK: .set G_CheckDemoStatus.has_recursion, or(1, I_Quit.has_recursion, D_AdvanceDemo.has_recursion, I_Error.has_recursion)
227
+ ; CHECK: .set G_CheckDemoStatus.has_indirect_call, or(0, I_Quit.has_indirect_call, D_AdvanceDemo.has_indirect_call, I_Error.has_indirect_call)
93
228
define i32 @G_CheckDemoStatus () {
94
229
tail call void @I_Quit ()
95
230
tail call void @D_AdvanceDemo ()
@@ -99,28 +234,73 @@ define i32 @G_CheckDemoStatus() {
99
234
100
235
101
236
; CHECK-LABEL: P_TempSaveGameFile:
237
+ ; CHECK: .set P_TempSaveGameFile.num_vgpr, 2
238
+ ; CHECK: .set P_TempSaveGameFile.num_agpr, 0
239
+ ; CHECK: .set P_TempSaveGameFile.numbered_sgpr, 32
240
+ ; CHECK: .set P_TempSaveGameFile.private_seg_size, 0
241
+ ; CHECK: .set P_TempSaveGameFile.uses_vcc, 0
242
+ ; CHECK: .set P_TempSaveGameFile.uses_flat_scratch, 0
243
+ ; CHECK: .set P_TempSaveGameFile.has_dyn_sized_stack, 0
244
+ ; CHECK: .set P_TempSaveGameFile.has_recursion, 0
245
+ ; CHECK: .set P_TempSaveGameFile.has_indirect_call, 0
102
246
define ptr @P_TempSaveGameFile () {
103
247
ret ptr null
104
248
}
105
249
106
250
; CHECK-LABEL: P_SaveGameFile:
251
+ ; CHECK: .set P_SaveGameFile.num_vgpr, 2
252
+ ; CHECK: .set P_SaveGameFile.num_agpr, 0
253
+ ; CHECK: .set P_SaveGameFile.numbered_sgpr, 32
254
+ ; CHECK: .set P_SaveGameFile.private_seg_size, 0
255
+ ; CHECK: .set P_SaveGameFile.uses_vcc, 0
256
+ ; CHECK: .set P_SaveGameFile.uses_flat_scratch, 0
257
+ ; CHECK: .set P_SaveGameFile.has_dyn_sized_stack, 0
258
+ ; CHECK: .set P_SaveGameFile.has_recursion, 0
259
+ ; CHECK: .set P_SaveGameFile.has_indirect_call, 0
107
260
define ptr @P_SaveGameFile () {
108
261
ret ptr null
109
262
}
110
263
111
264
; CHECK-LABEL: R_FlatNumForName:
265
+ ; CHECK: .set R_FlatNumForName.num_vgpr, max(42, I_Error.num_vgpr)
266
+ ; CHECK: .set R_FlatNumForName.num_agpr, max(0, I_Error.num_agpr)
267
+ ; CHECK: .set R_FlatNumForName.numbered_sgpr, max(48, I_Error.numbered_sgpr)
268
+ ; CHECK: .set R_FlatNumForName.private_seg_size, 16+(max(I_Error.private_seg_size))
269
+ ; CHECK: .set R_FlatNumForName.uses_vcc, or(1, I_Error.uses_vcc)
270
+ ; CHECK: .set R_FlatNumForName.uses_flat_scratch, or(0, I_Error.uses_flat_scratch)
271
+ ; CHECK: .set R_FlatNumForName.has_dyn_sized_stack, or(0, I_Error.has_dyn_sized_stack)
272
+ ; CHECK: .set R_FlatNumForName.has_recursion, or(1, I_Error.has_recursion)
273
+ ; CHECK: .set R_FlatNumForName.has_indirect_call, or(0, I_Error.has_indirect_call)
112
274
define i32 @R_FlatNumForName () {
113
275
call void (...) @I_Error ()
114
276
unreachable
115
277
}
116
278
117
279
; CHECK-LABEL: R_TextureNumForName:
280
+ ; CHECK: .set R_TextureNumForName.num_vgpr, max(42, R_FlatNumForName.num_vgpr)
281
+ ; CHECK: .set R_TextureNumForName.num_agpr, max(0, R_FlatNumForName.num_agpr)
282
+ ; CHECK: .set R_TextureNumForName.numbered_sgpr, max(48, R_FlatNumForName.numbered_sgpr)
283
+ ; CHECK: .set R_TextureNumForName.private_seg_size, 16+(max(R_FlatNumForName.private_seg_size))
284
+ ; CHECK: .set R_TextureNumForName.uses_vcc, or(1, R_FlatNumForName.uses_vcc)
285
+ ; CHECK: .set R_TextureNumForName.uses_flat_scratch, or(0, R_FlatNumForName.uses_flat_scratch)
286
+ ; CHECK: .set R_TextureNumForName.has_dyn_sized_stack, or(0, R_FlatNumForName.has_dyn_sized_stack)
287
+ ; CHECK: .set R_TextureNumForName.has_recursion, or(1, R_FlatNumForName.has_recursion)
288
+ ; CHECK: .set R_TextureNumForName.has_indirect_call, or(0, R_FlatNumForName.has_indirect_call)
118
289
define i32 @R_TextureNumForName () {
119
290
%ret = call i32 @R_FlatNumForName ()
120
291
ret i32 0
121
292
}
122
293
123
294
; CHECK-LABEL: G_Ticker:
295
+ ; CHECK: .set G_Ticker.num_vgpr, max(46, G_DoReborn.num_vgpr, F_Ticker.num_vgpr, AM_Stop.num_vgpr, F_StartFinale.num_vgpr, D_AdvanceDemo.num_vgpr, R_FlatNumForName.num_vgpr, R_TextureNumForName.num_vgpr, P_TempSaveGameFile.num_vgpr, P_SaveGameFile.num_vgpr, I_Error.num_vgpr)
296
+ ; CHECK: .set G_Ticker.num_agpr, max(0, G_DoReborn.num_agpr, F_Ticker.num_agpr, AM_Stop.num_agpr, F_StartFinale.num_agpr, D_AdvanceDemo.num_agpr, R_FlatNumForName.num_agpr, R_TextureNumForName.num_agpr, P_TempSaveGameFile.num_agpr, P_SaveGameFile.num_agpr, I_Error.num_agpr)
297
+ ; CHECK: .set G_Ticker.numbered_sgpr, max(84, G_DoReborn.numbered_sgpr, F_Ticker.numbered_sgpr, AM_Stop.numbered_sgpr, F_StartFinale.numbered_sgpr, D_AdvanceDemo.numbered_sgpr, R_FlatNumForName.numbered_sgpr, R_TextureNumForName.numbered_sgpr, P_TempSaveGameFile.numbered_sgpr, P_SaveGameFile.numbered_sgpr, I_Error.numbered_sgpr)
298
+ ; CHECK: .set G_Ticker.private_seg_size, 32+(max(G_DoReborn.private_seg_size, F_Ticker.private_seg_size, AM_Stop.private_seg_size, F_StartFinale.private_seg_size, D_AdvanceDemo.private_seg_size, R_FlatNumForName.private_seg_size, R_TextureNumForName.private_seg_size, P_TempSaveGameFile.private_seg_size, P_SaveGameFile.private_seg_size, I_Error.private_seg_size))
299
+ ; CHECK: .set G_Ticker.uses_vcc, or(1, G_DoReborn.uses_vcc, F_Ticker.uses_vcc, AM_Stop.uses_vcc, F_StartFinale.uses_vcc, D_AdvanceDemo.uses_vcc, R_FlatNumForName.uses_vcc, R_TextureNumForName.uses_vcc, P_TempSaveGameFile.uses_vcc, P_SaveGameFile.uses_vcc, I_Error.uses_vcc)
300
+ ; CHECK: .set G_Ticker.uses_flat_scratch, or(0, G_DoReborn.uses_flat_scratch, F_Ticker.uses_flat_scratch, AM_Stop.uses_flat_scratch, F_StartFinale.uses_flat_scratch, D_AdvanceDemo.uses_flat_scratch, R_FlatNumForName.uses_flat_scratch, R_TextureNumForName.uses_flat_scratch, P_TempSaveGameFile.uses_flat_scratch, P_SaveGameFile.uses_flat_scratch, I_Error.uses_flat_scratch)
301
+ ; CHECK: .set G_Ticker.has_dyn_sized_stack, or(0, G_DoReborn.has_dyn_sized_stack, F_Ticker.has_dyn_sized_stack, AM_Stop.has_dyn_sized_stack, F_StartFinale.has_dyn_sized_stack, D_AdvanceDemo.has_dyn_sized_stack, R_FlatNumForName.has_dyn_sized_stack, R_TextureNumForName.has_dyn_sized_stack, P_TempSaveGameFile.has_dyn_sized_stack, P_SaveGameFile.has_dyn_sized_stack, I_Error.has_dyn_sized_stack)
302
+ ; CHECK: .set G_Ticker.has_recursion, or(1, G_DoReborn.has_recursion, F_Ticker.has_recursion, AM_Stop.has_recursion, F_StartFinale.has_recursion, D_AdvanceDemo.has_recursion, R_FlatNumForName.has_recursion, R_TextureNumForName.has_recursion, P_TempSaveGameFile.has_recursion, P_SaveGameFile.has_recursion, I_Error.has_recursion)
303
+ ; CHECK: .set G_Ticker.has_indirect_call, or(0, G_DoReborn.has_indirect_call, F_Ticker.has_indirect_call, AM_Stop.has_indirect_call, F_StartFinale.has_indirect_call, D_AdvanceDemo.has_indirect_call, R_FlatNumForName.has_indirect_call, R_TextureNumForName.has_indirect_call, P_TempSaveGameFile.has_indirect_call, P_SaveGameFile.has_indirect_call, I_Error.has_indirect_call)
124
304
define void @G_Ticker () {
125
305
call void @G_DoReborn ()
126
306
tail call void @F_Ticker ()
@@ -136,6 +316,15 @@ define void @G_Ticker() {
136
316
}
137
317
138
318
; CHECK-LABEL: RunTic:
319
+ ; CHECK: .set RunTic.num_vgpr, max(46, G_CheckDemoStatus.num_vgpr, D_AdvanceDemo.num_vgpr, G_Ticker.num_vgpr)
320
+ ; CHECK: .set RunTic.num_agpr, max(0, G_CheckDemoStatus.num_agpr, D_AdvanceDemo.num_agpr, G_Ticker.num_agpr)
321
+ ; CHECK: .set RunTic.numbered_sgpr, max(84, G_CheckDemoStatus.numbered_sgpr, D_AdvanceDemo.numbered_sgpr, G_Ticker.numbered_sgpr)
322
+ ; CHECK: .set RunTic.private_seg_size, 32+(max(G_CheckDemoStatus.private_seg_size, D_AdvanceDemo.private_seg_size, G_Ticker.private_seg_size))
323
+ ; CHECK: .set RunTic.uses_vcc, or(1, G_CheckDemoStatus.uses_vcc, D_AdvanceDemo.uses_vcc, G_Ticker.uses_vcc)
324
+ ; CHECK: .set RunTic.uses_flat_scratch, or(0, G_CheckDemoStatus.uses_flat_scratch, D_AdvanceDemo.uses_flat_scratch, G_Ticker.uses_flat_scratch)
325
+ ; CHECK: .set RunTic.has_dyn_sized_stack, or(0, G_CheckDemoStatus.has_dyn_sized_stack, D_AdvanceDemo.has_dyn_sized_stack, G_Ticker.has_dyn_sized_stack)
326
+ ; CHECK: .set RunTic.has_recursion, or(1, G_CheckDemoStatus.has_recursion, D_AdvanceDemo.has_recursion, G_Ticker.has_recursion)
327
+ ; CHECK: .set RunTic.has_indirect_call, or(0, G_CheckDemoStatus.has_indirect_call, D_AdvanceDemo.has_indirect_call, G_Ticker.has_indirect_call)
139
328
define void @RunTic () {
140
329
%call5.i1 = call i32 @G_CheckDemoStatus ()
141
330
tail call void @D_AdvanceDemo ()
0 commit comments