[llvm] r220536 - Make getDISubprogram(const Function *F) available in LLVM

David Blaikie dblaikie at gmail.com
Thu Oct 23 18:49:37 PDT 2014


On Thu, Oct 23, 2014 at 6:21 PM, Timur Iskhodzhanov <timurrrr at google.com>
wrote:

> 2014-10-23 18:10 GMT-07:00 David Blaikie <dblaikie at gmail.com>:
> >
> >
> > On Thu, Oct 23, 2014 at 4:46 PM, Timur Iskhodzhanov <timurrrr at google.com
> >
> > wrote:
> >>
> >> Author: timurrrr
> >> Date: Thu Oct 23 18:46:28 2014
> >> New Revision: 220536
> >>
> >> URL: http://llvm.org/viewvc/llvm-project?rev=220536&view=rev
> >> Log:
> >> Make getDISubprogram(const Function *F) available in LLVM
> >>
> >> Reviewed at http://reviews.llvm.org/D5950
> >>
> >> Modified:
> >>     llvm/trunk/include/llvm/IR/DebugInfo.h
> >>     llvm/trunk/lib/IR/DebugInfo.cpp
> >>     llvm/trunk/lib/Transforms/Scalar/SampleProfile.cpp
> >>
> >> Modified: llvm/trunk/include/llvm/IR/DebugInfo.h
> >> URL:
> >>
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DebugInfo.h?rev=220536&r1=220535&r2=220536&view=diff
> >>
> >>
> ==============================================================================
> >> --- llvm/trunk/include/llvm/IR/DebugInfo.h (original)
> >> +++ llvm/trunk/include/llvm/IR/DebugInfo.h Thu Oct 23 18:46:28 2014
> >> @@ -961,6 +961,11 @@ public:
> >>  /// \brief Find subprogram that is enclosing this 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.
> >>  DICompositeType getDICompositeType(DIType T);
> >>
> >>
> >> Modified: llvm/trunk/lib/IR/DebugInfo.cpp
> >> URL:
> >>
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfo.cpp?rev=220536&r1=220535&r2=220536&view=diff
> >>
> >>
> ==============================================================================
> >> --- llvm/trunk/lib/IR/DebugInfo.cpp (original)
> >> +++ llvm/trunk/lib/IR/DebugInfo.cpp Thu Oct 23 18:46:28 2014
> >> @@ -912,6 +912,24 @@ DISubprogram llvm::getDISubprogram(const
> >>    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;
> >
> >
> > You've changed this in the moving - it used to return on the first
> > Instruction with DebugInfo, now it keeps searching.
>
> Yep – we thought the original version was slightly incorrect?
>

We? (sorry, perhaps I missed some IRC conversation, etc) - this was
discussed in code review/on IRC when I described the idea to Diego
originally. What problem were you seeing/thinking of?


>
> > (also, we could change this function to take a reference instead of a
> > pointer - I was going to make that change when I saw this semantic change
> > that caught me by surprise)
> >
> >>
> >> +    }
> >> +  }
> >> +
> >> +  return DISubprogram();
> >> +}
> >> +
> >>  DICompositeType llvm::getDICompositeType(DIType T) {
> >>    if (T.isCompositeType())
> >>      return DICompositeType(T);
> >>
> >> Modified: llvm/trunk/lib/Transforms/Scalar/SampleProfile.cpp
> >> URL:
> >>
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SampleProfile.cpp?rev=220536&r1=220535&r2=220536&view=diff
> >>
> >>
> ==============================================================================
> >> --- llvm/trunk/lib/Transforms/Scalar/SampleProfile.cpp (original)
> >> +++ llvm/trunk/lib/Transforms/Scalar/SampleProfile.cpp Thu Oct 23
> 18:46:28
> >> 2014
> >> @@ -627,29 +627,6 @@ void SampleProfileLoader::propagateWeigh
> >>    }
> >>  }
> >>
> >> -/// \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.
> >>  ///
> >>  /// This looks up function \p F in the current compilation unit and
> >> @@ -662,7 +639,7 @@ static const DISubprogram getDISubprogra
> >>  /// \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.
> >>  unsigned SampleProfileLoader::getFunctionLoc(Function &F) {
> >> -  const DISubprogram &S = getDISubprogram(F, *Ctx);
> >> +  DISubprogram S = getDISubprogram(&F);
> >>    if (S.isSubprogram())
> >>      return S.getLineNumber();
> >>
> >>
> >>
> >> _______________________________________________
> >> llvm-commits mailing list
> >> llvm-commits at cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141023/705d92ee/attachment.html>


More information about the llvm-commits mailing list