[llvm-commits] [llvm] r100405 - in /llvm/trunk: include/llvm/CodeGen/AsmPrinter.h lib/CodeGen/AsmPrinter/AsmPrinter.cpp lib/CodeGen/AsmPrinter/DwarfDebug.cpp lib/CodeGen/AsmPrinter/DwarfDebug.h lib/CodeGen/AsmPrinter/DwarfWriter.cpp
Chris Lattner
sabre at nondot.org
Sun Apr 4 22:11:15 PDT 2010
Author: lattner
Date: Mon Apr 5 00:11:15 2010
New Revision: 100405
URL: http://llvm.org/viewvc/llvm-project?rev=100405&view=rev
Log:
change AsmPrinter to use DwarfDebug/DwarfException directly
instead of going through DwarfWriter.
Modified:
llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/AsmPrinter.h?rev=100405&r1=100404&r2=100405&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/AsmPrinter.h (original)
+++ llvm/trunk/include/llvm/CodeGen/AsmPrinter.h Mon Apr 5 00:11:15 2010
@@ -42,14 +42,15 @@
class MachineJumpTableInfo;
class MachineModuleInfo;
class MachineMove;
+ class MCAsmInfo;
class MCInst;
class MCContext;
class MCSection;
class MCStreamer;
class MCSymbol;
- class DwarfWriter;
+ class DwarfDebug;
+ class DwarfException;
class Mangler;
- class MCAsmInfo;
class TargetLoweringObjectFile;
class TargetData;
class Twine;
@@ -59,9 +60,6 @@
/// asm writers.
class AsmPrinter : public MachineFunctionPass {
public:
- /// DW - If available, this is a pointer to the current dwarf writer.
- DwarfWriter *DW;
-
/// Target machine description.
///
TargetMachine &TM;
@@ -107,8 +105,14 @@
/// If VerboseAsm is set, a pointer to the loop info for this
/// function.
- ///
MachineLoopInfo *LI;
+
+ /// DD - If the target supports dwarf debug info, this pointer is non-null.
+ DwarfDebug *DD;
+
+ /// DE - If the target supports dwarf exception info, this pointer is
+ /// non-null.
+ DwarfException *DE;
protected:
explicit AsmPrinter(TargetMachine &TM, MCStreamer &Streamer);
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=100405&r1=100404&r2=100405&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Mon Apr 5 00:11:15 2010
@@ -13,8 +13,9 @@
#define DEBUG_TYPE "asm-printer"
#include "llvm/CodeGen/AsmPrinter.h"
+#include "DwarfDebug.h"
+#include "DwarfException.h"
#include "llvm/Module.h"
-#include "llvm/CodeGen/DwarfWriter.h"
#include "llvm/CodeGen/GCMetadataPrinter.h"
#include "llvm/CodeGen/MachineConstantPool.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
@@ -62,12 +63,14 @@
OutContext(Streamer.getContext()),
OutStreamer(Streamer),
LastMI(0), LastFn(0), Counter(~0U), SetCounter(0) {
- DW = 0; MMI = 0; LI = 0;
+ DD = 0; DE = 0; MMI = 0; LI = 0;
GCMetadataPrinters = 0;
VerboseAsm = Streamer.isVerboseAsm();
}
AsmPrinter::~AsmPrinter() {
+ assert(DD == 0 && DE == 0 && "Debug/EH info didn't get finalized");
+
if (GCMetadataPrinters != 0) {
gcp_map_type &GCMap = getGCMap(GCMetadataPrinters);
@@ -108,7 +111,6 @@
MachineFunctionPass::getAnalysisUsage(AU);
AU.addRequired<MachineModuleInfo>();
AU.addRequired<GCModuleInfo>();
- AU.addRequired<DwarfWriter>();
if (isVerbose())
AU.addRequired<MachineLoopInfo>();
}
@@ -148,9 +150,11 @@
OutStreamer.AddBlankLine();
}
- DW = getAnalysisIfAvailable<DwarfWriter>();
- if (DW)
- DW->BeginModule(&M, this);
+ if (MAI->doesSupportDebugInformation())
+ DD = new DwarfDebug(this, &M);
+
+ if (MAI->doesSupportExceptionHandling())
+ DE = new DwarfException(this);
return false;
}
@@ -344,8 +348,8 @@
}
// Emit pre-function debug and/or EH information.
- if (MAI->doesSupportDebugInformation() || MAI->doesSupportExceptionHandling())
- DW->BeginFunction(MF);
+ if (DE) DE->BeginFunction(MF);
+ if (DD) DD->beginFunction(MF);
}
/// EmitFunctionEntryLabel - Emit the label that is the entrypoint for the
@@ -439,8 +443,7 @@
// Emit target-specific gunk before the function body.
EmitFunctionBodyStart();
- bool ShouldPrintDebugScopes =
- DW && MAI->doesSupportDebugInformation() &&DW->ShouldEmitDwarfDebug();
+ bool ShouldPrintDebugScopes = DD && MMI->hasDebugInfo();
// Print out code for the function.
bool HasAnyRealCode = false;
@@ -457,7 +460,7 @@
++EmittedInsts;
if (ShouldPrintDebugScopes)
- DW->BeginScope(II);
+ DD->beginScope(II);
if (isVerbose())
EmitComments(*II, OutStreamer.GetCommentOS());
@@ -483,7 +486,7 @@
}
if (ShouldPrintDebugScopes)
- DW->EndScope(II);
+ DD->endScope(II);
}
}
@@ -512,8 +515,9 @@
}
// Emit post-function debug information.
- if (MAI->doesSupportDebugInformation() || MAI->doesSupportExceptionHandling())
- DW->EndFunction(MF);
+ if (DD) DD->endFunction(MF);
+ if (DE) DE->EndFunction();
+ MMI->EndFunction();
// Print out jump tables referenced by the function.
EmitJumpTableInfo();
@@ -528,9 +532,15 @@
I != E; ++I)
EmitGlobalVariable(I);
- // Emit final debug information.
- if (MAI->doesSupportDebugInformation() || MAI->doesSupportExceptionHandling())
- DW->EndModule();
+ // Finalize debug and EH information.
+ if (DE) {
+ DE->EndModule();
+ delete DE; DE = 0;
+ }
+ if (DD) {
+ DD->endModule();
+ delete DD; DD = 0;
+ }
// If the target wants to know about weak references, print them all.
if (MAI->getWeakRefDirective()) {
@@ -594,7 +604,7 @@
EmitEndOfAsmFile(M);
delete Mang; Mang = 0;
- DW = 0; MMI = 0;
+ MMI = 0;
OutStreamer.Finish();
return false;
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=100405&r1=100404&r2=100405&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Mon Apr 5 00:11:15 2010
@@ -299,7 +299,7 @@
delete Variables[j];
}
-DwarfDebug::DwarfDebug(AsmPrinter *A)
+DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
: Asm(A), MMI(Asm->MMI), ModuleCU(0),
AbbreviationsSet(InitAbbreviationsSetSize),
CurrentFnDbgScope(0), DebugTimer(0) {
@@ -310,6 +310,8 @@
if (TimePassesIsEnabled)
DebugTimer = new Timer("Dwarf Debug Writer");
+
+ beginModule(M);
}
DwarfDebug::~DwarfDebug() {
for (unsigned j = 0, M = DIEBlocks.size(); j < M; ++j)
@@ -1791,9 +1793,6 @@
/// content. Create global DIEs and emit initial debug info sections.
/// This is inovked by the target AsmPrinter.
void DwarfDebug::beginModule(Module *M) {
- if (!Asm->MAI->doesSupportDebugInformation())
- return;
-
MMI = Asm->MMI;
TimeRegion Timer(DebugTimer);
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=100405&r1=100404&r2=100405&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Mon Apr 5 00:11:15 2010
@@ -513,7 +513,7 @@
//===--------------------------------------------------------------------===//
// Main entry points.
//
- DwarfDebug(AsmPrinter *A);
+ DwarfDebug(AsmPrinter *A, Module *M);
virtual ~DwarfDebug();
/// beginModule - Emit all Dwarf sections that should come prior to the
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=100405&r1=100404&r2=100405&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Apr 5 00:11:15 2010
@@ -38,8 +38,7 @@
/// content.
void DwarfWriter::BeginModule(Module *M, AsmPrinter *A) {
DE = new DwarfException(A);
- DD = new DwarfDebug(A);
- DD->beginModule(M);
+ DD = new DwarfDebug(A, M);
}
/// EndModule - Emit all Dwarf sections that should come after the content.
More information about the llvm-commits
mailing list