Lines Matching refs:VirtReg

125   virtual unsigned selectOrSplit(LiveInterval &VirtReg,
268 LiveInterval &VirtReg = *I->second;
270 PhysReg2LiveUnion[RegNum].unify(VirtReg);
272 enqueue(&VirtReg);
276 void RegAllocBase::assign(LiveInterval &VirtReg, unsigned PhysReg) {
277 DEBUG(dbgs() << "assigning " << PrintReg(VirtReg.reg, TRI)
279 assert(!VRM->hasPhys(VirtReg.reg) && "Duplicate VirtReg assignment");
280 VRM->assignVirt2Phys(VirtReg.reg, PhysReg);
282 PhysReg2LiveUnion[PhysReg].unify(VirtReg);
286 void RegAllocBase::unassign(LiveInterval &VirtReg, unsigned PhysReg) {
287 DEBUG(dbgs() << "unassigning " << PrintReg(VirtReg.reg, TRI)
289 assert(VRM->getPhys(VirtReg.reg) == PhysReg && "Inconsistent unassign");
290 PhysReg2LiveUnion[PhysReg].extract(VirtReg);
291 VRM->clearVirt(VirtReg.reg);
301 while (LiveInterval *VirtReg = dequeue()) {
302 assert(!VRM->hasPhys(VirtReg->reg) && "Register already assigned");
305 if (MRI->reg_nodbg_empty(VirtReg->reg)) {
306 DEBUG(dbgs() << "Dropping unused " << *VirtReg << '\n');
307 LIS->removeInterval(VirtReg->reg);
318 << MRI->getRegClass(VirtReg->reg)->getName()
319 << ':' << *VirtReg << '\n');
322 unsigned AvailablePhysReg = selectOrSplit(*VirtReg, SplitVRegs);
329 for (MachineRegisterInfo::reg_iterator I = MRI->reg_begin(VirtReg->reg);
338 VRM->assignVirt2Phys(VirtReg->reg,
339 RegClassInfo.getOrder(MRI->getRegClass(VirtReg->reg)).front());
344 assign(*VirtReg, AvailablePhysReg);
367 unsigned RegAllocBase::checkPhysRegInterference(LiveInterval &VirtReg,
370 if (query(VirtReg, *AliasI).checkInterference())
377 void RegAllocBase::spillReg(LiveInterval& VirtReg, unsigned PhysReg,
379 LiveIntervalUnion::Query &Q = query(VirtReg, PhysReg);
403 // that interfere with VirtReg. The newly spilled or split live intervals are
406 RegAllocBase::spillInterferences(LiveInterval &VirtReg, unsigned PhysReg,
413 LiveIntervalUnion::Query &QAlias = query(VirtReg, *asI);
420 " interferences with " << VirtReg << "\n");
425 spillReg(VirtReg, *AliasI, SplitVRegs);
482 unsigned RABasic::selectOrSplit(LiveInterval &VirtReg,
489 RegClassInfo.getOrder(MRI->getRegClass(VirtReg.reg));
495 // VirtReg and its aliases.
496 unsigned interfReg = checkPhysRegInterference(VirtReg, PhysReg);
505 // The current VirtReg must either be spillable, or one of its interferences
507 if (interferingVirtReg->weight < VirtReg.weight ) {
515 if (!spillInterferences(VirtReg, *PhysRegI, SplitVRegs)) continue;
517 assert(checkPhysRegInterference(VirtReg, *PhysRegI) == 0 &&
523 // No other spill candidates were found, so spill the current VirtReg.
524 DEBUG(dbgs() << "spilling: " << VirtReg << '\n');
525 if (!VirtReg.isSpillable())
527 LiveRangeEdit LRE(VirtReg, SplitVRegs);