[llvm-commits] [llvm] r46016 - in /llvm/trunk/lib: CodeGen/LiveVariables.cpp CodeGen/PHIElimination.cpp CodeGen/TwoAddressInstructionPass.cpp Target/ARM/ARMInstrInfo.cpp

Owen Anderson resistor at mac.com
Tue Jan 15 14:02:47 PST 2008


Author: resistor
Date: Tue Jan 15 16:02:46 2008
New Revision: 46016

URL: http://llvm.org/viewvc/llvm-project?rev=46016&view=rev
Log:
Remove DefInst from LiveVariables::VarInfo.  Use the facilities on MachineRegisterInfo instead.

Modified:
    llvm/trunk/lib/CodeGen/LiveVariables.cpp
    llvm/trunk/lib/CodeGen/PHIElimination.cpp
    llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp
    llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp

Modified: llvm/trunk/lib/CodeGen/LiveVariables.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveVariables.cpp?rev=46016&r1=46015&r2=46016&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/LiveVariables.cpp (original)
+++ llvm/trunk/lib/CodeGen/LiveVariables.cpp Tue Jan 15 16:02:46 2008
@@ -43,11 +43,6 @@
 static RegisterPass<LiveVariables> X("livevars", "Live Variable Analysis");
 
 void LiveVariables::VarInfo::dump() const {
-  cerr << "Register Defined by: ";
-  if (DefInst) 
-    cerr << *DefInst;
-  else
-    cerr << "<null>\n";
   cerr << "  Alive in blocks: ";
   for (unsigned i = 0, e = AliveBlocks.size(); i != e; ++i)
     if (AliveBlocks[i]) cerr << i << ", ";
@@ -117,11 +112,13 @@
   return false;
 }
 
-void LiveVariables::MarkVirtRegAliveInBlock(VarInfo &VRInfo,
+void LiveVariables::MarkVirtRegAliveInBlock(unsigned reg,
                                             MachineBasicBlock *MBB,
                                     std::vector<MachineBasicBlock*> &WorkList) {
   unsigned BBNum = MBB->getNumber();
 
+  VarInfo& VRInfo = getVarInfo(reg);
+  
   // Check to see if this basic block is one of the killing blocks.  If so,
   // remove it...
   for (unsigned i = 0, e = VRInfo.Kills.size(); i != e; ++i)
@@ -129,8 +126,9 @@
       VRInfo.Kills.erase(VRInfo.Kills.begin()+i);  // Erase entry
       break;
     }
-
-  if (MBB == VRInfo.DefInst->getParent()) return;  // Terminate recursion
+  
+  MachineRegisterInfo& MRI = MBB->getParent()->getRegInfo();
+  if (MBB == MRI.getVRegDef(reg)->getParent()) return;  // Terminate recursion
 
   if (VRInfo.AliveBlocks[BBNum])
     return;  // We already know the block is live
@@ -143,24 +141,26 @@
     WorkList.push_back(*PI);
 }
 
