[llvm-commits] [llvm] r126956 - in /llvm/trunk: include/llvm/Target/TargetRegisterInfo.h lib/CodeGen/PrologEpilogInserter.cpp
Evan Cheng
evan.cheng at apple.com
Fri Mar 4 00:24:04 PST 2011
Hi Jim,
Is this target hook really necessary? Can it be subsumed by hasFP? Isn't there a target hook for creating the emergency slot? Can you explain what the patch is doing?
Thanks,
Evan
On Mar 3, 2011, at 12:01 PM, Jim Grosbach <grosbach at apple.com> wrote:
> Author: grosbach
> Date: Thu Mar 3 14:01:52 2011
> New Revision: 126956
>
> URL: http://llvm.org/viewvc/llvm-project?rev=126956&view=rev
> Log:
> Allow a target to choose whether to prefer the scavenger emergency spill slot
> be next to the frame pointer or the stack pointer.
>
>
> Modified:
> llvm/trunk/include/llvm/Target/TargetRegisterInfo.h
> llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp
>
> Modified: llvm/trunk/include/llvm/Target/TargetRegisterInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetRegisterInfo.h?rev=126956&r1=126955&r2=126956&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Target/TargetRegisterInfo.h (original)
> +++ llvm/trunk/include/llvm/Target/TargetRegisterInfo.h Thu Mar 3 14:01:52 2011
> @@ -631,6 +631,13 @@
> return false;
> }
>
> + /// useFPForScavengingIndex - returns true if the target wants to use
> + /// frame pointer based accesses to spill to the scavenger emergency spill
> + /// slot.
> + virtual bool useFPForScavengingIndex(const MachineFunction &MF) const {
> + return true;
> + }
> +
> /// requiresFrameIndexScavenging - returns true if the target requires post
> /// PEI scavenging of registers for materializing frame index constants.
> virtual bool requiresFrameIndexScavenging(const MachineFunction &MF) const {
>
> Modified: llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp?rev=126956&r1=126955&r2=126956&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp (original)
> +++ llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp Thu Mar 3 14:01:52 2011
> @@ -559,7 +559,8 @@
> // Make sure the special register scavenging spill slot is closest to the
> // frame pointer if a frame pointer is required.
> const TargetRegisterInfo *RegInfo = Fn.getTarget().getRegisterInfo();
> - if (RS && TFI.hasFP(Fn) && !RegInfo->needsStackRealignment(Fn)) {
> + if (RS && TFI.hasFP(Fn) && RegInfo->useFPForScavengingIndex(Fn) &&
> + !RegInfo->needsStackRealignment(Fn)) {
> int SFI = RS->getScavengingFrameIndex();
> if (SFI >= 0)
> AdjustStackOffset(MFI, SFI, StackGrowsDown, Offset, MaxAlign);
> @@ -641,7 +642,8 @@
>
> // Make sure the special register scavenging spill slot is closest to the
> // stack pointer.
> - if (RS && (!TFI.hasFP(Fn) || RegInfo->needsStackRealignment(Fn))) {
> + if (RS && (!TFI.hasFP(Fn) || RegInfo->needsStackRealignment(Fn) ||
> + !RegInfo->useFPForScavengingIndex(Fn))) {
> int SFI = RS->getScavengingFrameIndex();
> if (SFI >= 0)
> AdjustStackOffset(MFI, SFI, StackGrowsDown, Offset, MaxAlign);
> @@ -811,7 +813,6 @@
> // directly.
> for (MachineBasicBlock::iterator I = BB->begin(); I != BB->end(); ) {
> MachineInstr *MI = I;
> - bool DoIncr = true;
> for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
> if (MI->getOperand(i).isReg()) {
> MachineOperand &MO = MI->getOperand(i);
> @@ -842,10 +843,8 @@
>
> }
> }
> - if (DoIncr) {
> - RS->forward(I);
> - ++I;
> - }
> + RS->forward(I);
> + ++I;
> }
> }
> }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list