Add missing const qualifiers.
[oota-llvm.git] / include / llvm / CodeGen / MachineFrameInfo.h
index be6f1b9c42339732eee2f55fecfd1ff7a7bce1b9..be481f7ab8271c2300fa8cd7e5e67fe1a87a4a40 100644 (file)
@@ -17,7 +17,7 @@ namespace llvm {
 class TargetData;
 class TargetRegisterClass;
 class Type;
-class MachineDebugInfo;
+class MachineModuleInfo;
 class MachineFunction;
 
 /// The CalleeSavedInfo class tracks the information need to locate where a
@@ -77,16 +77,16 @@ class MachineFrameInfo {
   // StackObject - Represent a single object allocated on the stack.
   struct StackObject {
     // The size of this object on the stack. 0 means a variable sized object
-    unsigned Size;
+    uint64_t Size;
 
     // Alignment - The required alignment of this stack slot.
     unsigned Alignment;
 
     // SPOffset - The offset of this object from the stack pointer on entry to
     // the function.  This field has no meaning for a variable sized element.
-    int SPOffset;
+    int64_t SPOffset;
 
-    StackObject(unsigned Sz, unsigned Al, int SP)
+    StackObject(uint64_t Sz, unsigned Al, int64_t SP)
       : Size(Sz), Alignment(Al), SPOffset(SP) {}
   };
 
@@ -110,7 +110,15 @@ class MachineFrameInfo {
   /// above.  It then updates StackSize to contain the number of bytes that need
   /// to be allocated on entry to the function.
   ///
-  unsigned StackSize;
+  uint64_t StackSize;
+  
+  /// OffsetAdjustment - The amount that a frame offset needs to be adjusted to
+  /// have the actual offset from the stack/frame pointer.  The calculation is 
+  /// MFI->getObjectOffset(Index) + StackSize - TFI.getOffsetOfLocalArea() +
+  /// OffsetAdjustment.  If OffsetAdjustment is zero (default) then offsets are
+  /// away from TOS. If OffsetAdjustment == StackSize then offsets are toward
+  /// TOS.
+  int OffsetAdjustment;
   
   /// MaxAlignment - The prolog/epilog code inserter may process objects 
   /// that require greater alignment than the default alignment the target
@@ -139,20 +147,20 @@ class MachineFrameInfo {
   /// handling.
   std::vector<CalleeSavedInfo> CSInfo;
   
-  /// DebugInfo - This field is set (via setMachineDebugInfo) by a debug info
+  /// MMI - This field is set (via setMachineModuleInfo) by a module info
   /// consumer (ex. DwarfWriter) to indicate that frame layout information
   /// should be acquired.  Typically, it's the responsibility of the target's
-  /// MRegisterInfo prologue/epilogue emitting code to inform MachineDebugInfo
+  /// MRegisterInfo prologue/epilogue emitting code to inform MachineModuleInfo
   /// of frame layouts.
-  MachineDebugInfo *DebugInfo;
+  MachineModuleInfo *MMI;
   
 public:
   MachineFrameInfo() {
-    NumFixedObjects = StackSize = MaxAlignment = 0;
+    StackSize = NumFixedObjects = OffsetAdjustment = MaxAlignment = 0;
     HasVarSizedObjects = false;
     HasCalls = false;
     MaxCallFrameSize = 0;
-    DebugInfo = 0;
+    MMI = 0;
   }
 
   /// hasStackObjects - Return true if there are any stack objects in this
@@ -176,7 +184,7 @@ public:
 
   /// getObjectSize - Return the size of the specified object
   ///
-  int getObjectSize(int ObjectIdx) const {
+  int64_t getObjectSize(int ObjectIdx) const {
     assert(ObjectIdx+NumFixedObjects < Objects.size() && "Invalid Object Idx!");
     return Objects[ObjectIdx+NumFixedObjects].Size;
   }
@@ -190,7 +198,7 @@ public:
   /// getObjectOffset - Return the assigned stack offset of the specified object
   /// from the incoming stack pointer.
   ///
-  int getObjectOffset(int ObjectIdx) const {
+  int64_t getObjectOffset(int ObjectIdx) const {
     assert(ObjectIdx+NumFixedObjects < Objects.size() && "Invalid Object Idx!");
     return Objects[ObjectIdx+NumFixedObjects].SPOffset;
   }
@@ -198,7 +206,7 @@ public:
   /// setObjectOffset - Set the stack frame offset of the specified object.  The
   /// offset is relative to the stack pointer on entry to the function.
   ///
-  void setObjectOffset(int ObjectIdx, int SPOffset) {
+  void setObjectOffset(int ObjectIdx, int64_t SPOffset) {
     assert(ObjectIdx+NumFixedObjects < Objects.size() && "Invalid Object Idx!");
     Objects[ObjectIdx+NumFixedObjects].SPOffset = SPOffset;
   }
@@ -207,11 +215,19 @@ public:
   /// all of the fixed size frame objects.  This is only valid after
   /// Prolog/Epilog code insertion has finalized the stack frame layout.
   ///
-  unsigned getStackSize() const { return StackSize; }
+  uint64_t getStackSize() const { return StackSize; }
 
   /// setStackSize - Set the size of the stack...
   ///
-  void setStackSize(unsigned Size) { StackSize = Size; }
+  void setStackSize(uint64_t Size) { StackSize = Size; }
+  
+  /// getOffsetAdjustment - Return the correction for frame offsets.
+  ///
+  int getOffsetAdjustment() const { return OffsetAdjustment; }
+  
+  /// setOffsetAdjustment - Set the correction for frame offsets.
+  ///
+  void setOffsetAdjustment(int Adj) { OffsetAdjustment = Adj; }
 
   /// getMaxAlignment - Return the alignment in bytes that this function must be 
   /// aligned to, which is greater than the default stack alignment provided by 
@@ -241,16 +257,22 @@ public:
   /// All fixed objects should be created before other objects are created for
   /// efficiency.  This returns an index with a negative value.
   ///
-  int CreateFixedObject(unsigned Size, int SPOffset) {
+  int CreateFixedObject(uint64_t Size, int64_t SPOffset) {
     assert(Size != 0 && "Cannot allocate zero size fixed stack objects!");
     Objects.insert(Objects.begin(), StackObject(Size, 1, SPOffset));
     return -++NumFixedObjects;
   }
 
+  /// isFixedObjectIndex - Returns true if the specified index corresponds to a
+  /// fixed stack object.
+  bool isFixedObjectIndex(int ObjectIdx) const {
+    return ObjectIdx < 0 && (ObjectIdx >= -(int)NumFixedObjects);
+  }
+
   /// CreateStackObject - Create a new statically sized stack object, returning
   /// a postive identifier to represent it.
   ///
-  int CreateStackObject(unsigned Size, unsigned Alignment) {
+  int CreateStackObject(uint64_t Size, unsigned Alignment) {
     // Keep track of the maximum alignment.
     if (MaxAlignment < Alignment) MaxAlignment = Alignment;
     
@@ -283,13 +305,13 @@ public:
     CSInfo = CSI;
   }
 
-  /// getMachineDebugInfo - Used by a prologue/epilogue emitter (MRegisterInfo)
+  /// getMachineModuleInfo - Used by a prologue/epilogue emitter (MRegisterInfo)
   /// to provide frame layout information. 
-  MachineDebugInfo *getMachineDebugInfo() const { return DebugInfo; }
+  MachineModuleInfo *getMachineModuleInfo() const { return MMI; }
 
-  /// setMachineDebugInfo - Used by a debug consumer (DwarfWriter) to indicate
-  /// that frame layout information should be gathered.
-  void setMachineDebugInfo(MachineDebugInfo *DI) { DebugInfo = DI; }
+  /// setMachineModuleInfo - Used by a meta info consumer (DwarfWriter) to
+  /// indicate that frame layout information should be gathered.
+  void setMachineModuleInfo(MachineModuleInfo *mmi) { MMI = mmi; }
 
   /// print - Used by the MachineFunction printer to print information about
   /// stack objects.  Implemented in MachineFunction.cpp