1; RUN: llvm-split -o %t %s -j 2 -mtriple amdgcn-amd-amdhsa -amdgpu-module-splitting-large-threshold=0 2; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 %s 3; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 %s 4 5; 2 kernels: 6; - A is isolated 7; - B is storing @HelperA/B's address 8; 9; The helper functions should get externalized (become hidden w/ external linkage) 10 11; CHECK0: define hidden void @HelperA() 12; CHECK0: define hidden void @HelperB() 13; CHECK0: define amdgpu_kernel void @A() 14; CHECK0: declare amdgpu_kernel void @B(i1, ptr) 15 16; CHECK1: declare hidden void @HelperA() 17; CHECK1: declare hidden void @HelperB() 18; CHECK1: declare amdgpu_kernel void @A() 19; CHECK1: define amdgpu_kernel void @B(i1 %cond, ptr %dst) 20 21define internal void @HelperA() { 22 ret void 23} 24 25define internal void @HelperB() { 26 ret void 27} 28 29define amdgpu_kernel void @A() { 30 ret void 31} 32 33define amdgpu_kernel void @B(i1 %cond, ptr %dst) { 34 %addr = select i1 %cond, ptr @HelperA, ptr @HelperB 35 store ptr %addr, ptr %dst 36 ret void 37} 38