11c025fb0SPierre van Houtryve; RUN: llvm-split -o %t %s -j 3 -mtriple amdgcn-amd-amdhsa 2*9347b66cSPierre van Houtryve; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 --implicit-check-not=define %s 3*9347b66cSPierre van Houtryve; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 --implicit-check-not=define %s 4*9347b66cSPierre van Houtryve; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 --implicit-check-not=define %s 51c025fb0SPierre van Houtryve 61c025fb0SPierre van Houtryve; We have 4 function: 71c025fb0SPierre van Houtryve; - Each function has an internal helper 81c025fb0SPierre van Houtryve; - @A and @B's helpers does an indirect call. 91c025fb0SPierre van Houtryve; 101c025fb0SPierre van Houtryve; For non-kernels, indirect calls shouldn't matter, so 111c025fb0SPierre van Houtryve; @CallCandidate doesn't have to be in A/B's partition, unlike 121c025fb0SPierre van Houtryve; in the corresponding tests for kernels where it has to. 131c025fb0SPierre van Houtryve 141c025fb0SPierre van Houtryve; CHECK0: define internal void @HelperC 151c025fb0SPierre van Houtryve; CHECK0: define internal void @HelperD 16*9347b66cSPierre van Houtryve; CHECK0: define internal void @C 17*9347b66cSPierre van Houtryve; CHECK0: define internal void @D 181c025fb0SPierre van Houtryve 19*9347b66cSPierre van Houtryve; CHECK1: define hidden void @HelperA 20*9347b66cSPierre van Houtryve; CHECK1: define hidden void @CallCandidate() 21*9347b66cSPierre van Houtryve; CHECK1: define internal void @A 221c025fb0SPierre van Houtryve 23*9347b66cSPierre van Houtryve; CHECK2: define hidden void @HelperB 241c025fb0SPierre van Houtryve; CHECK2: define internal void @HelperC 25*9347b66cSPierre van Houtryve; CHECK2: define internal void @HelperD 26*9347b66cSPierre van Houtryve; CHECK2: define internal void @B 271c025fb0SPierre van Houtryve 281c025fb0SPierre van Houtryve@addrthief = global [3 x ptr] [ptr @HelperA, ptr @HelperB, ptr @CallCandidate] 291c025fb0SPierre van Houtryve 301c025fb0SPierre van Houtryvedefine internal void @HelperA(ptr %call) { 311c025fb0SPierre van Houtryve call void %call() 321c025fb0SPierre van Houtryve ret void 331c025fb0SPierre van Houtryve} 341c025fb0SPierre van Houtryve 351c025fb0SPierre van Houtryvedefine internal void @HelperB(ptr %call) { 361c025fb0SPierre van Houtryve call void @HelperC() 371c025fb0SPierre van Houtryve call void %call() 381c025fb0SPierre van Houtryve call void @HelperD() 391c025fb0SPierre van Houtryve ret void 401c025fb0SPierre van Houtryve} 411c025fb0SPierre van Houtryve 421c025fb0SPierre van Houtryvedefine internal void @CallCandidate() { 431c025fb0SPierre van Houtryve ret void 441c025fb0SPierre van Houtryve} 451c025fb0SPierre van Houtryve 461c025fb0SPierre van Houtryvedefine internal void @HelperC() { 471c025fb0SPierre van Houtryve ret void 481c025fb0SPierre van Houtryve} 491c025fb0SPierre van Houtryve 501c025fb0SPierre van Houtryvedefine internal void @HelperD() { 511c025fb0SPierre van Houtryve ret void 521c025fb0SPierre van Houtryve} 531c025fb0SPierre van Houtryve 54*9347b66cSPierre van Houtryvedefine internal void @A(ptr %call) { 551c025fb0SPierre van Houtryve call void @HelperA(ptr %call) 561c025fb0SPierre van Houtryve ret void 571c025fb0SPierre van Houtryve} 581c025fb0SPierre van Houtryve 59*9347b66cSPierre van Houtryvedefine internal void @B(ptr %call) { 601c025fb0SPierre van Houtryve call void @HelperB(ptr %call) 611c025fb0SPierre van Houtryve ret void 621c025fb0SPierre van Houtryve} 631c025fb0SPierre van Houtryve 64*9347b66cSPierre van Houtryvedefine internal void @C() { 651c025fb0SPierre van Houtryve call void @HelperC() 661c025fb0SPierre van Houtryve ret void 671c025fb0SPierre van Houtryve} 681c025fb0SPierre van Houtryve 69*9347b66cSPierre van Houtryvedefine internal void @D() { 701c025fb0SPierre van Houtryve call void @HelperD() 711c025fb0SPierre van Houtryve ret void 721c025fb0SPierre van Houtryve} 73