Move [get|set]BasePtrStackAdjustment() from MachineFrameInfo to
authorChad Rosier <mcrosier@apple.com>
Tue, 10 Jul 2012 18:27:15 +0000 (18:27 +0000)
committerChad Rosier <mcrosier@apple.com>
Tue, 10 Jul 2012 18:27:15 +0000 (18:27 +0000)
X86MachineFunctionInfo as this is currently only used by X86. If this ever
becomes an issue on another arch (e.g., ARM) then we can hoist it back out.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160009 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/MachineFrameInfo.h
lib/Target/X86/X86FrameLowering.cpp
lib/Target/X86/X86MachineFunctionInfo.h

index 78898a4a69ef7b31f2ae90253eac6ed41db18ebe..8b958e437ed3b3f7681129fa6a21f7d9ef8d5122 100644 (file)
@@ -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.
   ///
index 21ad062eda8521dfad5b42ddd14577c7553c509a..bf0ba09e23a71c7a1355add2c5a5b980da260679 100644 (file)
@@ -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
index 2bc308d86c50a8b1f48f5ba3d57ba1d251361144..cdf907b8c0473992a4e7bd3cda2fc151120efe4c 100644 (file)
@@ -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