diff --git a/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp b/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp index eb3bf3b2690b2..245e78641ed65 100644 --- a/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp @@ -2334,24 +2334,16 @@ bool PPCFrameLowering::assignCalleeSavedSpillSlots( // In case of SPE we only have SuperRegs and CRs // in our CalleSaveInfo vector. - unsigned Idx = 0; for (auto &CalleeSaveReg : CSI) { - const MCPhysReg &Reg = CalleeSaveReg.getReg(); - const MCPhysReg &Lower = RegInfo->getSubReg(Reg, 1); - const MCPhysReg &Higher = RegInfo->getSubReg(Reg, 2); - - // Check only for SuperRegs. - if (Lower) { - if (MRI.isPhysRegModified(Higher)) { - Idx++; - continue; - } else { + MCPhysReg Reg = CalleeSaveReg.getReg(); + MCPhysReg Lower = RegInfo->getSubReg(Reg, 1); + MCPhysReg Higher = RegInfo->getSubReg(Reg, 2); + + if ( // Check only for SuperRegs. + Lower && // Replace Reg if only lower-32 bits modified - CSI.erase(CSI.begin() + Idx); - CSI.insert(CSI.begin() + Idx, CalleeSavedInfo(Lower)); - } - } - Idx++; + !MRI.isPhysRegModified(Higher)) + CalleeSaveReg = CalleeSavedInfo(Lower); } }