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