mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
IR: Restore the old behavior of getDISubprogram
getDISubprogram was mistakenly thought to contain a bug: we thought we might need to try harder if we found a DebugLoc we didn't find. llvm-svn: 221044
This commit is contained in:
parent
401e61e9a6
commit
20fdfc27f5
@ -914,17 +914,16 @@ DISubprogram llvm::getDISubprogram(const MDNode *Scope) {
|
||||
|
||||
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;
|
||||
}
|
||||
auto Inst = std::find_if(BB.begin(), BB.end(), [](const Instruction &Inst) {
|
||||
return !Inst.getDebugLoc().isUnknown();
|
||||
});
|
||||
if (Inst == BB.end())
|
||||
continue;
|
||||
DebugLoc DLoc = Inst->getDebugLoc();
|
||||
const MDNode *Scope = DLoc.getScopeNode(F->getParent()->getContext());
|
||||
DISubprogram Subprogram = getDISubprogram(Scope);
|
||||
return Subprogram.describes(F) ? Subprogram : DISubprogram();
|
||||
}
|
||||
|
||||
return DISubprogram();
|
||||
|
Loading…
Reference in New Issue
Block a user