Process InlinedAt location info.

Update InsertDeclare to return newly inserted llvm.dbg.declare intrinsic.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86727 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Devang Patel 2009-11-10 22:05:35 +00:00
parent 103f2434b8
commit 6daf99bf8f
2 changed files with 28 additions and 20 deletions

View File

@ -623,12 +623,12 @@ namespace llvm {
void InsertRegionEnd(DIDescriptor D, BasicBlock *BB);
/// InsertDeclare - Insert a new llvm.dbg.declare intrinsic call.
void InsertDeclare(llvm::Value *Storage, DIVariable D,
BasicBlock *InsertAtEnd);
Instruction *InsertDeclare(llvm::Value *Storage, DIVariable D,
BasicBlock *InsertAtEnd);
/// InsertDeclare - Insert a new llvm.dbg.declare intrinsic call.
void InsertDeclare(llvm::Value *Storage, DIVariable D,
Instruction *InsertBefore);
Instruction *InsertDeclare(llvm::Value *Storage, DIVariable D,
Instruction *InsertBefore);
private:
Constant *GetTagConstant(unsigned TAG);
@ -731,6 +731,9 @@ bool getLocationInfo(const Value *V, std::string &DisplayName,
/// processDeclare - Process DbgDeclareInst.
void processDeclare(DbgDeclareInst *DDI);
/// processLocation - Process DILocation.
void processLocation(DILocation Loc);
/// addCompileUnit - Add compile unit into CUs.
bool addCompileUnit(DICompileUnit CU);

View File

@ -1036,7 +1036,7 @@ void DIFactory::InsertRegionEnd(DIDescriptor D, BasicBlock *BB) {
}
/// InsertDeclare - Insert a new llvm.dbg.declare intrinsic call.
void DIFactory::InsertDeclare(Value *Storage, DIVariable D,
Instruction *DIFactory::InsertDeclare(Value *Storage, DIVariable D,
Instruction *InsertBefore) {
// Cast the storage to a {}* for the call to llvm.dbg.declare.
Storage = new BitCastInst(Storage, EmptyStructPtr, "", InsertBefore);
@ -1045,11 +1045,11 @@ void DIFactory::InsertDeclare(Value *Storage, DIVariable D,
DeclareFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_declare);
Value *Args[] = { Storage, D.getNode() };
CallInst::Create(DeclareFn, Args, Args+2, "", InsertBefore);
return CallInst::Create(DeclareFn, Args, Args+2, "", InsertBefore);
}
/// InsertDeclare - Insert a new llvm.dbg.declare intrinsic call.
void DIFactory::InsertDeclare(Value *Storage, DIVariable D,
Instruction *DIFactory::InsertDeclare(Value *Storage, DIVariable D,
BasicBlock *InsertAtEnd) {
// Cast the storage to a {}* for the call to llvm.dbg.declare.
Storage = new BitCastInst(Storage, EmptyStructPtr, "", InsertAtEnd);
@ -1058,7 +1058,7 @@ void DIFactory::InsertDeclare(Value *Storage, DIVariable D,
DeclareFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_declare);
Value *Args[] = { Storage, D.getNode() };
CallInst::Create(DeclareFn, Args, Args+2, "", InsertAtEnd);
return CallInst::Create(DeclareFn, Args, Args+2, "", InsertAtEnd);
}
@ -1088,18 +1088,9 @@ void DebugInfoFinder::processModule(Module &M) {
else if (DbgDeclareInst *DDI = dyn_cast<DbgDeclareInst>(BI))
processDeclare(DDI);
#ifdef ATTACH_DEBUG_INFO_TO_AN_INSN
else if (MDDbgKind) {
if (MDNode *L = TheMetadata.getMD(MDDbgKind, BI)) {
DILocation Loc(L);
DIScope S(Loc.getScope().getNode());
if (S.isCompileUnit())
addCompileUnit(DICompileUnit(S.getNode()));
else if (S.isSubprogram())
processSubprogram(DISubprogram(S.getNode()));
else if (S.isLexicalBlock())
processLexicalBlock(DILexicalBlock(S.getNode()));
}
}
else if (MDDbgKind)
if (MDNode *L = TheMetadata.getMD(MDDbgKind, BI))
processLocation(DILocation(L));
#endif
}
@ -1116,6 +1107,20 @@ void DebugInfoFinder::processModule(Module &M) {
}
}
/// processLocation - Process DILocation.
void DebugInfoFinder::processLocation(DILocation Loc) {
if (Loc.isNull()) return;
DIScope S(Loc.getScope().getNode());
if (S.isNull()) return;
if (S.isCompileUnit())
addCompileUnit(DICompileUnit(S.getNode()));
else if (S.isSubprogram())
processSubprogram(DISubprogram(S.getNode()));
else if (S.isLexicalBlock())
processLexicalBlock(DILexicalBlock(S.getNode()));
processLocation(Loc.getOrigLocation());
}
/// processType - Process DIType.
void DebugInfoFinder::processType(DIType DT) {
if (!addType(DT))