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