diff options
author | Chris Lattner <sabre@nondot.org> | 2007-12-08 06:39:11 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-12-08 06:39:11 +0000 |
commit | a6c8297e8489438a46fc1e2864b2f1d0956bd12b (patch) | |
tree | f5bfa300555e5315ff21fe113d6b336dffd2dec3 /llvm/lib | |
parent | 1ebfecc8d03fb610aaea141079b06abaa27a2935 (diff) | |
download | bcm5719-llvm-a6c8297e8489438a46fc1e2864b2f1d0956bd12b.tar.gz bcm5719-llvm-a6c8297e8489438a46fc1e2864b2f1d0956bd12b.zip |
refactor some code to avoid overloading the name 'usesLR' in
different places to mean different things. Document what the
one in PPCFunctionInfo means and when it is valid.
llvm-svn: 44699
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCMachineFunctionInfo.h | 6 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp | 16 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCRegisterInfo.h | 4 |
3 files changed, 14 insertions, 12 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCMachineFunctionInfo.h b/llvm/lib/Target/PowerPC/PPCMachineFunctionInfo.h index e227456e635..bf1fea211b4 100644 --- a/llvm/lib/Target/PowerPC/PPCMachineFunctionInfo.h +++ b/llvm/lib/Target/PowerPC/PPCMachineFunctionInfo.h @@ -39,8 +39,12 @@ public: int getFramePointerSaveIndex() const { return FramePointerSaveIndex; } void setFramePointerSaveIndex(int Idx) { FramePointerSaveIndex = Idx; } + /// UsesLR - This is set when the prolog/epilog inserter does its initial scan + /// of the function, it is true if the LR/LR8 register is ever explicitly + /// accessed/clobbered in the machine function (e.g. by calls and movpctolr, + /// which is used in PIC generation). void setUsesLR(bool U) { UsesLR = U; } - bool usesLR() { return UsesLR; } + bool usesLR() const { return UsesLR; } }; diff --git a/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp b/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp index f93c2ce9e0b..679ca2e58f5 100644 --- a/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp +++ b/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp @@ -645,11 +645,13 @@ bool PPCRegisterInfo::hasFP(const MachineFunction &MF) const { return MFI->getStackSize() && needsFP(MF); } -/// usesLR - Returns if the link registers (LR) has been used in the function. -/// -bool PPCRegisterInfo::usesLR(MachineFunction &MF) const { - PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>(); - return FI->usesLR(); +/// MustSaveLR - Return true if this function requires that we save the LR +/// register onto the stack in the prolog and restore it in the epilog of the function. +static bool MustSaveLR(const MachineFunction &MF) { + return MF.getInfo<PPCFunctionInfo>()->usesLR() || + // FIXME: Anything that has a call should clobber the LR register, + // isn't this redundant?? + MF.getFrameInfo()->hasCalls(); } void PPCRegisterInfo:: @@ -1062,7 +1064,7 @@ void PPCRegisterInfo::emitPrologue(MachineFunction &MF) const { // Get operating system bool IsMachoABI = Subtarget.isMachoABI(); // Check if the link register (LR) has been used. - bool UsesLR = MFI->hasCalls() || usesLR(MF); + bool UsesLR = MustSaveLR(MF); // Do we have a frame pointer for this function? bool HasFP = hasFP(MF) && FrameSize; @@ -1226,7 +1228,7 @@ void PPCRegisterInfo::emitEpilogue(MachineFunction &MF, // Get operating system bool IsMachoABI = Subtarget.isMachoABI(); // Check if the link register (LR) has been used. - bool UsesLR = MFI->hasCalls() || usesLR(MF); + bool UsesLR = MustSaveLR(MF); // Do we have a frame pointer for this function? bool HasFP = hasFP(MF) && FrameSize; diff --git a/llvm/lib/Target/PowerPC/PPCRegisterInfo.h b/llvm/lib/Target/PowerPC/PPCRegisterInfo.h index 2106c6e667b..b4a0415621e 100644 --- a/llvm/lib/Target/PowerPC/PPCRegisterInfo.h +++ b/llvm/lib/Target/PowerPC/PPCRegisterInfo.h @@ -96,10 +96,6 @@ public: MachineBasicBlock &MBB, MachineBasicBlock::iterator I) const; - /// usesLR - Returns if the link registers (LR) has been used in the function. - /// - bool usesLR(MachineFunction &MF) const; - void lowerDynamicAlloc(MachineBasicBlock::iterator II) const; void eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj, RegScavenger *RS = NULL) const; |