From c396e18e8ec6371bd369f533f73f5c374350df3c Mon Sep 17 00:00:00 2001 From: Jeff Cohen Date: Sat, 16 Dec 2006 02:15:42 +0000 Subject: [PATCH] The best unbreakage yet, addressing Bill's concerns. llvm-svn: 32622 --- include/llvm/CodeGen/LiveInterval.h | 7 ++- include/llvm/CodeGen/MachineBasicBlock.h | 5 +- include/llvm/CodeGen/MachineInstr.h | 24 +++++++-- lib/CodeGen/LiveInterval.cpp | 5 +- lib/CodeGen/MachineBasicBlock.cpp | 5 -- lib/CodeGen/MachineInstr.cpp | 69 ++++++++++-------------- 6 files changed, 60 insertions(+), 55 deletions(-) diff --git a/include/llvm/CodeGen/LiveInterval.h b/include/llvm/CodeGen/LiveInterval.h index a64af87d912..b22922c84c0 100644 --- a/include/llvm/CodeGen/LiveInterval.h +++ b/include/llvm/CodeGen/LiveInterval.h @@ -56,13 +56,18 @@ namespace llvm { } void dump() const; + void print(std::ostream &os) const; private: LiveRange(); // DO NOT IMPLEMENT }; std::ostream& operator<<(std::ostream& os, const LiveRange &LR); - OStream& operator<<(OStream& os, const LiveRange &LR); + inline OStream& operator<<(OStream& os, const LiveRange &LR) { + if (os.stream()) LR.print(*os.stream()); + return os; + } + inline bool operator<(unsigned V, const LiveRange &LR) { return V < LR.start; diff --git a/include/llvm/CodeGen/MachineBasicBlock.h b/include/llvm/CodeGen/MachineBasicBlock.h index 4cf6a24e450..896d9efe03e 100644 --- a/include/llvm/CodeGen/MachineBasicBlock.h +++ b/include/llvm/CodeGen/MachineBasicBlock.h @@ -226,7 +226,10 @@ private: // Methods used to maintain doubly linked list of blocks... }; std::ostream& operator<<(std::ostream &OS, const MachineBasicBlock &MBB); -OStream& operator<<(OStream &OS, const MachineBasicBlock &MBB); +inline OStream& operator<<(OStream &OS, const MachineBasicBlock &MBB) { + if (OS.stream()) MBB.print(*OS.stream()); + return OS; +} //===--------------------------------------------------------------------===// // GraphTraits specializations for machine basic block graphs (machine-CFGs) diff --git a/include/llvm/CodeGen/MachineInstr.h b/include/llvm/CodeGen/MachineInstr.h index e19a3ebfbe8..77de83768e3 100644 --- a/include/llvm/CodeGen/MachineInstr.h +++ b/include/llvm/CodeGen/MachineInstr.h @@ -76,6 +76,9 @@ private: int offset; MachineOperand() {} + + void print(std::ostream &os) const; + public: MachineOperand(const MachineOperand &M) { *this = M; @@ -285,8 +288,14 @@ public: IsDead = false; } - friend OStream& operator<<(OStream& os, const MachineOperand& mop); - friend std::ostream& operator<<(std::ostream& os, const MachineOperand& mop); + friend OStream& operator<<(OStream& os, const MachineOperand& mop) { + if (os.stream()) mop.print(*os.stream()); + return os; + } + friend std::ostream& operator<<(std::ostream& os, const MachineOperand& mop) { + mop.print(os); + return os; + } friend class MachineInstr; }; @@ -398,9 +407,16 @@ public: if (OS.stream()) print(*OS.stream(), TM); } void print(std::ostream &OS, const TargetMachine *TM) const; + void print(std::ostream &OS) const; void dump() const; - friend OStream& operator<<(OStream& os, const MachineInstr& minstr); - friend std::ostream& operator<<(std::ostream& os, const MachineInstr& minstr); + friend OStream& operator<<(OStream& os, const MachineInstr& minstr) { + if (os.stream()) minstr.print(*os.stream()); + return os; + } + friend std::ostream& operator<<(std::ostream& os, const MachineInstr& minstr){ + minstr.print(os); + return os; + } //===--------------------------------------------------------------------===// // Accessors to add operands when building up machine instructions. diff --git a/lib/CodeGen/LiveInterval.cpp b/lib/CodeGen/LiveInterval.cpp index 78c874cbb93..63a80fd16ea 100644 --- a/lib/CodeGen/LiveInterval.cpp +++ b/lib/CodeGen/LiveInterval.cpp @@ -512,7 +512,6 @@ void LiveInterval::dump() const { } -OStream& llvm::operator<<(OStream& os, const LiveRange &LR) { - if (os.stream()) *os.stream() << LR; - return os; +void LiveRange::print(std::ostream &os) const { + os << *this; } diff --git a/lib/CodeGen/MachineBasicBlock.cpp b/lib/CodeGen/MachineBasicBlock.cpp index 39b142a2f35..a626f4fdd15 100644 --- a/lib/CodeGen/MachineBasicBlock.cpp +++ b/lib/CodeGen/MachineBasicBlock.cpp @@ -31,11 +31,6 @@ std::ostream& llvm::operator<<(std::ostream &OS, const MachineBasicBlock &MBB) { return OS; } -OStream& llvm::operator<<(OStream &OS, const MachineBasicBlock &MBB) { - if (OS.stream()) *OS.stream() << MBB; - return OS; -} - // MBBs start out as #-1. When a MBB is added to a MachineFunction, it // gets the next available unique MBB number. If it is removed from a // MachineFunction, it goes back to being #-1. diff --git a/lib/CodeGen/MachineInstr.cpp b/lib/CodeGen/MachineInstr.cpp index a68442511b4..df6205b7d8d 100644 --- a/lib/CodeGen/MachineInstr.cpp +++ b/lib/CodeGen/MachineInstr.cpp @@ -304,74 +304,61 @@ void MachineInstr::print(std::ostream &OS, const TargetMachine *TM) const { OS << "\n"; } -std::ostream &llvm::operator<<(std::ostream &os, const MachineInstr &MI) { +void MachineInstr::print(std::ostream &os) const { // If the instruction is embedded into a basic block, we can find the target // info for the instruction. - if (const MachineBasicBlock *MBB = MI.getParent()) { + if (const MachineBasicBlock *MBB = getParent()) { const MachineFunction *MF = MBB->getParent(); if (MF) - MI.print(os, &MF->getTarget()); + print(os, &MF->getTarget()); else - MI.print(os, 0); - return os; + print(os, 0); } // Otherwise, print it out in the "raw" format without symbolic register names // and such. - os << MI.getInstrDescriptor()->Name; + os << getInstrDescriptor()->Name; - for (unsigned i = 0, N = MI.getNumOperands(); i < N; i++) { - os << "\t" << MI.getOperand(i); - if (MI.getOperand(i).isReg() && MI.getOperand(i).isDef()) + for (unsigned i = 0, N = getNumOperands(); i < N; i++) { + os << "\t" << getOperand(i); + if (getOperand(i).isReg() && getOperand(i).isDef()) os << ""; } - return os << "\n"; + os << "\n"; } -std::ostream &llvm::operator<<(std::ostream &OS, const MachineOperand &MO) { - switch (MO.getType()) { - case MachineOperand::MO_Register: - OutputReg(OS, MO.getReg()); +void MachineOperand::print(std::ostream &OS) const { + switch (getType()) { + case MO_Register: + OutputReg(OS, getReg()); break; - case MachineOperand::MO_Immediate: - OS << (long)MO.getImmedValue(); + case MO_Immediate: + OS << (long)getImmedValue(); break; - case MachineOperand::MO_MachineBasicBlock: + case MO_MachineBasicBlock: OS << "getBasicBlock())->getName() - << "@" << (void*)MO.getMachineBasicBlock() << ">"; + << ((Value*)getMachineBasicBlock()->getBasicBlock())->getName() + << "@" << (void*)getMachineBasicBlock() << ">"; break; - case MachineOperand::MO_FrameIndex: - OS << ""; + case MO_FrameIndex: + OS << ""; break; - case MachineOperand::MO_ConstantPoolIndex: - OS << ""; + case MO_ConstantPoolIndex: + OS << ""; break; - case MachineOperand::MO_JumpTableIndex: - OS << ""; + case MO_JumpTableIndex: + OS << ""; break; - case MachineOperand::MO_GlobalAddress: - OS << "getName() << ">"; + case MO_GlobalAddress: + OS << "getName() << ">"; break; - case MachineOperand::MO_ExternalSymbol: - OS << ""; + case MO_ExternalSymbol: + OS << ""; break; default: assert(0 && "Unrecognized operand type"); break; } - - return OS; -} - -OStream& llvm::operator<<(OStream& os, const MachineInstr& minstr) { - if (os.stream()) *os.stream() << minstr; - return os; -} - -OStream& llvm::operator<<(OStream& os, const MachineOperand& mop) { - if (os.stream()) *os.stream() << mop; - return os; }