mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-05 10:17:37 +00:00
sink management of DwarfWriter & MachineModuleInfo into the AsmPrinter base class.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74101 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1f522feabf
commit
0de1fc4f41
@ -33,6 +33,7 @@ namespace llvm {
|
||||
class GlobalVariable;
|
||||
class MachineConstantPoolEntry;
|
||||
class MachineConstantPoolValue;
|
||||
class MachineModuleInfo;
|
||||
class DwarfWriter;
|
||||
class Mangler;
|
||||
class Section;
|
||||
@ -58,9 +59,10 @@ namespace llvm {
|
||||
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.
|
||||
/// MMI - If available, this is a pointer to the current MachineModuleInfo.
|
||||
MachineModuleInfo *MMI;
|
||||
|
||||
/// DW - If available, this is a pointer to the current dwarf writer.
|
||||
DwarfWriter *DW;
|
||||
|
||||
/// OptLevel - Generating code at a specific optimization level.
|
||||
|
@ -45,8 +45,8 @@ AsmPrinter::AsmPrinter(raw_ostream &o, TargetMachine &tm,
|
||||
const TargetAsmInfo *T, CodeGenOpt::Level OL, bool VDef)
|
||||
: MachineFunctionPass(&ID), FunctionNumber(0), OptLevel(OL), O(o),
|
||||
TM(tm), TAI(T), TRI(tm.getRegisterInfo()),
|
||||
IsInTextSection(false)
|
||||
{
|
||||
IsInTextSection(false) {
|
||||
DW = 0; MMI = 0;
|
||||
switch (AsmVerbose) {
|
||||
case cl::BOU_UNSET: VerboseAsm = VDef; break;
|
||||
case cl::BOU_TRUE: VerboseAsm = true; break;
|
||||
@ -177,15 +177,14 @@ bool AsmPrinter::doInitialization(Module &M) {
|
||||
|
||||
SwitchToDataSection(""); // Reset back to no section.
|
||||
|
||||
if (TAI->doesSupportDebugInformation()
|
||||
|| TAI->doesSupportExceptionHandling()) {
|
||||
MachineModuleInfo *MMI = getAnalysisIfAvailable<MachineModuleInfo>();
|
||||
if (MMI) {
|
||||
if (TAI->doesSupportDebugInformation() ||
|
||||
TAI->doesSupportExceptionHandling()) {
|
||||
MMI = getAnalysisIfAvailable<MachineModuleInfo>();
|
||||
if (MMI)
|
||||
MMI->AnalyzeModule(M);
|
||||
DW = getAnalysisIfAvailable<DwarfWriter>();
|
||||
if (DW)
|
||||
DW->BeginModule(&M, MMI, O, this, TAI);
|
||||
}
|
||||
DW = getAnalysisIfAvailable<DwarfWriter>();
|
||||
if (DW)
|
||||
DW->BeginModule(&M, MMI, O, this, TAI);
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -258,6 +257,7 @@ bool AsmPrinter::doFinalization(Module &M) {
|
||||
O << TAI->getNonexecutableStackDirective() << '\n';
|
||||
|
||||
delete Mang; Mang = 0;
|
||||
DW = 0; MMI = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -293,20 +293,17 @@ namespace {
|
||||
|
||||
/// PPCLinuxAsmPrinter - PowerPC assembly printer, customized for Linux
|
||||
class VISIBILITY_HIDDEN PPCLinuxAsmPrinter : public PPCAsmPrinter {
|
||||
DwarfWriter *DW;
|
||||
MachineModuleInfo *MMI;
|
||||
public:
|
||||
explicit PPCLinuxAsmPrinter(raw_ostream &O, PPCTargetMachine &TM,
|
||||
const TargetAsmInfo *T, CodeGenOpt::Level OL,
|
||||
bool V)
|
||||
: PPCAsmPrinter(O, TM, T, OL, V), DW(0), MMI(0) {}
|
||||
: PPCAsmPrinter(O, TM, T, OL, V){}
|
||||
|
||||
virtual const char *getPassName() const {
|
||||
return "Linux PPC Assembly Printer";
|
||||
}
|
||||
|
||||
bool runOnMachineFunction(MachineFunction &F);
|
||||
bool doInitialization(Module &M);
|
||||
bool doFinalization(Module &M);
|
||||
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
@ -322,14 +319,12 @@ namespace {
|
||||
/// PPCDarwinAsmPrinter - PowerPC assembly printer, customized for Darwin/Mac
|
||||
/// OS X
|
||||
class VISIBILITY_HIDDEN PPCDarwinAsmPrinter : public PPCAsmPrinter {
|
||||
DwarfWriter *DW;
|
||||
MachineModuleInfo *MMI;
|
||||
raw_ostream &OS;
|
||||
public:
|
||||
explicit PPCDarwinAsmPrinter(raw_ostream &O, PPCTargetMachine &TM,
|
||||
const TargetAsmInfo *T, CodeGenOpt::Level OL,
|
||||
bool V)
|
||||
: PPCAsmPrinter(O, TM, T, OL, V), DW(0), MMI(0), OS(O) {}
|
||||
: PPCAsmPrinter(O, TM, T, OL, V), OS(O) {}
|
||||
|
||||
virtual const char *getPassName() const {
|
||||
return "Darwin PPC Assembly Printer";
|
||||
@ -637,15 +632,6 @@ bool PPCLinuxAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool PPCLinuxAsmPrinter::doInitialization(Module &M) {
|
||||
bool Result = AsmPrinter::doInitialization(M);
|
||||
DW = getAnalysisIfAvailable<DwarfWriter>();
|
||||
MMI = getAnalysisIfAvailable<MachineModuleInfo>();
|
||||
assert(MMI);
|
||||
SwitchToSection(TAI->getTextSection());
|
||||
return Result;
|
||||
}
|
||||
|
||||
/// PrintUnmangledNameSafely - Print out the printable characters in the name.
|
||||
/// Don't print things like \\n or \\0.
|
||||
static void PrintUnmangledNameSafely(const Value *V, raw_ostream &OS) {
|
||||
@ -848,8 +834,6 @@ bool PPCDarwinAsmPrinter::doInitialization(Module &M) {
|
||||
O << "\t.machine " << CPUDirectives[Directive] << '\n';
|
||||
|
||||
bool Result = AsmPrinter::doInitialization(M);
|
||||
DW = getAnalysisIfAvailable<DwarfWriter>();
|
||||
MMI = getAnalysisIfAvailable<MachineModuleInfo>();
|
||||
assert(MMI);
|
||||
|
||||
// Prime text sections so they are adjacent. This reduces the likelihood a
|
||||
@ -1076,8 +1060,7 @@ bool PPCDarwinAsmPrinter::doFinalization(Module &M) {
|
||||
if (TAI->doesSupportExceptionHandling() && MMI) {
|
||||
// Add the (possibly multiple) personalities to the set of global values.
|
||||
// Only referenced functions get into the Personalities list.
|
||||
const std::vector<Function *>& Personalities = MMI->getPersonalities();
|
||||
|
||||
const std::vector<Function *> &Personalities = MMI->getPersonalities();
|
||||
for (std::vector<Function *>::const_iterator I = Personalities.begin(),
|
||||
E = Personalities.end(); I != E; ++I)
|
||||
if (*I) GVStubs.insert("_" + (*I)->getName());
|
||||
|
@ -927,9 +927,6 @@ void X86ATTAsmPrinter::printMachineInstruction(const MachineInstr *MI) {
|
||||
|
||||
/// doInitialization
|
||||
bool X86ATTAsmPrinter::doInitialization(Module &M) {
|
||||
if (TAI->doesSupportDebugInformation() || TAI->doesSupportExceptionHandling())
|
||||
MMI = getAnalysisIfAvailable<MachineModuleInfo>();
|
||||
|
||||
if (NewAsmPrinter) {
|
||||
Context = new MCContext();
|
||||
// FIXME: Send this to "O" instead of outs(). For now, we force it to
|
||||
|
@ -32,7 +32,6 @@ class MCInst;
|
||||
class MCStreamer;
|
||||
|
||||
class VISIBILITY_HIDDEN X86ATTAsmPrinter : public AsmPrinter {
|
||||
MachineModuleInfo *MMI;
|
||||
const X86Subtarget *Subtarget;
|
||||
|
||||
MCContext *Context;
|
||||
@ -41,7 +40,7 @@ class VISIBILITY_HIDDEN X86ATTAsmPrinter : public AsmPrinter {
|
||||
explicit X86ATTAsmPrinter(raw_ostream &O, X86TargetMachine &TM,
|
||||
const TargetAsmInfo *T, CodeGenOpt::Level OL,
|
||||
bool V)
|
||||
: AsmPrinter(O, TM, T, OL, V), MMI(0) {
|
||||
: AsmPrinter(O, TM, T, OL, V) {
|
||||
Subtarget = &TM.getSubtarget<X86Subtarget>();
|
||||
Context = 0;
|
||||
Streamer = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user