Skip to content

Commit 3ae8ac6

Browse files
MrSidimssys-ce-bb
authored andcommitted
Adjust TypeMember for NonSemantic spec (#2033)
It no longer has a Scope (parent) parameter. It results in several changes including how to determine DIBuilder to use for debug info generation. The patch also fixes a bug of incorrect debug info assignment in case of recursion DebugInfo inst generation. Signed-off-by: Sidorov, Dmitry <[email protected]> Original commit: KhronosGroup/SPIRV-LLVM-Translator@01679ce
1 parent 4c21b28 commit 3ae8ac6

File tree

8 files changed

+226
-8
lines changed

8 files changed

+226
-8
lines changed

llvm-spirv/lib/SPIRV/LLVMToSPIRVDbgTran.cpp

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,17 @@ SPIRVEntry *LLVMToSPIRVDbgTran::transDbgEntry(const MDNode *DIEntry) {
254254
}
255255
SPIRVEntry *Res = transDbgEntryImpl(DIEntry);
256256
assert(Res && "Translation failure");
257+
// We might end up having a recursive debug info generation like the
258+
// following:
259+
// translation of DIDerivedType (member) calls DICompositeType translation
260+
// as its parent scope;
261+
// translation of DICompositeType calls translation of its members
262+
// (DIDerivedType with member tag).
263+
// Here we make only the latest of these instructions be cached and hence
264+
// reused
265+
// FIXME: find a way to not create dead instruction
266+
if (MDMap[DIEntry])
267+
return MDMap[DIEntry];
257268
MDMap[DIEntry] = Res;
258269
return Res;
259270
}
@@ -961,7 +972,14 @@ LLVMToSPIRVDbgTran::transDbgCompositeType(const DICompositeType *CT) {
961972
}
962973

