Made a fix so that you can print out MachineInstrs that belong to a MachineBasicBlock...
authorTanya Lattner <tonic@nondot.org>
Fri, 25 Jun 2004 00:13:11 +0000 (00:13 +0000)
committerTanya Lattner <tonic@nondot.org>
Fri, 25 Jun 2004 00:13:11 +0000 (00:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14389 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/MachineInstr.h
lib/CodeGen/LiveIntervalAnalysis.cpp
lib/CodeGen/MachineBasicBlock.cpp
lib/CodeGen/MachineInstr.cpp
lib/CodeGen/RegAllocSimple.cpp
lib/CodeGen/TwoAddressInstructionPass.cpp
lib/CodeGen/VirtRegMap.cpp
lib/Target/X86/FloatingPoint.cpp
lib/Target/X86/Printer.cpp
lib/Target/X86/X86AsmPrinter.cpp
lib/Target/X86/X86FloatingPoint.cpp

index 02c881d64a9ce409dbc98c5087fc4d552b9ee8d4..97c60f9e3ad59710b1bdab412e4a2d697adc1e01 100644 (file)
@@ -308,7 +308,13 @@ public:
     // code.' It's not clear where the duplication is.
     assert(hasAllocatedReg() && "This operand cannot have a register number!");
     regNum = Reg;
-  }    
+  }  
+
+  void setValueReg(Value *val) {
+    assert(getVRegValueOrNull() != 0 && "Original operand must of type Value*");
+    contents.value = val;
+  }
+  
   void setImmedValue(int immVal) {
     assert(isImmediate() && "Wrong MachineOperand mutator");
     contents.immedVal = immVal;
@@ -465,7 +471,7 @@ public:
   //
   // Debugging support
   //
-  void print(std::ostream &OS, const TargetMachine &TM) const;
+  void print(std::ostream &OS, const TargetMachine *TM) const;
   void dump() const;
   friend std::ostream& operator<<(std::ostream& os, const MachineInstr& minstr);
 
index 91df40687cafa5930d908d71a8fc15c071a8cc18..196d6944b7ea51e63e2f2c4ca48efafa5de73b39 100644 (file)
@@ -179,7 +179,7 @@ bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) {
             for (MachineBasicBlock::iterator mii = mbbi->begin(),
                      mie = mbbi->end(); mii != mie; ++mii) {
                 std::cerr << getInstructionIndex(mii) << '\t';
-                mii->print(std::cerr, *tm_);
+                mii->print(std::cerr, tm_);
             }
         });
 
@@ -427,7 +427,7 @@ void LiveIntervals::computeIntervals()
             const TargetInstrDescriptor& tid =
                 tm_->getInstrInfo()->get(mi->getOpcode());
             DEBUG(std::cerr << getInstructionIndex(mi) << "\t";
-                  mi->print(std::cerr, *tm_));
+                  mi->print(std::cerr, tm_));
 
             // handle implicit defs
             for (const unsigned* id = tid.ImplicitDefs; *id; ++id)
@@ -467,7 +467,7 @@ void LiveIntervals::joinIntervals()
              mi != mie; ++mi) {
             const TargetInstrDescriptor& tid = tii.get(mi->getOpcode());
             DEBUG(std::cerr << getInstructionIndex(mi) << '\t';
-                  mi->print(std::cerr, *tm_););
+                  mi->print(std::cerr, tm_););
 
             // we only join virtual registers with allocatable
             // physical registers since we do not have liveness information
index 462c562659607ed407c8bf3c7945c2f6a10c34a4..f4ef3ee21e3cdc1642234d2b08fc8e7e41aa3a24 100644 (file)
@@ -105,6 +105,6 @@ void MachineBasicBlock::print(std::ostream &OS) const
          << ", LLVM BB @" << (const void*) LBB << "):\n";
     for (const_iterator I = begin(); I != end(); ++I) {
         OS << "\t";
-        I->print(OS, getParent()->getTarget());
+        I->print(OS, &getParent()->getTarget());
     }
 }
