From cb819f13d785ff6efcacfbd7d0fa9f3f67e5494d Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Wed, 18 Feb 2009 23:12:06 +0000 Subject: [PATCH] Put code that generates debug labels into TableGen so that it can be used by everyone. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64978 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/AsmPrinter.h | 10 +++++----- .../Alpha/AsmPrinter/AlphaAsmPrinter.cpp | 1 + lib/Target/IA64/IA64AsmPrinter.cpp | 1 + lib/Target/Mips/MipsAsmPrinter.cpp | 1 + lib/Target/PIC16/PIC16AsmPrinter.cpp | 7 ++++--- .../Sparc/AsmPrinter/SparcAsmPrinter.cpp | 1 + lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp | 18 +----------------- .../X86/AsmPrinter/X86IntelAsmPrinter.cpp | 1 + utils/TableGen/AsmWriterEmitter.cpp | 11 +++++++++++ 9 files changed, 26 insertions(+), 25 deletions(-) diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h index d63b06d954e..9c528f10fca 100644 --- a/include/llvm/CodeGen/AsmPrinter.h +++ b/include/llvm/CodeGen/AsmPrinter.h @@ -51,17 +51,17 @@ namespace llvm { /// unsigned FunctionNumber; - /// DW -This is needed because printDeclare() has to insert - /// DbgVariable entries into the dwarf table. This is a short term hack - /// that ought be fixed soon. - DwarfWriter *DW; - // GCMetadataPrinters - The garbage collection metadata printer table. typedef DenseMap gcp_map_type; typedef gcp_map_type::iterator gcp_iterator; gcp_map_type GCMetadataPrinters; protected: + /// DW -This is needed because printDeclare() has to insert + /// DbgVariable entries into the dwarf table. This is a short term hack + /// that ought be fixed soon. + DwarfWriter *DW; + // Necessary for external weak linkage support std::set ExtWeakSymbols; diff --git a/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp b/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp index b2b8fcdf383..fdfee1bc150 100644 --- a/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp +++ b/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp @@ -20,6 +20,7 @@ #include "llvm/Type.h" #include "llvm/Assembly/Writer.h" #include "llvm/CodeGen/AsmPrinter.h" +#include "llvm/CodeGen/DwarfWriter.h" #include "llvm/Target/TargetAsmInfo.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Support/Compiler.h" diff --git a/lib/Target/IA64/IA64AsmPrinter.cpp b/lib/Target/IA64/IA64AsmPrinter.cpp index cda0c06308f..567e04c4b15 100644 --- a/lib/Target/IA64/IA64AsmPrinter.cpp +++ b/lib/Target/IA64/IA64AsmPrinter.cpp @@ -22,6 +22,7 @@ #include "llvm/Module.h" #include "llvm/Type.h" #include "llvm/CodeGen/AsmPrinter.h" +#include "llvm/CodeGen/DwarfWriter.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/Target/TargetAsmInfo.h" #include "llvm/Target/TargetMachine.h" diff --git a/lib/Target/Mips/MipsAsmPrinter.cpp b/lib/Target/Mips/MipsAsmPrinter.cpp index f6d8dda16a0..94cd71a7609 100644 --- a/lib/Target/Mips/MipsAsmPrinter.cpp +++ b/lib/Target/Mips/MipsAsmPrinter.cpp @@ -23,6 +23,7 @@ #include "llvm/DerivedTypes.h" #include "llvm/Module.h" #include "llvm/CodeGen/AsmPrinter.h" +#include "llvm/CodeGen/DwarfWriter.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineConstantPool.h" #include "llvm/CodeGen/MachineFrameInfo.h" diff --git a/lib/Target/PIC16/PIC16AsmPrinter.cpp b/lib/Target/PIC16/PIC16AsmPrinter.cpp index 1f3c4345646..8e80eeabe2d 100644 --- a/lib/Target/PIC16/PIC16AsmPrinter.cpp +++ b/lib/Target/PIC16/PIC16AsmPrinter.cpp @@ -14,12 +14,13 @@ #include "PIC16AsmPrinter.h" #include "PIC16TargetAsmInfo.h" -#include "llvm/Support/raw_ostream.h" -#include "llvm/Support/Mangler.h" +#include "llvm/DerivedTypes.h" #include "llvm/Function.h" #include "llvm/Module.h" +#include "llvm/CodeGen/DwarfWriter.h" #include "llvm/CodeGen/MachineFrameInfo.h" -#include "llvm/DerivedTypes.h" +#include "llvm/Support/raw_ostream.h" +#include "llvm/Support/Mangler.h" using namespace llvm; diff --git a/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp b/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp index a7f4ea2dda7..f720d47570e 100644 --- a/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp +++ b/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp @@ -19,6 +19,7 @@ #include "llvm/DerivedTypes.h" #include "llvm/Module.h" #include "llvm/CodeGen/AsmPrinter.h" +#include "llvm/CodeGen/DwarfWriter.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineConstantPool.h" #include "llvm/CodeGen/MachineInstr.h" diff --git a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp index 9af3ba62db0..12cfda16dcc 100644 --- a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp +++ b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp @@ -26,6 +26,7 @@ #include "llvm/Type.h" #include "llvm/ADT/Statistic.h" #include "llvm/ADT/StringExtras.h" +#include "llvm/CodeGen/DwarfWriter.h" #include "llvm/CodeGen/MachineJumpTableInfo.h" #include "llvm/Support/Mangler.h" #include "llvm/Support/raw_ostream.h" @@ -725,23 +726,6 @@ bool X86ATTAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, void X86ATTAsmPrinter::printMachineInstruction(const MachineInstr *MI) { ++EmittedInsts; - if (TAI->doesSupportDebugInformation()) { - const Function *F = MF->getFunction(); - - // FIXME: Support more than '-Os'. - if (F->hasFnAttr(Attribute::OptimizeForSize)) { - static DebugLoc PrevDL = DebugLoc::getUnknownLoc(); - DebugLoc CurDL = MI->getDebugLoc(); - - if (!CurDL.isUnknown() && PrevDL != CurDL) { - DebugLocTuple DLT = MF->getDebugLocTuple(CurDL); - printLabel(DW->RecordSourceLine(DLT.Line, DLT.Col, DLT.Src)); - } - - PrevDL = CurDL; - } - } - // Call the autogenerated instruction printer routines. printInstruction(MI); } diff --git a/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp index a75422a56d5..4dedd026aa1 100644 --- a/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp +++ b/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp @@ -25,6 +25,7 @@ #include "llvm/ADT/Statistic.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Assembly/Writer.h" +#include "llvm/CodeGen/DwarfWriter.h" #include "llvm/Support/Mangler.h" #include "llvm/Target/TargetAsmInfo.h" #include "llvm/Target/TargetOptions.h" diff --git a/utils/TableGen/AsmWriterEmitter.cpp b/utils/TableGen/AsmWriterEmitter.cpp index 93d67e843bb..3b66b94525c 100644 --- a/utils/TableGen/AsmWriterEmitter.cpp +++ b/utils/TableGen/AsmWriterEmitter.cpp @@ -640,6 +640,17 @@ void AsmWriterEmitter::run(std::ostream &O) { } O << "\";\n\n"; + O << " {\n" + << " const MachineFunction *MF = MI->getParent()->getParent();\n" + << " static DebugLoc PrevDL = DebugLoc::getUnknownLoc();\n" + << " DebugLoc CurDL = MI->getDebugLoc();\n\n" + << " if (!CurDL.isUnknown() && PrevDL != CurDL) {\n" + << " DebugLocTuple DLT = MF->getDebugLocTuple(CurDL);\n" + << " printLabel(DW->RecordSourceLine(DLT.Line, DLT.Col, DLT.Src));\n" + << " }\n\n" + << " PrevDL = CurDL;\n" + << " }\n"; + O << " if (MI->getOpcode() == TargetInstrInfo::INLINEASM) {\n" << " O << \"\\t\";\n" << " printInlineAsm(MI);\n"