Skip to content

Commit bb50bc2

Browse files
[SPIR-V] Fix support of OpGenericCastToPtr __spirv_ wrappers (#96655)
This PR completes implementation of insertion of OpGenericCastToPtr using builtin functions started by #95055 by: * fixing errors in Tablegen definition, * adding type inference info for `__spirv_GenericCastToPtrExplicit` kind of wrappers, and * hardening the test case to check correct translation of `__spirv_GenericCastToPtrExplicit` kind of wrappers.
1 parent 0d9172e commit bb50bc2

File tree

3 files changed

+25
-4
lines changed

3 files changed

+25
-4
lines changed

llvm/lib/Target/SPIRV/SPIRVBuiltins.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -669,9 +669,9 @@ defm : DemangledNativeBuiltin<"to_private", OpenCL_std, CastToPtr, 1, 1, OpGener
669669
defm : DemangledNativeBuiltin<"__spirv_GenericCastToPtr_ToGlobal", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtr>;
670670
defm : DemangledNativeBuiltin<"__spirv_GenericCastToPtr_ToLocal", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtr>;
671671
defm : DemangledNativeBuiltin<"__spirv_GenericCastToPtr_ToPrivate", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtr>;
672-
defm : DemangledNativeBuiltin<"__spirv_OpGenericCastToPtrExplicit_ToGlobal", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtr>;
673-
defm : DemangledNativeBuiltin<"__spirv_OpGenericCastToPtrExplicit_ToLocal", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtr>;
674-
defm : DemangledNativeBuiltin<"__spirv_OpGenericCastToPtrExplicit_ToPrivate", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtr>;
672+
defm : DemangledNativeBuiltin<"__spirv_GenericCastToPtrExplicit_ToGlobal", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtr>;
673+
defm : DemangledNativeBuiltin<"__spirv_GenericCastToPtrExplicit_ToLocal", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtr>;
674+
defm : DemangledNativeBuiltin<"__spirv_GenericCastToPtrExplicit_ToPrivate", OpenCL_std, CastToPtr, 2, 2, OpGenericCastToPtr>;
675675

676676
// Cooperative Matrix builtin records:
677677
defm : DemangledNativeBuiltin<"__spirv_CooperativeMatrixLoadKHR", OpenCL_std, CoopMatr, 2, 0, OpCooperativeMatrixLoadKHR>;

llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,10 @@ Type *SPIRVEmitIntrinsics::deduceElementTypeHelper(
375375
{"to_private", 0},
376376
{"__spirv_GenericCastToPtr_ToGlobal", 0},
377377
{"__spirv_GenericCastToPtr_ToLocal", 0},
378-
{"__spirv_GenericCastToPtr_ToPrivate", 0}};
378+
{"__spirv_GenericCastToPtr_ToPrivate", 0},
379+
{"__spirv_GenericCastToPtrExplicit_ToGlobal", 0},
380+
{"__spirv_GenericCastToPtrExplicit_ToLocal", 0},
381+
{"__spirv_GenericCastToPtrExplicit_ToPrivate", 0}};
379382
// TODO: maybe improve performance by caching demangled names
380383
if (Function *CalledF = CI->getCalledFunction()) {
381384
std::string DemangledName =

llvm/test/CodeGen/SPIRV/transcoding/OpGenericCastToPtr.ll

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
; CHECK-SPIRV: OpGenericCastToPtr %[[#GlobalCharPtr]]
2727
; CHECK-SPIRV: OpGenericCastToPtr %[[#LocalCharPtr]]
2828
; CHECK-SPIRV: OpGenericCastToPtr %[[#PrivateCharPtr]]
29+
; CHECK-SPIRV: OpGenericCastToPtr %[[#GlobalCharPtr]]
30+
; CHECK-SPIRV: OpGenericCastToPtr %[[#LocalCharPtr]]
31+
; CHECK-SPIRV: OpGenericCastToPtr %[[#PrivateCharPtr]]
2932
; CHECK-SPIRV: OpFunctionEnd
3033

3134
; CHECK-SPIRV: OpFunction
@@ -50,6 +53,9 @@ entry:
5053
%G = call spir_func ptr addrspace(1) @_Z33__spirv_GenericCastToPtr_ToGlobalPvi(ptr addrspace(4) %var1, i32 5)
5154
%L = call spir_func ptr addrspace(3) @_Z32__spirv_GenericCastToPtr_ToLocalPvi(ptr addrspace(4) %var2, i32 4)
5255
%P = call spir_func ptr @_Z34__spirv_GenericCastToPtr_ToPrivatePvi(ptr addrspace(4) %var3, i32 7)
56+
%GE = call spir_func ptr addrspace(1) @_Z41__spirv_GenericCastToPtrExplicit_ToGlobalPvi(ptr addrspace(4) %var1, i32 5)
57+
%LE = call spir_func ptr addrspace(3) @_Z40__spirv_GenericCastToPtrExplicit_ToLocalPvi(ptr addrspace(4) %var2, i32 4)
58+
%PE = call spir_func ptr @_Z42__spirv_GenericCastToPtrExplicit_ToPrivatePvi(ptr addrspace(4) %var3, i32 7)
5359
ret void
5460
}
5561

@@ -72,6 +78,9 @@ entry:
7278
declare spir_func ptr addrspace(1) @_Z33__spirv_GenericCastToPtr_ToGlobalPvi(ptr addrspace(4), i32)
7379
declare spir_func ptr addrspace(3) @_Z32__spirv_GenericCastToPtr_ToLocalPvi(ptr addrspace(4), i32)
7480
declare spir_func ptr @_Z34__spirv_GenericCastToPtr_ToPrivatePvi(ptr addrspace(4), i32)
81+
declare spir_func ptr addrspace(1) @_Z41__spirv_GenericCastToPtrExplicit_ToGlobalPvi(ptr addrspace(4), i32)
82+
declare spir_func ptr addrspace(3) @_Z40__spirv_GenericCastToPtrExplicit_ToLocalPvi(ptr addrspace(4), i32)
83+
declare spir_func ptr @_Z42__spirv_GenericCastToPtrExplicit_ToPrivatePvi(ptr addrspace(4), i32)
7584

7685
declare spir_func ptr addrspace(1) @_Z9to_globalPv(ptr addrspace(4))
7786
declare spir_func ptr addrspace(3) @_Z8to_localPv(ptr addrspace(4))
@@ -86,6 +95,9 @@ declare spir_func ptr @_Z10to_privatePv(ptr addrspace(4))
8695
; CHECK-SPIRV: OpGenericCastToPtr %[[#GlobalIntPtr]]
8796
; CHECK-SPIRV: OpGenericCastToPtr %[[#LocalCharPtr]]
8897
; CHECK-SPIRV: OpGenericCastToPtr %[[#PrivateIntPtr]]
98+
; CHECK-SPIRV: OpGenericCastToPtr %[[#GlobalIntPtr]]
99+
; CHECK-SPIRV: OpGenericCastToPtr %[[#LocalCharPtr]]
100+
; CHECK-SPIRV: OpGenericCastToPtr %[[#PrivateIntPtr]]
89101
; CHECK-SPIRV: OpFunctionEnd
90102

91103
; CHECK-SPIRV: OpFunction
@@ -110,6 +122,9 @@ entry:
110122
%G = call spir_func ptr addrspace(1) @__spirv_GenericCastToPtr_ToGlobal(ptr addrspace(4) %var1, i32 5)
111123
%L = call spir_func ptr addrspace(3) @__spirv_GenericCastToPtr_ToLocal(ptr addrspace(4) %var2, i32 4)
112124
%P = call spir_func ptr @__spirv_GenericCastToPtr_ToPrivate(ptr addrspace(4) %var3, i32 7)
125+
%GE = call spir_func ptr addrspace(1) @__spirv_GenericCastToPtrExplicit_ToGlobal(ptr addrspace(4) %var1, i32 5)
126+
%LE = call spir_func ptr addrspace(3) @__spirv_GenericCastToPtrExplicit_ToLocal(ptr addrspace(4) %var2, i32 4)
127+
%PE = call spir_func ptr @__spirv_GenericCastToPtrExplicit_ToPrivate(ptr addrspace(4) %var3, i32 7)
113128
ret void
114129
}
115130

@@ -132,6 +147,9 @@ entry:
132147
declare spir_func ptr addrspace(1) @__spirv_GenericCastToPtr_ToGlobal(ptr addrspace(4), i32)
133148
declare spir_func ptr addrspace(3) @__spirv_GenericCastToPtr_ToLocal(ptr addrspace(4), i32)
134149
declare spir_func ptr @__spirv_GenericCastToPtr_ToPrivate(ptr addrspace(4), i32)
150+
declare spir_func ptr addrspace(1) @__spirv_GenericCastToPtrExplicit_ToGlobal(ptr addrspace(4), i32)
151+
declare spir_func ptr addrspace(3) @__spirv_GenericCastToPtrExplicit_ToLocal(ptr addrspace(4), i32)
152+
declare spir_func ptr @__spirv_GenericCastToPtrExplicit_ToPrivate(ptr addrspace(4), i32)
135153

136154
declare spir_func ptr addrspace(1) @to_global(ptr addrspace(4))
137155
declare spir_func ptr addrspace(3) @to_local(ptr addrspace(4))

0 commit comments

Comments
 (0)