Fix a few more bugs:
authorOwen Anderson <resistor@mac.com>
Mon, 18 Aug 2008 23:41:04 +0000 (23:41 +0000)
committerOwen Anderson <resistor@mac.com>
Mon, 18 Aug 2008 23:41:04 +0000 (23:41 +0000)
  1) Assign stack slots to new temporaries.
  2) Don't insert an interval into the return vector more than once.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54956 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/LiveIntervalAnalysis.cpp

index ae090f58ec6d0fe5f25be6665e0d24170c880db4..53d74fc22458fe3f63c2d06df432faadda47032a 100644 (file)
@@ -1608,7 +1608,7 @@ std::vector<LiveInterval*> LiveIntervals::
 addIntervalsForSpillsFast(const LiveInterval &li,
                           const MachineLoopInfo *loopInfo,
                           VirtRegMap &vrm, float& SSWeight) {
-  vrm.assignVirt2StackSlot(li.reg);
+  unsigned slot = vrm.assignVirt2StackSlot(li.reg);
 
   std::vector<LiveInterval*> added;
 
@@ -1631,9 +1631,13 @@ addIntervalsForSpillsFast(const LiveInterval &li,
     // Create a new virtual register for the spill interval.
     MachineOperand& MO = RI.getOperand();
     unsigned NewVReg = 0;
+    bool newInt = false;
     if (!VRegMap.count(MO.getParent())) {
       VRegMap[MO.getParent()] = NewVReg = mri_->createVirtualRegister(rc);
       vrm.grow();
+      vrm.assignVirt2StackSlot(NewVReg, slot);
+      
+      newInt = true;
     } else
       NewVReg = VRegMap[MO.getParent()];
     
@@ -1666,8 +1670,9 @@ addIntervalsForSpillsFast(const LiveInterval &li,
       DOUT << " +" << LR;
       nI.addRange(LR);
     }
-        
-    added.push_back(&nI);
+    
+    if (newInt)
+      added.push_back(&nI);
         
     DOUT << "\t\t\t\tadded new interval: ";
     DEBUG(nI.dump());