Lines Matching refs:Reg

84 LiveVariables::VarInfo &LiveVariables::getVarInfo(Register Reg) {  in getVarInfo()  argument
85 assert(Reg.isVirtual() && "getVarInfo: not a virtual register!"); in getVarInfo()
86 VirtRegInfo.grow(Reg); in getVarInfo()
87 return VirtRegInfo[Reg]; in getVarInfo()
127 void LiveVariables::HandleVirtRegUse(Register Reg, MachineBasicBlock *MBB, in HandleVirtRegUse() argument
129 assert(MRI->getVRegDef(Reg) && "Register use before def!"); in HandleVirtRegUse()
133 VarInfo &VRInfo = getVarInfo(Reg); in HandleVirtRegUse()
164 if (MBB == MRI->getVRegDef(Reg)->getParent()) in HandleVirtRegUse()
175 MarkVirtRegAliveInBlock(VRInfo, MRI->getVRegDef(Reg)->getParent(), Pred); in HandleVirtRegUse()
178 void LiveVariables::HandleVirtRegDef(Register Reg, MachineInstr &MI) { in HandleVirtRegDef() argument
179 VarInfo &VRInfo = getVarInfo(Reg); in HandleVirtRegDef()
189 LiveVariables::FindLastPartialDef(Register Reg, in FindLastPartialDef() argument
194 for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); ++SubRegs) { in FindLastPartialDef()
216 if (TRI->isSubRegister(Reg, DefReg)) { in FindLastPartialDef()
228 void LiveVariables::HandlePhysRegUse(Register Reg, MachineInstr &MI) { in HandlePhysRegUse() argument
229 MachineInstr *LastDef = PhysRegDef[Reg]; in HandlePhysRegUse()
231 if (!LastDef && !PhysRegUse[Reg]) { in HandlePhysRegUse()
241 MachineInstr *LastPartialDef = FindLastPartialDef(Reg, PartDefRegs); in HandlePhysRegUse()
244 LastPartialDef->addOperand(MachineOperand::CreateReg(Reg, true/*IsDef*/, in HandlePhysRegUse()
246 PhysRegDef[Reg] = LastPartialDef; in HandlePhysRegUse()
248 for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); ++SubRegs) { in HandlePhysRegUse()
264 } else if (LastDef && !PhysRegUse[Reg] && in HandlePhysRegUse()
265 !LastDef->findRegisterDefOperand(Reg)) in HandlePhysRegUse()
267 LastDef->addOperand(MachineOperand::CreateReg(Reg, true/*IsDef*/, in HandlePhysRegUse()
271 for (MCSubRegIterator SubRegs(Reg, TRI, /*IncludeSelf=*/true); in HandlePhysRegUse()
278 MachineInstr *LiveVariables::FindLastRefOrPartRef(Register Reg) { in FindLastRefOrPartRef() argument
279 MachineInstr *LastDef = PhysRegDef[Reg]; in FindLastRefOrPartRef()
280 MachineInstr *LastUse = PhysRegUse[Reg]; in FindLastRefOrPartRef()
287 for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); ++SubRegs) { in FindLastRefOrPartRef()
308 bool LiveVariables::HandlePhysRegKill(Register Reg, MachineInstr *MI) { in HandlePhysRegKill() argument
309 MachineInstr *LastDef = PhysRegDef[Reg]; in HandlePhysRegKill()
310 MachineInstr *LastUse = PhysRegUse[Reg]; in HandlePhysRegKill()
336 for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); ++SubRegs) { in HandlePhysRegKill()
361 if (!PhysRegUse[Reg]) { in HandlePhysRegKill()
366 PhysRegDef[Reg]->addRegisterDead(Reg, TRI, true); in HandlePhysRegKill()
367 for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); ++SubRegs) { in HandlePhysRegKill()
372 if (PhysRegDef[Reg] == PhysRegDef[SubReg]) { in HandlePhysRegKill()
373 MachineOperand *MO = PhysRegDef[Reg]->findRegisterDefOperand(SubReg); in HandlePhysRegKill()
380 PhysRegDef[Reg]->addOperand(MachineOperand::CreateReg(SubReg, in HandlePhysRegKill()
394 } else if (LastRefOrPartRef == PhysRegDef[Reg] && LastRefOrPartRef != MI) { in HandlePhysRegKill()
397 LastPartDef->addOperand(MachineOperand::CreateReg(Reg, false/*IsDef*/, in HandlePhysRegKill()
401 LastRefOrPartRef->findRegisterDefOperand(Reg, false, false, TRI); in HandlePhysRegKill()
402 bool NeedEC = MO->isEarlyClobber() && MO->getReg() != Reg; in HandlePhysRegKill()
405 LastRefOrPartRef->addRegisterDead(Reg, TRI, true); in HandlePhysRegKill()
409 MO = LastRefOrPartRef->findRegisterDefOperand(Reg); in HandlePhysRegKill()
415 LastRefOrPartRef->addRegisterKilled(Reg, TRI, true); in HandlePhysRegKill()
423 for (unsigned Reg = 1, NumRegs = TRI->getNumRegs(); Reg != NumRegs; ++Reg) { in HandleRegMask() local
425 if (!PhysRegDef[Reg] && !PhysRegUse[Reg]) in HandleRegMask()
428 if (!MO.clobbersPhysReg(Reg)) in HandleRegMask()
432 unsigned Super = Reg; in HandleRegMask()
433 for (MCSuperRegIterator SR(Reg, TRI); SR.isValid(); ++SR) in HandleRegMask()
440 void LiveVariables::HandlePhysRegDef(Register Reg, MachineInstr *MI, in HandlePhysRegDef() argument
444 if (PhysRegDef[Reg] || PhysRegUse[Reg]) { in HandlePhysRegDef()
445 for (MCSubRegIterator SubRegs(Reg, TRI, /*IncludeSelf=*/true); in HandlePhysRegDef()
449 for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); ++SubRegs) { in HandlePhysRegDef()
469 HandlePhysRegKill(Reg, MI); in HandlePhysRegDef()
471 for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); ++SubRegs) { in HandlePhysRegDef()
480 Defs.push_back(Reg); // Remember this def. in HandlePhysRegDef()
486 Register Reg = Defs.pop_back_val(); in UpdatePhysRegDefs() local
487 for (MCSubRegIterator SubRegs(Reg, TRI, /*IncludeSelf=*/true); in UpdatePhysRegDefs()
647 const Register Reg = Register::index2VirtReg(i); in runOnMachineFunction() local
648 for (unsigned j = 0, e2 = VirtRegInfo[Reg].Kills.size(); j != e2; ++j) in runOnMachineFunction()
649 if (VirtRegInfo[Reg].Kills[j] == MRI->getVRegDef(Reg)) in runOnMachineFunction()
650 VirtRegInfo[Reg].Kills[j]->addRegisterDead(Reg, TRI); in runOnMachineFunction()
652 VirtRegInfo[Reg].Kills[j]->addRegisterKilled(Reg, TRI); in runOnMachineFunction()
670 void LiveVariables::recomputeForSingleDefVirtReg(Register Reg) { in recomputeForSingleDefVirtReg() argument
671 assert(Reg.isVirtual()); in recomputeForSingleDefVirtReg()
673 VarInfo &VI = getVarInfo(Reg); in recomputeForSingleDefVirtReg()
677 MachineInstr &DefMI = *MRI->getUniqueVRegDef(Reg); in recomputeForSingleDefVirtReg()
681 if (MRI->use_nodbg_empty(Reg)) { in recomputeForSingleDefVirtReg()
683 DefMI.addRegisterDead(Reg, nullptr); in recomputeForSingleDefVirtReg()
686 DefMI.clearRegisterDeads(Reg); in recomputeForSingleDefVirtReg()
694 for (auto &UseMO : MRI->use_nodbg_operands(Reg)) { in recomputeForSingleDefVirtReg()
740 if (MI.readsRegister(Reg)) { in recomputeForSingleDefVirtReg()
741 assert(!MI.killsRegister(Reg)); in recomputeForSingleDefVirtReg()
742 MI.addRegisterKilled(Reg, nullptr); in recomputeForSingleDefVirtReg()
752 void LiveVariables::replaceKillInstruction(Register Reg, MachineInstr &OldMI, in replaceKillInstruction() argument
754 VarInfo &VI = getVarInfo(Reg); in replaceKillInstruction()
764 Register Reg = MO.getReg(); in removeVirtualRegistersKilled() local
765 if (Register::isVirtualRegister(Reg)) { in removeVirtualRegistersKilled()
766 bool removed = getVarInfo(Reg).removeKill(MI); in removeVirtualRegistersKilled()
791 Register Reg, MachineRegisterInfo &MRI) { in isLiveIn() argument
799 const MachineInstr *Def = MRI.getVRegDef(Reg); in isLiveIn()
807 bool LiveVariables::isLiveOut(Register Reg, const MachineBasicBlock &MBB) { in isLiveOut() argument
808 LiveVariables::VarInfo &VI = getVarInfo(Reg); in isLiveOut()
864 Register Reg = Register::index2VirtReg(i); in addNewBlock() local
867 if (Defs.count(Reg)) in addNewBlock()
872 VarInfo &VI = getVarInfo(Reg); in addNewBlock()
873 if (Kills.count(Reg) || VI.AliveBlocks.test(SuccBB->getNumber())) in addNewBlock()