Török Edwin wrote:> [snip] > > Ah, the method got moved to the instruction itself! > > dbgKind = Context->getMDKindID("dbg"); > if (MDNode *Dbg = I->getMetadata(dbgKind)) { > ... >Thanks! This appears to work. I also have code that looks up debug information for GlobalVariables and regular LLVM Value *'s. For the former, I think I can look up their debug information by using the DebugInfoFinder class and iterating through all the MDNodes for global variables (using the global_variable_begin()/global_variable_end() methods). Is this the best way to do it, or is there a better way? For LLVM Value *s, I'm not sure how to get the debug information if they come from alloca instructions. Is the best option to look for a use of the Value in a llvm.dbg.declare() call and then grab the debug metadata from that? -- John T.
On 03/16/2010 06:52 PM, John Criswell wrote:> Török Edwin wrote: >> [snip] >> >> Ah, the method got moved to the instruction itself! >> >> dbgKind = Context->getMDKindID("dbg"); >> if (MDNode *Dbg = I->getMetadata(dbgKind)) { >> ... >> > > Thanks! This appears to work.Ok.> > I also have code that looks up debug information for GlobalVariables and > regular LLVM Value *'s. For the former, I think I can look up their > debug information by using the DebugInfoFinder class and iterating > through all the MDNodes for global variables (using the > global_variable_begin()/global_variable_end() methods). Is this the > best way to do it, or is there a better way? > > For LLVM Value *s, I'm not sure how to get the debug information if they > come from alloca instructions. Is the best option to look for a use of > the Value in a llvm.dbg.declare() call and then grab the debug metadata > from that?I wasn't following the dbg.declare changes, but I think there is a llvm.dbg.value now that survives mem2reg (or rather it is dbg.declare initially and becomes dbg.value later). Best regards, --Edwin
Jeffrey Yasskin
2010-Mar-16 18:11 UTC
[LLVMdev] Replacement for findStopPoint() in LLVM 2.7
On Tue, Mar 16, 2010 at 10:02 AM, Török Edwin <edwintorok at gmail.com> wrote:> On 03/16/2010 06:52 PM, John Criswell wrote: >> Török Edwin wrote: >>> [snip] >>> >>> Ah, the method got moved to the instruction itself! >>> >>> dbgKind = Context->getMDKindID("dbg"); >>> if (MDNode *Dbg = I->getMetadata(dbgKind)) { >>> ... >>> >> >> Thanks! This appears to work. > > Ok. > >> >> I also have code that looks up debug information for GlobalVariables and >> regular LLVM Value *'s. For the former, I think I can look up their >> debug information by using the DebugInfoFinder class and iterating >> through all the MDNodes for global variables (using the >> global_variable_begin()/global_variable_end() methods). Is this the >> best way to do it, or is there a better way? >> >> For LLVM Value *s, I'm not sure how to get the debug information if they >> come from alloca instructions. Is the best option to look for a use of >> the Value in a llvm.dbg.declare() call and then grab the debug metadata >> from that? > > I wasn't following the dbg.declare changes, but I think there is a > llvm.dbg.value now that survives mem2reg (or rather it is dbg.declare > initially and becomes dbg.value later).This should all be described at http://llvm.org/docs/SourceLevelDebugging.html. If something's missing there, please ask Devang to add it. Devang, I don't think there's any documentation about how to _read_ debug info (for example, pointing to Instruction::getMetadata() and include/llvm/Analysis/DebugInfo.h). Could you add some? Thanks, Jeffrey
>> For LLVM Value *s, I'm not sure how to get the debug information if they >> come from alloca instructions. Is the best option to look for a use of >> the Value in a llvm.dbg.declare() call and then grab the debug metadata >> from that?Now llvm.dbg.declare() uses metadata, so it won't show up in uses list for the Value. This is done to ensure that debug info does not influence optimizer. You need to check all llvm.dbg.declare intrinsics' operands' elements.> I wasn't following the dbg.declare changes, but I think there is a > llvm.dbg.value now that survives mem2reg (or rather it is dbg.declare > initially and becomes dbg.value later).lllvm.dbg.declare is transformed into llvm.dbg.value when alloca disappears. - Devang
2010/3/16 John Criswell <criswell at uiuc.edu>:> Török Edwin wrote: >> [snip] >> >> Ah, the method got moved to the instruction itself! >> >> dbgKind = Context->getMDKindID("dbg"); >> if (MDNode *Dbg = I->getMetadata(dbgKind)) { >> ... >> > > Thanks! This appears to work. > > I also have code that looks up debug information for GlobalVariables and > regular LLVM Value *'s. For the former, I think I can look up their > debug information by using the DebugInfoFinder class and iterating > through all the MDNodes for global variables (using the > global_variable_begin()/global_variable_end() methods). Is this the > best way to do it, or is there a better way? >That'll work, but may not be as efficient as it could be, if you're only interested in global variables' debug info. You can try following NamedMDNode *NMD = M.getNamedMetadata("llvm.dbg.gv"); if (!NMD) return; for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) { DIGlobalVariable DIG(cast<MDNode>(NMD->getOperand(i))); ... } - Devang
Seemingly Similar Threads
- [LLVMdev] Replacement for findStopPoint() in LLVM 2.7
- [LLVMdev] Replacement for findStopPoint() in LLVM 2.7
- [LLVMdev] Replacement for findStopPoint() in LLVM 2.7
- [LLVMdev] How to read v3.3 dbg metadata using v3.4 LLVM
- [LLVMdev] How to read v3.3 dbg metadata using v3.4 LLVM