diff options
| author | Chris Lattner <sabre@nondot.org> | 2004-02-19 16:17:08 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2004-02-19 16:17:08 +0000 |
| commit | 63f41abfe674e7497c56c5fefa728521e7483a0e (patch) | |
| tree | 24af84af868c8e62e2d0bd87830adf597b1c7e8c /llvm/lib/CodeGen/MachineInstr.cpp | |
| parent | d23a882f2f4c16955e5f7e46ec3b4b3a2ea3de0f (diff) | |
| download | bcm5719-llvm-63f41abfe674e7497c56c5fefa728521e7483a0e.tar.gz bcm5719-llvm-63f41abfe674e7497c56c5fefa728521e7483a0e.zip | |
Fix a __LONG__ term annoyance of mine: symbolic registers weren't being printed
by operator<< on MachineInstr's, and looking up what register "24" is all of the
time was greatly annoying.
llvm-svn: 11623
Diffstat (limited to 'llvm/lib/CodeGen/MachineInstr.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/MachineInstr.cpp | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/llvm/lib/CodeGen/MachineInstr.cpp b/llvm/lib/CodeGen/MachineInstr.cpp index bb7cefe6863..3aabbc47f5f 100644 --- a/llvm/lib/CodeGen/MachineInstr.cpp +++ b/llvm/lib/CodeGen/MachineInstr.cpp @@ -15,7 +15,7 @@ //===----------------------------------------------------------------------===// #include "llvm/CodeGen/MachineInstr.h" -#include "llvm/CodeGen/MachineBasicBlock.h" +#include "llvm/CodeGen/MachineFunction.h" #include "llvm/Value.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetInstrInfo.h" @@ -198,13 +198,13 @@ static inline std::ostream& OutputValue(std::ostream &os, const Value* val) { static inline void OutputReg(std::ostream &os, unsigned RegNo, const MRegisterInfo *MRI = 0) { - if (MRI) { - if (MRegisterInfo::isPhysicalRegister(RegNo)) + if (MRegisterInfo::isPhysicalRegister(RegNo)) { + if (MRI) os << "%" << MRI->get(RegNo).Name; else - os << "%reg" << RegNo; + os << "%mreg(" << RegNo << ")"; } else - os << "%mreg(" << RegNo << ")"; + os << "%reg" << RegNo; } static void print(const MachineOperand &MO, std::ostream &OS, @@ -328,7 +328,17 @@ void MachineInstr::print(std::ostream &OS, const TargetMachine &TM) const { OS << "\n"; } -std::ostream &operator<<(std::ostream& os, const MachineInstr& MI) { +std::ostream &operator<<(std::ostream &os, const MachineInstr &MI) { + // If the instruction is embedded into a basic block, we can find the target + // info for the instruction. + if (const MachineBasicBlock *MBB = MI.getParent()) { + const MachineFunction *MF = MBB->getParent(); + MI.print(os, MF->getTarget()); + return os; + } + + // Otherwise, print it out in the "raw" format without symbolic register names + // and such. os << TargetInstrDescriptors[MI.getOpcode()].Name; for (unsigned i=0, N=MI.getNumOperands(); i < N; i++) { |

