diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/MachineRegisterInfo.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/RegUsageInfoCollector.cpp | 5 |
2 files changed, 6 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/MachineRegisterInfo.cpp b/llvm/lib/CodeGen/MachineRegisterInfo.cpp index de2f3b46d3c..613598dbe21 100644 --- a/llvm/lib/CodeGen/MachineRegisterInfo.cpp +++ b/llvm/lib/CodeGen/MachineRegisterInfo.cpp @@ -501,13 +501,14 @@ static bool isNoReturnDef(const MachineOperand &MO) { !Called->hasFnAttribute(Attribute::NoUnwind)); } -bool MachineRegisterInfo::isPhysRegModified(unsigned PhysReg) const { +bool MachineRegisterInfo::isPhysRegModified(unsigned PhysReg, + bool SkipNoReturnDef) const { if (UsedPhysRegMask.test(PhysReg)) return true; const TargetRegisterInfo *TRI = getTargetRegisterInfo(); for (MCRegAliasIterator AI(PhysReg, TRI, true); AI.isValid(); ++AI) { for (const MachineOperand &MO : make_range(def_begin(*AI), def_end())) { - if (isNoReturnDef(MO)) + if (!SkipNoReturnDef && isNoReturnDef(MO)) continue; return true; } diff --git a/llvm/lib/CodeGen/RegUsageInfoCollector.cpp b/llvm/lib/CodeGen/RegUsageInfoCollector.cpp index 8215aed35cb..7c3713ae634 100644 --- a/llvm/lib/CodeGen/RegUsageInfoCollector.cpp +++ b/llvm/lib/CodeGen/RegUsageInfoCollector.cpp @@ -1,4 +1,4 @@ -//===- RegUsageInfoCollector.cpp - Register Usage Informartion Collector --===// +//===-- RegUsageInfoCollector.cpp - Register Usage Information Collector --===// // // The LLVM Compiler Infrastructure // @@ -106,8 +106,9 @@ bool RegUsageInfoCollector::runOnMachineFunction(MachineFunction &MF) { PRUI->setTargetMachine(&TM); DEBUG(dbgs() << "Clobbered Registers: "); + for (unsigned PReg = 1, PRegE = TRI->getNumRegs(); PReg < PRegE; ++PReg) - if (!MRI->reg_nodbg_empty(PReg) && MRI->isPhysRegUsed(PReg)) + if (MRI->isPhysRegModified(PReg, true)) markRegClobbered(TRI, &RegMask[0], PReg); const uint32_t *CallPreservedMask = |

