[llvm-commits] [llvm] r103135 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
Devang Patel
dpatel at apple.com
Wed May 5 17:12:26 PDT 2010
Dan,
This does not make sense. See below...
On May 5, 2010, at 4:41 PM, Dan Gohman wrote:
> Author: djg
> Date: Wed May 5 18:41:32 2010
> New Revision: 103135
>
> URL: http://llvm.org/viewvc/llvm-project?rev=103135&view=rev
> Log:
> Emit debug info for MachineInstrs with unknown debug locations, instead
> of just letting them inherit the debug locations of adjacent instructions.
>
> Debug info should aim to be either accurate or absent.
>
> Modified:
> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=103135&r1=103134&r2=103135&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Wed May 5 18:41:32 2010
> @@ -2150,8 +2150,20 @@
> void DwarfDebug::beginScope(const MachineInstr *MI) {
> // Check location.
> DebugLoc DL = MI->getDebugLoc();
> - if (DL.isUnknown())
> + if (DL.isUnknown()) {
> + // This instruction has no debug location. If the preceding instruction
> + // did, emit debug location information to indicate that the debug
> + // location is now unknown.
> + MCSymbol *Label = NULL;
> + if (DL == PrevInstLoc)
> + Label = PrevLabel;
Here, Label is not used afterwords.
> + else {
> + Label = recordSourceLine(DL.getLine(), DL.getCol(), 0);
If DL is unknown then DL.getLine(), DL.getCol() are not useful to record source location.
> + PrevInstLoc = DL;
> + PrevLabel = Label;
And here PrevInstLoc and PrevLable were updated when a label for valid location was emitted. Instead you're overriding valid PrevInstLoc with Unknown debug location.
> + }
> return;
> + }
> MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
>
> @@ -2564,23 +2576,28 @@
> StringRef Dir;
> StringRef Fn;
>
> - DIDescriptor Scope(S);
> - if (Scope.isCompileUnit()) {
> - DICompileUnit CU(S);
> - Dir = CU.getDirectory();
> - Fn = CU.getFilename();
> - } else if (Scope.isSubprogram()) {
> - DISubprogram SP(S);
> - Dir = SP.getDirectory();
> - Fn = SP.getFilename();
> - } else if (Scope.isLexicalBlock()) {
> - DILexicalBlock DB(S);
> - Dir = DB.getDirectory();
> - Fn = DB.getFilename();
> - } else
> - assert(0 && "Unexpected scope info");
> + unsigned Src = 1;
> + if (S) {
> + DIDescriptor Scope(S);
> +
> + if (Scope.isCompileUnit()) {
> + DICompileUnit CU(S);
> + Dir = CU.getDirectory();
> + Fn = CU.getFilename();
> + } else if (Scope.isSubprogram()) {
> + DISubprogram SP(S);
> + Dir = SP.getDirectory();
> + Fn = SP.getFilename();
> + } else if (Scope.isLexicalBlock()) {
> + DILexicalBlock DB(S);
> + Dir = DB.getDirectory();
> + Fn = DB.getFilename();
> + } else
> + assert(0 && "Unexpected scope info");
> +
> + Src = GetOrCreateSourceID(Dir, Fn);
> + }
I am not sure what exactly this part achieves other then increasing indentation.
>
> - unsigned Src = GetOrCreateSourceID(Dir, Fn);
> MCSymbol *Label = MMI->getContext().CreateTempSymbol();
> Lines.push_back(SrcLineInfo(Line, Col, Src, Label));
>
> @@ -2967,8 +2984,6 @@
> MCSymbol *Label = LineInfo.getLabel();
> if (!Label->isDefined()) continue; // Not emitted, in dead code.
>
> - if (LineInfo.getLine() == 0) continue;
> -
> if (Asm->isVerbose()) {
> std::pair<unsigned, unsigned> SrcID =
> getSourceDirectoryAndFileIds(LineInfo.getSourceID());
Can you send me small test case where this patch improves debug info ?
Thanks,
-
Devang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20100505/b6312a70/attachment.html>
More information about the llvm-commits
mailing list