RegisterPressure: ArrayRefize some functions for better readability. No functionality...
authorBenjamin Kramer <benny.kra@googlemail.com>
Sun, 29 Apr 2012 18:52:56 +0000 (18:52 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Sun, 29 Apr 2012 18:52:56 +0000 (18:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155795 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/RegisterPressure.cpp
lib/CodeGen/RegisterPressure.h

index 7c8f20fb05640761e3c9ce6855ad3ff33c58c8b4..51c0cda7691cbfc433a9ad96087331f1a2d50645 100644 (file)
@@ -59,28 +59,34 @@ void RegisterPressure::decrease(const TargetRegisterClass *RC,
   decreaseSetPressure(MaxSetPressure, RC, TRI);
 }
 
-/// Increase the current pressure as impacted by this physical register and bump
-/// the high water mark if needed.
-void RegPressureTracker::increasePhysRegPressure(unsigned Reg) {
-  increaseSetPressure(CurrSetPressure, P.MaxSetPressure,
-                      TRI->getMinimalPhysRegClass(Reg), TRI);
+/// Increase the current pressure as impacted by these physical registers and
+/// bump the high water mark if needed.
+void RegPressureTracker::increasePhysRegPressure(ArrayRef<unsigned> Regs) {
+  for (unsigned I = 0, E = Regs.size(); I != E; ++I)
+    increaseSetPressure(CurrSetPressure, P.MaxSetPressure,
+                        TRI->getMinimalPhysRegClass(Regs[I]), TRI);
 }
 
-/// Simply decrease the current pressure as impacted by this physcial register.
-void RegPressureTracker::decreasePhysRegPressure(unsigned Reg) {
-  decreaseSetPressure(CurrSetPressure, TRI->getMinimalPhysRegClass(Reg), TRI);
+/// Simply decrease the current pressure as impacted by these physcial
+/// registers.
+void RegPressureTracker::decreasePhysRegPressure(ArrayRef<unsigned> Regs) {
+  for (unsigned I = 0, E = Regs.size(); I != E; ++I)
+    decreaseSetPressure(CurrSetPressure, TRI->getMinimalPhysRegClass(Regs[I]),
+                        TRI);
 }
 
-/// Increase the current pressure as impacted by this virtual register and bump
-/// the high water mark if needed.
-void RegPressureTracker::increaseVirtRegPressure(unsigned Reg) {
-  increaseSetPressure(CurrSetPressure, P.MaxSetPressure,
-                      MRI->getRegClass(Reg), TRI);
+/// Increase the current pressure as impacted by these virtual registers and
+/// bump the high water mark if needed.
+void RegPressureTracker::increaseVirtRegPressure(ArrayRef<unsigned> Regs) {
+  for (unsigned I = 0, E = Regs.size(); I != E; ++I)
+    increaseSetPressure(CurrSetPressure, P.MaxSetPressure,
+                        MRI->getRegClass(Regs[I]), TRI);
 }
 
-/// Simply decrease the current pressure as impacted by this virtual register.
-void RegPressureTracker::decreaseVirtRegPressure(unsigned Reg) {
-  decreaseSetPressure(CurrSetPressure, MRI->getRegClass(Reg), TRI);
+/// Simply decrease the current pressure as impacted by these virtual registers.
+void RegPressureTracker::decreaseVirtRegPressure(ArrayRef<unsigned> Regs) {
+  for (unsigned I = 0, E = Regs.size(); I != E; ++I)
+    decreaseSetPressure(CurrSetPressure, MRI->getRegClass(Regs[I]), TRI);
 }
 
 /// Clear the result so it can be used for another round of pressure tracking.
@@ -390,7 +396,9 @@ bool RegPressureTracker::recede() {
     static_cast<RegionPressure&>(P).openTop(CurrPos);
 
   // Find the previous instruction.
-  while (--CurrPos != MBB->begin() && CurrPos->isDebugValue());
+  do
+    --CurrPos;
+  while (CurrPos != MBB->begin() && CurrPos->isDebugValue());
 
   if (CurrPos->isDebugValue()) {
     closeRegion();
@@ -409,14 +417,10 @@ bool RegPressureTracker::recede() {
   collectOperands(CurrPos, PhysRegOpers, VirtRegOpers, TRI, RCI);
 
   // Boost pressure for all dead defs together.
-  for (unsigned i = 0; i < PhysRegOpers.DeadDefs.size(); ++i)
-      increasePhysRegPressure(PhysRegOpers.DeadDefs[i]);
-  for (unsigned i = 0; i < VirtRegOpers.DeadDefs.size(); ++i)
-      increaseVirtRegPressure(VirtRegOpers.DeadDefs[i]);
-  for (unsigned i = 0; i < PhysRegOpers.DeadDefs.size(); ++i)
-      decreasePhysRegPressure(PhysRegOpers.DeadDefs[i]);
-  for (unsigned i = 0; i < VirtRegOpers.DeadDefs.size(); ++i)
-      decreaseVirtRegPressure(VirtRegOpers.DeadDefs[i]);
+  increasePhysRegPressure(PhysRegOpers.DeadDefs);
+  increaseVirtRegPressure(VirtRegOpers.DeadDefs);
+  decreasePhysRegPressure(PhysRegOpers.DeadDefs);
+  decreaseVirtRegPressure(VirtRegOpers.DeadDefs);
 
   // Kill liveness at live defs.
   // TODO: consider earlyclobbers?
@@ -528,16 +532,14 @@ bool RegPressureTracker::advance() {
   }
 
   // Boost pressure for all dead defs together.
-  for (unsigned i = 0; i < PhysRegOpers.DeadDefs.size(); ++i)
-      increasePhysRegPressure(PhysRegOpers.DeadDefs[i]);
-  for (unsigned i = 0; i < VirtRegOpers.DeadDefs.size(); ++i)
-      increaseVirtRegPressure(VirtRegOpers.DeadDefs[i]);
-  for (unsigned i = 0; i < PhysRegOpers.DeadDefs.size(); ++i)
-      decreasePhysRegPressure(PhysRegOpers.DeadDefs[i]);
-  for (unsigned i = 0; i < VirtRegOpers.DeadDefs.size(); ++i)
-      decreaseVirtRegPressure(VirtRegOpers.DeadDefs[i]);
+  increasePhysRegPressure(PhysRegOpers.DeadDefs);
+  increaseVirtRegPressure(VirtRegOpers.DeadDefs);
+  decreasePhysRegPressure(PhysRegOpers.DeadDefs);
+  decreaseVirtRegPressure(VirtRegOpers.DeadDefs);
 
   // Find the next instruction.
-  while (++CurrPos != MBB->end() && CurrPos->isDebugValue());
+  do
+    ++CurrPos;
+  while (CurrPos != MBB->end() && CurrPos->isDebugValue());
   return true;
 }
index 174314ad4beeeededee4f7b4d6bb7e7d4d03d3a5..733177eae32ad3f082b0a82b44ddf9764ff5ffae 100644 (file)
@@ -158,11 +158,11 @@ protected:
   void closeTop();
   void closeBottom();
 
-  void increasePhysRegPressure(unsigned Reg);
-  void decreasePhysRegPressure(unsigned Reg);
+  void increasePhysRegPressure(ArrayRef<unsigned> Regs);
+  void decreasePhysRegPressure(ArrayRef<unsigned> Regs);
 
-  void increaseVirtRegPressure(unsigned Reg);
-  void decreaseVirtRegPressure(unsigned Reg);
+  void increaseVirtRegPressure(ArrayRef<unsigned> Regs);
+  void decreaseVirtRegPressure(ArrayRef<unsigned> Regs);
 
   void discoverPhysLiveIn(unsigned Reg);
   void discoverPhysLiveOut(unsigned Reg);