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