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