Make getDISubprogram(const Function *F) available in LLVM

Reviewed at http://reviews.llvm.org/D5950

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220536 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Timur Iskhodzhanov
2014-10-23 23:46:28 +00:00
parent 17c1e34c12
commit da45b2bdbd
3 changed files with 24 additions and 24 deletions

View File

@ -912,6 +912,24 @@ DISubprogram llvm::getDISubprogram(const MDNode *Scope) {
return DISubprogram();
}
DISubprogram llvm::getDISubprogram(const Function *F) {
// We look for the first instr that has a debug annotation leading back to F.
const LLVMContext &Ctx = F->getParent()->getContext();
for (auto &BB : *F) {
for (auto &Inst : BB.getInstList()) {
DebugLoc DLoc = Inst.getDebugLoc();
if (DLoc.isUnknown())
continue;
const MDNode *Scope = DLoc.getScopeNode(Ctx);
DISubprogram Subprogram = getDISubprogram(Scope);
if (Subprogram.describes(F))
return Subprogram;
}
}
return DISubprogram();
}
DICompositeType llvm::getDICompositeType(DIType T) {
if (T.isCompositeType())
return DICompositeType(T);