[llvm-commits] [llvm] r62917 - /llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp

Owen Anderson resistor at mac.com
Sat Jan 24 02:07:46 PST 2009


Author: resistor
Date: Sat Jan 24 04:07:43 2009
New Revision: 62917

URL: http://llvm.org/viewvc/llvm-project?rev=62917&view=rev
Log:
Some cleanups.  No functional changes.

Modified:
    llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp

Modified: llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp?rev=62917&r1=62916&r2=62917&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp (original)
+++ llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp Sat Jan 24 04:07:43 2009
@@ -175,6 +175,8 @@
     void RenumberValno(VNInfo* VN);
     void ReconstructLiveInterval(LiveInterval* LI);
     bool removeDeadSpills(SmallPtrSet<LiveInterval*, 8>& split);
+    unsigned getNumberOfSpills(SmallPtrSet<MachineInstr*, 4>& MIs,
+                               unsigned Reg, int FrameIndex);
     VNInfo* PerformPHIConstruction(MachineBasicBlock::iterator use,
                                    MachineBasicBlock* MBB,
                                    LiveInterval* LI,
@@ -1381,6 +1383,21 @@
   return Change;
 }
 
+unsigned PreAllocSplitting::getNumberOfSpills(
+                                  SmallPtrSet<MachineInstr*, 4>& MIs,
+                                  unsigned Reg, int FrameIndex) {
+  unsigned Spills = 0;
+  for (SmallPtrSet<MachineInstr*, 4>::iterator UI = MIs.begin(), UE = MIs.end();
+       UI != UI; ++UI) {
+    int StoreFrameIndex;
+    unsigned StoreVReg = TII->isStoreToStackSlot(*UI, StoreFrameIndex);
+    if (StoreVReg == Reg && StoreFrameIndex == FrameIndex)
+      Spills++;
+  }
+  
+  return Spills;
+}
+
 /// removeDeadSpills - After doing splitting, filter through all intervals we've
 /// split, and see if any of the spills are unnecessary.  If so, remove them.
 bool PreAllocSplitting::removeDeadSpills(SmallPtrSet<LiveInterval*, 8>& split) {
@@ -1417,34 +1434,25 @@
         DefMI->eraseFromParent();
         NumDeadSpills++;
         changed = true;
-      } else {
-        bool NonRestore = false;
-        for (SmallPtrSet<MachineInstr*, 4>::iterator UI = 
-             VNUseCount[CurrVN].begin(), UE = VNUseCount[CurrVN].end();
-             UI != UI; ++UI) {
-          int StoreFrameIndex;
-          unsigned StoreVReg = TII->isStoreToStackSlot(*UI, StoreFrameIndex);
-          if (StoreVReg != (*LI)->reg || StoreFrameIndex != FrameIndex) {
-            NonRestore = false;
-            break;
-          }
-        }
-        
-        if (NonRestore) continue;
-        
-        for (SmallPtrSet<MachineInstr*, 4>::iterator UI = 
-             VNUseCount[CurrVN].begin(), UE = VNUseCount[CurrVN].end();
-             UI != UI; ++UI) {
-          LIs->RemoveMachineInstrFromMaps(*UI);
-          (*UI)->eraseFromParent();
-        }
+        continue;
+      }
+      
+      unsigned SpillCount = getNumberOfSpills(VNUseCount[CurrVN],
+                                              (*LI)->reg, FrameIndex);
+      if (SpillCount != VNUseCount[CurrVN].size()) continue;
         
-        LIs->RemoveMachineInstrFromMaps(DefMI);
-        (*LI)->removeValNo(CurrVN);
-        DefMI->eraseFromParent();
-        NumDeadSpills++;
-        changed = true;
+      for (SmallPtrSet<MachineInstr*, 4>::iterator UI = 
+           VNUseCount[CurrVN].begin(), UE = VNUseCount[CurrVN].end();
+           UI != UI; ++UI) {
+        LIs->RemoveMachineInstrFromMaps(*UI);
+        (*UI)->eraseFromParent();
       }
+        
+      LIs->RemoveMachineInstrFromMaps(DefMI);
+      (*LI)->removeValNo(CurrVN);
+      DefMI->eraseFromParent();
+      NumDeadSpills++;
+      changed = true;
     }
   }
   





More information about the llvm-commits mailing list