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

Timur Iskhodzhanov timurrrr at google.com
Fri Oct 24 11:41:12 PDT 2014


2014-10-23 18:49 GMT-07:00 David Blaikie <dblaikie at gmail.com>:
>
>
> 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?

Me and David Majnemer.
There's no particular problem we were trying to fix, but we just kind
of thought the function can try a bit harder than it did.
Is this a wrong approach?

>> > (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
>> >
>> >
>
>




More information about the llvm-commits mailing list