Skip to content

Commit 7342c46

Browse files
pratikasharigcbot
authored andcommitted
Fix bug in SPIRV reader to correctly propagate flags.
1 parent 11ecf5a commit 7342c46

File tree

1 file changed

+45
-28
lines changed

1 file changed

+45
-28
lines changed

IGC/AdaptorOCL/SPIRV/SPIRVReader.cpp

Lines changed: 45 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,32 @@ class SPIRVToLLVMDbgTran {
442442
return addMDNode(inst, Builder.createExpression(Exprs));
443443
}
444444

445+
DINode::DIFlags static decodeFlag(SPIRVWord spirvFlags)
446+
{
447+
DINode::DIFlags flags = DINode::FlagZero;
448+
449+
if (spirvFlags & SPIRVDebug::FlagIsArtificial)
450+
flags |= llvm::DINode::FlagArtificial;
451+
if (spirvFlags & SPIRVDebug::FlagIsExplicit)
452+
flags |= llvm::DINode::FlagExplicit;
453+
if (spirvFlags & SPIRVDebug::FlagIsPrototyped)
454+
flags |= llvm::DINode::FlagPrototyped;
455+
if (spirvFlags & SPIRVDebug::FlagIsLValueReference)
456+
flags |= llvm::DINode::FlagLValueReference;
457+
if (spirvFlags & SPIRVDebug::FlagIsRValueReference)
458+
flags |= llvm::DINode::FlagRValueReference;
459+
if ((spirvFlags & SPIRVDebug::FlagAccess) == SPIRVDebug::FlagIsPublic)
460+
flags |= llvm::DINode::FlagPublic;
461+
if (spirvFlags & SPIRVDebug::FlagIsProtected)
462+
flags |= llvm::DINode::FlagProtected;
463+
if (spirvFlags & SPIRVDebug::FlagIsPrivate)
464+
flags |= llvm::DINode::FlagPrivate;
465+
if (spirvFlags & SPIRVDebug::FlagIsObjectPointer)
466+
flags |= llvm::DINode::FlagObjectPointer;
467+
468+
return flags;
469+
}
470+
445471
DIType* createTypeBasic(SPIRVExtInst* inst)
446472
{
447473
if (auto n = getExistingNode<DIType*>(inst))
@@ -498,6 +524,8 @@ class SPIRVToLLVMDbgTran {
498524
return addMDNode(inst, Builder.createReferenceType(dwarf::DW_TAG_reference_type, pointeeType, M->getDataLayout().getPointerSizeInBits()));
499525
else if (flags == SPIRVDebug::Flag::FlagIsRValueReference)
500526
return addMDNode(inst, Builder.createReferenceType(dwarf::DW_TAG_rvalue_reference_type, pointeeType, M->getDataLayout().getPointerSizeInBits()));
527+
else if (flags & SPIRVDebug::Flag::FlagIsObjectPointer)
528+
return addMDNode(inst, Builder.createObjectPointerType(pointeeType));
501529
else
502530
return addMDNode(inst, Builder.createPointerType(pointeeType, M->getDataLayout().getPointerSizeInBits()));
503531
}
@@ -643,13 +671,7 @@ class SPIRVToLLVMDbgTran {
643671
auto spirvFlags = compositeType.getFlags();
644672
auto scope = createScope(BM->get<SPIRVExtInst>(compositeType.getParent()));
645673

646-
DINode::DIFlags flags = DINode::FlagZero;
647-
if (spirvFlags & SPIRVDebug::FlagIsFwdDecl)
648-
flags |= DINode::FlagFwdDecl;
649-
if (spirvFlags & SPIRVDebug::FlagTypePassByValue)
650-
flags |= DINode::FlagTypePassByValue;
651-
if (spirvFlags & SPIRVDebug::FlagTypePassByReference)
652-
flags |= DINode::FlagTypePassByReference;
674+
DINode::DIFlags flags = decodeFlag(spirvFlags);
653675

654676
if (!scope)
655677
scope = cu;
@@ -911,12 +933,20 @@ class SPIRVToLLVMDbgTran {
911933
auto line = funcDcl.getLine();
912934
auto type = createSubroutineType(BM->get<SPIRVExtInst>(funcDcl.getType()));
913935

936+
auto spirvFlags = funcDcl.getFlags();
937+
938+
DINode::DIFlags flags = decodeFlag(spirvFlags);
939+
940+
bool isDefinition = spirvFlags & SPIRVDebug::FlagIsDefinition;
941+
bool isOptimized = spirvFlags & SPIRVDebug::FlagIsOptimized;
942+
bool isLocal = spirvFlags & SPIRVDebug::FlagIsLocal;
943+
914944
if (isa<DICompositeType>(scope) || isa<DINamespace>(scope))
915945
return addMDNode(inst, Builder.createMethod(scope, name, linkageName, file, line, type,
916-
true, true));
946+
isLocal, isDefinition, 0, 0, 0, nullptr, flags, isOptimized));
917947
else
918948
return addMDNode(inst, Builder.createTempFunctionFwdDecl(scope, name, linkageName, file, (unsigned int)line, type,
919-
true, true, (unsigned int)line));
949+
isLocal, isDefinition, (unsigned int)line, flags, isOptimized));
920950
}
921951

