aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineRegisterInfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/CodeGen/MachineRegisterInfo.cpp')
-rw-r--r--llvm/lib/CodeGen/MachineRegisterInfo.cpp34
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();