diff options
author | Chris Lattner <sabre@nondot.org> | 2009-07-27 21:28:04 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-07-27 21:28:04 +0000 |
commit | 1eb0ad05844cdda1da0acfc72cb583c8aa9c8dbf (patch) | |
tree | 5b030058053740588b319b8e8fe4b84abd8c1f90 | |
parent | efd9f385878c9c70d5c852961a73c4374b667a44 (diff) | |
download | external_llvm-1eb0ad05844cdda1da0acfc72cb583c8aa9c8dbf.zip external_llvm-1eb0ad05844cdda1da0acfc72cb583c8aa9c8dbf.tar.gz external_llvm-1eb0ad05844cdda1da0acfc72cb583c8aa9c8dbf.tar.bz2 |
hoist MCContext/MCStreamer up to AsmPrinter since we're going to start creating
MCSections soon instead of Section for all targets, and we need something to
own them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77252 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/CodeGen/AsmPrinter.h | 13 | ||||
-rw-r--r-- | lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 11 | ||||
-rw-r--r-- | lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp | 25 | ||||
-rw-r--r-- | lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h | 6 |
4 files changed, 25 insertions, 30 deletions
diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h index b9004a5..78de33f 100644 --- a/include/llvm/CodeGen/AsmPrinter.h +++ b/include/llvm/CodeGen/AsmPrinter.h @@ -33,6 +33,8 @@ namespace llvm { class MachineConstantPoolValue; class MachineModuleInfo; class MCInst; + class MCContext; + class MCStreamer; class DwarfWriter; class Mangler; class Section; @@ -81,6 +83,17 @@ namespace llvm { /// const TargetRegisterInfo *TRI; + /// OutContext - This is the context for the output file that we are + /// streaming. This owns all of the global MC-related objects for the + /// generated translation unit. + MCContext &OutContext; + + /// OutStreamer - This is the MCStreamer object for the file we are + /// generating. This contains the transient state for the current + /// translation unit that we are generating (such as the current section + /// etc). + MCStreamer &OutStreamer; + /// The current machine function. const MachineFunction *MF; diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 792db22..0303f26 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -22,6 +22,8 @@ #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/CodeGen/DwarfWriter.h" #include "llvm/Analysis/DebugInfo.h" +#include "llvm/MC/MCContext.h" +#include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCInst.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/ErrorHandling.h" @@ -47,6 +49,10 @@ AsmPrinter::AsmPrinter(formatted_raw_ostream &o, TargetMachine &tm, const TargetAsmInfo *T, bool VDef) : MachineFunctionPass(&ID), FunctionNumber(0), O(o), TM(tm), TAI(T), TRI(tm.getRegisterInfo()), + + OutContext(*new MCContext()), + OutStreamer(*createAsmStreamer(OutContext, O)), + IsInTextSection(false), LastMI(0), LastFn(0), Counter(~0U), PrevDLT(0, ~0U, ~0U) { DW = 0; MMI = 0; @@ -61,6 +67,9 @@ AsmPrinter::~AsmPrinter() { for (gcp_iterator I = GCMetadataPrinters.begin(), E = GCMetadataPrinters.end(); I != E; ++I) delete I->second; + + delete &OutStreamer; + delete &OutContext; } /// SwitchToTextSection - Switch to the specified text section of the executable @@ -270,6 +279,8 @@ bool AsmPrinter::doFinalization(Module &M) { delete Mang; Mang = 0; DW = 0; MMI = 0; + + OutStreamer.Finish(); return false; } diff --git a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp index 90cbf80..88c6434 100644 --- a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp +++ b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp @@ -751,18 +751,6 @@ void X86ATTAsmPrinter::printMachineInstruction(const MachineInstr *MI) { printInstruction(MI); } -/// doInitialization -bool X86ATTAsmPrinter::doInitialization(Module &M) { - if (NewAsmPrinter) { - Context = new MCContext(); - // FIXME: Send this to "O" instead of outs(). For now, we force it to - // stdout to make it easy to compare. - Streamer = createAsmStreamer(*Context, outs()); - } - - return AsmPrinter::doInitialization(M); -} - void X86ATTAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) { const TargetData *TD = TM.getTargetData(); @@ -988,18 +976,7 @@ bool X86ATTAsmPrinter::doFinalization(Module &M) { } // Do common shutdown. - bool Changed = AsmPrinter::doFinalization(M); - - if (NewAsmPrinter) { - Streamer->Finish(); - - delete Streamer; - delete Context; - Streamer = 0; - Context = 0; - } - - return Changed; + return AsmPrinter::doFinalization(M); } // Include the auto-generated portion of the assembly writer. diff --git a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h index ab81659..65ef5ff 100644 --- a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h +++ b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h @@ -33,16 +33,11 @@ class MCStreamer; class VISIBILITY_HIDDEN X86ATTAsmPrinter : public AsmPrinter { const X86Subtarget *Subtarget; - - MCContext *Context; - MCStreamer *Streamer; public: explicit X86ATTAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM, const TargetAsmInfo *T, bool V) : AsmPrinter(O, TM, T, V) { Subtarget = &TM.getSubtarget<X86Subtarget>(); - Context = 0; - Streamer = 0; } virtual const char *getPassName() const { @@ -60,7 +55,6 @@ class VISIBILITY_HIDDEN X86ATTAsmPrinter : public AsmPrinter { AsmPrinter::getAnalysisUsage(AU); } - bool doInitialization(Module &M); bool doFinalization(Module &M); /// printInstruction - This method is automatically generated by tablegen |