brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.1 KiB · 60bbf46 Raw
334 lines · plain
1; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1030 < %s | FileCheck %s2 3; Previously, this would hit an assertion on incompatible comparison between4; APInts due to BitWidth differences. This was due to assignment of DenseMap5; value using another value within that same DenseMap which results in a6; use-after-free if the assignment operator invokes a DenseMap growth.7 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(56, amdgpu.max_num_sgpr)12; CHECK: .set I_Quit.private_seg_size, 1613; CHECK: .set I_Quit.uses_vcc, 114; CHECK: .set I_Quit.uses_flat_scratch, 115; CHECK: .set I_Quit.has_dyn_sized_stack, 116; CHECK: .set I_Quit.has_recursion, 117; CHECK: .set I_Quit.has_indirect_call, 118define void @I_Quit() {19  %fptr = load ptr, ptr null, align 820  tail call void %fptr()21  ret void22}23 24; CHECK-LABEL: P_RemoveMobj:25; CHECK: .set P_RemoveMobj.num_vgpr, 026; CHECK: .set P_RemoveMobj.num_agpr, 027; CHECK: .set P_RemoveMobj.numbered_sgpr, 3228; CHECK: .set P_RemoveMobj.private_seg_size, 029; CHECK: .set P_RemoveMobj.uses_vcc, 030; CHECK: .set P_RemoveMobj.uses_flat_scratch, 031; CHECK: .set P_RemoveMobj.has_dyn_sized_stack, 032; CHECK: .set P_RemoveMobj.has_recursion, 033; CHECK: .set P_RemoveMobj.has_indirect_call, 034define void @P_RemoveMobj() {35  ret void36}37 38; CHECK-LABEL: P_SpawnMobj:39; CHECK: .set P_SpawnMobj.num_vgpr, 040; CHECK: .set P_SpawnMobj.num_agpr, 041; CHECK: .set P_SpawnMobj.numbered_sgpr, 3242; CHECK: .set P_SpawnMobj.private_seg_size, 043; CHECK: .set P_SpawnMobj.uses_vcc, 044; CHECK: .set P_SpawnMobj.uses_flat_scratch, 045; CHECK: .set P_SpawnMobj.has_dyn_sized_stack, 046; CHECK: .set P_SpawnMobj.has_recursion, 047; CHECK: .set P_SpawnMobj.has_indirect_call, 048define void @P_SpawnMobj() {49  ret void50}51 52; CHECK-LABEL: G_PlayerReborn:53; CHECK: .set G_PlayerReborn.num_vgpr, 054; CHECK: .set G_PlayerReborn.num_agpr, 055; CHECK: .set G_PlayerReborn.numbered_sgpr, 3256; CHECK: .set G_PlayerReborn.private_seg_size, 057; CHECK: .set G_PlayerReborn.uses_vcc, 058; CHECK: .set G_PlayerReborn.uses_flat_scratch, 059; CHECK: .set G_PlayerReborn.has_dyn_sized_stack, 060; CHECK: .set G_PlayerReborn.has_recursion, 061; CHECK: .set G_PlayerReborn.has_indirect_call, 062define void @G_PlayerReborn() {63  ret void64}65 66; CHECK-LABEL: P_SetThingPosition:67; CHECK: .set P_SetThingPosition.num_vgpr, 068; CHECK: .set P_SetThingPosition.num_agpr, 069; CHECK: .set P_SetThingPosition.numbered_sgpr, 3270; CHECK: .set P_SetThingPosition.private_seg_size, 071; CHECK: .set P_SetThingPosition.uses_vcc, 072; CHECK: .set P_SetThingPosition.uses_flat_scratch, 073; CHECK: .set P_SetThingPosition.has_dyn_sized_stack, 074; CHECK: .set P_SetThingPosition.has_recursion, 075; CHECK: .set P_SetThingPosition.has_indirect_call, 076define void @P_SetThingPosition() {77  ret void78}79 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(56, amdgpu.max_num_sgpr)84; CHECK: .set P_SetupPsprites.private_seg_size, 1685; CHECK: .set P_SetupPsprites.uses_vcc, 186; CHECK: .set P_SetupPsprites.uses_flat_scratch, 187; CHECK: .set P_SetupPsprites.has_dyn_sized_stack, 188; CHECK: .set P_SetupPsprites.has_recursion, 189; CHECK: .set P_SetupPsprites.has_indirect_call, 190define void @P_SetupPsprites(ptr addrspace(1) %i) {91  %fptr = load ptr, ptr addrspace(1) %i, align 892  tail call void %fptr()93  ret void94}95 96; CHECK-LABEL: HU_Start:97; CHECK: .set HU_Start.num_vgpr, 098; CHECK: .set HU_Start.num_agpr, 099; CHECK: .set HU_Start.numbered_sgpr, 32100; CHECK: .set HU_Start.private_seg_size, 0101; CHECK: .set HU_Start.uses_vcc, 0102; CHECK: .set HU_Start.uses_flat_scratch, 0103; CHECK: .set HU_Start.has_dyn_sized_stack, 0104; CHECK: .set HU_Start.has_recursion, 0105; CHECK: .set HU_Start.has_indirect_call, 0106define void @HU_Start() {107  ret void108}109 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(84, 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)120define void @P_SpawnPlayer() {121  call void @G_PlayerReborn()122  call void @P_SetThingPosition()123  call void @P_SetupPsprites(ptr addrspace(1) null)124  tail call void @HU_Start()125  ret void126}127 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(56, amdgpu.max_num_sgpr)132; CHECK: .set I_Error.private_seg_size, 16133; CHECK: .set I_Error.uses_vcc, 1134; CHECK: .set I_Error.uses_flat_scratch, 1135; CHECK: .set I_Error.has_dyn_sized_stack, 1136; CHECK: .set I_Error.has_recursion, 1137; CHECK: .set I_Error.has_indirect_call, 1138define void @I_Error(...) {139  %fptr = load ptr, ptr null, align 8140  call void %fptr()141  ret void142}143 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(104, 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)154define void @G_DoReborn() {155  call void @P_RemoveMobj()156  call void @P_SpawnMobj()157  call void @P_SpawnPlayer()158  call void (...) @I_Error()159  ret void160}161 162; CHECK-LABEL: AM_Stop:163; CHECK: .set AM_Stop.num_vgpr, 0164; CHECK: .set AM_Stop.num_agpr, 0165; CHECK: .set AM_Stop.numbered_sgpr, 32166; CHECK: .set AM_Stop.private_seg_size, 0167; CHECK: .set AM_Stop.uses_vcc, 0168; CHECK: .set AM_Stop.uses_flat_scratch, 0169; CHECK: .set AM_Stop.has_dyn_sized_stack, 0170; CHECK: .set AM_Stop.has_recursion, 0171; CHECK: .set AM_Stop.has_indirect_call, 0172define void @AM_Stop() {173  ret void174}175 176; CHECK-LABEL: D_AdvanceDemo:177; CHECK: .set D_AdvanceDemo.num_vgpr, 0178; CHECK: .set D_AdvanceDemo.num_agpr, 0179; CHECK: .set D_AdvanceDemo.numbered_sgpr, 32180; CHECK: .set D_AdvanceDemo.private_seg_size, 0181; CHECK: .set D_AdvanceDemo.uses_vcc, 0182; CHECK: .set D_AdvanceDemo.uses_flat_scratch, 0183; CHECK: .set D_AdvanceDemo.has_dyn_sized_stack, 0184; CHECK: .set D_AdvanceDemo.has_recursion, 0185; CHECK: .set D_AdvanceDemo.has_indirect_call, 0186define void @D_AdvanceDemo() {187  ret void188}189 190; CHECK-LABEL: F_StartFinale:191; CHECK: .set F_StartFinale.num_vgpr, 0192; CHECK: .set F_StartFinale.num_agpr, 0193; CHECK: .set F_StartFinale.numbered_sgpr, 32194; CHECK: .set F_StartFinale.private_seg_size, 0195; CHECK: .set F_StartFinale.uses_vcc, 0196; CHECK: .set F_StartFinale.uses_flat_scratch, 0197; CHECK: .set F_StartFinale.has_dyn_sized_stack, 0198; CHECK: .set F_StartFinale.has_recursion, 0199; CHECK: .set F_StartFinale.has_indirect_call, 0200define void @F_StartFinale() {201  ret void202}203 204; CHECK-LABEL: F_Ticker:205; CHECK: .set F_Ticker.num_vgpr, 0206; CHECK: .set F_Ticker.num_agpr, 0207; CHECK: .set F_Ticker.numbered_sgpr, 32208; CHECK: .set F_Ticker.private_seg_size, 0209; CHECK: .set F_Ticker.uses_vcc, 0210; CHECK: .set F_Ticker.uses_flat_scratch, 0211; CHECK: .set F_Ticker.has_dyn_sized_stack, 0212; CHECK: .set F_Ticker.has_recursion, 0213; CHECK: .set F_Ticker.has_indirect_call, 0214define void @F_Ticker() {215  ret void216}217 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(84, 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)228define i32 @G_CheckDemoStatus() {229  tail call void @I_Quit()230  tail call void @D_AdvanceDemo()231  call void (...) @I_Error()232  ret i32 0233}234 235 236; CHECK-LABEL: P_TempSaveGameFile:237; CHECK: .set P_TempSaveGameFile.num_vgpr, 2238; CHECK: .set P_TempSaveGameFile.num_agpr, 0239; CHECK: .set P_TempSaveGameFile.numbered_sgpr, 32240; CHECK: .set P_TempSaveGameFile.private_seg_size, 0241; CHECK: .set P_TempSaveGameFile.uses_vcc, 0242; CHECK: .set P_TempSaveGameFile.uses_flat_scratch, 0243; CHECK: .set P_TempSaveGameFile.has_dyn_sized_stack, 0244; CHECK: .set P_TempSaveGameFile.has_recursion, 0245; CHECK: .set P_TempSaveGameFile.has_indirect_call, 0246define ptr @P_TempSaveGameFile() {247  ret ptr null248}249 250; CHECK-LABEL: P_SaveGameFile:251; CHECK: .set P_SaveGameFile.num_vgpr, 2252; CHECK: .set P_SaveGameFile.num_agpr, 0253; CHECK: .set P_SaveGameFile.numbered_sgpr, 32254; CHECK: .set P_SaveGameFile.private_seg_size, 0255; CHECK: .set P_SaveGameFile.uses_vcc, 0256; CHECK: .set P_SaveGameFile.uses_flat_scratch, 0257; CHECK: .set P_SaveGameFile.has_dyn_sized_stack, 0258; CHECK: .set P_SaveGameFile.has_recursion, 0259; CHECK: .set P_SaveGameFile.has_indirect_call, 0260define ptr @P_SaveGameFile() {261  ret ptr null262}263 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(56, 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)274define i32 @R_FlatNumForName() {275  call void (...) @I_Error()276  unreachable277}278 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(56, 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)289define i32 @R_TextureNumForName() {290  %ret = call i32 @R_FlatNumForName()291  ret i32 0292}293 294; CHECK-LABEL: G_Ticker:295; CHECK: .set G_Ticker.num_vgpr, max(47, 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(105, 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, 48+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)304define void @G_Ticker() {305  call void @G_DoReborn()306  tail call void @F_Ticker()307  tail call void @AM_Stop()308  tail call void @F_StartFinale()309  tail call void @D_AdvanceDemo()310  %call.i.i449 = call i32 @R_FlatNumForName()311  %call9.i.i = call i32 @R_TextureNumForName()312  %call.i306 = tail call ptr @P_TempSaveGameFile()313  %call1.i307 = call ptr @P_SaveGameFile()314  call void (...) @I_Error()315  ret void316}317 318; CHECK-LABEL: RunTic:319; CHECK: .set RunTic.num_vgpr, max(47, 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(105, 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)328define void @RunTic() {329  %call5.i1 = call i32 @G_CheckDemoStatus()330  tail call void @D_AdvanceDemo()331  call void @G_Ticker()332  ret void333}334