diff options
author | Chris Lattner <sabre@nondot.org> | 2003-01-13 00:23:24 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-01-13 00:23:24 +0000 |
commit | 8d95ef4973226044cefdd6dc237d3c326ffc15b3 (patch) | |
tree | 8eaf6821d9133c25819c11b41e4bc1024d20a28a /lib/CodeGen/MachineInstr.cpp | |
parent | 4d149cdae1553426f49623fdae215d481d56d955 (diff) |
Add support for 3 new forms of MachineOperand
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5217 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/MachineInstr.cpp')
-rw-r--r-- | lib/CodeGen/MachineInstr.cpp | 57 |
1 files changed, 39 insertions, 18 deletions
diff --git a/lib/CodeGen/MachineInstr.cpp b/lib/CodeGen/MachineInstr.cpp index f0a9645c4e..a2393eb733 100644 --- a/lib/CodeGen/MachineInstr.cpp +++ b/lib/CodeGen/MachineInstr.cpp @@ -10,6 +10,7 @@ #include "llvm/Target/MRegisterInfo.h" using std::cerr; + // Global variable holding an array of descriptors for machine instructions. // The actual object needs to be created separately for each target machine. // This variable is initialized and reset by class MachineInstrInfo. @@ -268,6 +269,15 @@ static void print(const MachineOperand &MO, std::ostream &OS, case MachineOperand::MO_FrameIndex: OS << "<fi#" << MO.getFrameIndex() << ">"; break; + case MachineOperand::MO_ConstantPoolIndex: + OS << "<cp#" << MO.getConstantPoolIndex() << ">"; + break; + case MachineOperand::MO_GlobalAddress: + OS << "<ga:" << ((Value*)MO.getGlobal())->getName() << ">"; + break; + case MachineOperand::MO_ExternalSymbol: + OS << "<es:" << MO.getSymbolName() << ">"; + break; default: assert(0 && "Unrecognized operand type"); } @@ -316,26 +326,26 @@ void MachineInstr::print(std::ostream &OS, const TargetMachine &TM) const { } -std::ostream &operator<<(std::ostream& os, const MachineInstr& minstr) +std::ostream &operator<<(std::ostream& os, const MachineInstr& MI) { - os << TargetInstrDescriptors[minstr.opCode].Name; + os << TargetInstrDescriptors[MI.opCode].Name; - for (unsigned i=0, N=minstr.getNumOperands(); i < N; i++) { - os << "\t" << minstr.getOperand(i); - if( minstr.operandIsDefined(i) ) - os << "*"; - if( minstr.operandIsDefinedAndUsed(i) ) - os << "*"; + for (unsigned i=0, N=MI.getNumOperands(); i < N; i++) { + os << "\t" << MI.getOperand(i); + if (MI.operandIsDefined(i)) + os << "<d>"; + if (MI.operandIsDefinedAndUsed(i)) + os << "<d&u>"; } // code for printing implict references - unsigned NumOfImpRefs = minstr.getNumImplicitRefs(); - if( NumOfImpRefs > 0 ) { + unsigned NumOfImpRefs = MI.getNumImplicitRefs(); + if (NumOfImpRefs > 0) { os << "\tImplicit: "; - for(unsigned z=0; z < NumOfImpRefs; z++) { - OutputValue(os, minstr.getImplicitRef(z)); - if( minstr.implicitRefIsDefined(z)) os << "*"; - if( minstr.implicitRefIsDefinedAndUsed(z)) os << "*"; + for (unsigned z=0; z < NumOfImpRefs; z++) { + OutputValue(os, MI.getImplicitRef(z)); + if (MI.implicitRefIsDefined(z)) os << "<d>"; + if (MI.implicitRefIsDefinedAndUsed(z)) os << "<d&u>"; os << "\t"; } } @@ -357,11 +367,13 @@ std::ostream &operator<<(std::ostream &OS, const MachineOperand &MO) switch (MO.getType()) { case MachineOperand::MO_VirtualRegister: - OS << "%reg"; - OutputValue(OS, MO.getVRegValue()); - if (MO.hasAllocatedReg()) { - OS << "=="; + if (MO.hasAllocatedReg()) OutputReg(OS, MO.getAllocatedRegNum()); + + if (MO.getVRegValue()) { + if (MO.hasAllocatedReg()) OS << "=="; + OS << "%vreg"; + OutputValue(OS, MO.getVRegValue()); } break; case MachineOperand::MO_CCRegister: @@ -401,6 +413,15 @@ std::ostream &operator<<(std::ostream &OS, const MachineOperand &MO) case MachineOperand::MO_FrameIndex: OS << "<fi#" << MO.getFrameIndex() << ">"; break; + case MachineOperand::MO_ConstantPoolIndex: + OS << "<cp#" << MO.getConstantPoolIndex() << ">"; + break; + case MachineOperand::MO_GlobalAddress: + OS << "<ga:" << ((Value*)MO.getGlobal())->getName() << ">"; + break; + case MachineOperand::MO_ExternalSymbol: + OS << "<es:" << MO.getSymbolName() << ">"; + break; default: assert(0 && "Unrecognized operand type"); break; |