Lines Matching refs:PhysReg
33 static bool isValidRegUseOf(const MachineOperand &MO, MCRegister PhysReg, in isValidRegUseOf() argument
37 return TRI->regsOverlap(MO.getReg(), PhysReg); in isValidRegUseOf()
44 static bool isValidRegDefOf(const MachineOperand &MO, MCRegister PhysReg, in isValidRegDefOf() argument
48 return TRI->regsOverlap(MO.getReg(), PhysReg); in isValidRegDefOf()
68 for (MCRegUnit Unit : TRI->regunits(LI.PhysReg)) { in enterBasicBlock()
263 MCRegister PhysReg) const { in getReachingDef()
271 for (MCRegUnit Unit : TRI->regunits(PhysReg)) { in getReachingDef()
284 MCRegister PhysReg) const { in getReachingLocalMIDef()
285 return hasLocalDefBefore(MI, PhysReg) in getReachingLocalMIDef()
286 ? getInstFromId(MI->getParent(), getReachingDef(MI, PhysReg)) in getReachingLocalMIDef()
291 MCRegister PhysReg) const { in hasSameReachingDef()
297 return getReachingDef(A, PhysReg) == getReachingDef(B, PhysReg); in hasSameReachingDef()
320 MCRegister PhysReg) const { in getClearance()
322 return InstIds.lookup(MI) - getReachingDef(MI, PhysReg); in getClearance()
326 MCRegister PhysReg) const { in hasLocalDefBefore()
327 return getReachingDef(MI, PhysReg) >= 0; in hasLocalDefBefore()
331 MCRegister PhysReg, in getReachingLocalUses() argument
341 if (getReachingLocalMIDef(&*MI, PhysReg) != Def) in getReachingLocalUses()
345 if (!isValidRegUseOf(MO, PhysReg, TRI)) in getReachingLocalUses()
356 MCRegister PhysReg, in getLiveInUses() argument
361 if (!isValidRegUseOf(MO, PhysReg, TRI)) in getLiveInUses()
363 if (getReachingDef(&MI, PhysReg) >= 0) in getLiveInUses()
371 return isReachingDefLiveOut(&*Last, PhysReg); in getLiveInUses()
374 void ReachingDefAnalysis::getGlobalUses(MachineInstr *MI, MCRegister PhysReg, in getGlobalUses() argument
379 getReachingLocalUses(MI, PhysReg, Uses); in getGlobalUses()
382 if (auto *LiveOut = getLocalLiveOutMIDef(MI->getParent(), PhysReg)) { in getGlobalUses()
390 if (Visited.count(MBB) || !MBB->isLiveIn(PhysReg)) in getGlobalUses()
392 if (getLiveInUses(MBB, PhysReg, Uses)) in getGlobalUses()
400 MCRegister PhysReg, in getGlobalReachingDefs() argument
402 if (auto *Def = getUniqueReachingMIDef(MI, PhysReg)) { in getGlobalReachingDefs()
408 getLiveOuts(MBB, PhysReg, Defs); in getGlobalReachingDefs()
412 MCRegister PhysReg, InstSet &Defs) const { in getLiveOuts() argument
414 getLiveOuts(MBB, PhysReg, Defs, VisitedBBs); in getLiveOuts()
418 MCRegister PhysReg, InstSet &Defs, in getLiveOuts() argument
426 if (LiveRegs.available(PhysReg)) in getLiveOuts()
429 if (auto *Def = getLocalLiveOutMIDef(MBB, PhysReg)) in getLiveOuts()
433 getLiveOuts(Pred, PhysReg, Defs, VisitedBBs); in getLiveOuts()
438 MCRegister PhysReg) const { in getUniqueReachingMIDef()
440 MachineInstr *LocalDef = getReachingLocalMIDef(MI, PhysReg); in getUniqueReachingMIDef()
447 getLiveOuts(Pred, PhysReg, Incoming); in getUniqueReachingMIDef()
470 MCRegister PhysReg) const { in isRegUsedAfter()
476 if (!LiveRegs.available(PhysReg)) in isRegUsedAfter()
484 if (!LiveRegs.available(PhysReg)) in isRegUsedAfter()
491 MCRegister PhysReg) const { in isRegDefinedAfter()
495 getReachingDef(MI, PhysReg) != getReachingDef(&*Last, PhysReg)) in isRegDefinedAfter()
498 if (auto *Def = getLocalLiveOutMIDef(MBB, PhysReg)) in isRegDefinedAfter()
499 return Def == getReachingLocalMIDef(MI, PhysReg); in isRegDefinedAfter()
505 MCRegister PhysReg) const { in isReachingDefLiveOut()
509 if (LiveRegs.available(PhysReg)) in isReachingDefLiveOut()
513 int Def = getReachingDef(MI, PhysReg); in isReachingDefLiveOut()
514 if (Last != MBB->end() && getReachingDef(&*Last, PhysReg) != Def) in isReachingDefLiveOut()
519 if (isValidRegDefOf(MO, PhysReg, TRI)) in isReachingDefLiveOut()
527 MCRegister PhysReg) const { in getLocalLiveOutMIDef()
530 if (LiveRegs.available(PhysReg)) in getLocalLiveOutMIDef()
537 int Def = getReachingDef(&*Last, PhysReg); in getLocalLiveOutMIDef()
539 if (isValidRegDefOf(MO, PhysReg, TRI)) in getLocalLiveOutMIDef()
651 auto IsDead = [this, &Dead](MachineInstr *Def, MCRegister PhysReg) { in collectKilledOperands() argument
667 getGlobalUses(Def, PhysReg, Uses); in collectKilledOperands()
681 MCRegister PhysReg) const { in isSafeToDefRegAt()
683 return isSafeToDefRegAt(MI, PhysReg, Ignore); in isSafeToDefRegAt()
686 bool ReachingDefAnalysis::isSafeToDefRegAt(MachineInstr *MI, MCRegister PhysReg, in isSafeToDefRegAt() argument
689 if (isRegUsedAfter(MI, PhysReg)) { in isSafeToDefRegAt()
690 if (auto *Def = getReachingLocalMIDef(MI, PhysReg)) { in isSafeToDefRegAt()
692 getGlobalUses(Def, PhysReg, Uses); in isSafeToDefRegAt()
701 if (isRegDefinedAfter(MI, PhysReg)) { in isSafeToDefRegAt()
707 if (isValidRegDefOf(MO, PhysReg, TRI)) in isSafeToDefRegAt()