Skip to content
Snippets Groups Projects
Commit 8c67a300 authored by Alkis Evlogimenos's avatar Alkis Evlogimenos
Browse files

Only update LiveVariables if it is available. addIntervalsForSpills

runs after the initial run of the live interval analysis.

llvm-svn: 16075
parent efd40bce
No related branches found
No related tags found
No related merge requests found
...@@ -186,6 +186,10 @@ std::vector<LiveInterval*> LiveIntervals::addIntervalsForSpills( ...@@ -186,6 +186,10 @@ std::vector<LiveInterval*> LiveIntervals::addIntervalsForSpills(
VirtRegMap& vrm, VirtRegMap& vrm,
int slot) 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; std::vector<LiveInterval*> added;
assert(li.weight != HUGE_VAL && assert(li.weight != HUGE_VAL &&
...@@ -212,9 +216,9 @@ std::vector<LiveInterval*> LiveIntervals::addIntervalsForSpills( ...@@ -212,9 +216,9 @@ std::vector<LiveInterval*> LiveIntervals::addIntervalsForSpills(
for (unsigned i = 0; i != mi->getNumOperands(); ++i) { for (unsigned i = 0; i != mi->getNumOperands(); ++i) {
MachineOperand& mop = mi->getOperand(i); MachineOperand& mop = mi->getOperand(i);
if (mop.isRegister() && mop.getReg() == li.reg) { if (mop.isRegister() && mop.getReg() == li.reg) {
if (MachineInstr* fmi = if (MachineInstr* fmi = mri_->foldMemoryOperand(mi, i, slot)) {
mri_->foldMemoryOperand(mi, i, slot)) { if (lv_)
lv_->instructionChanged(mi, fmi); lv_->instructionChanged(mi, fmi);
vrm.virtFolded(li.reg, mi, fmi); vrm.virtFolded(li.reg, mi, fmi);
mi2iMap_.erase(mi); mi2iMap_.erase(mi);
i2miMap_[index/InstrSlots::NUM] = fmi; i2miMap_[index/InstrSlots::NUM] = fmi;
...@@ -244,8 +248,7 @@ std::vector<LiveInterval*> LiveIntervals::addIntervalsForSpills( ...@@ -244,8 +248,7 @@ std::vector<LiveInterval*> LiveIntervals::addIntervalsForSpills(
getUseIndex(index)); getUseIndex(index));
// create a new register for this spill // create a new register for this spill
unsigned nReg = unsigned nReg = mf_->getSSARegMap()->createVirtualRegister(rc);
mf_->getSSARegMap()->createVirtualRegister(rc);
mi->SetMachineOperandReg(i, nReg); mi->SetMachineOperandReg(i, nReg);
vrm.grow(); vrm.grow();
vrm.assignVirt2StackSlot(nReg, slot); vrm.assignVirt2StackSlot(nReg, slot);
...@@ -258,10 +261,10 @@ std::vector<LiveInterval*> LiveIntervals::addIntervalsForSpills( ...@@ -258,10 +261,10 @@ std::vector<LiveInterval*> LiveIntervals::addIntervalsForSpills(
DEBUG(std::cerr << " +" << LR); DEBUG(std::cerr << " +" << LR);
nI.addRange(LR); nI.addRange(LR);
added.push_back(&nI); added.push_back(&nI);
// update live variables // update live variables if it is available
lv_->addVirtualRegisterKilled(nReg, mi); if (lv_)
DEBUG(std::cerr << "\t\t\t\tadded new interval: " lv_->addVirtualRegisterKilled(nReg, mi);
<< nI << '\n'); DEBUG(std::cerr << "\t\t\t\tadded new interval: " << nI << '\n');
} }
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment