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