diff options
author | Kit Barton <kbarton@ca.ibm.com> | 2015-11-30 18:59:41 +0000 |
---|---|---|
committer | Kit Barton <kbarton@ca.ibm.com> | 2015-11-30 18:59:41 +0000 |
commit | f4ce2f3a9e5278aa1b8ee9cb2458c959d171b0c7 (patch) | |
tree | 7f8cf37d4f06132600741725212185da3dce64ed /llvm/lib/Target/PowerPC/PPCFrameLowering.cpp | |
parent | c98b20b0d6edbb9659907eab879e7ff07391c9e3 (diff) | |
download | llvm-f4ce2f3a9e5278aa1b8ee9cb2458c959d171b0c7.zip llvm-f4ce2f3a9e5278aa1b8ee9cb2458c959d171b0c7.tar.gz llvm-f4ce2f3a9e5278aa1b8ee9cb2458c959d171b0c7.tar.bz2 |
Enable shrink wrapping for PPC64
Re-enable shrink wrapping for PPC64 Little Endian.
One minor modification to PPCFrameLowering::findScratchRegister was necessary to handle fall-thru blocks (blocks with no terminator) correctly.
Tested with all LLVM test, clang tests, and the self-hosting build, with no problems found.
PHabricator: http://reviews.llvm.org/D14778
llvm-svn: 254314
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCFrameLowering.cpp')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCFrameLowering.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp b/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp index c7a3bbd..5a151eb 100644 --- a/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp @@ -573,10 +573,18 @@ bool PPCFrameLowering::findScratchRegister(MachineBasicBlock *MBB, RS.initRegState(); RS.enterBasicBlock(MBB); - // The scratch register will be used at the end of the block, so must consider - // all registers used within the block - if (UseAtEnd && MBB->begin() != MBB->getFirstTerminator()) - RS.forward(MBB->getFirstTerminator()); + if (UseAtEnd && !MBB->empty()) { + // The scratch register will be used at the end of the block, so must consider + // all registers used within the block + + MachineBasicBlock::iterator MBBI = MBB->getFirstTerminator(); + // If no terminator, back iterator up to previous instruction. + if (MBBI == MBB->end()) + MBBI = std::prev(MBBI); + + if (MBBI != MBB->begin()) + RS.forward(MBBI); + } if (!RS.isRegUsed(R0)) return true; @@ -1768,6 +1776,6 @@ PPCFrameLowering::restoreCalleeSavedRegisters(MachineBasicBlock &MBB, } bool PPCFrameLowering::enableShrinkWrapping(const MachineFunction &MF) const { - // FIXME: Enable this for non-Darwin PPC64 once it is confirmed working. - return false; + return (MF.getSubtarget<PPCSubtarget>().isSVR4ABI() && + MF.getSubtarget<PPCSubtarget>().isPPC64()); } |