diff options
Diffstat (limited to 'llvm/lib/CodeGen/MachineRegisterInfo.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/MachineRegisterInfo.cpp | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/llvm/lib/CodeGen/MachineRegisterInfo.cpp b/llvm/lib/CodeGen/MachineRegisterInfo.cpp index 5325eda9d478..3f6b11e072b4 100644 --- a/llvm/lib/CodeGen/MachineRegisterInfo.cpp +++ b/llvm/lib/CodeGen/MachineRegisterInfo.cpp @@ -434,8 +434,8 @@ void MachineRegisterInfo::clearKillFlags(Register Reg) const { } bool MachineRegisterInfo::isLiveIn(Register Reg) const { - for (livein_iterator I = livein_begin(), E = livein_end(); I != E; ++I) - if ((Register)I->first == Reg || I->second == Reg) + for (const std::pair<MCRegister, Register> &LI : liveins()) + if ((Register)LI.first == Reg || LI.second == Reg) return true; return false; } @@ -443,18 +443,18 @@ bool MachineRegisterInfo::isLiveIn(Register Reg) const { /// getLiveInPhysReg - If VReg is a live-in virtual register, return the /// corresponding live-in physical register. MCRegister MachineRegisterInfo::getLiveInPhysReg(Register VReg) const { - for (livein_iterator I = livein_begin(), E = livein_end(); I != E; ++I) - if (I->second == VReg) - return I->first; + for (const std::pair<MCRegister, Register> &LI : liveins()) + if (LI.second == VReg) + return LI.first; return MCRegister(); } /// getLiveInVirtReg - If PReg is a live-in physical register, return the /// corresponding live-in physical register. Register MachineRegisterInfo::getLiveInVirtReg(MCRegister PReg) const { - for (livein_iterator I = livein_begin(), E = livein_end(); I != E; ++I) - if (I->first == PReg) - return I->second; + for (const std::pair<MCRegister, Register> &LI : liveins()) + if (LI.first == PReg) + return LI.second; return Register(); } @@ -530,14 +530,11 @@ bool MachineRegisterInfo::isConstantPhysReg(MCRegister PhysReg) const { /// specified register as undefined which causes the DBG_VALUE to be /// deleted during LiveDebugVariables analysis. void MachineRegisterInfo::markUsesInDebugValueAsUndef(Register Reg) const { - // Mark any DBG_VALUE that uses Reg as undef (but don't delete it.) - MachineRegisterInfo::use_instr_iterator nextI; - for (use_instr_iterator I = use_instr_begin(Reg), E = use_instr_end(); - I != E; I = nextI) { - nextI = std::next(I); // I is invalidated by the setReg - MachineInstr *UseMI = &*I; - if (UseMI->isDebugValue()) - UseMI->getDebugOperandForReg(Reg)->setReg(0U); + // Mark any DBG_VALUE* that uses Reg as undef (but don't delete it.) + // We use make_early_inc_range because setReg invalidates the iterator. + for (MachineInstr &UseMI : llvm::make_early_inc_range(use_instructions(Reg))) { + if (UseMI.isDebugValue() && UseMI.hasDebugOperandForReg(Reg)) + UseMI.setDebugValueUndef(); } } @@ -585,8 +582,9 @@ bool MachineRegisterInfo::isPhysRegModified(MCRegister PhysReg, return false; } -bool MachineRegisterInfo::isPhysRegUsed(MCRegister PhysReg) const { - if (UsedPhysRegMask.test(PhysReg)) +bool MachineRegisterInfo::isPhysRegUsed(MCRegister PhysReg, + bool SkipRegMaskTest) const { + if (!SkipRegMaskTest && UsedPhysRegMask.test(PhysReg)) return true; const TargetRegisterInfo *TRI = getTargetRegisterInfo(); for (MCRegAliasIterator AliasReg(PhysReg, TRI, true); AliasReg.isValid(); |
