Lines Matching defs:Reg
120 void findNonPHIUsesInBlock(Register Reg, MachineBasicBlock *MBB,
123 void updateLiveRangeInThenRegion(Register Reg, MachineBasicBlock *If,
127 Register Reg, Register NewReg, MachineBasicBlock *Flow,
132 optimizeLiveRange(Register Reg, MachineBasicBlock *If,
137 Register Reg, MachineBasicBlock *LoopHeader,
210 /// Find the instructions(excluding phi) in \p MBB that uses the \p Reg.
212 Register Reg, MachineBasicBlock *MBB,
214 for (auto &UseMI : MRI->use_nodbg_instructions(Reg)) {
279 Register Reg = MO.getReg();
280 if (Reg.isPhysical() || !TRI->isVectorRegister(*MRI, Reg))
283 LiveVariables::VarInfo &VI = LV->getVarInfo(Reg);
285 if (VI.isLiveIn(*Endif, Reg, *MRI)) {
286 LLVM_DEBUG(dbgs() << "Excluding " << printReg(Reg, TRI)
293 const MachineBasicBlock *DefMBB = MRI->getVRegDef(Reg)->getParent();
296 KillsInElse.insert(Reg);
300 auto IsLiveThroughThen = [&](Register Reg) {
301 for (auto I = MRI->use_nodbg_begin(Reg), E = MRI->use_nodbg_end(); I != E;
322 for (auto Reg : KillsInElse) {
323 if (!IsLiveThroughThen(Reg))
324 CandidateRegs.push_back(Reg);
390 LLVM_DEBUG(dbgs() << "Reg is used after loop, ignoring: "
399 // Re-calculate the liveness of \p Reg in the THEN-region
401 Register Reg, MachineBasicBlock *If, MachineBasicBlock *Flow) const {
417 LiveVariables::VarInfo &OldVarInfo = LV->getVarInfo(Reg);
427 // Get the blocks the Reg should be alive through
428 for (auto I = MRI->use_nodbg_begin(Reg), E = MRI->use_nodbg_end(); I != E;
440 findNonPHIUsesInBlock(Reg, MBB, Uses);
445 LV->HandleVirtRegUse(Reg, MBB, *(*Uses.begin()));
452 LV->HandleVirtRegUse(Reg, MBB, MI);
456 // Mark Reg alive through the block if this is a PHI incoming block
458 LV->MarkVirtRegAliveInBlock(OldVarInfo, MRI->getVRegDef(Reg)->getParent(),
465 MI->addRegisterKilled(Reg, TRI);
470 Register Reg, Register NewReg, MachineBasicBlock *Flow,
474 LiveVariables::VarInfo &OldVarInfo = LV->getVarInfo(Reg);
476 // Transfer aliveBlocks from Reg to NewReg
487 // Transfer the possible Kills in ElseBlocks from Reg to NewReg
500 Register Reg, MachineBasicBlock *If, MachineBasicBlock *Flow,
505 LLVM_DEBUG(dbgs() << "Optimizing " << printReg(Reg, TRI) << '\n');
506 const auto *RC = MRI->getRegClass(Reg);
513 PHI.addReg(Reg).addMBB(Pred);
520 for (auto &O : make_early_inc_range(MRI->use_operands(Reg))) {
544 // The optimized Reg is not alive through Flow blocks anymore.
545 LiveVariables::VarInfo &OldVarInfo = LV->getVarInfo(Reg);
548 updateLiveRangeInElseRegion(Reg, NewReg, Flow, Endif, ElseBlocks);
549 updateLiveRangeInThenRegion(Reg, If, Flow);
553 Register Reg, MachineBasicBlock *LoopHeader,
557 LLVM_DEBUG(dbgs() << "Optimizing " << printReg(Reg, TRI) << '\n');
558 const auto *RC = MRI->getRegClass(Reg);
564 for (auto &O : make_early_inc_range(MRI->use_operands(Reg))) {
579 PHI.addReg(Reg).addMBB(Pred);
583 LiveVariables::VarInfo &OldVarInfo = LV->getVarInfo(Reg);
679 for (auto Reg : CandidateRegs)
680 optimizeLiveRange(Reg, &MBB, IfTarget, Endif, ElseBlocks);
696 for (auto Reg : CandidateRegs)
697 optimizeWaterfallLiveRange(Reg, LoopHeader, Blocks, Instructions);