xref: /llvm-project/llvm/test/tools/llvm-split/AMDGPU/non-kernels-dependency-indirect.ll (revision 9347b66cfcd9acf84dbbd500b6344041c587f6a9)
1; RUN: llvm-split -o %t %s -j 3 -mtriple amdgcn-amd-amdhsa
2; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 --implicit-check-not=define %s
3; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 --implicit-check-not=define %s
4; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 --implicit-check-not=define %s
5
6; We have 4 function:
7;   - Each function has an internal helper
8;   - @A and @B's helpers does an indirect call.
9;
10; For non-kernels, indirect calls shouldn't matter, so
11; @CallCandidate doesn't have to be in A/B's partition, unlike
12; in the corresponding tests for kernels where it has to.
13
14; CHECK0: define internal void @HelperC
15; CHECK0: define internal void @HelperD
16; CHECK0: define internal void @C
17; CHECK0: define internal void @D
18
19; CHECK1: define hidden void @HelperA
20; CHECK1: define hidden void @CallCandidate()
21; CHECK1: define internal void @A
22
23; CHECK2: define hidden void @HelperB
24; CHECK2: define internal void @HelperC
25; CHECK2: define internal void @HelperD
26; CHECK2: define internal void @B
27
28@addrthief = global [3 x ptr] [ptr @HelperA, ptr @HelperB, ptr @CallCandidate]
29
30define internal void @HelperA(ptr %call) {
31  call void %call()
32  ret void
33}
34
35define internal void @HelperB(ptr %call) {
36  call void @HelperC()
37  call void %call()
38  call void @HelperD()
39  ret void
40}
41
42define internal void @CallCandidate() {
43  ret void
44}
45
46define internal void @HelperC() {
47  ret void
48}
49
50define internal void @HelperD() {
51  ret void
52}
53
54define internal void @A(ptr %call) {
55  call void @HelperA(ptr %call)
56  ret void
57}
58
59define internal void @B(ptr %call) {
60  call void @HelperB(ptr %call)
61  ret void
62}
63
64define internal void @C() {
65  call void @HelperC()
66  ret void
67}
68
69define internal void @D() {
70  call void @HelperD()
71  ret void
72}
73