index f1a5c3ec525f0c7faa4530f8900abf4476b0abff..3f7e713ca01287b3f992d66c1bd38fa9e346b3c6 100644 (file)
@@ -235,8 +235,14 @@ static inline void OutputReg(std::ostream &os, unsigned RegNo,
 }
 
 static void print(const MachineOperand &MO, std::ostream &OS,
-                  const TargetMachine &TM) {
-  const MRegisterInfo *MRI = TM.getRegisterInfo();
+                  const TargetMachine *TM) {
+ const MRegisterInfo *MRI = 0;
+  
+ if(TM)
+   MRI = TM->getRegisterInfo();
+  
+
   bool CloseParen = true;
   if (MO.isHiBits32())
     OS << "%lm(";
@@ -313,7 +319,7 @@ static void print(const MachineOperand &MO, std::ostream &OS,
     OS << ")";
 }
 
-void MachineInstr::print(std::ostream &OS, const TargetMachine &TM) const {
+void MachineInstr::print(std::ostream &OS, const TargetMachine *TM) const {
   unsigned StartOp = 0;
 
    // Specialize printing if op#0 is definition
@@ -322,7 +328,11 @@ void MachineInstr::print(std::ostream &OS, const TargetMachine &TM) const {
     OS << " = ";
     ++StartOp;   // Don't print this operand again!
   }
-  OS << TM.getInstrInfo()->getName(getOpcode());
+
+  //Must check if Target machine is not null because machine BB could not
+  //be attached to a Machine function yet
+  if(TM)
+    OS << TM->getInstrInfo()->getName(getOpcode());
   
   for (unsigned i = StartOp, e = getNumOperands(); i != e; ++i) {
     const MachineOperand& mop = getOperand(i);
@@ -361,7 +371,10 @@ std::ostream &operator<<(std::ostream &os, const MachineInstr &MI) {
   // info for the instruction.
   if (const MachineBasicBlock *MBB = MI.getParent()) {
     const MachineFunction *MF = MBB->getParent();
-    MI.print(os, MF->getTarget());
+    if(MF)
+      MI.print(os, &MF->getTarget());
+    else
+      MI.print(os, 0);
     return os;
   }
 
index 4e825b233e3c5b38cdd18f4e674247babd50b3a1..ad46bbfec1de5607a4954ce18936f6d77781f14f 100644 (file)
@@ -177,7 +177,7 @@ void RegAllocSimple::AllocateBasicBlock(MachineBasicBlock &MBB) {
         unsigned virtualReg = (unsigned) op.getReg();
         DEBUG(std::cerr << "op: " << op << "\n");
         DEBUG(std::cerr << "\t inst[" << i << "]: ";
-              MI->print(std::cerr, *TM));
+              MI->print(std::cerr, TM));
         
         // make sure the same virtual register maps to the same physical
         // register in any given instruction
index 066260c241afa560d4cb71f4a48bde244621c904..2190f2162e47afb72da32d1730955b8454f1e871 100644 (file)
@@ -98,7 +98,7 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
 
             ++numTwoAddressInstrs;
 
-            DEBUG(std::cerr << '\t'; mi->print(std::cerr, TM));
+            DEBUG(std::cerr << '\t'; mi->print(std::cerr, &TM));
 
             assert(mi->getOperand(1).isRegister() &&
                    mi->getOperand(1).getReg() &&
@@ -140,7 +140,7 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
 
                 MachineBasicBlock::iterator prevMi = prior(mi);
                 DEBUG(std::cerr << "\t\tprepend:\t";
-                      prevMi->print(std::cerr, TM));
+                      prevMi->print(std::cerr, &TM));
 
                 if (LV) {
                     // update live variables for regA
@@ -170,7 +170,7 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
             mi->RemoveOperand(1);
 
             DEBUG(std::cerr << "\t\trewrite to:\t";
-                  mi->print(std::cerr, TM));
+                  mi->print(std::cerr, &TM));
         }
     }
 
index 8fc687dcc07aa35252fc84ac647fb7b10392c187..e22d72c8fc427efd5f52a280e33e8bf236b3438b 100644 (file)
@@ -149,7 +149,7 @@ namespace {
                                     mf.getSSARegMap()->getRegClass(virtReg));
                                 loaded[virtReg] = true;
                                 DEBUG(std::cerr << '\t';
-                                      prior(mii)->print(std::cerr, tm));
+                                      prior(mii)->print(std::cerr, &tm));
                                 ++numLoads;
                             }
                             if (mop.isDef() &&
@@ -165,7 +165,7 @@ namespace {
                             mii->SetMachineOperandReg(i, physReg);
                         }
                     }
-                    DEBUG(std::cerr << '\t'; mii->print(std::cerr, tm));
+                    DEBUG(std::cerr << '\t'; mii->print(std::cerr, &tm));
                     loaded.clear();
                 }
             }
