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