xref: /llvm-project/llvm/test/tools/llvm-split/AMDGPU/kernels-load-balancing.ll (revision 43fd244b3d5c08bfd3aad0913b0fe84339842f4e)
1; RUN: llvm-split -o %t %s -j 3 -mtriple amdgcn-amd-amdhsa
2; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 %s
3; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 %s
4; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 %s
5
6; Test load balancing logic with 6 kernels.
7;
8; Kernels go from most expensive (A == 6) to least expensive (F == 1)
9;
10; Load balancing should work like this (current partition cost is in parens)
11;
12; Initial    -> [P0(0), P1(0), P2(0)]
13;
14; A(6) goes in 2 -> [P2(6), P0(0), P1(0)]
15; B(5) goes in 1 -> [P2(6), P1(5), P0(4)]
16; C(4) goes in 0 -> [P2(6), P1(5), P0(4)]
17
18; D(3) goes in 0 -> [P0(7), P2(6), P1(5)]
19; E(2) goes in 1 -> [P0(7), P1(7), P2(6)]
20; F(1) goes in 2 -> [P0(7), P1(7), P2(7)]
21
22; CHECK0-NOT: define
23; CHECK0: define amdgpu_kernel void @C
24; CHECK0: define amdgpu_kernel void @D
25; CHECK0-NOT: define
26
27; CHECK1-NOT: define
28; CHECK1: define amdgpu_kernel void @B
29; CHECK1: define amdgpu_kernel void @E
30; CHECK1-NOT: define
31
32; CHECK2-NOT: define
33; CHECK2: define amdgpu_kernel void @A
34; CHECK2: define amdgpu_kernel void @F
35; CHECK2-NOT: define
36
37
38define amdgpu_kernel void @A(ptr %x) {
39  store i64 42, ptr %x
40  store i64 43, ptr %x
41  store i64 44, ptr %x
42  store i64 45, ptr %x
43  store i64 46, ptr %x
44  ret void
45}
46
47define amdgpu_kernel void @B(ptr %x) {
48  store i64 42, ptr %x
49  store i64 43, ptr %x
50  store i64 44, ptr %x
51  store i64 45, ptr %x
52  ret void
53}
54
55define amdgpu_kernel void @C(ptr %x) {
56  store i64 42, ptr %x
57  store i64 43, ptr %x
58  store i64 44, ptr %x
59  ret void
60}
61
62define amdgpu_kernel void @D(ptr %x) {
63  store i64 42, ptr %x
64  store i64 43, ptr %x
65  ret void
66}
67
68define amdgpu_kernel void @E(ptr %x) {
69  store i64 42, ptr %x
70  ret void
71}
72
73define amdgpu_kernel void @F() {
74  ret void
75}
76