Lines Matching defs:Reg
81 const Register Reg = Register::index2VirtReg(I);
83 VirtRegInfo[Reg].print(OS);
114 LiveVariables::VarInfo &LiveVariables::getVarInfo(Register Reg) {
115 assert(Reg.isVirtual() && "getVarInfo: not a virtual register!");
116 VirtRegInfo.grow(Reg);
117 return VirtRegInfo[Reg];
157 void LiveVariables::HandleVirtRegUse(Register Reg, MachineBasicBlock *MBB,
159 assert(MRI->getVRegDef(Reg) && "Register use before def!");
163 VarInfo &VRInfo = getVarInfo(Reg);
194 if (MBB == MRI->getVRegDef(Reg)->getParent())
205 MarkVirtRegAliveInBlock(VRInfo, MRI->getVRegDef(Reg)->getParent(), Pred);
208 void LiveVariables::HandleVirtRegDef(Register Reg, MachineInstr &MI) {
209 VarInfo &VRInfo = getVarInfo(Reg);
219 LiveVariables::FindLastPartialDef(Register Reg,
224 for (MCPhysReg SubReg : TRI->subregs(Reg)) {
244 if (TRI->isSubRegister(Reg, DefReg)) {
255 void LiveVariables::HandlePhysRegUse(Register Reg, MachineInstr &MI) {
256 MachineInstr *LastDef = PhysRegDef[Reg];
258 if (!LastDef && !PhysRegUse[Reg]) {
266 // All of the sub-registers must have been defined before the use of Reg!
268 MachineInstr *LastPartialDef = FindLastPartialDef(Reg, PartDefRegs);
271 LastPartialDef->addOperand(MachineOperand::CreateReg(Reg, true/*IsDef*/,
273 PhysRegDef[Reg] = LastPartialDef;
275 for (MCPhysReg SubReg : TRI->subregs(Reg)) {
280 // This part of Reg was defined before the last partial def. It's killed
290 } else if (LastDef && !PhysRegUse[Reg] &&
291 !LastDef->findRegisterDefOperand(Reg, /*TRI=*/nullptr))
293 LastDef->addOperand(MachineOperand::CreateReg(Reg, true/*IsDef*/,
297 for (MCPhysReg SubReg : TRI->subregs_inclusive(Reg))
303 MachineInstr *LiveVariables::FindLastRefOrPartRef(Register Reg) {
304 MachineInstr *LastDef = PhysRegDef[Reg];
305 MachineInstr *LastUse = PhysRegUse[Reg];
312 for (MCPhysReg SubReg : TRI->subregs(Reg)) {
332 bool LiveVariables::HandlePhysRegKill(Register Reg, MachineInstr *MI) {
333 MachineInstr *LastDef = PhysRegDef[Reg];
334 MachineInstr *LastUse = PhysRegUse[Reg];
360 for (MCPhysReg SubReg : TRI->subregs(Reg)) {
383 if (!PhysRegUse[Reg]) {
388 PhysRegDef[Reg]->addRegisterDead(Reg, TRI, true);
389 for (MCPhysReg SubReg : TRI->subregs(Reg)) {
393 if (PhysRegDef[Reg] == PhysRegDef[SubReg]) {
395 PhysRegDef[Reg]->findRegisterDefOperand(SubReg, /*TRI=*/nullptr);
402 PhysRegDef[Reg]->addOperand(MachineOperand::CreateReg(SubReg,
415 } else if (LastRefOrPartRef == PhysRegDef[Reg] && LastRefOrPartRef != MI) {
418 LastPartDef->addOperand(MachineOperand::CreateReg(Reg, false/*IsDef*/,
422 LastRefOrPartRef->findRegisterDefOperand(Reg, TRI, false, false);
423 bool NeedEC = MO->isEarlyClobber() && MO->getReg() != Reg;
426 LastRefOrPartRef->addRegisterDead(Reg, TRI, true);
430 MO = LastRefOrPartRef->findRegisterDefOperand(Reg, /*TRI=*/nullptr);
436 LastRefOrPartRef->addRegisterKilled(Reg, TRI, true);
444 for (unsigned Reg = 1; Reg != NumRegs; ++Reg) {
446 if (!PhysRegDef[Reg] && !PhysRegUse[Reg])
449 if (!MO.clobbersPhysReg(Reg))
453 unsigned Super = Reg;
454 for (MCPhysReg SR : TRI->superregs(Reg))
462 void LiveVariables::HandlePhysRegDef(Register Reg, MachineInstr *MI,
466 if (PhysRegDef[Reg] || PhysRegUse[Reg]) {
467 for (MCPhysReg SubReg : TRI->subregs_inclusive(Reg))
470 for (MCPhysReg SubReg : TRI->subregs(Reg)) {
488 HandlePhysRegKill(Reg, MI);
490 for (MCPhysReg SubReg : TRI->subregs(Reg)) {
498 Defs.push_back(Reg); // Remember this def.
504 Register Reg = Defs.pop_back_val();
505 for (MCPhysReg SubReg : TRI->subregs_inclusive(Reg)) {
663 const Register Reg = Register::index2VirtReg(i);
664 for (unsigned j = 0, e2 = VirtRegInfo[Reg].Kills.size(); j != e2; ++j)
665 if (VirtRegInfo[Reg].Kills[j] == MRI->getVRegDef(Reg))
666 VirtRegInfo[Reg].Kills[j]->addRegisterDead(Reg, TRI);
668 VirtRegInfo[Reg].Kills[j]->addRegisterKilled(Reg, TRI);
684 void LiveVariables::recomputeForSingleDefVirtReg(Register Reg) {
685 assert(Reg.isVirtual());
687 VarInfo &VI = getVarInfo(Reg);
691 MachineInstr &DefMI = *MRI->getUniqueVRegDef(Reg);
694 // Initialize a worklist of BBs that Reg is live-to-end of. (Here
695 // "live-to-end" means Reg is live at the end of a block even if it is only
701 for (auto &UseMO : MRI->use_nodbg_operands(Reg)) {
710 // If Reg is used in a phi then it is live-to-end of the corresponding
717 // Otherwise Reg must be live-to-end of all predecessors.
725 DefMI.addRegisterDead(Reg, nullptr);
728 DefMI.clearRegisterDeads(Reg);
744 // Recompute kill flags. For each block in which Reg is used but is not
745 // live-through, find the last instruction that uses Reg. Ignore phi nodes
758 if (MI.readsVirtualRegister(Reg)) {
759 assert(!MI.killsRegister(Reg, /*TRI=*/nullptr));
760 MI.addRegisterKilled(Reg, nullptr);
770 void LiveVariables::replaceKillInstruction(Register Reg, MachineInstr &OldMI,
772 VarInfo &VI = getVarInfo(Reg);
782 Register Reg = MO.getReg();
783 if (Reg.isVirtual()) {
784 bool removed = getVarInfo(Reg).removeKill(MI);
809 Register Reg, MachineRegisterInfo &MRI) {
812 // Reg is live-through.
817 const MachineInstr *Def = MRI.getVRegDef(Reg);
821 // Reg was not defined in MBB, was it killed here?
825 bool LiveVariables::isLiveOut(Register Reg, const MachineBasicBlock &MBB) {
826 LiveVariables::VarInfo &VI = getVarInfo(Reg);
882 Register Reg = Register::index2VirtReg(i);
885 if (Defs.count(Reg))
890 VarInfo &VI = getVarInfo(Reg);
891 if (Kills.count(Reg) || VI.AliveBlocks.test(SuccBB->getNumber()))