94 lines · plain
1; Test checks "kernel" splitting mode.2 3; RUN: llvm-split -split-by-category=kernel -S < %s -o %t.files4; RUN: FileCheck %s -input-file=%t.files_0.ll --check-prefixes CHECK-MODULE0,CHECK5; RUN: FileCheck %s -input-file=%t.files_1.ll --check-prefixes CHECK-MODULE1,CHECK6; RUN: FileCheck %s -input-file=%t.files_2.ll --check-prefixes CHECK-MODULE2,CHECK7 8;CHECK-MODULE0: @GV = internal addrspace(1) constant [1 x i32] [i32 42], align 49;CHECK-MODULE1-NOT: @GV10;CHECK-MODULE2-NOT: @GV11@GV = internal addrspace(1) constant [1 x i32] [i32 42], align 412 13; CHECK-MODULE0-NOT: define dso_local spir_kernel void @TU0_kernelA14; CHECK-MODULE1-NOT: define dso_local spir_kernel void @TU0_kernelA15; CHECK-MODULE2: define dso_local spir_kernel void @TU0_kernelA16define dso_local spir_kernel void @TU0_kernelA() #0 {17entry:18; CHECK-MODULE2: call spir_func void @foo()19 call spir_func void @foo()20 ret void21}22 23; CHECK-MODULE0-NOT: define {{.*}} spir_func void @foo()24; CHECK-MODULE1-NOT: define {{.*}} spir_func void @foo()25; CHECK-MODULE2: define {{.*}} spir_func void @foo()26define dso_local spir_func void @foo() {27entry:28; CHECK-MODULE2: call spir_func void @bar()29 call spir_func void @bar()30 ret void31}32 33; CHECK-MODULE0-NOT: define {{.*}} spir_func void @bar()34; CHECK-MODULE1-NOT: define {{.*}} spir_func void @bar()35; CHECK-MODULE2: define {{.*}} spir_func void @bar()36define linkonce_odr dso_local spir_func void @bar() {37entry:38 ret void39}40 41; CHECK-MODULE0-NOT: define dso_local spir_kernel void @TU0_kernelB()42; CHECK-MODULE1: define dso_local spir_kernel void @TU0_kernelB()43; CHECK-MODULE2-NOT: define dso_local spir_kernel void @TU0_kernelB()44define dso_local spir_kernel void @TU0_kernelB() #0 {45entry:46; CHECK-MODULE1: call spir_func void @foo1()47 call spir_func void @foo1()48 ret void49}50 51; CHECK-MODULE0-NOT: define {{.*}} spir_func void @foo1()52; CHECK-MODULE1: define {{.*}} spir_func void @foo1()53; CHECK-MODULE2-NOT: define {{.*}} spir_func void @foo1()54define dso_local spir_func void @foo1() {55entry:56 ret void57}58 59; CHECK-MODULE0: define dso_local spir_kernel void @TU1_kernel()60; CHECK-MODULE1-NOT: define dso_local spir_kernel void @TU1_kernel()61; CHECK-MODULE2-NOT: define dso_local spir_kernel void @TU1_kernel()62define dso_local spir_kernel void @TU1_kernel() #1 {63entry:64; CHECK-MODULE0: call spir_func void @foo2()65 call spir_func void @foo2()66 ret void67}68 69; CHECK-MODULE0: define {{.*}} spir_func void @foo2()70; CHECK-MODULE1-NOT: define {{.*}} spir_func void @foo2()71; CHECK-MODULE2-NOT: define {{.*}} spir_func void @foo2()72define dso_local spir_func void @foo2() {73entry:74; CHECK-MODULE0: %0 = load i32, ptr addrspace(4) addrspacecast (ptr addrspace(1) @GV to ptr addrspace(4)), align 475 %0 = load i32, ptr addrspace(4) getelementptr inbounds ([1 x i32], ptr addrspace(4) addrspacecast (ptr addrspace(1) @GV to ptr addrspace(4)), i64 0, i64 0), align 476 ret void77}78 79attributes #0 = { "module-id"="TU1.cpp" }80attributes #1 = { "module-id"="TU2.cpp" }81 82; Metadata is saved in both modules.83; CHECK: !opencl.spir.version = !{!0, !0}84; CHECK: !spirv.Source = !{!1, !1}85 86!opencl.spir.version = !{!0, !0}87!spirv.Source = !{!1, !1}88 89; CHECK; !0 = !{i32 1, i32 2}90; CHECK; !1 = !{i32 4, i32 100000}91 92!0 = !{i32 1, i32 2}93!1 = !{i32 4, i32 100000}94