Only update LiveVariables if it is available. addIntervalsForSpills
authorAlkis Evlogimenos <alkis@evlogimenos.com>
Fri, 27 Aug 2004 18:59:22 +0000 (18:59 +0000)
committerAlkis Evlogimenos <alkis@evlogimenos.com>
Fri, 27 Aug 2004 18:59:22 +0000 (18:59 +0000)
runs after the initial run of the live interval analysis.

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

lib/CodeGen/LiveIntervalAnalysis.cpp

index 14bccf6fa96b3de5566a447e6ade3e516d8194b2..1165ae54fe2ce84278818ccfbcb1c5e4fcd83ab7 100644 (file)
@@ -186,6 +186,10 @@ std::vector<LiveInterval*> LiveIntervals::addIntervalsForSpills(
   VirtRegMap& vrm,
   int slot)
 {
+  // since this is called after the analysis is done we don't know if
+  // LiveVariables is available
+  lv_ = getAnalysisToUpdate<LiveVariables>();
+
   std::vector<LiveInterval*> added;
 
   assert(li.weight != HUGE_VAL &&
@@ -212,9 +216,9 @@ std::vector<LiveInterval*> LiveIntervals::addIntervalsForSpills(
       for (unsigned i = 0; i != mi->getNumOperands(); ++i) {
         MachineOperand& mop = mi->getOperand(i);
         if (mop.isRegister() && mop.getReg() == li.reg) {
-          if (MachineInstr* fmi =
-              mri_->foldMemoryOperand(mi, i, slot)) {
-            lv_->instructionChanged(mi, fmi);
+          if (MachineInstr* fmi = mri_->foldMemoryOperand(mi, i, slot)) {
+            if (lv_)
+              lv_->instructionChanged(mi, fmi);
             vrm.virtFolded(li.reg, mi, fmi);
             mi2iMap_.erase(mi);
             i2miMap_[index/InstrSlots::NUM] = fmi;
@@ -244,8 +248,7 @@ std::vector<LiveInterval*> LiveIntervals::addIntervalsForSpills(
                                 getUseIndex(index));
 
             // create a new register for this spill
-            unsigned nReg =
-              mf_->getSSARegMap()->createVirtualRegister(rc);
+            unsigned nReg = mf_->getSSARegMap()->createVirtualRegister(rc);
             mi->SetMachineOperandReg(i, nReg);
             vrm.grow();
             vrm.assignVirt2StackSlot(nReg, slot);
@@ -258,10 +261,10 @@ std::vector<LiveInterval*> LiveIntervals::addIntervalsForSpills(
             DEBUG(std::cerr << " +" << LR);
             nI.addRange(LR);
             added.push_back(&nI);
-            // update live variables
-            lv_->addVirtualRegisterKilled(nReg, mi);
-            DEBUG(std::cerr << "\t\t\t\tadded new interval: "
-                  << nI << '\n');
+            // update live variables if it is available
+            if (lv_)
+              lv_->addVirtualRegisterKilled(nReg, mi);
+            DEBUG(std::cerr << "\t\t\t\tadded new interval: " << nI << '\n');
           }
         }
       }