Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions clang/lib/CodeGen/CGDebugInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,10 @@ void CGDebugInfo::addInstToSpecificSourceAtom(llvm::Instruction *KeyInstruction,
if (!Group || !CGM.getCodeGenOpts().DebugKeyInstructions)
return;

llvm::DISubprogram *SP = KeyInstruction->getFunction()->getSubprogram();
if (!SP || !SP->getKeyInstructionsEnabled())
return;

addInstSourceAtomMetadata(KeyInstruction, Group, /*Rank=*/1);

llvm::Instruction *BackupI =
Expand Down
14 changes: 8 additions & 6 deletions llvm/lib/IR/Verifier.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3185,12 +3185,6 @@ void Verifier::visitFunction(const Function &F) {
CheckDI(SP->describes(&F),
"!dbg attachment points at wrong subprogram for function", N, &F,
&I, DL, Scope, SP);

if (DL->getAtomGroup())
CheckDI(DL->getScope()->getSubprogram()->getKeyInstructionsEnabled(),
"DbgLoc uses atomGroup but DISubprogram doesn't have Key "
"Instructions enabled",
DL, DL->getScope()->getSubprogram());
};
for (auto &BB : F)
for (auto &I : BB) {
Expand Down Expand Up @@ -5492,6 +5486,14 @@ void Verifier::visitInstruction(Instruction &I) {
if (MDNode *N = I.getDebugLoc().getAsMDNode()) {
CheckDI(isa<DILocation>(N), "invalid !dbg metadata attachment", &I, N);
visitMDNode(*N, AreDebugLocsAllowed::Yes);

if (auto *DL = dyn_cast<DILocation>(N)) {
if (DL->getAtomGroup())
CheckDI(DL->getScope()->getSubprogram()->getKeyInstructionsEnabled(),
"DbgLoc uses atomGroup but DISubprogram doesn't have Key "
"Instructions enabled",
DL, DL->getScope()->getSubprogram());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit, braces.

}
}

if (auto *DII = dyn_cast<DbgVariableIntrinsic>(&I)) {
Expand Down
3 changes: 3 additions & 0 deletions llvm/test/DebugInfo/KeyInstructions/Generic/verify.ll
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

define dso_local void @f() !dbg !10 {
entry:
; include non-key location to check verifier is checking the whole function.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
; include non-key location to check verifier is checking the whole function.
; Include non-key location to check verifier is checking the whole function.

%0 = add i32 0, 0, !dbg !14
ret void, !dbg !13
}

Expand All @@ -20,3 +22,4 @@ entry:
!11 = !DISubroutineType(types: !12)
!12 = !{null}
!13 = !DILocation(line: 1, column: 11, scope: !10, atomGroup: 1, atomRank: 1)
!14 = !DILocation(line: 1, column: 11, scope: !10)
Loading