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