1*bd9145c8SJanek van Oirschot; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a < %s | FileCheck %s 2*bd9145c8SJanek van Oirschot 3*bd9145c8SJanek van Oirschot; CHECK-LABEL: {{^}}qux 4*bd9145c8SJanek van Oirschot; CHECK: .set qux.num_vgpr, 13 5*bd9145c8SJanek van Oirschot; CHECK: .set qux.num_agpr, 0 6*bd9145c8SJanek van Oirschot; CHECK: .set qux.numbered_sgpr, 32 7*bd9145c8SJanek van Oirschot; CHECK: .set qux.private_seg_size, 0 8*bd9145c8SJanek van Oirschot; CHECK: .set qux.uses_vcc, 0 9*bd9145c8SJanek van Oirschot; CHECK: .set qux.uses_flat_scratch, 0 10*bd9145c8SJanek van Oirschot; CHECK: .set qux.has_dyn_sized_stack, 0 11*bd9145c8SJanek van Oirschot; CHECK: .set qux.has_recursion, 0 12*bd9145c8SJanek van Oirschot; CHECK: .set qux.has_indirect_call, 0 13*bd9145c8SJanek van Oirschotdefine void @qux() { 14*bd9145c8SJanek van Oirschotentry: 15*bd9145c8SJanek van Oirschot call void asm sideeffect "", "~{v12}"() 16*bd9145c8SJanek van Oirschot ret void 17*bd9145c8SJanek van Oirschot} 18*bd9145c8SJanek van Oirschot 19*bd9145c8SJanek van Oirschot; CHECK-LABEL: {{^}}baz 20*bd9145c8SJanek van Oirschot; CHECK: .set baz.num_vgpr, max(49, qux.num_vgpr) 21*bd9145c8SJanek van Oirschot; CHECK: .set baz.num_agpr, max(0, qux.num_agpr) 22*bd9145c8SJanek van Oirschot; CHECK: .set baz.numbered_sgpr, max(34, qux.numbered_sgpr) 23*bd9145c8SJanek van Oirschot; CHECK: .set baz.private_seg_size, 16+(max(qux.private_seg_size)) 24*bd9145c8SJanek van Oirschot; CHECK: .set baz.uses_vcc, or(0, qux.uses_vcc) 25*bd9145c8SJanek van Oirschot; CHECK: .set baz.uses_flat_scratch, or(0, qux.uses_flat_scratch) 26*bd9145c8SJanek van Oirschot; CHECK: .set baz.has_dyn_sized_stack, or(0, qux.has_dyn_sized_stack) 27*bd9145c8SJanek van Oirschot; CHECK: .set baz.has_recursion, or(1, qux.has_recursion) 28*bd9145c8SJanek van Oirschot; CHECK: .set baz.has_indirect_call, or(0, qux.has_indirect_call) 29*bd9145c8SJanek van Oirschotdefine void @baz() { 30*bd9145c8SJanek van Oirschotentry: 31*bd9145c8SJanek van Oirschot call void @qux() 32*bd9145c8SJanek van Oirschot call void asm sideeffect "", "~{v48}"() 33*bd9145c8SJanek van Oirschot ret void 34*bd9145c8SJanek van Oirschot} 35*bd9145c8SJanek van Oirschot 36*bd9145c8SJanek van Oirschot; CHECK-LABEL: {{^}}bar 37*bd9145c8SJanek van Oirschot; CHECK: .set bar.num_vgpr, max(65, baz.num_vgpr, qux.num_vgpr) 38*bd9145c8SJanek van Oirschot; CHECK: .set bar.num_agpr, max(0, baz.num_agpr, qux.num_agpr) 39*bd9145c8SJanek van Oirschot; CHECK: .set bar.numbered_sgpr, max(34, baz.numbered_sgpr, qux.numbered_sgpr) 40*bd9145c8SJanek van Oirschot; CHECK: .set bar.private_seg_size, 16+(max(baz.private_seg_size, qux.private_seg_size)) 41*bd9145c8SJanek van Oirschot; CHECK: .set bar.uses_vcc, or(0, baz.uses_vcc, qux.uses_vcc) 42*bd9145c8SJanek van Oirschot; CHECK: .set bar.uses_flat_scratch, or(0, baz.uses_flat_scratch, qux.uses_flat_scratch) 43*bd9145c8SJanek van Oirschot; CHECK: .set bar.has_dyn_sized_stack, or(0, baz.has_dyn_sized_stack, qux.has_dyn_sized_stack) 44*bd9145c8SJanek van Oirschot; CHECK: .set bar.has_recursion, or(1, baz.has_recursion, qux.has_recursion) 45*bd9145c8SJanek van Oirschot; CHECK: .set bar.has_indirect_call, or(0, baz.has_indirect_call, qux.has_indirect_call) 46*bd9145c8SJanek van Oirschotdefine void @bar() { 47*bd9145c8SJanek van Oirschotentry: 48*bd9145c8SJanek van Oirschot call void @baz() 49*bd9145c8SJanek van Oirschot call void @qux() 50*bd9145c8SJanek van Oirschot call void @baz() 51*bd9145c8SJanek van Oirschot call void asm sideeffect "", "~{v64}"() 52*bd9145c8SJanek van Oirschot ret void 53*bd9145c8SJanek van Oirschot} 54*bd9145c8SJanek van Oirschot 55*bd9145c8SJanek van Oirschot; CHECK-LABEL: {{^}}foo 56*bd9145c8SJanek van Oirschot; CHECK: .set foo.num_vgpr, max(38, bar.num_vgpr) 57*bd9145c8SJanek van Oirschot; CHECK: .set foo.num_agpr, max(0, bar.num_agpr) 58*bd9145c8SJanek van Oirschot; CHECK: .set foo.numbered_sgpr, max(34, bar.numbered_sgpr) 59*bd9145c8SJanek van Oirschot; CHECK: .set foo.private_seg_size, 16+(max(bar.private_seg_size)) 60*bd9145c8SJanek van Oirschot; CHECK: .set foo.uses_vcc, or(0, bar.uses_vcc) 61*bd9145c8SJanek van Oirschot; CHECK: .set foo.uses_flat_scratch, or(0, bar.uses_flat_scratch) 62*bd9145c8SJanek van Oirschot; CHECK: .set foo.has_dyn_sized_stack, or(0, bar.has_dyn_sized_stack) 63*bd9145c8SJanek van Oirschot; CHECK: .set foo.has_recursion, or(1, bar.has_recursion) 64*bd9145c8SJanek van Oirschot; CHECK: .set foo.has_indirect_call, or(0, bar.has_indirect_call) 65*bd9145c8SJanek van Oirschotdefine void @foo() { 66*bd9145c8SJanek van Oirschotentry: 67*bd9145c8SJanek van Oirschot call void @bar() 68*bd9145c8SJanek van Oirschot call void asm sideeffect "", "~{v37}"() 69*bd9145c8SJanek van Oirschot ret void 70*bd9145c8SJanek van Oirschot} 71*bd9145c8SJanek van Oirschot 72*bd9145c8SJanek van Oirschot; CHECK-LABEL: {{^}}usefoo 73*bd9145c8SJanek van Oirschot; CHECK: .set usefoo.num_vgpr, max(32, foo.num_vgpr) 74*bd9145c8SJanek van Oirschot; CHECK: .set usefoo.num_agpr, max(0, foo.num_agpr) 75*bd9145c8SJanek van Oirschot; CHECK: .set usefoo.numbered_sgpr, max(33, foo.numbered_sgpr) 76*bd9145c8SJanek van Oirschot; CHECK: .set usefoo.private_seg_size, 0+(max(foo.private_seg_size)) 77*bd9145c8SJanek van Oirschot; CHECK: .set usefoo.uses_vcc, or(0, foo.uses_vcc) 78*bd9145c8SJanek van Oirschot; CHECK: .set usefoo.uses_flat_scratch, or(1, foo.uses_flat_scratch) 79*bd9145c8SJanek van Oirschot; CHECK: .set usefoo.has_dyn_sized_stack, or(0, foo.has_dyn_sized_stack) 80*bd9145c8SJanek van Oirschot; CHECK: .set usefoo.has_recursion, or(1, foo.has_recursion) 81*bd9145c8SJanek van Oirschot; CHECK: .set usefoo.has_indirect_call, or(0, foo.has_indirect_call) 82*bd9145c8SJanek van Oirschotdefine amdgpu_kernel void @usefoo() { 83*bd9145c8SJanek van Oirschot call void @foo() 84*bd9145c8SJanek van Oirschot ret void 85*bd9145c8SJanek van Oirschot} 86*bd9145c8SJanek van Oirschot 87