Skip to content

Commit 16617c7

Browse files
pszymichigcbot
authored andcommitted
Port SPIRV-Reader kernel-arg-qual workaround
To update opencl-clang in IGC a newer SPIRV-Translator is needed. This is currently not possible, since SPIRV-Translator removed writing "const" kernel func arg qualifier to *.spv as NoWrite param, since this was not correct with the SPIR-V spec. A workaround has been created and this change ports it from SPIRV-Translator to IGC's baked-in SPIRV-Reader: https://github.com/KhronosGroup/SPIRV-LLVM-Translator/\ commit/835eb7e8696ab4ba764d6e1b4c2f3e2c4ddc0551
1 parent 51b96c2 commit 16617c7

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

IGC/AdaptorOCL/SPIRV/SPIRVReader.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4110,9 +4110,11 @@ SPIRVToLLVM::decodeVecTypeHint(LLVMContext &C, unsigned code) {
41104110
// 'OpString "kernel_arg_type.%kernel_name%.type1,type2,type3,..' instruction.
41114111
// Try to find such instruction and generate metadata based on it.
41124112
static bool transKernelArgTypeMedataFromString(
4113-
LLVMContext *Ctx, std::vector<llvm::Metadata*> &KernelMD, SPIRVModule *BM, Function *Kernel) {
4113+
LLVMContext *Ctx, std::vector<llvm::Metadata*> &KernelMD, SPIRVModule *BM,
4114+
Function *Kernel, std::string MDName)
4115+
{
41144116
std::string ArgTypePrefix =
4115-
std::string(SPIR_MD_KERNEL_ARG_TYPE) + "." + Kernel->getName().str() + ".";
4117+
std::string(MDName) + "." + Kernel->getName().str() + ".";
41164118
auto ArgTypeStrIt = std::find_if(
41174119
BM->getStringVec().begin(), BM->getStringVec().end(),
41184120
[=](SPIRVString *S) { return S->getStr().find(ArgTypePrefix) == 0; });
@@ -4123,7 +4125,7 @@ static bool transKernelArgTypeMedataFromString(
41234125
std::string ArgTypeStr =
41244126
(*ArgTypeStrIt)->getStr().substr(ArgTypePrefix.size());
41254127
std::vector<Metadata *> TypeMDs;
4126-
TypeMDs.push_back(MDString::get(*Ctx, SPIR_MD_KERNEL_ARG_TYPE));
4128+
TypeMDs.push_back(MDString::get(*Ctx, MDName));
41274129

41284130
int countBraces = 0;
41294131
std::string::size_type start = 0;
@@ -4227,13 +4229,16 @@ SPIRVToLLVM::transKernelMetadata()
42274229
return MDString::get(*Context, Qual);
42284230
});
42294231
// Generate metadata for kernel_arg_type
4230-
if (!transKernelArgTypeMedataFromString(Context, KernelMD, BM, F)) {
4232+
if (!transKernelArgTypeMedataFromString(Context, KernelMD, BM, F,
4233+
SPIR_MD_KERNEL_ARG_TYPE)) {
42314234
addOCLKernelArgumentMetadata(Context, KernelMD,
42324235
SPIR_MD_KERNEL_ARG_TYPE, BF,
42334236
[=](SPIRVFunctionParameter *Arg) {
42344237
return transOCLKernelArgTypeName(Arg);
42354238
});
42364239
}
4240+
if (!transKernelArgTypeMedataFromString(Context, KernelMD, BM, F,
4241+
SPIR_MD_KERNEL_ARG_TYPE_QUAL))
42374242
// Generate metadata for kernel_arg_type_qual
42384243
addOCLKernelArgumentMetadata(Context, KernelMD,
42394244
SPIR_MD_KERNEL_ARG_TYPE_QUAL, BF,

0 commit comments

Comments
 (0)