diff options
author | Alkis Evlogimenos <alkis@evlogimenos.com> | 2004-04-12 17:39:20 +0000 |
---|---|---|
committer | Alkis Evlogimenos <alkis@evlogimenos.com> | 2004-04-12 17:39:20 +0000 |
commit | 0ede7ec4f8559901b0cd42439617429bd311ed73 (patch) | |
tree | 65da62612e63f004c7d2417b778e031c8571a374 /llvm/lib/CodeGen/LiveIntervals.cpp | |
parent | b7147b33a032510c59940c78841ea6ec2dc88948 (diff) | |
download | bcm5719-llvm-0ede7ec4f8559901b0cd42439617429bd311ed73.tar.gz bcm5719-llvm-0ede7ec4f8559901b0cd42439617429bd311ed73.zip |
Correctly compute spill weights
llvm-svn: 12869
Diffstat (limited to 'llvm/lib/CodeGen/LiveIntervals.cpp')
-rw-r--r-- | llvm/lib/CodeGen/LiveIntervals.cpp | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/llvm/lib/CodeGen/LiveIntervals.cpp b/llvm/lib/CodeGen/LiveIntervals.cpp index 7665d8774d5..371dfd1c345 100644 --- a/llvm/lib/CodeGen/LiveIntervals.cpp +++ b/llvm/lib/CodeGen/LiveIntervals.cpp @@ -133,24 +133,10 @@ bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) { for (MachineBasicBlock::iterator mii = mbb->begin(), mie = mbb->end(); mii != mie; ) { - for (unsigned i = 0; i < mii->getNumOperands(); ++i) { - const MachineOperand& mop = mii->getOperand(i); - if (mop.isRegister() && mop.getReg()) { - // replace register with representative register - unsigned reg = rep(mop.getReg()); - mii->SetMachineOperandReg(i, reg); - - if (MRegisterInfo::isVirtualRegister(reg)) { - Reg2IntervalMap::iterator r2iit = r2iMap_.find(reg); - assert(r2iit != r2iMap_.end()); - r2iit->second->weight += pow(10.0F, loopDepth); - } - } - } - - // if the move is now an identity move delete it + // if the move will be an identity move delete it unsigned srcReg, dstReg; - if (tii.isMoveInstr(*mii, srcReg, dstReg) && srcReg == dstReg) { + if (tii.isMoveInstr(*mii, srcReg, dstReg) && + rep(srcReg) == rep(dstReg)) { // remove from def list Interval& interval = getOrCreateInterval(dstReg); unsigned defIndex = getInstructionIndex(mii); @@ -168,8 +154,23 @@ bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) { mii = mbbi->erase(mii); ++numPeep; } - else + else { + for (unsigned i = 0; i < mii->getNumOperands(); ++i) { + const MachineOperand& mop = mii->getOperand(i); + if (mop.isRegister() && mop.getReg() && + MRegisterInfo::isVirtualRegister(mop.getReg())) { + // replace register with representative register + unsigned reg = rep(mop.getReg()); + mii->SetMachineOperandReg(i, reg); + + Reg2IntervalMap::iterator r2iit = r2iMap_.find(reg); + assert(r2iit != r2iMap_.end()); + r2iit->second->weight += + (mop.isUse() + mop.isDef()) * pow(10.0F, loopDepth); + } + } ++mii; + } } } |