From: Matthias Braun Date: Wed, 25 Jan 2017 17:12:10 +0000 (+0000) Subject: PowerPC: Slight cleanup of getReservedRegs(); NFC X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7fa7cb1d54f54762465bc7f81425ec0ef5411b17;p=llvm PowerPC: Slight cleanup of getReservedRegs(); NFC Change getReservedRegs() to not mark a register as reserved and then revert that decision in some cases. Motivated by the discussion in https://reviews.llvm.org/D29056 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293073 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/PowerPC/PPCRegisterInfo.cpp b/lib/Target/PowerPC/PPCRegisterInfo.cpp index 5afe412459e..aad91392469 100644 --- a/lib/Target/PowerPC/PPCRegisterInfo.cpp +++ b/lib/Target/PowerPC/PPCRegisterInfo.cpp @@ -234,30 +234,21 @@ BitVector PPCRegisterInfo::getReservedRegs(const MachineFunction &MF) const { // The SVR4 ABI reserves r2 and r13 if (Subtarget.isSVR4ABI()) { - markSuperRegs(Reserved, PPC::R2); // System-reserved register + // We only reserve r2 if we need to use the TOC pointer. If we have no + // explicit uses of the TOC pointer (meaning we're a leaf function with + // no constant-pool loads, etc.) and we have no potential uses inside an + // inline asm block, then we can treat r2 has an ordinary callee-saved + // register. + const PPCFunctionInfo *FuncInfo = MF.getInfo(); + if (!TM.isPPC64() || FuncInfo->usesTOCBasePtr() || MF.hasInlineAsm()) + markSuperRegs(Reserved, PPC::R2); // System-reserved register markSuperRegs(Reserved, PPC::R13); // Small Data Area pointer register } - if (TM.isPPC64()) { - // On PPC64, r13 is the thread pointer. Never allocate this register. + // On PPC64, r13 is the thread pointer. Never allocate this register. + if (TM.isPPC64()) markSuperRegs(Reserved, PPC::R13); - // The 64-bit SVR4 ABI reserves r2 for the TOC pointer. - if (Subtarget.isSVR4ABI()) { - // We only reserve r2 if we need to use the TOC pointer. If we have no - // explicit uses of the TOC pointer (meaning we're a leaf function with - // no constant-pool loads, etc.) and we have no potential uses inside an - // inline asm block, then we can treat r2 has an ordinary callee-saved - // register. - const PPCFunctionInfo *FuncInfo = MF.getInfo(); - if (!FuncInfo->usesTOCBasePtr() && !MF.hasInlineAsm()) { - for (MCSuperRegIterator Super(PPC::R2, this, true); Super.isValid(); - ++Super) - Reserved.reset(*Super); - } - } - } - if (TFI->needsFP(MF)) markSuperRegs(Reserved, PPC::R31);