diff options
-rw-r--r-- | include/llvm/CodeGen/MachineFrameInfo.h | 15 | ||||
-rw-r--r-- | lib/Target/X86/X86FrameLowering.cpp | 4 | ||||
-rw-r--r-- | lib/Target/X86/X86MachineFunctionInfo.h | 19 |
3 files changed, 19 insertions, 19 deletions
diff --git a/include/llvm/CodeGen/MachineFrameInfo.h b/include/llvm/CodeGen/MachineFrameInfo.h index 78898a4a69..8b958e437e 100644 --- a/include/llvm/CodeGen/MachineFrameInfo.h +++ b/include/llvm/CodeGen/MachineFrameInfo.h @@ -215,10 +215,6 @@ class MachineFrameInfo { /// just allocate them normally. bool UseLocalStackAllocationBlock; - /// After the stack pointer has been restore from the base pointer we - /// use a cached adjusment. Currently only used for x86. - int64_t BPAdj; - public: explicit MachineFrameInfo(const TargetFrameLowering &tfi) : TFI(tfi) { StackSize = NumFixedObjects = OffsetAdjustment = MaxAlignment = 0; @@ -234,7 +230,6 @@ public: LocalFrameSize = 0; LocalFrameMaxAlign = 0; UseLocalStackAllocationBlock = false; - BPAdj = 0; } /// hasStackObjects - Return true if there are any stack objects in this @@ -543,16 +538,6 @@ public: void setCalleeSavedInfoValid(bool v) { CSIValid = v; } - /// setBasePtrStackAdjustment - If we're restoring the stack pointer from the - /// base pointer, due to dynamic stack realignment + VLAs, we cache the - /// number of bytes initially allocated for the stack frame. In obscure - /// cases (e.g., tail calls with byval argument and no stack protector), the - /// stack gets adjusted outside of the prolog, but these shouldn't be - /// considered when restoring from the base pointer. Currently, this is only - /// needed for x86. - void setBasePtrStackAdjustment(int64_t adj) { BPAdj = adj; } - int64_t getBasePtrStackAdjustment() const { return BPAdj; } - /// getPristineRegs - Return a set of physical registers that are pristine on /// entry to the MBB. /// diff --git a/lib/Target/X86/X86FrameLowering.cpp b/lib/Target/X86/X86FrameLowering.cpp index 21ad062eda..bf0ba09e23 100644 --- a/lib/Target/X86/X86FrameLowering.cpp +++ b/lib/Target/X86/X86FrameLowering.cpp @@ -925,7 +925,7 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF) const { .addReg(StackPtr) .setMIFlag(MachineInstr::FrameSetup); - MFI->setBasePtrStackAdjustment(NumBytes); + X86FI->setBasePtrStackAdjustment(NumBytes); } if (( (!HasFP && NumBytes) || PushedRegs) && needsFrameMoves) { @@ -1051,7 +1051,7 @@ void X86FrameLowering::emitEpilogue(MachineFunction &MF, StackPtr).addReg(BasePtr); // When restoring from the BP we must use a cached SP adjustment. - NumBytes = MFI->getBasePtrStackAdjustment(); + NumBytes = X86FI->getBasePtrStackAdjustment(); } // If dynamic alloca is used, then reset esp to point to the last callee-saved diff --git a/lib/Target/X86/X86MachineFunctionInfo.h b/lib/Target/X86/X86MachineFunctionInfo.h index 2bc308d86c..cdf907b8c0 100644 --- a/lib/Target/X86/X86MachineFunctionInfo.h +++ b/lib/Target/X86/X86MachineFunctionInfo.h @@ -69,6 +69,10 @@ class X86MachineFunctionInfo : public MachineFunctionInfo { /// NumLocalDynamics - Number of local-dynamic TLS accesses. unsigned NumLocalDynamics; + /// After the stack pointer has been restore from the base pointer we + /// use a cached adjusment. + int64_t BPAdj; + public: X86MachineFunctionInfo() : ForceFramePointer(false), CalleeSavedFrameSize(0), @@ -97,8 +101,9 @@ public: VarArgsGPOffset(0), VarArgsFPOffset(0), ArgumentStackSize(0), - NumLocalDynamics(0) {} - + NumLocalDynamics(0), + BPAdj(0) {} + bool getForceFramePointer() const { return ForceFramePointer;} void setForceFramePointer(bool forceFP) { ForceFramePointer = forceFP; } @@ -137,6 +142,16 @@ public: unsigned getNumLocalDynamicTLSAccesses() const { return NumLocalDynamics; } void incNumLocalDynamicTLSAccesses() { ++NumLocalDynamics; } + + /// setBasePtrStackAdjustment - If we're restoring the stack pointer from the + /// base pointer, due to dynamic stack realignment + VLAs, we cache the + /// number of bytes initially allocated for the stack frame. In obscure + /// cases (e.g., tail calls with byval argument and no stack protector), the + /// stack gets adjusted outside of the prolog, but these shouldn't be + /// considered when restoring from the base pointer. Currently, this is only + /// needed for x86. + void setBasePtrStackAdjustment(int64_t adj) { BPAdj = adj; } + int64_t getBasePtrStackAdjustment() const { return BPAdj; } }; } // End llvm namespace |