diff --git a/test/opencl_version_metadata.ll b/test/opencl_version_metadata.ll new file mode 100644 index 0000000000..5e361f22df --- /dev/null +++ b/test/opencl_version_metadata.ll @@ -0,0 +1,48 @@ +; RUN: split-file %s %t +; RUN: llvm-as %t/metadata-opencl12.ll -o %t/12.bc +; RUN: llvm-spirv %t/12.bc -o %t/12.spv +; RUN: spirv-val %t/12.spv +; RUN: llvm-spirv -to-text %t/12.spv -o - | FileCheck %t/metadata-opencl12.ll +; RUN: llvm-spirv -r %t/12.spv -o %t/12.rev.bc +; RUN: llvm-dis < %t/12.rev.bc | FileCheck %t/metadata-opencl12.ll --check-prefix=CHECK-LLVM + +; RUN: llvm-as %t/metadata-opencl20.ll -o %t/20.bc +; RUN: llvm-spirv %t/20.bc -o %t/20.spv +; RUN: spirv-val %t/20.spv +; RUN: llvm-spirv -to-text %t/20.spv -o - | FileCheck %t/metadata-opencl20.ll +; RUN: llvm-spirv -r %t/20.spv -o %t/20.rev.bc +; RUN: llvm-dis < %t/20.rev.bc | FileCheck %t/metadata-opencl20.ll --check-prefix=CHECK-LLVM + +; RUN: llvm-as %t/metadata-opencl22.ll -o %t/22.bc +; RUN: llvm-spirv %t/22.bc -o %t/22.spv +; RUN: spirv-val %t/22.spv +; RUN: llvm-spirv -to-text %t/22.spv -o - | FileCheck %t/metadata-opencl22.ll +; RUN: llvm-spirv -r %t/22.spv -o %t/22.rev.bc +; RUN: llvm-dis < %t/22.rev.bc | FileCheck %t/metadata-opencl22.ll --check-prefix=CHECK-LLVM + +;--- metadata-opencl12.ll +target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64" +target triple = "spir64-unknown-unknown" +!opencl.ocl.version = !{!0} +!0 = !{i32 1, i32 2} +; CHECK: Source 3 102000 +; CHECK-LLVM: !opencl.ocl.version = !{!2} +; CHECK-LLVM: !2 = !{i32 1, i32 2} + +;--- metadata-opencl20.ll +target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64" +target triple = "spir64-unknown-unknown" +!opencl.ocl.version = !{!0} +!0 = !{i32 2, i32 0} +; CHECK: Source 3 200000 +; CHECK-LLVM: !opencl.ocl.version = !{!2} +; CHECK-LLVM: !2 = !{i32 2, i32 0} + +;--- metadata-opencl22.ll +target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64" +target triple = "spir64-unknown-unknown" +!opencl.ocl.version = !{!0} +!0 = !{i32 2, i32 2} +; CHECK: Source 3 202000 +; CHECK-LLVM: !opencl.ocl.version = !{!0} +; CHECK-LLVM: !0 = !{i32 2, i32 2} diff --git a/test/progvar_prog_scope_uninit.ll b/test/progvar_prog_scope_uninit.ll new file mode 100644 index 0000000000..957fafbcab --- /dev/null +++ b/test/progvar_prog_scope_uninit.ll @@ -0,0 +1,62 @@ +; RUN: llvm-as %s -o %t.bc +; RUN: llvm-spirv %t.bc -spirv-text -o %t.spt +; RUN: FileCheck < %t.spt %s --check-prefix=CHECK-SPIRV +; RUN: llvm-spirv %t.bc -o %t.spv +; RUN: spirv-val %t.spv +; RUN: llvm-spirv -r %t.spv -o %t.bc +; RUN: llvm-dis < %t.bc | FileCheck %s --check-prefix=CHECK-LLVM + +target datalayout = "e-p:64:64" +target triple = "spir64-unknown-unknown" + +; CHECK-SPIRV: EntryPoint 6 [[#]] "global_check" [[#var0:]] [[#var1:]] [[#var2:]] [[#var3:]] +; CHECK-SPIRV: EntryPoint 6 [[#]] "writer" [[#var0]] [[#var1]] [[#var2]] [[#var3]] +; CHECK-SPIRV: EntryPoint 6 [[#]] "reader" [[#var0]] [[#var1]] [[#var2]] [[#var3]] +; CHECK-SPIRV-DAG: Name [[#var0]] "var" +; CHECK-SPIRV-DAG: Name [[#var1]] "g_var" +; CHECK-SPIRV-DAG: Name [[#var2]] "a_var" +; CHECK-SPIRV-DAG: Name [[#var3]] "p_var" + +; CHECK-LLVM: @var = addrspace(1) global <2 x i8> zeroinitializer, align 2 +; CHECK-LLVM: @g_var = addrspace(1) global <2 x i8> zeroinitializer, align 2 +; CHECK-LLVM: @a_var = addrspace(1) global [2 x <2 x i8>] zeroinitializer, align 2 +; CHECK-LLVM: @p_var = addrspace(1) global ptr addrspace(1) null, align 8 +; CHECK-LLVM: define spir_kernel void @global_check() +; CHECK-LLVM: define spir_kernel void @writer() +; CHECK-LLVM: define spir_kernel void @reader() + +@var = addrspace(1) global <2 x i8> zeroinitializer, align 2 +@g_var = addrspace(1) global <2 x i8> zeroinitializer, align 2 +@a_var = addrspace(1) global [2 x <2 x i8>] zeroinitializer, align 2 +@p_var = addrspace(1) global <2 x i8> addrspace(1)* null, align 8 + +define spir_kernel void @global_check() { +entry: + %v = load <2 x i8>, <2 x i8> addrspace(1)* @var + %g = load <2 x i8>, <2 x i8> addrspace(1)* @g_var + %a_ptr = getelementptr inbounds [2 x <2 x i8>], [2 x <2 x i8>] addrspace(1)* @a_var, i64 0, i64 0 + %a = load <2 x i8>, <2 x i8> addrspace(1)* %a_ptr + %p = load <2 x i8> addrspace(1)*, <2 x i8> addrspace(1)* addrspace(1)* @p_var + ret void +} + +define spir_kernel void @writer() { +entry: + store <2 x i8> zeroinitializer, <2 x i8> addrspace(1)* @var + store <2 x i8> zeroinitializer, <2 x i8> addrspace(1)* @g_var + %a_ptr = getelementptr inbounds [2 x <2 x i8>], [2 x <2 x i8>] addrspace(1)* @a_var, i64 0, i64 1 + store <2 x i8> zeroinitializer, <2 x i8> addrspace(1)* %a_ptr + %p_target = inttoptr i64 0 to <2 x i8> addrspace(1)* + store <2 x i8> addrspace(1)* %p_target, <2 x i8> addrspace(1)* addrspace(1)* @p_var + ret void +} + +define spir_kernel void @reader() { +entry: + %v = load <2 x i8>, <2 x i8> addrspace(1)* @var + %g = load <2 x i8>, <2 x i8> addrspace(1)* @g_var + %a_ptr = getelementptr inbounds [2 x <2 x i8>], [2 x <2 x i8>] addrspace(1)* @a_var, i64 0, i64 1 + %a = load <2 x i8>, <2 x i8> addrspace(1)* %a_ptr + %p = load <2 x i8> addrspace(1)*, <2 x i8> addrspace(1)* addrspace(1)* @p_var + ret void +}