diff options
-rw-r--r-- | include/llvm/CodeGen/AsmPrinter.h | 5 | ||||
-rw-r--r-- | lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 17 | ||||
-rw-r--r-- | utils/TableGen/AsmWriterEmitter.cpp | 13 |
3 files changed, 22 insertions, 13 deletions
diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h index 89ea72fca3..a004632c7d 100644 --- a/include/llvm/CodeGen/AsmPrinter.h +++ b/include/llvm/CodeGen/AsmPrinter.h @@ -18,7 +18,6 @@ #include "llvm/ADT/DenseMap.h" #include "llvm/CodeGen/MachineFunctionPass.h" -#include "llvm/Analysis/DebugInfo.h" #include "llvm/Support/DataTypes.h" #include "llvm/Target/TargetMachine.h" #include <set> @@ -342,6 +341,10 @@ namespace llvm { void EmitGlobalConstant(const Constant* CV, unsigned AddrSpace = 0); virtual void EmitMachineConstantPoolValue(MachineConstantPoolValue *MCPV); + + /// processDebugLoc - Processes the debug information of each machine + /// instruction's DebugLoc. + void processDebugLoc(DebugLoc DL); /// printInlineAsm - This method formats and prints the specified machine /// instruction that is an inline asm. diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 319bbdbe65..0d9d77762b 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -21,6 +21,7 @@ #include "llvm/CodeGen/MachineJumpTableInfo.h" #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/CodeGen/DwarfWriter.h" +#include "llvm/Analysis/DebugInfo.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Mangler.h" #include "llvm/Support/raw_ostream.h" @@ -1305,6 +1306,22 @@ void AsmPrinter::PrintSpecial(const MachineInstr *MI, const char *Code) const { } } +/// processDebugLoc - Processes the debug information of each machine +/// instruction's DebugLoc. +void AsmPrinter::processDebugLoc(DebugLoc DL) { + if (TAI->doesSupportDebugInformation() && DW->ShouldEmitDwarfDebug()) { + if (!DL.isUnknown()) { + static DebugLocTuple PrevDLT(0, ~0U, ~0U); + DebugLocTuple CurDLT = MF->getDebugLocTuple(DL); + + if (CurDLT.CompileUnit != 0 && PrevDLT != CurDLT) + printLabel(DW->RecordSourceLine(CurDLT.Line, CurDLT.Col, + DICompileUnit(CurDLT.CompileUnit))); + + PrevDLT = CurDLT; + } + } +} /// printInlineAsm - This method formats and prints the specified machine /// instruction that is an inline asm. diff --git a/utils/TableGen/AsmWriterEmitter.cpp b/utils/TableGen/AsmWriterEmitter.cpp index 3937fd104a..c615abad50 100644 --- a/utils/TableGen/AsmWriterEmitter.cpp +++ b/utils/TableGen/AsmWriterEmitter.cpp @@ -649,18 +649,7 @@ void AsmWriterEmitter::run(std::ostream &O) { } O << "\";\n\n"; - O << " if (TAI->doesSupportDebugInformation() &&\n" - << " DW->ShouldEmitDwarfDebug()) {\n" - << " DebugLoc CurDL = MI->getDebugLoc();\n\n" - << " if (!CurDL.isUnknown()) {\n" - << " static DebugLocTuple PrevDLT(0, ~0U, ~0U);\n" - << " DebugLocTuple CurDLT = MF->getDebugLocTuple(CurDL);\n\n" - << " if (CurDLT.CompileUnit != 0 && PrevDLT != CurDLT)\n" - << " printLabel(DW->RecordSourceLine(CurDLT.Line, CurDLT.Col,\n" - << " DICompileUnit(CurDLT.CompileUnit)));\n\n" - << " PrevDLT = CurDLT;\n" - << " }\n" - << " }\n\n"; + O << " processDebugLoc(MI->getDebugLoc());\n\n"; O << " if (MI->getOpcode() == TargetInstrInfo::INLINEASM) {\n" << " O << \"\\t\";\n" |