|
| 1 | +; REQUIRES: pass-plugin |
| 2 | +; UNSUPPORTED: target={{.*windows.*}} |
| 3 | + |
| 4 | +; RUN: opt %load_spirv_lib -passes=spirv-to-ocl20 %s -S -o - | FileCheck %s --check-prefixes=CHECK-LLVM-OCL |
| 5 | + |
| 6 | +%id = type { %arr } |
| 7 | +%arr = type { [1 x i64] } |
| 8 | + |
| 9 | +@__spirv_BuiltInGlobalInvocationId = external local_unnamed_addr addrspace(1) constant <3 x i64> |
| 10 | + |
| 11 | +; Check that SPIR-V Builtin GenericCastToPtr and GenericCastToPtrExplicit can be transformed to OCL. |
| 12 | + |
| 13 | +; CHECK-LLVM-OCL-LABEL: void @test( |
| 14 | +; CHECK-LLVM-OCL: %[[VAR_1:.*]] = addrspacecast ptr addrspace(1) %idx to ptr addrspace(4) |
| 15 | +; CHECK-LLVM-OCL-NEXT: %[[VAR_2:.*]] = addrspacecast ptr addrspace(3) %_arg_LocalA to ptr addrspace(4) |
| 16 | +; CHECK-LLVM-OCL-NEXT: %[[VAR_3:.*]] = addrspacecast ptr %var to ptr addrspace(4) |
| 17 | +; CHECK-LLVM-OCL-NEXT: addrspacecast ptr addrspace(4) %[[VAR_1]] to ptr addrspace(1) |
| 18 | +; CHECK-LLVM-OCL-NEXT: addrspacecast ptr addrspace(4) %[[VAR_2]] to ptr addrspace(3) |
| 19 | +; CHECK-LLVM-OCL-NEXT: addrspacecast ptr addrspace(4) %[[VAR_3]] to ptr |
| 20 | +; CHECK-LLVM-OCL-NEXT: call spir_func ptr addrspace(1) @__to_global(ptr addrspace(4) %[[VAR_1]]) |
| 21 | +; CHECK-LLVM-OCL-NEXT: call spir_func ptr addrspace(3) @__to_local(ptr addrspace(4) %[[VAR_2]]) |
| 22 | +; CHECK-LLVM-OCL-NEXT: call spir_func ptr @__to_private(ptr addrspace(4) %[[VAR_3]]) |
| 23 | + |
| 24 | +define spir_kernel void @test(ptr addrspace(1) %_arg_GlobalA, ptr byval(%id) %_arg_GlobalId, ptr addrspace(3) %_arg_LocalA) { |
| 25 | +entry: |
| 26 | + %var = alloca i32 |
| 27 | + %p0 = load i64, ptr %_arg_GlobalId |
| 28 | + %add = getelementptr inbounds i32, ptr addrspace(1) %_arg_GlobalA, i64 %p0 |
| 29 | + %p2 = load i64, ptr addrspace(1) @__spirv_BuiltInGlobalInvocationId |
| 30 | + %idx = getelementptr inbounds i32, ptr addrspace(1) %add, i64 %p2 |
| 31 | + %var1 = addrspacecast ptr addrspace(1) %idx to ptr addrspace(4) |
| 32 | + %var2 = addrspacecast ptr addrspace(3) %_arg_LocalA to ptr addrspace(4) |
| 33 | + %var3 = addrspacecast ptr %var to ptr addrspace(4) |
| 34 | + %G = call spir_func ptr addrspace(1) @_Z33__spirv_GenericCastToPtr_ToGlobalPvi(ptr addrspace(4) %var1, i32 5) |
| 35 | + %L = call spir_func ptr addrspace(3) @_Z32__spirv_GenericCastToPtr_ToLocalPvi(ptr addrspace(4) %var2, i32 4) |
| 36 | + %P = call spir_func ptr @_Z34__spirv_GenericCastToPtr_ToPrivatePvi(ptr addrspace(4) %var3, i32 7) |
| 37 | + %GE = call spir_func ptr addrspace(1) @_Z41__spirv_GenericCastToPtrExplicit_ToGlobalPvi(ptr addrspace(4) %var1, i32 5) |
| 38 | + %LE = call spir_func ptr addrspace(3) @_Z40__spirv_GenericCastToPtrExplicit_ToLocalPvi(ptr addrspace(4) %var2, i32 4) |
| 39 | + %PE = call spir_func ptr @_Z42__spirv_GenericCastToPtrExplicit_ToPrivatePvi(ptr addrspace(4) %var3, i32 7) |
| 40 | + ret void |
| 41 | +} |
| 42 | + |
| 43 | +declare spir_func ptr addrspace(1) @_Z33__spirv_GenericCastToPtr_ToGlobalPvi(ptr addrspace(4), i32) |
| 44 | +declare spir_func ptr addrspace(3) @_Z32__spirv_GenericCastToPtr_ToLocalPvi(ptr addrspace(4), i32) |
| 45 | +declare spir_func ptr @_Z34__spirv_GenericCastToPtr_ToPrivatePvi(ptr addrspace(4), i32) |
| 46 | +declare spir_func ptr addrspace(1) @_Z41__spirv_GenericCastToPtrExplicit_ToGlobalPvi(ptr addrspace(4), i32) |
| 47 | +declare spir_func ptr addrspace(3) @_Z40__spirv_GenericCastToPtrExplicit_ToLocalPvi(ptr addrspace(4), i32) |
| 48 | +declare spir_func ptr @_Z42__spirv_GenericCastToPtrExplicit_ToPrivatePvi(ptr addrspace(4), i32) |
0 commit comments