diff options
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.h | 6 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 55 |
3 files changed, 11 insertions, 54 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp b/llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp index 5607242a7f1..d30f106a939 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp @@ -201,10 +201,8 @@ void DebugHandlerBase::endInstruction() { assert(CurMI != nullptr); // Don't create a new label after DBG_VALUE instructions. // They don't generate code. - if (!CurMI->isDebugValue()) { + if (!CurMI->isDebugValue()) PrevLabel = nullptr; - PrevInstBB = CurMI->getParent(); - } DenseMap<const MachineInstr *, MCSymbol *>::iterator I = LabelsAfterInsn.find(CurMI); diff --git a/llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.h b/llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.h index cd02c4446a7..b8bbcec133f 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.h +++ b/llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.h @@ -38,12 +38,10 @@ protected: MachineModuleInfo *MMI; /// Previous instruction's location information. This is used to - /// determine label location to indicate scope boundaries in debug info. - /// We track the previous instruction's source location (if not line 0), - /// whether it was a label, and its parent BB. + /// determine label location to indicate scope boundries in dwarf + /// debug info. DebugLoc PrevInstLoc; MCSymbol *PrevLabel = nullptr; - const MachineBasicBlock *PrevInstBB = nullptr; /// This location indicates end of function prologue and beginning of /// function body. diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 949516b17a0..884e03d3f0a 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1010,70 +1010,31 @@ void DwarfDebug::beginInstruction(const MachineInstr *MI) { if (MI->isDebugValue()) return; const DebugLoc &DL = MI->getDebugLoc(); - // When we emit a line-0 record, we don't update PrevInstLoc; so look at - // the last line number actually emitted, to see if it was line 0. - unsigned LastAsmLine = - Asm->OutStreamer->getContext().getCurrentDwarfLoc().getLine(); - - if (DL == PrevInstLoc) { - // If we have an ongoing unspecified location, nothing to do here. - if (!DL) - return; - // We have an explicit location, same as the previous location. - // But we might be coming back to it after a line 0 record. - if (LastAsmLine == 0 && DL.getLine() != 0) { - // Reinstate the source location but not marked as a statement. - const MDNode *Scope = DL.getScope(); - recordSourceLine(DL.getLine(), DL.getCol(), Scope, /*Flags=*/0); - } + if (DL == PrevInstLoc) return; - } if (!DL) { // We have an unspecified location, which might want to be line 0. - // If we have already emitted a line-0 record, don't repeat it. - if (LastAsmLine == 0) - return; - // See if we have a reason to emit a line-0 record now. - // Reasons to emit a line-0 record include: - // - User asked for it (UnknownLocations). - // - Instruction has a label, so it's referenced from somewhere else, - // possibly debug information; we want it to have a source location. - // - Instruction is at the top of a block; we don't want to inherit the - // location from the physically previous (maybe unrelated) block. - if (UnknownLocations || PrevLabel || - (PrevInstBB && PrevInstBB != MI->getParent())) { - // Preserve the file number, if we can, to save space in the line table. - // Do not update PrevInstLoc, it remembers the last non-0 line. - // FIXME: Also preserve the column number, to save more space? - const MDNode *Scope = PrevInstLoc ? PrevInstLoc.getScope() : nullptr; - recordSourceLine(0, 0, Scope, 0); + if (UnknownLocations) { + PrevInstLoc = DL; + recordSourceLine(0, 0, nullptr, 0); } return; } - // We have an explicit location, different from the previous location. - // Don't repeat a line-0 record, but otherwise emit the new location. - // (The new location might be an explicit line 0, which we do emit.) - if (DL.getLine() == 0 && LastAsmLine == 0) - return; + // We have a new, explicit location. unsigned Flags = 0; + PrevInstLoc = DL; if (DL == PrologEndLoc) { Flags |= DWARF2_FLAG_PROLOGUE_END | DWARF2_FLAG_IS_STMT; PrologEndLoc = DebugLoc(); } - // If the line changed, we call that a new statement; unless we went to - // line 0 and came back, in which case it is not a new statement. - unsigned OldLine = PrevInstLoc ? PrevInstLoc.getLine() : LastAsmLine; - if (DL.getLine() && DL.getLine() != OldLine) + if (DL.getLine() != + Asm->OutStreamer->getContext().getCurrentDwarfLoc().getLine()) Flags |= DWARF2_FLAG_IS_STMT; const MDNode *Scope = DL.getScope(); recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags); - - // If we're not at line 0, remember this location. - if (DL.getLine()) - PrevInstLoc = DL; } static DebugLoc findPrologueEndLoc(const MachineFunction *MF) { |