context/scope of instruction

I need to know how I get the LLVM::IDScope object of an instruction.

My program contains:
call void (...)* @commit(), !dbg !16

!16 = metadata !{i32 16, i32 5, metadata !8, null}

!8 = metadata !{i32 589835, metadata !4, i32 10, i32 1, metadata !2, i32 0} ; [ DW_TAG_lexical_block ]

LLVM::Instruction.hasMetadata() is 0

I got LLVM::Scope for variables over DIGlobalVariable.getContext() and DIVariable.getContext() but how do I get it for instructions?

Christian Jacobs

!8 is DIScope here (actually it is DILexicalBlock, which is derived from DIScope).

I know. I am writing an LLVM pass and I do not know how I get a hand on the DIScope object.
Which method(s) of the LLVM C++ API do I have to call to get a pointer or reference (!8) to the LLVM::DIScope of an LLVM::Instruction?


I found a solution.
MDNode *node = inst.getMetadata(LLVMContext::MD_dbg);
DIDescriptor descriptor(cast<MDNode>(node->getOperand((unsigned)2)));
DIScope scope(descriptor);

This article was very helpful: