assert(r2iit != r2iMap_.end());
intervals_[r2iit->second].weight += pow(10.0F, loopDepth);
}
-
- // add hints for coalescing
- unsigned src, dst;
- if (tii.isMoveInstr(*instr, src, dst)) {
- if (src >= MRegisterInfo::FirstVirtualRegister) {
- Reg2IntervalMap::iterator r2iit = r2iMap_.find(src);
- assert(r2iit != r2iMap_.end());
- intervals_[r2iit->second].hint = dst;
- }
- if (dst >= MRegisterInfo::FirstVirtualRegister) {
- Reg2IntervalMap::iterator r2iit = r2iMap_.find(dst);
- assert(r2iit != r2iMap_.end());
- intervals_[r2iit->second].hint = src;
- }
- }
}
}
DEBUG(std::cerr << "\t\tgetting free physical register: ");
const TargetRegisterClass* rc = mf_->getSSARegMap()->getRegClass(cur->reg);
- if (unsigned reg = cur->hint) {
- if (reg >= MRegisterInfo::FirstVirtualRegister &&
- v2pMap_.find(reg) != v2pMap_.end())
- reg = v2pMap_[reg];
- if (reg && reg < MRegisterInfo::FirstVirtualRegister &&
- mri_->getRegClass(reg) == rc && !regUse_[reg]) {
- DEBUG(std::cerr << mri_->getName(reg) << '\n');
- return reg;
- }
- }
-
for (TargetRegisterClass::iterator i = rc->allocation_order_begin(*mf_);
i != rc->allocation_order_end(*mf_); ++i) {
unsigned reg = *i;