blob: 316500a4c7611035f460b2146efc16bb664b0d76 [file] [log] [blame]
; This test checks that Module splitting can properly perform device code split by tracking
; all uses of functions (not only direct calls).
; RUN: llvm-split -split-by-category=module-id -S < %s -o %t
; RUN: FileCheck %s -input-file=%t_0.ll --check-prefix=CHECK-IR0
; RUN: FileCheck %s -input-file=%t_1.ll --check-prefix=CHECK-IR1
; CHECK-IR0: define dso_local spir_kernel void @kernelA
;
; CHECK-IR1: @FuncTable = weak global ptr @func
; CHECK-IR1: define {{.*}} i32 @func
; CHECK-IR1: define weak_odr dso_local spir_kernel void @kernelB
@FuncTable = weak global ptr @func, align 8
define dso_local spir_func i32 @func(i32 %a) {
entry:
ret i32 %a
}
define weak_odr dso_local spir_kernel void @kernelB() #0 {
entry:
%0 = call i32 @indirect_call(ptr addrspace(4) addrspacecast ( ptr getelementptr inbounds ( [1 x ptr] , ptr @FuncTable, i64 0, i64 0) to ptr addrspace(4)), i32 0)
ret void
}
define dso_local spir_kernel void @kernelA() #1 {
entry:
ret void
}
declare dso_local spir_func i32 @indirect_call(ptr addrspace(4), i32) local_unnamed_addr
attributes #0 = { "module-id"="TU1.cpp" }
attributes #1 = { "module-id"="TU2.cpp" }
; CHECK: kernel1
; CHECK: kernel2