diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCFrameLowering.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp b/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp index 40a2e8bbe23..3954ee72c11 100644 --- a/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp @@ -843,12 +843,15 @@ void PPCFrameLowering::emitPrologue(MachineFunction &MF, // mfocrf to selectively save just those fields, because mfocrf has short // latency compares to mfcr. unsigned MfcrOpcode = PPC::MFCR8; - if (isELFv2ABI && MustSaveCRs.size() == 1) + unsigned CrState = RegState::ImplicitKill; + if (isELFv2ABI && MustSaveCRs.size() == 1) { MfcrOpcode = PPC::MFOCRF8; + CrState = RegState::Kill; + } MachineInstrBuilder MIB = BuildMI(MBB, MBBI, dl, TII.get(MfcrOpcode), TempReg); for (unsigned i = 0, e = MustSaveCRs.size(); i != e; ++i) - MIB.addReg(MustSaveCRs[i], RegState::ImplicitKill); + MIB.addReg(MustSaveCRs[i], CrState); BuildMI(MBB, MBBI, dl, TII.get(PPC::STW8)) .addReg(TempReg, getKillRegState(true)) .addImm(8) @@ -865,12 +868,15 @@ void PPCFrameLowering::emitPrologue(MachineFunction &MF, // mfocrf to selectively save just those fields, because mfocrf has short // latency compares to mfcr. unsigned MfcrOpcode = PPC::MFCR8; - if (isELFv2ABI && MustSaveCRs.size() == 1) + unsigned CrState = RegState::ImplicitKill; + if (isELFv2ABI && MustSaveCRs.size() == 1) { MfcrOpcode = PPC::MFOCRF8; + CrState = RegState::Kill; + } MachineInstrBuilder MIB = BuildMI(MBB, MBBI, dl, TII.get(MfcrOpcode), TempReg); for (unsigned i = 0, e = MustSaveCRs.size(); i != e; ++i) - MIB.addReg(MustSaveCRs[i], RegState::ImplicitKill); + MIB.addReg(MustSaveCRs[i], CrState); } if (HasFP) |