[llvm-commits] CVS: llvm/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp PhyRegAlloc.cpp

Chris Lattner lattner at cs.uiuc.edu
Mon Oct 28 13:23:01 PST 2002


Changes in directory llvm/lib/CodeGen/RegAlloc:

LiveRangeInfo.cpp updated: 1.33 -> 1.34
PhyRegAlloc.cpp updated: 1.84 -> 1.85

---
Log message:

Eliminate usage of MachineBasicBlock::get


---
Diffs of the changes:

Index: llvm/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp
diff -u llvm/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp:1.33 llvm/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp:1.34
--- llvm/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp:1.33	Sun Oct 27 22:45:27 2002
+++ llvm/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp	Mon Oct 28 13:22:04 2002
@@ -8,7 +8,7 @@
 #include "llvm/CodeGen/RegAllocCommon.h"
 #include "llvm/CodeGen/RegClass.h"
 #include "llvm/CodeGen/MachineInstr.h"
-#include "llvm/CodeGen/MachineBasicBlock.h"
+#include "llvm/CodeGen/MachineFunction.h"
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Target/MachineInstrInfo.h"
 #include "llvm/Function.h"
@@ -146,13 +146,13 @@
   // 
   // Also, find CALL and RETURN instructions, which need extra work.
   //
-  for (Function::const_iterator BBI=Meth->begin(); BBI != Meth->end(); ++BBI){
-    // get the vector of machine instructions for this basic block.
-    MachineBasicBlock& MIVec = MachineBasicBlock::get(BBI);
+  MachineFunction &MF = MachineFunction::get(Meth);
+  for (MachineFunction::iterator BBI = MF.begin(); BBI != MF.end(); ++BBI) {
+    MachineBasicBlock &MBB = *BBI;
 
     // iterate over all the machine instructions in BB
-    for(MachineBasicBlock::iterator MInstIterator = MIVec.begin();
-        MInstIterator != MIVec.end(); ++MInstIterator) {  
+    for(MachineBasicBlock::iterator MInstIterator = MBB.begin();
+        MInstIterator != MBB.end(); ++MInstIterator) {  
       MachineInstr *MInst = *MInstIterator; 
 
       // If the machine instruction is a  call/return instruction, add it to
@@ -248,35 +248,30 @@
   if(DEBUG_RA >= RA_DEBUG_LiveRanges) 
     cerr << "\nCoalescing LRs ...\n";
 
-  for(Function::const_iterator BBI = Meth->begin(), BBE = Meth->end();
-      BBI != BBE; ++BBI) {
-
-    // get the iterator for machine instructions
-    const MachineBasicBlock& MIVec = MachineBasicBlock::get(BBI);
-    MachineBasicBlock::const_iterator MInstIterator = MIVec.begin();
+  MachineFunction &MF = MachineFunction::get(Meth);
+  for (MachineFunction::iterator BBI = MF.begin(); BBI != MF.end(); ++BBI) {
+    MachineBasicBlock &MBB = *BBI;
 
     // iterate over all the machine instructions in BB
-    for( ; MInstIterator != MIVec.end(); ++MInstIterator) {  
-      const MachineInstr * MInst = *MInstIterator; 
+    for(MachineBasicBlock::iterator MII = MBB.begin(); MII != MBB.end(); ++MII){
+      const MachineInstr *MI = *MII;
 
       if( DEBUG_RA >= RA_DEBUG_LiveRanges) {
 	cerr << " *Iterating over machine instr ";
-	MInst->dump();
+	MI->dump();
 	cerr << "\n";
       }
 
-
       // iterate over  MI operands to find defs
-      for(MachineInstr::const_val_op_iterator DefI = MInst->begin(),
-            DefE = MInst->end(); DefI != DefE; ++DefI) {
+      for(MachineInstr::const_val_op_iterator DefI = MI->begin(),
+            DefE = MI->end(); DefI != DefE; ++DefI) {
 	if (DefI.isDef()) {            // iff this operand is a def
 	  LiveRange *LROfDef = getLiveRangeForValue( *DefI );
 	  RegClass *RCOfDef = LROfDef->getRegClass();
 
-	  MachineInstr::const_val_op_iterator UseI = MInst->begin(),
-            UseE = MInst->end();
-	  for( ; UseI != UseE; ++UseI){ // for all uses
-
+	  MachineInstr::const_val_op_iterator UseI = MI->begin(),
+            UseE = MI->end();
+	  for( ; UseI != UseE; ++UseI) { // for all uses
  	    LiveRange *LROfUse = getLiveRangeForValue( *UseI );
 	    if (!LROfUse) {             // if LR of use is not found
 	      //don't warn about labels


Index: llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp
diff -u llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp:1.84 llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp:1.85
--- llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp:1.84	Sun Oct 27 22:45:27 2002
+++ llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp	Mon Oct 28 13:22:04 2002
@@ -77,16 +77,13 @@
 //----------------------------------------------------------------------------
 PhyRegAlloc::PhyRegAlloc(Function *F, const TargetMachine& tm, 
 			 FunctionLiveVarInfo *Lvi, LoopInfo *LDC) 
-                       :  TM(tm), Meth(F),
-                          mcInfo(MachineFunction::get(F)),
-                          LVI(Lvi), LRI(F, tm, RegClassList), 
-			  MRI(tm.getRegInfo()),
-                          NumOfRegClasses(MRI.getNumOfRegClasses()),
-			  LoopDepthCalc(LDC) {
+  :  TM(tm), Fn(F), MF(MachineFunction::get(F)), LVI(Lvi),
+     LRI(F, tm, RegClassList), MRI(tm.getRegInfo()),
+     NumOfRegClasses(MRI.getNumOfRegClasses()), LoopDepthCalc(LDC) {
 
   // create each RegisterClass and put in RegClassList
   //
-  for (unsigned rc=0; rc < NumOfRegClasses; rc++)  
+  for (unsigned rc=0; rc != NumOfRegClasses; rc++)  
     RegClassList.push_back(new RegClass(F, MRI.getMachineRegClass(rc),
                                         &ResColList));
 }
@@ -266,29 +263,28 @@
     cerr << "Creating interference graphs ...\n";
 
   unsigned BBLoopDepthCost;
-  for (Function::const_iterator BBI = Meth->begin(), BBE = Meth->end();
+  for (MachineFunction::iterator BBI = MF.begin(), BBE = MF.end();
        BBI != BBE; ++BBI) {
+    const MachineBasicBlock &MBB = *BBI;
+    const BasicBlock *BB = MBB.getBasicBlock();
 
     // find the 10^(loop_depth) of this BB 
     //
-    BBLoopDepthCost = (unsigned)pow(10.0, LoopDepthCalc->getLoopDepth(BBI));
+    BBLoopDepthCost = (unsigned)pow(10.0, LoopDepthCalc->getLoopDepth(BB));
 
     // get the iterator for machine instructions
     //
-    const MachineBasicBlock& MIVec = MachineBasicBlock::get(BBI);
-    MachineBasicBlock::const_iterator MII = MIVec.begin();
+    MachineBasicBlock::const_iterator MII = MBB.begin();
 
     // iterate over all the machine instructions in BB
     //
-    for ( ; MII != MIVec.end(); ++MII) {  
-
-      const MachineInstr *MInst = *MII; 
+    for ( ; MII != MBB.end(); ++MII) {
+      const MachineInstr *MInst = *MII;
 
       // get the LV set after the instruction
       //
-      const ValueSet &LVSetAI = LVI->getLiveVarSetAfterMInst(MInst, BBI);
-    
-      const bool isCallInst = TM.getInstrInfo().isCall(MInst->getOpCode());
+      const ValueSet &LVSetAI = LVI->getLiveVarSetAfterMInst(MInst, BB);
+      bool isCallInst = TM.getInstrInfo().isCall(MInst->getOpCode());
 
       if (isCallInst ) {
 	// set the isCallInterference flag of each live range wich extends
@@ -299,7 +295,6 @@
 	setCallInterferences(MInst, &LVSetAI);
       }
 
-
       // iterate over all MI operands to find defs
       //
       for (MachineInstr::const_val_op_iterator OpI = MInst->begin(),
@@ -394,9 +389,9 @@
 
 void PhyRegAlloc::addInterferencesForArgs() {
   // get the InSet of root BB
-  const ValueSet &InSet = LVI->getInSetOfBB(&Meth->front());  
+  const ValueSet &InSet = LVI->getInSetOfBB(&Fn->front());  
 
-  for (Function::const_aiterator AI=Meth->abegin(); AI != Meth->aend(); ++AI) {
+  for (Function::const_aiterator AI = Fn->abegin(); AI != Fn->aend(); ++AI) {
     // add interferences between args and LVars at start 
     addInterference(AI, &InSet, false);
     
@@ -420,25 +415,25 @@
 //-----------------------------
 inline void
 InsertBefore(MachineInstr* newMI,
-             MachineBasicBlock& MIVec,
+             MachineBasicBlock& MBB,
              MachineBasicBlock::iterator& MII)
 {
-  MII = MIVec.insert(MII, newMI);
+  MII = MBB.insert(MII, newMI);
   ++MII;
 }
 
 inline void
 InsertAfter(MachineInstr* newMI,
-            MachineBasicBlock& MIVec,
+            MachineBasicBlock& MBB,
             MachineBasicBlock::iterator& MII)
 {
   ++MII;    // insert before the next instruction
-  MII = MIVec.insert(MII, newMI);
+  MII = MBB.insert(MII, newMI);
 }
 
 inline void
 SubstituteInPlace(MachineInstr* newMI,
-                  MachineBasicBlock& MIVec,
+                  MachineBasicBlock& MBB,
                   MachineBasicBlock::iterator MII)
 {
   *MII = newMI;
@@ -446,7 +441,7 @@
 
 inline void
 PrependInstructions(vector<MachineInstr *> &IBef,
-                    MachineBasicBlock& MIVec,
+                    MachineBasicBlock& MBB,
                     MachineBasicBlock::iterator& MII,
                     const std::string& msg)
 {
@@ -460,14 +455,14 @@
             if (OrigMI) cerr << "For MInst:\n  " << *OrigMI;
             cerr << msg << "PREPENDed instr:\n  " << **AdIt << "\n";
           }
-          InsertBefore(*AdIt, MIVec, MII);
+          InsertBefore(*AdIt, MBB, MII);
         }
     }
 }
 
 inline void
 AppendInstructions(std::vector<MachineInstr *> &IAft,
-                   MachineBasicBlock& MIVec,
+                   MachineBasicBlock& MBB,
                    MachineBasicBlock::iterator& MII,
                    const std::string& msg)
 {
@@ -481,34 +476,30 @@
             if (OrigMI) cerr << "For MInst:\n  " << *OrigMI;
             cerr << msg << "APPENDed instr:\n  "  << **AdIt << "\n";
           }
-          InsertAfter(*AdIt, MIVec, MII);
+          InsertAfter(*AdIt, MBB, MII);
         }
     }
 }
 
 
-void PhyRegAlloc::updateMachineCode()
-{
-  MachineBasicBlock& MIVec = MachineBasicBlock::get(&Meth->getEntryNode());
-    
+void PhyRegAlloc::updateMachineCode() {
   // Insert any instructions needed at method entry
-  MachineBasicBlock::iterator MII = MIVec.begin();
-  PrependInstructions(AddedInstrAtEntry.InstrnsBefore, MIVec, MII,
+  MachineBasicBlock::iterator MII = MF.front().begin();
+  PrependInstructions(AddedInstrAtEntry.InstrnsBefore, MF.front(), MII,
                       "At function entry: \n");
   assert(AddedInstrAtEntry.InstrnsAfter.empty() &&
          "InstrsAfter should be unnecessary since we are just inserting at "
          "the function entry point here.");
   
-  for (Function::const_iterator BBI = Meth->begin(), BBE = Meth->end();
+  for (MachineFunction::iterator BBI = MF.begin(), BBE = MF.end();
        BBI != BBE; ++BBI) {
 
     // iterate over all the machine instructions in BB
-    MachineBasicBlock &MIVec = MachineBasicBlock::get(BBI);
-    for (MachineBasicBlock::iterator MII = MIVec.begin();
-        MII != MIVec.end(); ++MII) {  
-      
+    MachineBasicBlock &MBB = *BBI;
+    for (MachineBasicBlock::iterator MII = MBB.begin();
+         MII != MBB.end(); ++MII) {  
+
       MachineInstr *MInst = *MII; 
-      
       unsigned Opcode =  MInst->getOpCode();
     
       // do not process Phis
@@ -516,20 +507,19 @@
 	continue;
 
       // Reset tmp stack positions so they can be reused for each machine instr.
-      mcInfo.popAllTempValues(TM);  
+      MF.popAllTempValues(TM);  
 	
       // Now insert speical instructions (if necessary) for call/return
       // instructions. 
       //
       if (TM.getInstrInfo().isCall(Opcode) ||
-	  TM.getInstrInfo().isReturn(Opcode)) {
-
-	AddedInstrns &AI = AddedInstrMap[MInst];
+          TM.getInstrInfo().isReturn(Opcode)) {
+        AddedInstrns &AI = AddedInstrMap[MInst];
 	
-	if (TM.getInstrInfo().isCall(Opcode))
-	  MRI.colorCallArgs(MInst, LRI, &AI, *this, BBI);
-	else if (TM.getInstrInfo().isReturn(Opcode))
-	  MRI.colorRetValue(MInst, LRI, &AI);
+        if (TM.getInstrInfo().isCall(Opcode))
+          MRI.colorCallArgs(MInst, LRI, &AI, *this, MBB.getBasicBlock());
+        else if (TM.getInstrInfo().isReturn(Opcode))
+          MRI.colorRetValue(MInst, LRI, &AI);
       }
       
       // Set the registers for operands in the machine instruction
@@ -553,13 +543,13 @@
                   continue;
                 }
           
-              if (LR->hasColor() )
+              if (LR->hasColor())
                 MInst->SetRegForOperand(OpNum,
                                 MRI.getUnifiedRegNum(LR->getRegClass()->getID(),
                                                      LR->getColor()));
               else
                 // LR did NOT receive a color (register). Insert spill code.
-                insertCode4SpilledLR(LR, MInst, BBI, OpNum );
+                insertCode4SpilledLR(LR, MInst, MBB.getBasicBlock(), OpNum);
             }
         } // for each operand
 
@@ -573,7 +563,7 @@
       // branch because putting code before or after it would be VERY BAD!
       // 
       unsigned bumpIteratorBy = 0;
-      if (MII != MIVec.begin())
+      if (MII != MBB.begin())
         if (unsigned predDelaySlots =
             TM.getInstrInfo().getNumDelaySlots((*(MII-1))->getOpCode()))
           {
@@ -585,10 +575,10 @@
               // Current instruction is in the delay slot of a branch and it
               // needs spill code inserted before or after it.
               // Move it before the preceding branch.
-              InsertBefore(MInst, MIVec, --MII);
+              InsertBefore(MInst, MBB, --MII);
               MachineInstr* nopI =
                 new MachineInstr(TM.getInstrInfo().getNOPOpCode());
-              SubstituteInPlace(nopI, MIVec, MII+1); // replace orig with NOP
+              SubstituteInPlace(nopI, MBB, MII+1); // replace orig with NOP
               --MII;                  // point to MInst in new location
               bumpIteratorBy = 2;     // later skip the branch and the NOP!
             }
@@ -598,7 +588,7 @@
       // instruction, add them now.
       //      
       if (AddedInstrMap.count(MInst)) {
-        PrependInstructions(AddedInstrMap[MInst].InstrnsBefore, MIVec, MII,"");
+        PrependInstructions(AddedInstrMap[MInst].InstrnsBefore, MBB, MII,"");
       }
       
       // If there are instructions to be added *after* this machine
@@ -627,7 +617,7 @@
 	else {
 	  // Here we can add the "instructions after" to the current
 	  // instruction since there are no delay slots for this instruction
-	  AppendInstructions(AddedInstrMap[MInst].InstrnsAfter, MIVec, MII,"");
+	  AppendInstructions(AddedInstrMap[MInst].InstrnsAfter, MBB, MII,"");
 	}  // if not delay
       }
 
@@ -667,7 +657,7 @@
   RegClass *RC = LR->getRegClass();
   const ValueSet &LVSetBef = LVI->getLiveVarSetBeforeMInst(MInst, BB);
 
-  mcInfo.pushTempValue(TM, MRI.getSpilledRegSize(RegType) );
+  MF.pushTempValue(TM, MRI.getSpilledRegSize(RegType) );
   
   vector<MachineInstr*> MIBef, MIAft;
   vector<MachineInstr*> AdIMid;
@@ -758,7 +748,7 @@
     // we couldn't find an unused register. Generate code to free up a reg by
     // saving it on stack and restoring after the instruction
     
-    int TmpOff = mcInfo.pushTempValue(TM,  MRI.getSpilledRegSize(RegType) );
+    int TmpOff = MF.pushTempValue(TM,  MRI.getSpilledRegSize(RegType) );
     
     RegU = getUniRegNotUsedByThisInst(RC, MInst);
     
@@ -950,19 +940,19 @@
 void PhyRegAlloc::printMachineCode()
 {
 
-  cerr << "\n;************** Function " << Meth->getName()
+  cerr << "\n;************** Function " << Fn->getName()
        << " *****************\n";
 
-  for (Function::const_iterator BBI = Meth->begin(), BBE = Meth->end();
+  for (MachineFunction::iterator BBI = MF.begin(), BBE = MF.end();
        BBI != BBE; ++BBI) {
-    cerr << "\n"; printLabel(BBI); cerr << ": ";
+    cerr << "\n"; printLabel(BBI->getBasicBlock()); cerr << ": ";
 
     // get the iterator for machine instructions
-    MachineBasicBlock& MIVec = MachineBasicBlock::get(BBI);
-    MachineBasicBlock::iterator MII = MIVec.begin();
+    MachineBasicBlock& MBB = *BBI;
+    MachineBasicBlock::iterator MII = MBB.begin();
 
     // iterate over all the machine instructions in BB
-    for ( ; MII != MIVec.end(); ++MII) {  
+    for ( ; MII != MBB.end(); ++MII) {  
       MachineInstr *const MInst = *MII; 
 
       cerr << "\n\t";
@@ -1038,22 +1028,18 @@
 //----------------------------------------------------------------------------
 void PhyRegAlloc::colorIncomingArgs()
 {
-  const BasicBlock &FirstBB = Meth->front();
-  const MachineInstr *FirstMI = MachineBasicBlock::get(&FirstBB).front();
-  assert(FirstMI && "No machine instruction in entry BB");
-
-  MRI.colorMethodArgs(Meth, LRI, &AddedInstrAtEntry);
+  MRI.colorMethodArgs(Fn, LRI, &AddedInstrAtEntry);
 }
 
 
 //----------------------------------------------------------------------------
 // Used to generate a label for a basic block
 //----------------------------------------------------------------------------
-void PhyRegAlloc::printLabel(const Value *const Val) {
+void PhyRegAlloc::printLabel(const Value *Val) {
   if (Val->hasName())
     cerr  << Val->getName();
   else
-    cerr << "Label" <<  Val;
+    cerr << "Label" << Val;
 }
 
 
@@ -1106,7 +1092,7 @@
     if (HMI->first && HMI->second) {
       LiveRange *L = HMI->second;      // get the LiveRange
       if (!L->hasColor()) {   //  NOTE: ** allocating the size of long Type **
-        int stackOffset = mcInfo.allocateSpilledValue(TM, Type::LongTy);
+        int stackOffset = MF.allocateSpilledValue(TM, Type::LongTy);
         L->setSpillOffFromFP(stackOffset);
         if (DEBUG_RA)
           cerr << "  LR# " << L->getUserIGNode()->getIndex()
@@ -1148,19 +1134,17 @@
     for ( unsigned rc=0; rc < NumOfRegClasses ; rc++)  
       RegClassList[rc]->printIG();       
   }
-  
 
   LRI.coalesceLRs();                    // coalesce all live ranges
-  
 
   if (DEBUG_RA >= RA_DEBUG_LiveRanges) {
     // print all LRs in all reg classes
-    for ( unsigned rc=0; rc < NumOfRegClasses  ; rc++)  
-      RegClassList[ rc ]->printIGNodeList(); 
+    for (unsigned rc=0; rc < NumOfRegClasses; rc++)
+      RegClassList[rc]->printIGNodeList();
     
     // print IGs in all register classes
-    for ( unsigned rc=0; rc < NumOfRegClasses ; rc++)  
-      RegClassList[ rc ]->printIG();       
+    for (unsigned rc=0; rc < NumOfRegClasses; rc++)
+      RegClassList[rc]->printIG();
   }
 
 
@@ -1172,14 +1156,14 @@
 
   // color all register classes using the graph coloring algo
   for (unsigned rc=0; rc < NumOfRegClasses ; rc++)  
-    RegClassList[ rc ]->colorAllRegs();    
+    RegClassList[rc]->colorAllRegs();    
 
   // Atter grpah coloring, if some LRs did not receive a color (i.e, spilled)
   // a poistion for such spilled LRs
   //
   allocateStackSpace4SpilledLRs();
 
-  mcInfo.popAllTempValues(TM);  // TODO **Check
+  MF.popAllTempValues(TM);  // TODO **Check
 
   // color incoming args - if the correct color was not received
   // insert code to copy to the correct register
@@ -1194,7 +1178,7 @@
 
   if (DEBUG_RA) {
     cerr << "\n**** Machine Code After Register Allocation:\n\n";
-    MachineFunction::get(Meth).dump();
+    MF.dump();
   }
 }
 





More information about the llvm-commits mailing list