@@ -231,9 +231,9 @@ namespace {
                                           mri_->getRegClass(physReg));
                 ++numStores;
                 DEBUG(std::cerr << "added: ";
-                      prior(nextLastRef)->print(std::cerr, *tm_);
+                      prior(nextLastRef)->print(std::cerr, tm_);
                       std::cerr << "after: ";
-                      lastDef->print(std::cerr, *tm_));
+                      lastDef->print(std::cerr, tm_));
                 lastDef_[virtReg] = 0;
             }
             p2vMap_[physReg] = 0;
@@ -263,7 +263,7 @@ namespace {
                                                mri_->getRegClass(physReg));
                     ++numLoads;
                     DEBUG(std::cerr << "added: ";
-                          prior(mii)->print(std::cerr, *tm_));
+                          prior(mii)->print(std::cerr, tm_));
                     lastDef_[virtReg] = mii;
                 }
             }
@@ -339,7 +339,7 @@ namespace {
                         }
                 }
 
-                DEBUG(std::cerr << '\t'; mii->print(std::cerr, *tm_));
+                DEBUG(std::cerr << '\t'; mii->print(std::cerr, tm_));
             }
 
             for (unsigned i = 1, e = p2vMap_.size(); i != e; ++i)
index a56e071cf1457fcc79880b25f1fe3ec81a5092d3..fa2632f6fa8341d684912fb13b2a1c84694e60e6 100644 (file)
@@ -194,7 +194,7 @@ bool FPS::processBasicBlock(MachineFunction &MF, MachineBasicBlock &BB) {
 
     ++NumFP;  // Keep track of # of pseudo instrs
     DEBUG(std::cerr << "\nFPInst:\t";
-         MI->print(std::cerr, MF.getTarget()));
+         MI->print(std::cerr, &(MF.getTarget())));
 
     // Get dead variables list now because the MI pointer may be deleted as part
     // of processing!
@@ -242,7 +242,7 @@ bool FPS::processBasicBlock(MachineFunction &MF, MachineBasicBlock &BB) {
         // Rewind to first instruction newly inserted.
         while (Start != BB.begin() && prior(Start) != PrevI) --Start;
         std::cerr << "Inserted instructions:\n\t";
-        Start->print(std::cerr, MF.getTarget());
+        Start->print(std::cerr, &MF.getTarget());
         while (++Start != next(I));
       }
       dumpStack();
index 2a9ba83b4edcf8aec76b21e67d4df898f0847614..cfab9b196db01c5cbc49738ccc7522a49d5ef1a5 100644 (file)
@@ -936,7 +936,7 @@ void Printer::printMachineInstruction(const MachineInstr *MI) {
     return;
   }
   default:
-    O << "\tUNKNOWN FORM:\t\t-"; MI->print(O, TM); break;
+    O << "\tUNKNOWN FORM:\t\t-"; MI->print(O, &TM); break;
   }
 }
 
index 2a9ba83b4edcf8aec76b21e67d4df898f0847614..cfab9b196db01c5cbc49738ccc7522a49d5ef1a5 100644 (file)
@@ -936,7 +936,7 @@ void Printer::printMachineInstruction(const MachineInstr *MI) {
     return;
   }
   default:
-    O << "\tUNKNOWN FORM:\t\t-"; MI->print(O, TM); break;
+    O << "\tUNKNOWN FORM:\t\t-"; MI->print(O, &TM); break;
   }
 }
 
index a56e071cf1457fcc79880b25f1fe3ec81a5092d3..fa2632f6fa8341d684912fb13b2a1c84694e60e6 100644 (file)
@@ -194,7 +194,7 @@ bool FPS::processBasicBlock(MachineFunction &MF, MachineBasicBlock &BB) {
 
     ++NumFP;  // Keep track of # of pseudo instrs
     DEBUG(std::cerr << "\nFPInst:\t";
-         MI->print(std::cerr, MF.getTarget()));
+         MI->print(std::cerr, &(MF.getTarget())));
 
     // Get dead variables list now because the MI pointer may be deleted as part
     // of processing!
@@ -242,7 +242,7 @@ bool FPS::processBasicBlock(MachineFunction &MF, MachineBasicBlock &BB) {
         // Rewind to first instruction newly inserted.
         while (Start != BB.begin() && prior(Start) != PrevI) --Start;
         std::cerr << "Inserted instructions:\n\t";
-        Start->print(std::cerr, MF.getTarget());
+        Start->print(std::cerr, &MF.getTarget());
         while (++Start != next(I));
       }
       dumpStack();