Add support for 3 new forms of MachineOperand
authorChris Lattner <sabre@nondot.org>
Mon, 13 Jan 2003 00:23:24 +0000 (00:23 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 13 Jan 2003 00:23:24 +0000 (00:23 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5217 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/MachineInstr.cpp

index f0a9645c4ecbac4d9411535b99f480c768571d91..a2393eb7331de1fac3304306f7e4d83d5de6d441 100644 (file)
@@ -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;