922952
bool isTemplateType(SPIRVExtInst* inst)
@@ -975,23 +1005,7 @@ class SPIRVToLLVMDbgTran {
9751005
auto spType = createSubroutineType(BM->get<SPIRVExtInst>(sp.getType()));
9761006
auto spirvFlags = sp.getFlags();
9771007

978-
DINode::DIFlags flags = DINode::FlagZero;
979-
if (spirvFlags & SPIRVDebug::FlagIsArtificial)
980-
flags |= llvm::DINode::FlagArtificial;
981-
if (spirvFlags & SPIRVDebug::FlagIsExplicit)
982-
flags |= llvm::DINode::FlagExplicit;
983-
if (spirvFlags & SPIRVDebug::FlagIsPrototyped)
984-
flags |= llvm::DINode::FlagPrototyped;
985-
if (spirvFlags & SPIRVDebug::FlagIsLValueReference)
986-
flags |= llvm::DINode::FlagLValueReference;
987-
if (spirvFlags & SPIRVDebug::FlagIsRValueReference)
988-
flags |= llvm::DINode::FlagRValueReference;
989-
if ((spirvFlags & SPIRVDebug::FlagAccess) == SPIRVDebug::FlagIsPublic)
990-
flags |= llvm::DINode::FlagPublic;
991-
if (spirvFlags & SPIRVDebug::FlagIsProtected)
992-
flags |= llvm::DINode::FlagProtected;
993-
if (spirvFlags & SPIRVDebug::FlagIsPrivate)
994-
flags |= llvm::DINode::FlagPrivate;
1008+
DINode::DIFlags flags = decodeFlag(spirvFlags);
9951009

9961010
bool isDefinition = spirvFlags & SPIRVDebug::FlagIsDefinition;
9971011
bool isOptimized = spirvFlags & SPIRVDebug::FlagIsOptimized;
@@ -1155,15 +1169,18 @@ class SPIRVToLLVMDbgTran {
11551169
auto& name = BM->get<SPIRVString>(var.getName())->getStr();
11561170
auto file = getDIFile(BM->get<SPIRVExtInst>(var.getSource()));
11571171
auto type = createType(BM->get<SPIRVExtInst>(var.getType()));
1172+
auto spirvFlags = var.getFlags();
11581173
auto line = var.getLine();
11591174

1175+
auto flags = decodeFlag(spirvFlags);
1176+
11601177
if (var.isParamVar())
11611178
{
1162-
return addMDNode(inst, Builder.createParameterVariable(scope, name, var.getArgNo(), file, line, type));
1179+
return addMDNode(inst, Builder.createParameterVariable(scope, name, var.getArgNo(), file, line, type, false, flags));
11631180
}
11641181
else
11651182
{
1166-
return addMDNode(inst, Builder.createAutoVariable(scope, name, file, line, type));
1183+
return addMDNode(inst, Builder.createAutoVariable(scope, name, file, line, type, false, flags));
11671184
}
11681185
}
11691186

0 commit comments

Comments
 (0)