Overhaul my earlier submission due to feedback. It's a large patch, but most of
them are generic changes.
- Use the "fast" flag that's already being passed into the asm printers instead
of shoving it into the DwarfWriter.
- Instead of calling "MI->getParent()->getParent()" for every MI, set the
machine function when calling "runOnMachineFunction" in the asm printers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65379 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp b/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp
index e9b3fc2..474a8ad 100644
--- a/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp
+++ b/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp
@@ -45,13 +45,12 @@
const std::string bss_section(".bss");
- struct VISIBILITY_HIDDEN SPUAsmPrinter : public AsmPrinter {
+ class VISIBILITY_HIDDEN SPUAsmPrinter : public AsmPrinter {
std::set<std::string> FnStubs, GVStubs;
-
- SPUAsmPrinter(raw_ostream &O, TargetMachine &TM, const TargetAsmInfo *T) :
- AsmPrinter(O, TM, T)
- {
- }
+ public:
+ SPUAsmPrinter(raw_ostream &O, TargetMachine &TM,
+ const TargetAsmInfo *T, bool F) :
+ AsmPrinter(O, TM, T, F) {}
virtual const char *getPassName() const {
return "STI CBEA SPU Assembly Printer";
@@ -285,17 +284,13 @@
};
/// LinuxAsmPrinter - SPU assembly printer, customized for Linux
- struct VISIBILITY_HIDDEN LinuxAsmPrinter : public SPUAsmPrinter {
-
+ class VISIBILITY_HIDDEN LinuxAsmPrinter : public SPUAsmPrinter {
DwarfWriter *DW;
MachineModuleInfo *MMI;
-
+ public:
LinuxAsmPrinter(raw_ostream &O, SPUTargetMachine &TM,
- const TargetAsmInfo *T) :
- SPUAsmPrinter(O, TM, T),
- DW(0),
- MMI(0)
- { }
+ const TargetAsmInfo *T, bool F)
+ : SPUAsmPrinter(O, TM, T, F), DW(0), MMI(0) {}
virtual const char *getPassName() const {
return "STI CBEA SPU Assembly Printer";
@@ -427,6 +422,8 @@
bool
LinuxAsmPrinter::runOnMachineFunction(MachineFunction &MF)
{
+ this->MF = &MF;
+
SetupMachineFunction(MF);
O << "\n\n";
@@ -613,6 +610,7 @@
/// that the Linux SPU assembler can deal with.
///
FunctionPass *llvm::createSPUAsmPrinterPass(raw_ostream &o,
- SPUTargetMachine &tm) {
- return new LinuxAsmPrinter(o, tm, tm.getTargetAsmInfo());
+ SPUTargetMachine &tm,
+ bool fast) {
+ return new LinuxAsmPrinter(o, tm, tm.getTargetAsmInfo(), fast);
}
diff --git a/lib/Target/CellSPU/SPU.h b/lib/Target/CellSPU/SPU.h
index a6a9110..a7a9a77 100644
--- a/lib/Target/CellSPU/SPU.h
+++ b/lib/Target/CellSPU/SPU.h
@@ -23,7 +23,9 @@
class raw_ostream;
FunctionPass *createSPUISelDag(SPUTargetMachine &TM);
- FunctionPass *createSPUAsmPrinterPass(raw_ostream &o, SPUTargetMachine &tm);
+ FunctionPass *createSPUAsmPrinterPass(raw_ostream &o,
+ SPUTargetMachine &tm,
+ bool fast);
/*--== Utility functions/predicates/etc used all over the place: --==*/
//! Predicate test for a signed 10-bit value
diff --git a/lib/Target/CellSPU/SPUTargetMachine.cpp b/lib/Target/CellSPU/SPUTargetMachine.cpp
index 217da2c..ba5d2f2 100644
--- a/lib/Target/CellSPU/SPUTargetMachine.cpp
+++ b/lib/Target/CellSPU/SPUTargetMachine.cpp
@@ -90,6 +90,6 @@
bool SPUTargetMachine::addAssemblyEmitter(PassManagerBase &PM, bool Fast,
raw_ostream &Out) {
- PM.add(createSPUAsmPrinterPass(Out, *this));
+ PM.add(createSPUAsmPrinterPass(Out, *this, Fast));
return false;
}