[llvm-commits] [llvm] r48246 - in /llvm/trunk/lib/CodeGen: LiveIntervalAnalysis.cpp VirtRegMap.cpp VirtRegMap.h

Evan Cheng evan.cheng at apple.com
Tue Mar 11 14:34:47 PDT 2008


Author: evancheng
Date: Tue Mar 11 16:34:46 2008
New Revision: 48246

URL: http://llvm.org/viewvc/llvm-project?rev=48246&view=rev
Log:
Transfer physical register spill info when load / store folding happens.

Modified:
    llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp
    llvm/trunk/lib/CodeGen/VirtRegMap.cpp
    llvm/trunk/lib/CodeGen/VirtRegMap.h

Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=48246&r1=48245&r2=48246&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original)
+++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Tue Mar 11 16:34:46 2008
@@ -779,6 +779,7 @@
       vrm.virtFolded(Reg, MI, fmi, (VirtRegMap::ModRef)MRInfo);
     vrm.transferSpillPts(MI, fmi);
     vrm.transferRestorePts(MI, fmi);
+    vrm.transferEmergencySpills(MI, fmi);
     mi2iMap_.erase(MI);
     i2miMap_[InstrIdx /InstrSlots::NUM] = fmi;
     mi2iMap_[fmi] = InstrIdx;

Modified: llvm/trunk/lib/CodeGen/VirtRegMap.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/VirtRegMap.cpp?rev=48246&r1=48245&r2=48246&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/VirtRegMap.cpp (original)
+++ llvm/trunk/lib/CodeGen/VirtRegMap.cpp Tue Mar 11 16:34:46 2008
@@ -35,6 +35,7 @@
 using namespace llvm;
 
 STATISTIC(NumSpills, "Number of register spills");
+STATISTIC(NumPSpills,"Number of physical register spills");
 STATISTIC(NumReMats, "Number of re-materialization");
 STATISTIC(NumDRM   , "Number of re-materializable defs elided");
 STATISTIC(NumStores, "Number of stores added");
@@ -1079,7 +1080,7 @@
         TII->loadRegFromStackSlot(MBB, next(MII), PhysReg, SS, RC);
         MachineInstr *LoadMI = next(MII);
         VRM.addSpillSlotUse(SS, LoadMI);
-        ++NumSpills;
+        ++NumPSpills;
       }
     }
 

Modified: llvm/trunk/lib/CodeGen/VirtRegMap.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/VirtRegMap.h?rev=48246&r1=48245&r2=48246&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/VirtRegMap.h (original)
+++ llvm/trunk/lib/CodeGen/VirtRegMap.h Tue Mar 11 16:34:46 2008
@@ -268,6 +268,8 @@
       }
     }
 
+    /// @brief - transfer spill point information from one instruction to
+    /// another.
     void transferSpillPts(MachineInstr *Old, MachineInstr *New) {
       std::map<MachineInstr*,std::vector<std::pair<unsigned,bool> > >::iterator
         I = SpillPt2VirtMap.find(Old);
@@ -343,6 +345,21 @@
       return EmergencySpillMap[MI];
     }
 
+    /// @brief - transfer emergency spill information from one instruction to
+    /// another.
+    void transferEmergencySpills(MachineInstr *Old, MachineInstr *New) {
+      std::map<MachineInstr*,std::vector<unsigned> >::iterator I =
+        EmergencySpillMap.find(Old);
+      if (I == EmergencySpillMap.end())
+        return;
+      while (!I->second.empty()) {
+        unsigned virtReg = I->second.back();
+        I->second.pop_back();
+        addEmergencySpill(virtReg, New);
+      }
+      EmergencySpillMap.erase(I);
+    }
+
     /// @brief return or get a emergency spill slot for the register class.
     int getEmergencySpillSlot(const TargetRegisterClass *RC);
 





More information about the llvm-commits mailing list