forked from OSchip/llvm-project
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. llvm-svn: 77252
This commit is contained in:
parent
a87555aaa8
commit
9d0e762c81
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue