mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-15 06:29:05 +00:00
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:
@@ -961,6 +961,11 @@ public:
|
|||||||
/// \brief Find subprogram that is enclosing this scope.
|
/// \brief Find subprogram that is enclosing this scope.
|
||||||
DISubprogram getDISubprogram(const MDNode *Scope);
|
DISubprogram getDISubprogram(const MDNode *Scope);
|
||||||
|
|
||||||
|
/// \brief Find debug info for a given function.
|
||||||
|
/// \returns a valid DISubprogram, if found. Otherwise, it returns an empty
|
||||||
|
/// DISubprogram.
|
||||||
|
DISubprogram getDISubprogram(const Function *F);
|
||||||
|
|
||||||
/// \brief Find underlying composite type.
|
/// \brief Find underlying composite type.
|
||||||
DICompositeType getDICompositeType(DIType T);
|
DICompositeType getDICompositeType(DIType T);
|
||||||
|
|
||||||
|
@@ -912,6 +912,24 @@ DISubprogram llvm::getDISubprogram(const MDNode *Scope) {
|
|||||||
return DISubprogram();
|
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) {
|
DICompositeType llvm::getDICompositeType(DIType T) {
|
||||||
if (T.isCompositeType())
|
if (T.isCompositeType())
|
||||||
return DICompositeType(T);
|
return DICompositeType(T);
|
||||||
|
@@ -627,29 +627,6 @@ void SampleProfileLoader::propagateWeights(Function &F) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \brief Locate the DISubprogram for F.
|
|
||||||
///
|
|
||||||
/// We look for the first instruction that has a debug annotation
|
|
||||||
/// leading back to \p F.
|
|
||||||
///
|
|
||||||
/// \returns a valid DISubprogram, if found. Otherwise, it returns an empty
|
|
||||||
/// DISubprogram.
|
|
||||||
static const DISubprogram getDISubprogram(Function &F, const LLVMContext &Ctx) {
|
|
||||||
for (auto &BI : F) {
|
|
||||||
BasicBlock *BB = &BI;
|
|
||||||
for (auto &Inst : BB->getInstList()) {
|
|
||||||
DebugLoc DLoc = Inst.getDebugLoc();
|
|
||||||
if (DLoc.isUnknown())
|
|
||||||
continue;
|
|
||||||
const MDNode *Scope = DLoc.getScopeNode(Ctx);
|
|
||||||
DISubprogram Subprogram = getDISubprogram(Scope);
|
|
||||||
return Subprogram.describes(&F) ? Subprogram : DISubprogram();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return DISubprogram();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// \brief Get the line number for the function header.
|
/// \brief Get the line number for the function header.
|
||||||
///
|
///
|
||||||
/// This looks up function \p F in the current compilation unit and
|
/// This looks up function \p F in the current compilation unit and
|
||||||
@@ -662,7 +639,7 @@ static const DISubprogram getDISubprogram(Function &F, const LLVMContext &Ctx) {
|
|||||||
/// \returns the line number where \p F is defined. If it returns 0,
|
/// \returns the line number where \p F is defined. If it returns 0,
|
||||||
/// it means that there is no debug information available for \p F.
|
/// it means that there is no debug information available for \p F.
|
||||||
unsigned SampleProfileLoader::getFunctionLoc(Function &F) {
|
unsigned SampleProfileLoader::getFunctionLoc(Function &F) {
|
||||||
const DISubprogram &S = getDISubprogram(F, *Ctx);
|
DISubprogram S = getDISubprogram(&F);
|
||||||
if (S.isSubprogram())
|
if (S.isSubprogram())
|
||||||
return S.getLineNumber();
|
return S.getLineNumber();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user