Lines Matching refs:Reg

39 static bool isValidRegUseOf(const MachineOperand &MO, Register Reg,  in isValidRegUseOf()  argument
43 return TRI->regsOverlap(MO.getReg(), Reg); in isValidRegUseOf()
50 static bool isValidRegDefOf(const MachineOperand &MO, Register Reg, in isValidRegDefOf() argument
54 return TRI->regsOverlap(MO.getReg(), Reg); in isValidRegDefOf()
243 Register Reg; in printAllReachingDefs() local
248 Reg = Register::index2StackSlot(FrameIndex); in printAllReachingDefs()
252 Reg = MO.getReg(); in printAllReachingDefs()
253 if (!Reg.isValid()) in printAllReachingDefs()
258 getGlobalReachingDefs(&MI, Reg, Defs); in printAllReachingDefs()
335 int ReachingDefAnalysis::getReachingDef(MachineInstr *MI, Register Reg) const { in getReachingDef()
344 if (Reg.isStack()) { in getReachingDef()
346 int FrameIndex = Reg.stackSlotIndex(); in getReachingDef()
360 for (MCRegUnit Unit : TRI->regunits(Reg)) { in getReachingDef()
372 Register Reg) const { in getReachingLocalMIDef()
373 return hasLocalDefBefore(MI, Reg) in getReachingLocalMIDef()
374 ? getInstFromId(MI->getParent(), getReachingDef(MI, Reg)) in getReachingLocalMIDef()
379 Register Reg) const { in hasSameReachingDef()
385 return getReachingDef(A, Reg) == getReachingDef(B, Reg); in hasSameReachingDef()
408 int ReachingDefAnalysis::getClearance(MachineInstr *MI, Register Reg) const { in getClearance()
410 return InstIds.lookup(MI) - getReachingDef(MI, Reg); in getClearance()
414 Register Reg) const { in hasLocalDefBefore()
415 return getReachingDef(MI, Reg) >= 0; in hasLocalDefBefore()
418 void ReachingDefAnalysis::getReachingLocalUses(MachineInstr *Def, Register Reg, in getReachingLocalUses() argument
428 if (getReachingLocalMIDef(&*MI, Reg) != Def) in getReachingLocalUses()
432 if (!isValidRegUseOf(MO, Reg, TRI)) in getReachingLocalUses()
442 bool ReachingDefAnalysis::getLiveInUses(MachineBasicBlock *MBB, Register Reg, in getLiveInUses() argument
447 if (!isValidRegUseOf(MO, Reg, TRI)) in getLiveInUses()
449 if (getReachingDef(&MI, Reg) >= 0) in getLiveInUses()
457 return isReachingDefLiveOut(&*Last, Reg); in getLiveInUses()
460 void ReachingDefAnalysis::getGlobalUses(MachineInstr *MI, Register Reg, in getGlobalUses() argument
465 getReachingLocalUses(MI, Reg, Uses); in getGlobalUses()
468 if (auto *LiveOut = getLocalLiveOutMIDef(MI->getParent(), Reg)) { in getGlobalUses()
476 if (Visited.count(MBB) || !MBB->isLiveIn(Reg)) in getGlobalUses()
478 if (getLiveInUses(MBB, Reg, Uses)) in getGlobalUses()
485 void ReachingDefAnalysis::getGlobalReachingDefs(MachineInstr *MI, Register Reg, in getGlobalReachingDefs() argument
487 if (auto *Def = getUniqueReachingMIDef(MI, Reg)) { in getGlobalReachingDefs()
493 getLiveOuts(MBB, Reg, Defs); in getGlobalReachingDefs()
496 void ReachingDefAnalysis::getLiveOuts(MachineBasicBlock *MBB, Register Reg, in getLiveOuts() argument
499 getLiveOuts(MBB, Reg, Defs, VisitedBBs); in getLiveOuts()
502 void ReachingDefAnalysis::getLiveOuts(MachineBasicBlock *MBB, Register Reg, in getLiveOuts() argument
511 if (Reg.isPhysical() && LiveRegs.available(Reg)) in getLiveOuts()
514 if (auto *Def = getLocalLiveOutMIDef(MBB, Reg)) in getLiveOuts()
518 getLiveOuts(Pred, Reg, Defs, VisitedBBs); in getLiveOuts()
522 Register Reg) const { in getUniqueReachingMIDef()
524 MachineInstr *LocalDef = getReachingLocalMIDef(MI, Reg); in getUniqueReachingMIDef()
531 getLiveOuts(Pred, Reg, Incoming); in getUniqueReachingMIDef()
553 bool ReachingDefAnalysis::isRegUsedAfter(MachineInstr *MI, Register Reg) const { in isRegUsedAfter()
559 if (!LiveRegs.available(Reg)) in isRegUsedAfter()
567 if (!LiveRegs.available(Reg)) in isRegUsedAfter()
574 Register Reg) const { in isRegDefinedAfter()
578 getReachingDef(MI, Reg) != getReachingDef(&*Last, Reg)) in isRegDefinedAfter()
581 if (auto *Def = getLocalLiveOutMIDef(MBB, Reg)) in isRegDefinedAfter()
582 return Def == getReachingLocalMIDef(MI, Reg); in isRegDefinedAfter()
588 Register Reg) const { in isReachingDefLiveOut()
592 if (Reg.isPhysical() && LiveRegs.available(Reg)) in isReachingDefLiveOut()
596 int Def = getReachingDef(MI, Reg); in isReachingDefLiveOut()
597 if (Last != MBB->end() && getReachingDef(&*Last, Reg) != Def) in isReachingDefLiveOut()
602 if (isValidRegDefOf(MO, Reg, TRI)) in isReachingDefLiveOut()
609 Register Reg) const { in getLocalLiveOutMIDef()
612 if (Reg.isPhysical() && LiveRegs.available(Reg)) in getLocalLiveOutMIDef()
619 if (Reg.isStack()) { in getLocalLiveOutMIDef()
620 int FrameIndex = Reg.stackSlotIndex(); in getLocalLiveOutMIDef()
625 int Def = getReachingDef(&*Last, Reg); in getLocalLiveOutMIDef()
628 if (isValidRegDefOf(MO, Reg, TRI)) in getLocalLiveOutMIDef()
740 auto IsDead = [this, &Dead](MachineInstr *Def, Register Reg) { in collectKilledOperands() argument
756 getGlobalUses(Def, Reg, Uses); in collectKilledOperands()
770 Register Reg) const { in isSafeToDefRegAt()
772 return isSafeToDefRegAt(MI, Reg, Ignore); in isSafeToDefRegAt()
775 bool ReachingDefAnalysis::isSafeToDefRegAt(MachineInstr *MI, Register Reg, in isSafeToDefRegAt() argument
778 if (isRegUsedAfter(MI, Reg)) { in isSafeToDefRegAt()
779 if (auto *Def = getReachingLocalMIDef(MI, Reg)) { in isSafeToDefRegAt()
781 getGlobalUses(Def, Reg, Uses); in isSafeToDefRegAt()
790 if (isRegDefinedAfter(MI, Reg)) { in isSafeToDefRegAt()
796 if (isValidRegDefOf(MO, Reg, TRI)) in isSafeToDefRegAt()