-void LiveVariables::MarkVirtRegAliveInBlock(VarInfo &VRInfo,
+void LiveVariables::MarkVirtRegAliveInBlock(unsigned reg,
                                             MachineBasicBlock *MBB) {
   std::vector<MachineBasicBlock*> WorkList;
-  MarkVirtRegAliveInBlock(VRInfo, MBB, WorkList);
+  MarkVirtRegAliveInBlock(reg, MBB, WorkList);
   while (!WorkList.empty()) {
     MachineBasicBlock *Pred = WorkList.back();
     WorkList.pop_back();
-    MarkVirtRegAliveInBlock(VRInfo, Pred, WorkList);
+    MarkVirtRegAliveInBlock(reg, Pred, WorkList);
   }
 }
 
 
-void LiveVariables::HandleVirtRegUse(VarInfo &VRInfo, MachineBasicBlock *MBB,
+void LiveVariables::HandleVirtRegUse(unsigned reg, MachineBasicBlock *MBB,
                                      MachineInstr *MI) {
-  assert(VRInfo.DefInst && "Register use before def!");
+  MachineRegisterInfo& MRI = MBB->getParent()->getRegInfo();
+  assert(MRI.getVRegDef(reg) && "Register use before def!");
 
   unsigned BBNum = MBB->getNumber();
 
+  VarInfo& VRInfo = getVarInfo(reg);
   VRInfo.UsedBlocks[BBNum] = true;
   VRInfo.NumUses++;
 
@@ -177,7 +177,7 @@
     assert(VRInfo.Kills[i]->getParent() != MBB && "entry should be at end!");
 #endif
 
-  assert(MBB != VRInfo.DefInst->getParent() &&
+  assert(MBB != MRI.getVRegDef(reg)->getParent() &&
          "Should have kill for defblock!");
 
   // Add a new kill entry for this basic block.
@@ -190,7 +190,7 @@
   // Update all dominating blocks to mark them known live.
   for (MachineBasicBlock::const_pred_iterator PI = MBB->pred_begin(),
          E = MBB->pred_end(); PI != E; ++PI)
-    MarkVirtRegAliveInBlock(VRInfo, *PI);
+    MarkVirtRegAliveInBlock(reg, *PI);
 }
 
 bool LiveVariables::addRegisterKilled(unsigned IncomingReg, MachineInstr *MI,
@@ -489,7 +489,7 @@
         MachineOperand &MO = MI->getOperand(i);
         if (MO.isRegister() && MO.isUse() && MO.getReg()) {
           if (MRegisterInfo::isVirtualRegister(MO.getReg())){
-            HandleVirtRegUse(getVarInfo(MO.getReg()), MBB, MI);
+            HandleVirtRegUse(MO.getReg(), MBB, MI);
           } else if (MRegisterInfo::isPhysicalRegister(MO.getReg()) &&
                      !ReservedRegisters[MO.getReg()]) {
             HandlePhysRegUse(MO.getReg(), MI);
@@ -503,9 +503,6 @@
         if (MO.isRegister() && MO.isDef() && MO.getReg()) {
           if (MRegisterInfo::isVirtualRegister(MO.getReg())) {
             VarInfo &VRInfo = getVarInfo(MO.getReg());
-
-            assert(VRInfo.DefInst == 0 && "Variable multiply defined!");
-            VRInfo.DefInst = MI;
             // Defaults to dead
             VRInfo.Kills.push_back(MI);
           } else if (MRegisterInfo::isPhysicalRegister(MO.getReg()) &&
@@ -525,11 +522,8 @@
 
       for (SmallVector<unsigned, 4>::iterator I = VarInfoVec.begin(),
              E = VarInfoVec.end(); I != E; ++I) {
-        VarInfo& VRInfo = getVarInfo(*I);
-        assert(VRInfo.DefInst && "Register use before def (or no def)!");
-
         // Only mark it alive only in the block we are representing.
-        MarkVirtRegAliveInBlock(VRInfo, MBB);
+        MarkVirtRegAliveInBlock(*I, MBB);
       }
     }
 
@@ -566,9 +560,11 @@
   // Convert and transfer the dead / killed information we have gathered into
   // VirtRegInfo onto MI's.
   //
+  MachineRegisterInfo& MRI = mf.getRegInfo();
   for (unsigned i = 0, e1 = VirtRegInfo.size(); i != e1; ++i)
     for (unsigned j = 0, e2 = VirtRegInfo[i].Kills.size(); j != e2; ++j) {
-      if (VirtRegInfo[i].Kills[j] == VirtRegInfo[i].DefInst)
+      if (VirtRegInfo[i].Kills[j] == MRI.getVRegDef(i + 
+                                           MRegisterInfo::FirstVirtualRegister))
         addRegisterDead(i + MRegisterInfo::FirstVirtualRegister,
                         VirtRegInfo[i].Kills[j], RegInfo);
       else
@@ -612,9 +608,6 @@
           MO.setIsDead(false);
           addVirtualRegisterDead(Reg, NewMI);
         }
-        // Update the defining instruction.
-        if (VI.DefInst == OldMI)
-          VI.DefInst = NewMI;
       }
       if (MO.isKill()) {
         MO.setIsKill(false);

Modified: llvm/trunk/lib/CodeGen/PHIElimination.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PHIElimination.cpp?rev=46016&r1=46015&r2=46016&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/PHIElimination.cpp (original)
+++ llvm/trunk/lib/CodeGen/PHIElimination.cpp Tue Jan 15 16:02:46 2008
@@ -165,10 +165,6 @@
       LV->addVirtualRegisterDead(DestReg, PHICopy);
       LV->removeVirtualRegistersDead(MPhi);
     }
-    
-    // Realize that the destination register is defined by the PHI copy now, not
-    // the PHI itself.
-    LV->getVarInfo(DestReg).DefInst = PHICopy;
 
     LV->getVarInfo(IncomingReg).UsedBlocks[MBB.getNumber()] = true;
   }

Modified: llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp?rev=46016&r1=46015&r2=46016&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp (original)
+++ llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp Tue Jan 15 16:02:46 2008
@@ -199,10 +199,6 @@
           MachineBasicBlock::iterator prevMi = prior(mi);
           DOUT << "\t\tprepend:\t"; DEBUG(prevMi->print(*cerr.stream(), &TM));
 
-          // Update live variables for regA
-          LiveVariables::VarInfo& varInfo = LV.getVarInfo(regA);
-          varInfo.DefInst = prevMi;
-
           // update live variables for regB
           LiveVariables::VarInfo& varInfoB = LV.getVarInfo(regB);
           // regB is used in this BB.

Modified: llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp?rev=46016&r1=46015&r2=46016&view=diff

==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMInstrInfo.cpp Tue Jan 15 16:02:46 2008
@@ -289,9 +289,6 @@
         MachineInstr *NewMI = (Reg == WBReg) ? UpdateMI : MemMI;
         if (MO.isDead())
           LV.addVirtualRegisterDead(Reg, NewMI);
-        // Update the defining instruction.
-        if (VI.DefInst == MI)
-          VI.DefInst = NewMI;
       }
       if (MO.isUse() && MO.isKill()) {
         for (unsigned j = 0; j < 2; ++j) {





More information about the llvm-commits mailing list