diff options
author | Alkis Evlogimenos <alkis@evlogimenos.com> | 2004-08-27 18:59:22 +0000 |
---|---|---|
committer | Alkis Evlogimenos <alkis@evlogimenos.com> | 2004-08-27 18:59:22 +0000 |
commit | d8d26b3268acf7f157028f0cb60a545b185e8905 (patch) | |
tree | 12ed9042142f2c12caa5f4438ee5e2052ad5f290 /lib/CodeGen/LiveIntervalAnalysis.cpp | |
parent | ccdf21af1fe3cd0f2d8485e9da25e10c0cab7a9b (diff) |
Only update LiveVariables if it is available. addIntervalsForSpills
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
Diffstat (limited to 'lib/CodeGen/LiveIntervalAnalysis.cpp')
-rw-r--r-- | lib/CodeGen/LiveIntervalAnalysis.cpp | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp index 14bccf6fa9..1165ae54fe 100644 --- a/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -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'); } } } |