963974
SPIRVEntry *LLVMToSPIRVDbgTran::transDbgMemberType(const DIDerivedType *MT) {
964-
using namespace SPIRVDebug::Operand::TypeMember;
975+
if (isNonSemanticDebugInfo())
976+
return transDbgMemberTypeNonSemantic(MT);
977+
return transDbgMemberTypeOpenCL(MT);
978+
}
979+
980+
SPIRVEntry *
981+
LLVMToSPIRVDbgTran::transDbgMemberTypeOpenCL(const DIDerivedType *MT) {
982+
using namespace SPIRVDebug::Operand::TypeMember::OpenCL;
965983
SPIRVWordVec Ops(MinOperandCount);
966984

967985
Ops[NameIdx] = BM->getString(MT->getName().str())->getId();
@@ -988,6 +1006,34 @@ SPIRVEntry *LLVMToSPIRVDbgTran::transDbgMemberType(const DIDerivedType *MT) {
9881006
return BM->addDebugInfo(SPIRVDebug::TypeMember, getVoidTy(), Ops);
9891007
}
9901008

1009+
SPIRVEntry *
1010+
LLVMToSPIRVDbgTran::transDbgMemberTypeNonSemantic(const DIDerivedType *MT) {
1011+
using namespace SPIRVDebug::Operand::TypeMember::NonSemantic;
1012+
SPIRVWordVec Ops(MinOperandCount);
1013+
1014+
Ops[NameIdx] = BM->getString(MT->getName().str())->getId();
1015+
Ops[TypeIdx] = transDbgEntry(MT->getBaseType())->getId();
1016+
Ops[SourceIdx] = getSource(MT)->getId();
1017+
Ops[LineIdx] = MT->getLine();
1018+
Ops[ColumnIdx] = 0; // This version of DIDerivedType has no column number
1019+
ConstantInt *Offset = getUInt(M, MT->getOffsetInBits());
1020+
Ops[OffsetIdx] = SPIRVWriter->transValue(Offset, nullptr)->getId();
1021+
ConstantInt *Size = getUInt(M, MT->getSizeInBits());
1022+
Ops[SizeIdx] = SPIRVWriter->transValue(Size, nullptr)->getId();
1023+
Ops[FlagsIdx] = adjustAccessFlags(MT->getScope(), transDebugFlags(MT));
1024+
transDbgEntry(MT->getScope())->getId();
1025+
if (MT->isStaticMember()) {
1026+
if (llvm::Constant *C = MT->getConstant()) {
1027+
SPIRVValue *Val = SPIRVWriter->transValue(C, nullptr);
1028+
assert(isConstantOpCode(Val->getOpCode()) &&
1029+
"LLVM constant must be translated to SPIRV constant");
1030+
Ops.push_back(Val->getId());
1031+
}
1032+
}
1033+
transformToConstant(Ops, {LineIdx, ColumnIdx, FlagsIdx});
1034+
return BM->addDebugInfo(SPIRVDebug::TypeMember, getVoidTy(), Ops);
1035+
}
1036+
9911037
SPIRVEntry *LLVMToSPIRVDbgTran::transDbgInheritance(const DIDerivedType *DT) {
9921038
using namespace SPIRVDebug::Operand::TypeInheritance;
9931039
SPIRVWordVec Ops(OperandCount);

llvm-spirv/lib/SPIRV/LLVMToSPIRVDbgTran.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ class LLVMToSPIRVDbgTran {
119119
SPIRVEntry *transDbgEnumType(const DICompositeType *ET);
120120
SPIRVEntry *transDbgCompositeType(const DICompositeType *CT);
121121
SPIRVEntry *transDbgMemberType(const DIDerivedType *MT);
122+
SPIRVEntry *transDbgMemberTypeOpenCL(const DIDerivedType *MT);
123+
SPIRVEntry *transDbgMemberTypeNonSemantic(const DIDerivedType *MT);
122124
SPIRVEntry *transDbgInheritance(const DIDerivedType *DT);
123125
SPIRVEntry *transDbgPtrToMember(const DIDerivedType *DT);
124126

llvm-spirv/lib/SPIRV/SPIRVToLLVMDbgTran.cpp

Lines changed: 70 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,16 @@ SPIRVToLLVMDbgTran::transTypeComposite(const SPIRVExtInst *DebugInst) {
529529
DebugInstCache[DebugInst] = CT;
530530
SmallVector<llvm::Metadata *, 8> EltTys;
531531
for (size_t I = FirstMemberIdx; I < Ops.size(); ++I) {
532-
EltTys.push_back(transDebugInst(BM->get<SPIRVExtInst>(Ops[I])));
532+
auto *MemberInst = BM->get<SPIRVExtInst>(Ops[I]);
533+
if (MemberInst->getExtOp() == SPIRVDebug::TypeMember) {
534+
auto *SPVMemberInst = BM->get<SPIRVExtInst>(Ops[I]);
535+
DINode *MemberMD =
536+
transTypeMember(SPVMemberInst, DebugInst, cast<DIScope>(CT));
537+
EltTys.push_back(MemberMD);
538+
DebugInstCache[SPVMemberInst] = MemberMD;
539+
} else {
540+
EltTys.emplace_back(transDebugInst(BM->get<SPIRVExtInst>(Ops[I])));
541+
}
533542
}
534543
DINodeArray Elements = getDIBuilder(DebugInst).getOrCreateArray(EltTys);
535544
getDIBuilder(DebugInst).replaceArrays(CT, Elements);
@@ -611,8 +620,18 @@ SPIRVToLLVMDbgTran::transTypeString(const SPIRVExtInst *DebugInst) {
611620
0 /*AlignInBits*/, Encoding);
612621
}
613622

614-
DINode *SPIRVToLLVMDbgTran::transTypeMember(const SPIRVExtInst *DebugInst) {
615-
using namespace SPIRVDebug::Operand::TypeMember;
623+
DINode *SPIRVToLLVMDbgTran::transTypeMember(const SPIRVExtInst *DebugInst,
624+
const SPIRVExtInst *ParentInst,
625+
DIScope *Scope) {
626+
if (isNonSemanticDebugInfo(DebugInst->getExtSetKind()))
627+
// In NonSemantic spec TypeMember doesn't have Scope parameter
628+
return transTypeMemberNonSemantic(DebugInst, ParentInst, Scope);
629+
return transTypeMemberOpenCL(DebugInst);
630+
}
631+
632+
DINode *
633+
SPIRVToLLVMDbgTran::transTypeMemberOpenCL(const SPIRVExtInst *DebugInst) {
634+
using namespace SPIRVDebug::Operand::TypeMember::OpenCL;
616635
const SPIRVWordVec &Ops = DebugInst->getArguments();
617636
assert(Ops.size() >= MinOperandCount && "Invalid number of operands");
618637

@@ -654,6 +673,54 @@ DINode *SPIRVToLLVMDbgTran::transTypeMember(const SPIRVExtInst *DebugInst) {
654673
Flags, BaseType);
655674
}
656675

676+
DINode *
677+
SPIRVToLLVMDbgTran::transTypeMemberNonSemantic(const SPIRVExtInst *DebugInst,
678+
const SPIRVExtInst *ParentInst,
679+
DIScope *Scope) {
680+
if (!Scope)
681+
// Will be translated later when processing TypeMember's parent
682+
return nullptr;
683+
using namespace SPIRVDebug::Operand::TypeMember::NonSemantic;
684+
const SPIRVWordVec &Ops = DebugInst->getArguments();
685+
assert(Ops.size() >= MinOperandCount && "Invalid number of operands");
686+
687+
DIFile *File = getFile(Ops[SourceIdx]);
688+
SPIRVWord LineNo =
689+
getConstantValueOrLiteral(Ops, LineIdx, DebugInst->getExtSetKind());
690+
StringRef Name = getString(Ops[NameIdx]);
691+
DIType *BaseType =
692+
transDebugInst<DIType>(BM->get<SPIRVExtInst>(Ops[TypeIdx]));
693+
uint64_t OffsetInBits =
694+
BM->get<SPIRVConstant>(Ops[OffsetIdx])->getZExtIntValue();
695+
SPIRVWord SPIRVFlags =
696+
getConstantValueOrLiteral(Ops, FlagsIdx, DebugInst->getExtSetKind());
697+
DINode::DIFlags Flags = DINode::FlagZero;
698+
if ((SPIRVDebug::FlagAccess & SPIRVFlags) == SPIRVDebug::FlagIsPublic) {
699+
Flags |= DINode::FlagPublic;
700+
} else if (SPIRVFlags & SPIRVDebug::FlagIsProtected) {
701+
Flags |= DINode::FlagProtected;
702+
} else if (SPIRVFlags & SPIRVDebug::FlagIsPrivate) {
703+
Flags |= DINode::FlagPrivate;
704+
}
705+
if (SPIRVFlags & SPIRVDebug::FlagIsStaticMember)
706+
Flags |= DINode::FlagStaticMember;
707+
708+
if (Flags & DINode::FlagStaticMember && Ops.size() > MinOperandCount) {
709+
SPIRVValue *ConstVal = BM->get<SPIRVValue>(Ops[ValueIdx]);
710+
assert(isConstantOpCode(ConstVal->getOpCode()) &&
711+
"Static member must be a constant");
712+
llvm::Value *Val = SPIRVReader->transValue(ConstVal, nullptr, nullptr);
713+
return getDIBuilder(DebugInst).createStaticMemberType(
714+
Scope, Name, File, LineNo, BaseType, Flags, cast<llvm::Constant>(Val));
715+
}
716+
uint64_t Size = BM->get<SPIRVConstant>(Ops[SizeIdx])->getZExtIntValue();
717+
uint64_t Alignment = 0;
718+
719+
return getDIBuilder(ParentInst)
720+
.createMemberType(Scope, Name, File, LineNo, Size, Alignment,
721+
OffsetInBits, Flags, BaseType);
722+
}
723+
657724
DINode *SPIRVToLLVMDbgTran::transTypeEnum(const SPIRVExtInst *DebugInst) {
658725
using namespace SPIRVDebug::Operand::TypeEnum;
659726
const SPIRVWordVec &Ops = DebugInst->getArguments();

llvm-spirv/lib/SPIRV/SPIRVToLLVMDbgTran.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,13 @@ class SPIRVToLLVMDbgTran {
128128

129129
DIStringType *transTypeString(const SPIRVExtInst *DebugInst);
130130

131-
DINode *transTypeMember(const SPIRVExtInst *DebugInst);
131+
DINode *transTypeMember(const SPIRVExtInst *DebugInst,
132+
const SPIRVExtInst *ParentInst = nullptr,
133+
DIScope *Scope = nullptr);
134+
DINode *transTypeMemberOpenCL(const SPIRVExtInst *DebugInst);
135+
DINode *transTypeMemberNonSemantic(const SPIRVExtInst *DebugInst,
136+
const SPIRVExtInst *ParentInst,
137+
DIScope *Scope);
132138

133139
DINode *transTypeEnum(const SPIRVExtInst *DebugInst);
134140

llvm-spirv/lib/SPIRV/libSPIRV/SPIRV.debug.h

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,7 @@ enum {
465465
}
466466

467467
namespace TypeMember {
468+
namespace OpenCL {
468469
enum {
469470
NameIdx = 0,
470471
TypeIdx = 1,
@@ -480,6 +481,22 @@ enum {
480481
};
481482
}
482483

484+
namespace NonSemantic {
485+
enum {
486+
NameIdx = 0,
487+
TypeIdx = 1,
488+
SourceIdx = 2,
489+
LineIdx = 3,
490+
ColumnIdx = 4,
491+
OffsetIdx = 5,
492+
SizeIdx = 6,
493+
FlagsIdx = 7,
494+
ValueIdx = 8,
495+
MinOperandCount = 8
496+
};
497+
}
498+
} // namespace TypeMember
499+
483500
namespace TypeInheritance {
484501
enum {
485502
ChildIdx = 0,
@@ -934,7 +951,7 @@ inline bool hasDbgInstParentScopeIdx(const uint32_t Kind,
934951
ParentScopeIdx = TypeEnum::ParentIdx;
935952
return true;
936953
case SPIRVDebug::TypeComposite:
937-
ParentScopeIdx = TypeMember::ParentIdx;
954+
ParentScopeIdx = TypeMember::OpenCL::ParentIdx;
938955
return true;
939956
case SPIRVDebug::TypeInheritance:
940957
ParentScopeIdx = TypeInheritance::ParentIdx;

llvm-spirv/test/DebugInfo/NonSemantic/Shader200/DebugInfoSubrange.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
; CHECK-SPIRV: [[#DINoneId:]] [[#EISId]] DebugInfoNone
1717

1818
; CHECK-SPIRV: [[#DebugFuncId:]] [[#EISId]] DebugFunction
19+
; CHECK-SPIRV: [[#LocalVarId:]] [[#EISId]] DebugLocalVariable [[#LocalVarNameId]] [[#]] [[#]] [[#]] [[#]] [[#DebugFuncId]]
1920
; CHECK-SPIRV: [[#DebugTypeTemplate:]] [[#EISId]] DebugTypeTemplate [[#DebugFuncId]]
20-
; CHECK-SPIRV: [[#LocalVarId:]] [[#EISId]] DebugLocalVariable [[#LocalVarNameId]] [[#]] [[#]] [[#]] [[#]] [[#DebugTypeTemplate]]
2121
; CHECK-SPIRV: [[#EISId]] DebugTypeSubrange [[#DINoneId]] [[#Constant1Id]] [[#LocalVarId]] [[#DINoneId]]
2222

2323
; CHECK-SPIRV: [[#DIExprId:]] [[#EISId]] DebugExpression
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
; RUN: llvm-as < %s -o %t.bc
2+
; RUN: llvm-spirv %t.bc -o %t.spv -spirv-debug-info-version=nonsemantic-shader-100
3+
; RUN: llvm-spirv %t.spv --to-text -o - | FileCheck %s --check-prefix=CHECK-SPIRV
4+
; RUN: llvm-spirv -r -emit-opaque-pointers %t.spv -o %t.rev.bc
5+
; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM
6+
7+
; RUN: llvm-spirv %t.bc -o %t.spv -spirv-debug-info-version=nonsemantic-shader-200
8+
; RUN: llvm-spirv %t.spv --to-text -o - | FileCheck %s --check-prefix=CHECK-SPIRV
9+
; RUN: llvm-spirv -r -emit-opaque-pointers %t.spv -o %t.rev.bc
10+
; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM
11+
12+
; Generated from:
13+
;
14+
; struct A {
15+
; static int fully_specified;
16+
; static int smem[];
17+
; };
18+
;
19+
; int A::fully_specified;
20+
; int A::smem[] = { 0, 1, 2, 3 };
21+
22+
; CHECK-SPIRV: ExtInst [[#]] [[#Member1:]] [[#]] DebugTypeMember [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] {{$}}
23+
; CHECK-SPIRV: ExtInst [[#]] [[#Member2:]] [[#]] DebugTypeMember [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] {{$}}
24+
; CHECK-SPIRV: ExtInst [[#]] [[#]] [[#]] DebugTypeComposite [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] [[#Member1]] [[#Member2]]
25+
; CHECK-SPIRV: ExtInst [[#]] [[#]] [[#]] DebugGlobalVariable [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] [[#Member1]]
26+
; CHECK-SPIRV: ExtInst [[#]] [[#]] [[#]] DebugGlobalVariable [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] [[#]] [[#Member2]]
27+
28+
; CHECK-LLVM: ![[#GVExpr1:]] = !DIGlobalVariableExpression(var: ![[#GV1:]], expr: !DIExpression())
29+
; CHECK-LLVM: ![[#GV1]] = distinct !DIGlobalVariable(name: "fully_specified", linkageName: "_ZN1A15fully_specifiedE", scope: ![[#CU:]], file: ![[#File:]], line: 7, type: ![[#GVTy1:]], isLocal: false, isDefinition: true, declaration: ![[#Decl1:]])
30+
; CHECK-LLVM: ![[#CU]] = distinct !DICompileUnit(language: DW_LANG_C_plus_plus{{.*}}, file: ![[#File:]], {{.*}}, globals: ![[#GVs:]]
31+
; CHECK-LLVM: ![[#File]] = !DIFile(filename: "static_member_array.cpp", directory: "/Volumes/Data/radar/28706946")
32+
; CHECK-LLVM: ![[#GVs]] = !{![[#GVExpr1]], ![[#GVExpr2:]]}
33+
; CHECK-LLVM: ![[#GVExpr2]] = !DIGlobalVariableExpression(var: ![[#GV2:]], expr: !DIExpression())
34+
; CHECK-LLVM: ![[#GV2]] = distinct !DIGlobalVariable(name: "smem", linkageName: "_ZN1A4smemE", scope: ![[#CU]], file: ![[#File]], line: 8, type: ![[#GVTy2:]], isLocal: false, isDefinition: true, declaration: ![[#Decl2:]])
35+
; CHECK-LLVM: ![[#GVTy2]] = !DICompositeType(tag: DW_TAG_array_type, baseType: !8, size: 128, elements: ![[#Elements1:]])
36+
; CHECK-LLVM: ![[#GVTy1]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
37+
; CHECK-LLVM: ![[#Elements1]] = !{![[#Subrange:]]}
38+
; CHECK-LLVM: ![[#Subrange]] = !DISubrange(count: 4
39+
; CHECK-LLVM: ![[#MemTy1:]] = !DIDerivedType(tag: DW_TAG_member, name: "smem", scope: ![[#StructTy:]], file: ![[#File]], line: 4, baseType: ![[#ArrTy:]], flags: DIFlagPublic | DIFlagStaticMember)
40+
; CHECK-LLVM: ![[#StructTy]] = !DICompositeType(tag: DW_TAG_structure_type, name: "A", file: ![[#File]], line: 1, size: 8, elements: ![[#Elements2:]], identifier: "_ZTS1A")
41+
; CHECK-LLVM: ![[#Elements2]] = !{![[#MemTy2:]], ![[#MemTy1]]}
42+
; CHECK-LLVM: ![[#MemTy2:]] = !DIDerivedType(tag: DW_TAG_member, name: "fully_specified", scope: ![[#StructTy]], file: ![[#File]], line: 3, baseType: ![[#GVTy1]], flags: DIFlagPublic | DIFlagStaticMember)
43+
; CHECK-LLVM: ![[#ArrTy]] = !DICompositeType(tag: DW_TAG_array_type, baseType: !8, elements: ![[#]])
44+
45+
46+
source_filename = "static_member_array.cpp"
47+
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
48+
target triple = "spir64-unknown-unknown"
49+
50+
@_ZN1A15fully_specifiedE = global i32 0, align 4, !dbg !0
51+
@_ZN1A4smemE = global [4 x i32] [i32 0, i32 1, i32 2, i32 3], align 16, !dbg !6
52+
53+
!llvm.dbg.cu = !{!2}
54+
!llvm.module.flags = !{!19, !20, !21}
55+
!llvm.ident = !{!22}
56+
57+
!0 = distinct !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
58+
!1 = !DIGlobalVariable(name: "fully_specified", linkageName: "_ZN1A15fully_specifiedE", scope: !2, file: !3, line: 7, type: !9, isLocal: false, isDefinition: true, declaration: !15)
59+
!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang version 4.0.0 (trunk 286129) (llvm/trunk 286128)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5)
60+
!3 = !DIFile(filename: "static_member_array.cpp", directory: "/Volumes/Data/radar/28706946")
61+
!4 = !{}
62+
!5 = !{!0, !6}
63+
!6 = distinct !DIGlobalVariableExpression(var: !7, expr: !DIExpression())
64+
!7 = !DIGlobalVariable(name: "smem", linkageName: "_ZN1A4smemE", scope: !2, file: !3, line: 8, type: !8, isLocal: false, isDefinition: true, declaration: !12)
65+
!8 = !DICompositeType(tag: DW_TAG_array_type, baseType: !9, size: 128, elements: !10)
66+
!9 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
67+
!10 = !{!11}
68+
!11 = !DISubrange(count: 4)
69+
!12 = !DIDerivedType(tag: DW_TAG_member, name: "smem", scope: !13, file: !3, line: 4, baseType: !16, flags: DIFlagStaticMember)
70+
!13 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "A", file: !3, line: 1, size: 8, elements: !14, identifier: "_ZTS1A")
71+
!14 = !{!15, !12}
72+
!15 = !DIDerivedType(tag: DW_TAG_member, name: "fully_specified", scope: !13, file: !3, line: 3, baseType: !9, flags: DIFlagStaticMember)
73+
!16 = !DICompositeType(tag: DW_TAG_array_type, baseType: !9, elements: !17)
74+
!17 = !{!18}
75+
!18 = !DISubrange(count: -1)
76+
!19 = !{i32 2, !"Dwarf Version", i32 4}
77+
!20 = !{i32 2, !"Debug Info Version", i32 3}
78+
!21 = !{i32 1, !"PIC Level", i32 2}
79+
!22 = !{!"clang version 4.0.0 (trunk 286129) (llvm/trunk 286128)"}
80+

llvm-spirv/test/DebugInfo/OpenCL100/DebugInfoSubrange.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
; CHECK-SPIRV: Constant [[#TypeInt64Id]] [[#NegativeCount:]] 4294967295 4294967295
1515

1616
; CHECK-SPIRV: [[#DbgFuncId:]] [[#]] DebugFunction [[#FuncNameId]]
17+
; CHECK-SPIRV: [[#]] [[#DbgLocVarId:]] [[#]] DebugLocalVariable [[#VarNameId]] [[#]] [[#]] [[#]] [[#]] [[#DbgFuncId]]
1718
; CHECK-SPIRV: [[#DbgTemplateId:]] [[#]] DebugTypeTemplate [[#DbgFuncId]]
18-
; CHECK-SPIRV: [[#]] [[#DbgLocVarId:]] [[#]] DebugLocalVariable [[#VarNameId]] [[#]] [[#]] [[#]] [[#]] [[#DbgTemplateId]]
1919
; CHECK-SPIRV: DebugTypeArray [[#]] [[#DbgLocVarId]] [[#LowerBoundId]]
2020

2121
; CHECK-SPIRV: [[#DbgExprId:]] [[#]] DebugExpression

0 commit comments

Comments
 (0)